получить импульс 2.5 мс
От: azh  
Дата: 19.06.06 11:50
Оценка:
нужно в проге сформировать сигналы интерфейса I2C на пинах LPT-порта для
программирования памяти 24LC64. (Частота импульсов 400 кГц.) Что-то я
не очень догоняю, как такие микросекундные времена можно извлечь из Винды.

Идеальное решение, конечно, было бы такое: прога работает с оборудованием
через USB-подключение, на USB висит микроконтроллер, далее искомый I2C.
Но такое решение не канает. (Кому интересно, я объясню -- почему)

Обязательные условия:
1. Windows XP
2. Порт LPT
3. Протокол I2C
4. Информацию для заливки в 24LC64 нужно готовить этой же прогой, т.е.
должен быть гуевый интерфейс с использованием таблички (grid), + MFC.

т.е. гремучая смесь получается. На мои возражения, что это все плохо
совместимо и толком работать не будет, начальство заявляет, что именно
так и работает программатор в CodeVision.

Народ, взываю к тебе! Что мне делать?
Re: получить импульс 2.5 мс
От: febus Германия  
Дата: 19.06.06 12:38
Оценка:
Здравствуйте, azh, Вы писали:
как такие микросекундные времена можно извлечь из Винды.

по поводу программирования железа к сожалению подсказать не могу.
Что касается максимально точного таймера под Windows, почитайте про
QueryPerformanceFrequency и QueryPerformanceCounter. Это наиболее точный(имхо) таймер из тех что есть.
Re[2]: получить импульс 2.5 мс
От: azh  
Дата: 19.06.06 13:05
Оценка:
F>QueryPerformanceFrequency и QueryPerformanceCounter. Это наиболее точный(имхо) таймер из тех что есть.

это не совсем таймеры. Это скорее точные счетчики времени. Мне же нужно "спать" до тех пор, пока не "прокукарекает" таймер.
Re: получить импульс 2.5 мс
От: Rpt  
Дата: 19.06.06 13:20
Оценка:
Здравствуйте, azh, Вы писали:

azh>Народ, взываю к тебе! Что мне делать?


Может поможет.
Попробуй связаться с автором этого творения
Судя по всему он разбирался с созданием генераторов на LPT
Re[3]: получить импульс 2.5 мс
От: febus Германия  
Дата: 19.06.06 13:23
Оценка:
Здравствуйте, azh, Вы писали:

F>>QueryPerformanceFrequency и QueryPerformanceCounter. Это наиболее точный(имхо) таймер из тех что есть.


azh>это не совсем таймеры. Это скорее точные счетчики времени. Мне же нужно "спать" до тех пор, пока не "прокукарекает" таймер.


хм... ну ладно, не получилось
тогда может исходники программатора помогут
http://sourceforge.net/search/?type_of_search=soft&words=i2c
Re[3]: получить импульс 2.5 мс
От: Аноним  
Дата: 20.06.06 08:46
Оценка:
Здравствуйте, azh, Вы писали:

azh>это не совсем таймеры. Это скорее точные счетчики времени. Мне же нужно "спать" до тех пор, пока не "прокукарекает" таймер.


Можно использовать waitable timer и одну из функций WaitFor... . Хотя у меня был такой косяк: необходимо было опрашивать железку по СОМ-порту через 20 мс интервалы. Под Win2000 все отрабатывало четко, даже 5 мс интервалы проходили (меньше не пробовал), но под WinXP временные интервалы срабатывания таймера гуляли от 12 до 35 мс. В принципе, заказчика это устраивало, поэтому глубже копать не стал.
Re[4]: получить импульс 2.5 мс
От: azh  
Дата: 20.06.06 14:15
Оценка:
Все, свершилось, Всем спасибо! Убедил-таки оппонентов ставить микроконтроллер на USB. Ура-а!!! Мы победили

Реплика Анонима ("... но под WinXP временные интервалы срабатывания таймера гуляли от 12 до 35 мс")окончательно добила сомневающихся, у нас нужно получать не миллисекунды, а вообще микросекунды.

Итог такой:
1. Windows -- это не есть операционка реального времени. Следствие: времена короче 10 мс плывут со страшной силой, а метки времени (прерывания) менее 1 мс получить в принципе не реально.
2. Windows ориентирована на передачу пакетов данных, а не на работу с битами\байтами. Следствие: в COM- и LPT-порт легче выкинуть 100 байт, чем изменить состояние бита.

