нужно в проге сформировать сигналы интерфейса I2C на пинах LPT-порта для
программирования памяти 24LC64. (Частота импульсов 400 кГц.) Что-то я
не очень догоняю, как такие микросекундные времена можно извлечь из Винды.
Идеальное решение, конечно, было бы такое: прога работает с оборудованием
через USB-подключение, на USB висит микроконтроллер, далее искомый I2C.
Но такое решение не канает. (Кому интересно, я объясню -- почему)
Обязательные условия:
1. Windows XP
2. Порт LPT
3. Протокол I2C
4. Информацию для заливки в 24LC64 нужно готовить этой же прогой, т.е.
должен быть гуевый интерфейс с использованием таблички (grid), + MFC.
т.е. гремучая смесь получается. На мои возражения, что это все плохо
совместимо и толком работать не будет, начальство заявляет, что именно
так и работает программатор в CodeVision.
Здравствуйте, azh, Вы писали:
как такие микросекундные времена можно извлечь из Винды.
по поводу программирования железа к сожалению подсказать не могу.
Что касается максимально точного таймера под Windows, почитайте про
QueryPerformanceFrequency и QueryPerformanceCounter. Это наиболее точный(имхо) таймер из тех что есть.
Здравствуйте, azh, Вы писали:
F>>QueryPerformanceFrequency и QueryPerformanceCounter. Это наиболее точный(имхо) таймер из тех что есть.
azh>это не совсем таймеры. Это скорее точные счетчики времени. Мне же нужно "спать" до тех пор, пока не "прокукарекает" таймер.
Здравствуйте, azh, Вы писали:
azh>это не совсем таймеры. Это скорее точные счетчики времени. Мне же нужно "спать" до тех пор, пока не "прокукарекает" таймер.
Можно использовать waitable timer и одну из функций WaitFor... . Хотя у меня был такой косяк: необходимо было опрашивать железку по СОМ-порту через 20 мс интервалы. Под Win2000 все отрабатывало четко, даже 5 мс интервалы проходили (меньше не пробовал), но под WinXP временные интервалы срабатывания таймера гуляли от 12 до 35 мс. В принципе, заказчика это устраивало, поэтому глубже копать не стал.
Все, свершилось, Всем спасибо! Убедил-таки оппонентов ставить микроконтроллер на USB. Ура-а!!! Мы победили
Реплика Анонима ("... но под WinXP временные интервалы срабатывания таймера гуляли от 12 до 35 мс")окончательно добила сомневающихся, у нас нужно получать не миллисекунды, а вообще микросекунды.
Итог такой:
1. Windows -- это не есть операционка реального времени. Следствие: времена короче 10 мс плывут со страшной силой, а метки времени (прерывания) менее 1 мс получить в принципе не реально.
2. Windows ориентирована на передачу пакетов данных, а не на работу с битами\байтами. Следствие: в COM- и LPT-порт легче выкинуть 100 байт, чем изменить состояние бита.
Вобщем-то, это прописные истины. На форуме полно юниоров, это для них.
Здравствуйте, azh, Вы писали:
azh>нужно в проге сформировать сигналы интерфейса I2C на пинах LPT-порта для azh>программирования памяти 24LC64. (Частота импульсов 400 кГц.) Что-то я azh>не очень догоняю, как такие микросекундные времена можно извлечь из Винды.
Для программирования 24CXX не нужны 2.5 мс. Они статические, если я ничего не путаю.
400 кГц — это максимальная частота, минимальная — это нуль.
azh>Народ, взываю к тебе! Что мне делать?
Успокоиться, и объяснить задачу народу
Или воспользоваться готовым программатором/исходниками программатора (Поиск в google по словам JDM, ICProg, PonyProg)
bnk>Для программирования 24CXX не нужны 2.5 мс. Они статические, если я ничего не путаю. bnk>400 кГц — это максимальная частота, минимальная — это нуль.
так-то оно так, но если процесс заливки в ЕЕПРОМ привязывать к одно-миллисекундному таймеру (SetTimer/KillTimer), то получается микросхема полностью будет запрограммирована за 4-5 минут. Для единичных заливок еще можно закрыть глаза, но когда нужно перепрграммировать одну-две тысячи устройств в течении суток, тут призадумаешься... Устройства -- это такие коробочки, которые таскают шахтеры, когда спускаются под землю. Ну типа черный ящик. В устройства пихается информация размером примерно 6-8 килобайт.
bnk>Или воспользоваться готовым программатором/исходниками программатора (Поиск в google по словам JDM, ICProg, PonyProg)
ага, примерно так и сделали. Благо, сейчас программаторов не меньше, чем в свое время текстовых редакторов. Только ленивый не делал.
Здравствуйте, 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.