Без описания |
Поиск в теме | Версия для печати |
nest |
Отправлено: 18 Октября, 2009 - 17:14:04
|
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
|
(надо же... длинные сообщения не принимают )
ЧАСТЬ 1
для светодиода лучше будем использовать ножку C0.
т.к. альтернативная функция предложенной ножки D2
является внешнее прерывание INT0. Лучше подобные
интересные ножки экономить для чего то более важного.
имеем
период частоты тактирования микроконтроллера:
T(8MHz) : 1/800000000Гц = 0,000000125 sek
период частоты 36 кГц:
T(36kHZ) : 1/36000Гц = 0,000027777 sek
длительность импульса или длительность паузы между импульсами частоты 36 кГц при коэффициенте заполнения равному 50%:
T(36kHZ/2) : (1/36000)/2 = 0,000013888 sek
предделитель таймера-0 ставим равным единице:
в регистре TCCR0 в биты
Bit 2:0 – CS02:0: Clock Select записываем 001
TCCR0 = 0b00000001
расчитаем период переполнения таймера-0.
мы установили у таймера-0 предделитель равный 1, то есть он считает с тактовой частотой µC. поэтому получаем:
T(OVF)=256*1/800000000Гц = 0,000032 sek
(256 - это число тактовых импульсов для заполнения всех восьми бит таймера-0, т.к. он восьмибитный)
находим число предустановки таймера-0.
длительность импульса частоты 36 кГц делим на период тактирования таймера-0:
T(36kHZ/2)/T(8MHz) = 0,000013888 sek / 0,000000125 sek = 111,04
округляем до целой доли, получаем число 111.
т.к. восьмибитный таймер считает от нуля, вычитаем:
256-111 = 145
ради этого 145 и все расчёты
грубые вычисления окончены.
пишем код.
; настраиваем ножку C0 на выход.
DDRC0=OUT
; настраиваем ножку D3 на вход.
DDRD3=IN
; инициализация таймера-0
TCCR0 = 0b00000001 ; устанавливаем предделитель таймера-0 равным единице.
; инициализируем внешнее прерывание на низкий уровень (т.к. у TSOP активный уровень - низкий, нуль)
;Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
MCUCR = 0b00000000 ; поэтому биты #3 и #4 должны быть нулём.
MAIN_LOOP:
; где нужно включим работу TSOP-а:
rcall INIT_TSOP; включаем TSOP-бампер
; тут идёт основной цикл основной программы
; светим, управляем, гасим, включаем
; или просто обогреваем окружающую среду,
; можно отправить микроконтроллер в спячку
; коммандой sleep, или выполнять какие либо вычисления...
; bla - bla - bla
; можно проверить флаг "TSOP_IS_ACTIV".
; если флаг "TSOP_IS_ACTIV" установлен, то впереди - препятствие!!!
; (не забыть потом сбросить флаг "TSOP_IS_ACTIV"!).
; bla - bla - bla
; тут дальше шуруем в основном цикле
; bla - bla - bla
; если TSOP-бампер не нужен - можно его выключить:
rcall DISABLE_TSOP; вЫключаем TSOP-бампер
; bla - bla - bla
; пока не упрёмся в его конец
rjmp MAIN_LOOP ; конец основного цикла, прыгаем на начало.(Отредактировано автором: 18 Октября, 2009 - 21:19:50) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (6): [1] 2 3 4 5 6 » |
« Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|