Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2009, 01:49   #1
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
Лампочка

Всем привет! У меня возникла проблема с которой я уже очень долго разбираюсь и всё безуспешно. К COM порту подключён ИК приёмник и я пытаюсь получить определённый сигнал при нажатии кнопки на пульте. ИК приёмник работает по DCD каналу (1-ая ножка COM порта) и я использовал API функции для считывания состояния DCD, но всё никак не могу добиться желаемого результата... Использовал GetCommModemStatus(Port, Status),WaitCommEvent(port,IpEvtMas k,nil). Нашёл на одном сайте краткое описание как это сделать, но что-то непонятно как это реализовать.
Цитата с сайта:
Цитата:
Если приемник качает информацию по DCD, нужен таймер, который будет считать время между изменениями DCD и установкой событий. Промежуток Т между 2 событиями равен нулевому биту в команде или адресе, 2Т соответственно равен 1. Время Т таймера обычно равно промежутку между старт битом и битом синхронизации. Набивая полученными битами байт - получаем искомое число - команду переданную с пульта, вначале идут несколько бит адреса блока команд и только потом сама команда. Плюс нужна поправка на пропуск в цикле каждого второго события, который сигнализирует о том, что сигнал на DCD вернулся в исходное состояние. В принципе по нему можно перезапускать таймер.
Итак, по событию запустить таймер для измерения интервала. По следующему событию учесть полученный интервал в таймере. Пропустить несколько событий (сколько - зависит от пульта). Запустить таймер. По наступлению события смотреть, было ли событие от таймера, или в событии от таймера смотреть, было ли событие от порта. Ориентируясь на это добавлять сдвигом в байт бит (0 или 1) в цикле N раз (сколько зависит от пульта). По окончанию цикла дождаться еще 1 события (стоповый бит). Проанализировать, что за байт получился и предпринять какие то шаги. Не забыть закрыть порт по выходу из программы.
Есть так же исходник маленькой программки, которая считывает данные с пульта, но проблема в том, что он написан на C++, а я только знаю Delphi. Сам исходник: WinLirc.rar Подскажите, пожалуйста, как реализовать считку данных? Если можно, то приведите пример кода.

Ребята, может у кого-нибудь есть какие предложения или идеи как это всё реализовать? И что это за зверский таймер должен быть, который примерно за 300 миллисекунд сможет посчитать паузы и пульсации? При нажатии на одну и ту же кнопку пульта в WinLirc, считывается так:

space 816983
pulse 183
space 20568
pulse 213
space 714023
pulse 9014
space 4490
pulse 542
space 565
pulse 595
space 539
pulse 596
space 537
pulse 590
space 520
pulse 597
space 538
и т.д.
Всегда рад помочь!

Последний раз редактировалось Stilet; 17.11.2009 в 07:43.
Terran вне форума Ответить с цитированием
Старый 08.11.2009, 01:23   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
И что это за зверский таймер должен быть, который примерно за 300 миллисекунд сможет посчитать паузы и пульсации
а там идет накопление, а потом усреднение... таймер кстати использовал -QueryPerformanceFrequency. Но, даже несмотря на это есть один существенный недостаток (свойственный и slycontrol и winlirc и иным плагинам, что через com, из-за чего перешел на usb)- при запуске например видеофильма, наблюдаются пропуски и потери посылок с пульта, поднятие приоритета процесса потока считывания с com помогает немного.

Цитата:
space 816983
pulse 183
space 20568
pulse 213
space 714023
pulse 9014
space 4490
pulse 542
space 565
pulse 595
space 539
pulse 596
space 537
pulse 590
space 520
pulse 597
space 538
это всего-лишь длительности, а не кодограмма...

зы: а вы не рассматривали вариант реализовать через usb, постабильней и по-современней будет? например igorusb2... или возиться с контроллером не хочется?
зы: схему, прошивку-исходники, печать, считывание сверху могу подкинуть
Изображения
Тип файла: jpg вид-1.jpg (30.4 Кб, 223 просмотров)
Тип файла: jpg вид-3.jpg (25.8 Кб, 222 просмотров)
Тип файла: jpg вид-4.jpg (30.1 Кб, 225 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 08.11.2009 в 01:33.
raxp вне форума Ответить с цитированием
Старый 08.11.2009, 02:54   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Большое спасибо за пояснения!
Цитата:
зы: схему, прошивку-исходники, печать, считывание сверху могу подкинуть
Скиньте, пожалуйста. Буду весьма благодарен.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 08.11.2009, 09:54   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

итак:
- схема IR-USB, плата top (распечатать в зеркалке) и bot, справочные данные
- прошивка под ATTiny2313, исходники IR ДУ, исходник работы c драйвером из delphi
- прошивка-термометра-hid для той-же конструкции

во вложении:
- схема IR приемника...
- программатор USB-AVR910 (схема, прошивка, драйвер, использовать с CVAVR)
- или программатор LPT (схема, использовать с PonyProg)
Вложения
Тип файла: pdf IR-USB_схема.pdf (368.2 Кб, 28 просмотров)
Тип файла: zip программатор AVR910.zip (1.36 Мб, 24 просмотров)
Тип файла: zip программатор LPT IO.zip (200.9 Кб, 17 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 08.11.2009 в 11:20.
raxp вне форума Ответить с цитированием
Старый 08.11.2009, 11:14   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Очень классный материал! Ещё раз большое спасибо!!!
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 08.11.2009, 11:41   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

угу, обращайтесь. Будет статья в ближайшее время

материал по-данному >>> вопросу <<< (см. часть 2)
правки уже нет, модератор объедини c постом #7, если что
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось Stilet; 17.11.2009 в 07:44.
raxp вне форума Ответить с цитированием
Старый 21.11.2009, 12:19   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Спасибо!!!
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иморт данных из SQL в Excel при помощи QueryTable VBS, Иморт данных из SQL в Excel при помощи QueryTable Valdocco Microsoft Office Excel 1 16.07.2009 21:50
Подсчёт голосов eldar PHP 6 01.06.2009 12:40
Ошибка при приёме данных ServerSocket'ом Terran Работа с сетью в Delphi 2 25.01.2009 12:20
программf, которая демонстрирует роботу пульта дистанционного управление explo5ion Фриланс 1 24.06.2008 16:57
Подсчёт трафика Альберт Работа с сетью в Delphi 2 10.09.2007 11:35