Вобщем-то, это прописные истины. На форуме полно юниоров, это для них.
Re: получить импульс 2.5 мс
От: bnk СССР http://unmanagedvisio.com/
Дата: 20.06.06 14:19
Оценка:
Здравствуйте, azh, Вы писали:

azh>нужно в проге сформировать сигналы интерфейса I2C на пинах LPT-порта для

azh>программирования памяти 24LC64. (Частота импульсов 400 кГц.) Что-то я
azh>не очень догоняю, как такие микросекундные времена можно извлечь из Винды.

Для программирования 24CXX не нужны 2.5 мс. Они статические, если я ничего не путаю.
400 кГц — это максимальная частота, минимальная — это нуль.

azh>Народ, взываю к тебе! Что мне делать?


Успокоиться, и объяснить задачу народу
Или воспользоваться готовым программатором/исходниками программатора (Поиск в google по словам JDM, ICProg, PonyProg)
Re[2]: получить импульс 2.5 мс
От: azh  
Дата: 21.06.06 04:42
Оценка:
bnk>Для программирования 24CXX не нужны 2.5 мс. Они статические, если я ничего не путаю.
bnk>400 кГц — это максимальная частота, минимальная — это нуль.
так-то оно так, но если процесс заливки в ЕЕПРОМ привязывать к одно-миллисекундному таймеру (SetTimer/KillTimer), то получается микросхема полностью будет запрограммирована за 4-5 минут. Для единичных заливок еще можно закрыть глаза, но когда нужно перепрграммировать одну-две тысячи устройств в течении суток, тут призадумаешься... Устройства -- это такие коробочки, которые таскают шахтеры, когда спускаются под землю. Ну типа черный ящик. В устройства пихается информация размером примерно 6-8 килобайт.

bnk>Или воспользоваться готовым программатором/исходниками программатора (Поиск в google по словам JDM, ICProg, PonyProg)

ага, примерно так и сделали. Благо, сейчас программаторов не меньше, чем в свое время текстовых редакторов. Только ленивый не делал.

Еще раз всем спасибо! Задача решена.
Re[5]: получить импульс 2.5 мс
От: ro_man  
Дата: 21.06.06 09:27
Оценка:
Здравствуйте, azh, Вы писали:

azh>Все, свершилось, Всем спасибо! Убедил-таки оппонентов ставить микроконтроллер на USB. Ура-а!!! Мы победили

USB — это правильно. Поздравляю!

azh>Реплика Анонима ("... но под WinXP временные интервалы срабатывания таймера гуляли от 12 до 35 мс")окончательно добила сомневающихся, у нас нужно получать не миллисекунды, а вообще микросекунды.

Возможно, все дело в каких-то настройках системы, но эта хрень появлялась на всех машинах, где стояла ХР (пробовал на нескольких компах с разными версиями ХР).

azh>Итог такой:

azh>1. Windows -- это не есть операционка реального времени. Следствие: времена короче 10 мс плывут со страшной силой, а метки времени (прерывания) менее 1 мс получить в принципе не реально.
Кто бы сомневался? Кванты времени в Win2000 составляют около 10-20 мс.

azh>2. Windows ориентирована на передачу пакетов данных, а не на работу с битами\байтами. Следствие: в COM- и LPT-порт легче выкинуть 100 байт, чем изменить состояние бита.

Последнюю фразу не понял. СОМ-порт просто не предназначен для передачи отдельных бит. Линии управления устанавливаются без проблем стандартными средствами винды. С LPT сложнее тем, что нет стандартных средств манипулирования линиями порта в винде (вернее есть, но куцые), необходимо писать драйвер (модифицировать стандартный). Правда проблема с LPT решается с помощью драйвера прямого доступа к портам, типа smport.sys. У меня был случай, когда не удалось перевести LPT порт в нормальный EPP-режим под виндой (не формировались стробы адреса/данных при записи в соответствующие регистры). Пришлось формировать эти стробы самому, имитируя циклы записи адреса/данных вручную. Микросекундные времена получал, забивая пустые циклы.
Так что для одиночной записи проблем нет, вот когда нужна фиксированная перидичность, тут проблемы и появляются при малых временах. Но это уже рилтайм, и, соответственно, нужна ОСРВ.

azh>Вобщем-то, это прописные истины. На форуме полно юниоров, это для них.

Была тут неплохой тред про рилтайм в Вин2000.

ЗЫ. Аноним — это я.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.