Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Анализ и генерация ИК сигнала
Анализ и генерация ИК сигнала
somlich Дата: Пн, 23.02.2009, 15:56  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Необходимо сделать функцию в программе, которая при нажатии на кнопку отсылает сигнал через ИК светодиод в виде переменной, ну например 1100 (каждое устройство отсылает строго один сигнал, например 1 устройство - 0001, 2 устройство - 0010, 3 - 0011 и т.д.)
На контроллере висит 3 ИК датчика, воспринимающие сигнал, в памяти таблица значений в массиве (как бы адреса всех устройств). То есть при принятии сигнала происходит его оцифровка и сравнение со значениями в памяти. Если сигнал принят и устройство идентифицировано, то сохраняем в память.
Камень PIC 16F877, датчик на 36 КГц, кварц - 20 МГц.
Если я правильно понял теорию, то при отсылки сигнала (по собственной кодировке) нужно:
Пусть есть переменная допустим t=20мкс
1. Отсылаю импульс через ИК светодиод равный 5t - стартовый бит
2. Далее пауза t
3. Далее если 0 то опять пауза t, если 1 то импульс длинной t
4. В конце опять пауза t и импульс ну например 2t - конечный бит

При приемке сигнала:
1. Смотрим вывод сигнальный от ИК приемника, если 0 то значит что то пришло, вываливаемся в цикл счета импульса, допустим команда PULSIN PIN1,t,temp Если temp окло 3t то значит - это мой сигнал и бегом его анализировать
2. Далее по той же аналогии считаем импульсы, если есть за период t то значит пришла 1, если нет - пришел 0
3. Завершаем все приемом стоп бита

И вот чего я не пойму:
1. Как подсчитать, какое значение должно быть в переменной temp при t, если тактовая частота кварца равна 20 МГЦ, то получается по моему, что один такт МК будет выполняться за 2 мкс? Следовательно за t=20мкс переменная temp должна поиметь значение 10 ???

2. Как через ИК светодиод подать сигнал частотой 36 КГц, если командой PULSOUT PIN1,t , то в хелпе написано, что частота импульса будет зависеть от кварца, то есть если кварц на 20 МГЦ, то и частота импульса будет равна 20 МГЦ?

ЯНДЕКС Дата: 23.02.2009
ГыГы Дата: Пн, 23.02.2009, 18:13  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 17.02.2009

Статус: Offline

Задействуй USART, по ИК он пройдёт.
MasterPic Дата: Пн, 23.02.2009, 18:44  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

А как у вас такт получается 2 мкс? У меня 1 такт МК при 20 МГц равен 200 нс
somlich Дата: Пн, 23.02.2009, 19:30  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Про 2 мкс прочитал в одной книжке? Если не прав, то поправьте пожалуйста wink
Сейчас хочу собрать внешний генератор на 36 КГц и уже в нужное время подключать его для генерации частоты с нужной мне длительностью. Как вы думаете прокатит?
Про USART почитаю
holyuser Дата: Пн, 23.02.2009, 21:29  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

С использованием PULSIN у Вас ничего не выйдет.
Вот пример (в прикреплении), как можно сделать, чтобы работало...
Прикрепления: Wirelessinfrare.mht (115.0 Kb)
somlich Дата: Пт, 27.02.2009, 00:17  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Спасибо уважаемый holyuser за пример, но только не пойму, что обозначает в инициализации строка
CCP1CON = %00001100 ' Mode select = PWM - походу это режим ШИМ

Все включил по схеме, правда в моем камне порт RC2/CCP1, Светодиод подключен плюсом через сопротивление 220 ОМ на С3, минусом на порт С0

Code
' Initialize hardware PWM - IRLED 40KHz drive
      PORTC     = %00000000    ' PortС = 0 : IRLED On PortС.0 Off
      TRISC     = %00000000     ' PortС = all outputs
      CCPR1L    = 56                 ' Set PWM Duty-Cycle to 50%
      PR2       = 112                  ' Set PWM for 40KHz в 36КГц
      CCP1CON   = %00001100     ' Mode select = PWM
      T2CON     = %00000100     ' %00000100 = TMR2 ON 1:1  pre-scale
                     ' %00000101 = TMR2 ON 1:4  pre-scale
                     ' %00000110 = TMR2 ON 1:16 pre-scale

и соответственно процедура отправки байта

Code
SEROUT2  PORTC.0,Baud,[Sync,Kod]

И вот в чем фигня: стоит у меня светодиод, и ИК датчик, т.е. если на датчике есть сигнал 0 - toggle светодиод (мигает), так вот, если я строку CCP1CON = %00001100 закоментирую - все работает прекрасно, мигает иногда на лампочку, на пульт от телека - отлично. А вот на отправку байта - ни в какую. Если строку оставляю, то мигать перестает на любой сигнал, вот такая петрушка angry

Добавлено (27.02.2009, 0:17:48)
---------------------------------------------
В общем мучаю мозги уде несколько дней и что то не пойму: нашел еще проект для передачи сигнала в формате RC-5 на бэйсике http://www.picbasic.nl/framelo....tm?http так вот, при вставке его в проект и обрезке лишнего при компиляции ассемблер выдает ошибку: что переменные command и др не определены. Хотя в коде на бейсике я их определяю и присваиваю им значения. Может для ассемблера нужно как то по особому присваивать?

Сообщение отредактировал somlich - Вт, 24.02.2009, 01:35
Форум Picbasic.ru » Программирование МК » PicBasicPro » Анализ и генерация ИК сигнала
  • Страница 1 из 1
  • 1
Поиск: