Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > ПЛК и микроконтроллеры
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Точный таймер для MS DOS Точный таймер для MS DOSпод Octagon PC 510

 Ответить Ответить Страница  12>
Автор
Сообщение
lemkzuka Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Октябрь 2008
Категория: Kazakhstan
Online Status: Offline
Публикации: 19
Свойства публикации Свойства публикации   Ответить, цитируя автора - lemkzuka Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Точный таймер для MS DOS Точный таймер для MS DOSпод Octagon PC 510
    Опубликовано: 12 Ноябрь 2009 08:44
Доброго времени суток господа.
Имею одноплатный компьютер Octagon PC 510 (процессор 133 MHz). Возникла производственная задача, при которой надо измерить разность времени срабатывания дискретного сигнала с точностью 0.5 миллисекунд.
Подозреваю, что это можно сделать через подсчет тактов процессора, но Гугл на подобный запрос упорно выдает про QueryPerformanceCounter, а это реализация по Windows, а не под MS-DOS.

Уважаемые знатоки, расскажите, пожалуйста, как вы считаете короткие периоды времени (порядка миллисекунд) в своих задачах.
Наверх
kuzulis Смотреть выпадающим
Участник
Участник


Присоединился: 04 Декабрь 2008
Категория: Russian Federation
Online Status: Offline
Публикации: 81
Свойства публикации Свойства публикации   Ответить, цитируя автора - kuzulis Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 12 Ноябрь 2009 08:47
Единственный выход - это подсчитывать тики таймера RTC (или ловить прерывания от него).
Но по умолчанию он тикает с частотой 18.2 Гц, поэтому придется перезагрузить его делитель другим числом, чтобы он стал тикать быстрее. Но как поведет себя при этом компьютер - ХЗ
Наверх
uzga Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 07 Октябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 359
Свойства публикации Свойства публикации   Ответить, цитируя автора - uzga Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 12 Ноябрь 2009 11:11
Я подобную задачу решил с помощью внешнего генератора и модуля счетчика импульсов. Контролируемый дискретный вход завязывается на сигнал разрешения счета. Точность измерения интервала времени будет зависить от опорной частоты счетных импульсов. Такая система у меня работает уже года три.
Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 12 Ноябрь 2009 12:02

Поищите книги братьев Фроловых. Они называются что-то похоже "MS-DOS для программиста" и "Аппаратные средства IBM PC". Там должны быть примеры работы с системным таймером (не RTC!). Или любую другую книгу по IBM PC.

Идея такова: перепрограммируете этот таймер под свои нужды на нужное количество тиков. Тики будут кратны тем, что были ранее по умолчанию. В прерывании считает эти тики и, отсчитав определённое количество тиков вызываете старый обработчик прерывания. В этом случае MS-DOS будет работать штатно и все системные интервалы останутся прежними.

Наверх
ivsergey Смотреть выпадающим
Участник
Участник


Присоединился: 21 Июнь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 66
Свойства публикации Свойства публикации   Ответить, цитируя автора - ivsergey Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Ноябрь 2009 03:57

Все верно, только программа будет резидентной, и если основная

задача обьемная, в целях экономии памяти лучше написать на асемблере, если нет, пойдет и си-паскаль.

Когда то подобных (резидентных) задач у меня было много.

PS: А книги Фроловых я до сих пор не выкидываю.

 

Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Ноябрь 2009 09:04
Вот, это у меня работало, пользуйтесь!

Лицензионное соглашение
Скачивая данные исходные тексты, вы соглашаетесь с тем, что автор не несет никакой ответственности за любые последствия какого бы то ни было их использования. Вы имеете право использовать эти исходные тексты каким угодно образом и распространять их по вашему усмотрению.

85FFB_Timer.rar

Здесь исходник функции new_divisor на С, на ассемблере и объектный файл для модели small. Как ей пользоваться:

#include <dos.h>
#include "timer.h"

static void interrupt (*old_timer)();

// обработчик прерывания:

void interrupt timer()   // ticks once per millisecond
{
    static unsigned count_55ms = 0;

    // здесь пишете что-то свое

    // выполнение стандартного обработчика
    if (++count_55ms == 55)
    {
       old_timer();
       count_55ms = 0;
    }
    else outp (0x20, 0x20);
};

// в теле основной программы:

void main()
{
   // инициализировать таймер
   new_divisor (1193);           // 1 тик за 1ms
   old_timer = _dos_getvect (8); // сохранить вектор
   _dos_setvect (8, timer);   // установить обработчик

   // тут собственно ваша программа

   new_divisor (0);   // восстановить делитель таймера
   _dos_setvect (8, old_timer);
};

Желаю удачи!
Инженер-системотехник
+7 (916) 477 3925
Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Ноябрь 2009 11:08
Первоначально опубликовано ivsergey

Все верно, только программа будет резидентной, и если основная

задача обьемная, в целях экономии памяти лучше написать на асемблере, если нет, пойдет и си-паскаль.

Когда то подобных (резидентных) задач у меня было много.

PS: А книги Фроловых я до сих пор не выкидываю.

 

Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Ноябрь 2009 11:11
Первоначально опубликовано ivsergey

Все верно, только программа будет резидентной, и если основная

задача обьемная, в целях экономии памяти лучше написать на асемблере, если нет, пойдет и си-паскаль.

Когда то подобных (резидентных) задач у меня было много.

PS: А книги Фроловых я до сих пор не выкидываю.

 

Мда, как-то подразумевал резидентность и не указал в явном виде

Собственно, в резидентной части оправдано только считать тики, объявив переменную как внешнюю, а в основной программе только читать эту переменную.

P. S. А у меня и CD-ROM-чик с книжками Фролова есть

Наверх
Vald Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Ноябрь 2009 16:27

Реально чсики компьютора имеют выход с частотой 1024 Гц. Можно разрешить этот выход.  Их можно посадить на прерывание. Вроде бы все это можно сделать программно. Но сам не пробовал.  К сожалению пользователю действительно предлагают пользовательское прерывание с частотой 18.2 раза в сек и все.

Лазить в системный таймер и контроллеры прерываний не советую - поиграться можно , но потратите время.

 

На мой взгляд - лучше на любом процессоре сделать узелок для замера времени и по посл порту его спрашивать - затраченного времени будеть точно меньше и результат гарантированный. 

При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
ivsergey Смотреть выпадающим
Участник
Участник


Присоединился: 21 Июнь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 66
Свойства публикации Свойства публикации   Ответить, цитируя автора - ivsergey Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 16 Ноябрь 2009 03:55
Первоначально опубликовано

На мой взгляд - лучше на любом процессоре сделать узелок для замера времени и по посл порту его спрашивать - затраченного времени будеть точно меньше и результат гарантированный. 

Сейчас наверное действительно лучше так. Но когда то давным давно, когда вся автоматизация была на самопале и рассыпухе, собрали быстрый АЦП под ISA-слот, перепрограммировали таймер на 100мкс и работало год без нареканий в фоновом режиме, не мешая ребятам играть в тетрис и диггера.

PS: Задача бала информационная, без управления.

 

Наверх
 Ответить Ответить Страница  12>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz