ВитГо писал(а):и вопрос: после какого действия инициализации счетчик Т1 начинает считать?
шепотом: SEI ?
команда компилятора .org помещает следующий за ней код по адресу
метки адресов (типа PCIDaddr, OC1Aaddr ну в общем всех) указаны в inс файле
по адресу если прерывание не используется сразу ставим RETI (возврат из прерывания)
если прерывание используется то ставим RJMP и нужную нам метку процедуры обработчика прерываний
что за метка адресов ( с PCIDaddr, OC1Aaddr ну в общем со всеми - не знаком я ) ?
ldi Temp,0b00000001 ; тактовый сигнал = CK (1:1)
out TCCR1B,Temp ; тут счетчик начинает считать
; инициализация компаратора
ldi Temp,0x19 ; 3кГц, 1/3000=0,00033сек=330мкс, 330 длительность импульса или паузы(время-2Т)
out OCR1ВH,Temp ; 0,05мкс*65535=3276,75 3276,75>330 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xC8 ; 330мкс/0,05мкс=6600 тиков таймера 6600=19C8(hex)
out OCR1ВL,Temp ; ?????????????????????????????????????????????????????????????????????????????
;************************************************************************************
ldi Temp,0b00000001 ; тактовый сигнал = CK (1:1)
out TCCR1A,Temp ; тут счетчик начинает считать
; инициализация компаратора
ldi Temp,0xC ; 3кГц, 1/3000=0,00033сек=330мкс, 330/2=165мкс длительность импульса или паузы(время-Т)
out OCR1AH,Temp ; 0,05мкс*65535=3276,75 3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4 ; 165мкс/0,05мкс=3300 тиков таймера 3300=CE4(hex)
out OCR1AL,Temp ;
я думал это касается только регистра Timsk
...видимо это касается всех регистров? - теперь ясно
ВитГо писал(а):
какие в нем видишь биты конфигурации (и в какое состояние их нужно установить)
TCCR1A - Timer/Counter1 Control Register A - контрольный регистр 1-го таймера А
TCCR1B - Timer/Counter1 Control Register B - контрольный регистр 1-го таймера B
Bit 7:6 – COM1A1:0: Compare Output Mode for Channel A
Bit 5:4 – COM1B1:0: Compare Output Mode for Channel B
Bit 1:0 – WGM11:0: Waveform Generation Mode
COM1A1: 0 и COM1B1: 0 контроль выходного Сравнить штифты (OC1A и OC1B
соответственно) поведение. Если один или оба из COM1A1: 0 биты записываются в один, OC1A
Выход отменяет нормальную функциональность порта ввода / вывода он подключен. Если один или
оба COM1B1: 0 бит записываются в один, выход OC1B отменяет нормальную порт
Функциональные возможности ввода / вывода он подключен. Тем не менее, отметим, что данные направления Регистрация
(DDR) бит, соответствующий OC1A или OC1B вывод должен быть установлен для того, чтобы
Драйвер вывода.
Когда OC1A или OC1B подключен к выводу, функция COM1x1: 0 бит
зависит от WGM13: 0 биты настройки. Таблица 43 показывает COM1x1: 0 немного функциональности
когда WGM13: 0 биты устанавливаются в нормальном режиме или CTC (не PWM).
смотрим табличку:
1. normal operation, oc1a\oc1b - disconnected
2. toggle oc1a\oc1b on Compare match
3. clear oc1a\oc1b on compare match
4. set ----\----\-----\----\----
что из этого нам подходит?
напомню, мы хотели чтобы таймер при совпадении сам менял состояние вывода oc1a......
теперь нужно подумать в какой режим нужно получить от таймера T1.
......
......
теперь открывай datasheet на свой контроллер и смотри как настроить T1 чтобы он работал так как я описал (подсказка: это раздел 16 bit Timer/Counter, далее подраздел 16 bit Timer/Counter Register Description (он последний в списке подразделов таймера)
я видимо где то тут тупанул и не могу понять что нужно от таймера..
я понимаю что нужно настроить tccr1a но не понимаю для чего...
напомню, мы хотели чтобы таймер при совпадении сам менял состояние вывода oc1a......
нам нужен счет таймера Т1 с изменением значения внешнего выхода OC1A при совпадении значения таймера с регистром OCR1A
это по даташиту вторая строка, COM1A1=0 COM1A0=1 - Toggle OC1A on Compare match - если перевести: переключение OC1A при совпадении..
запоминаем
LDI temp, (1<<COM1A0) ; COM1A1 у нас равен нулю, поэтому его устанавливать не нужно
читаем далее выводы: COM1B1 \ COM1B0 - используется для OCR1B и OC1B - нам не нужно, значит будут равны нулю !
идем дальше: WGM11 и WGM10 - смотрим большую таблицу на странице 106
смотрим MODE 4: WGM12=1, WGM13=WGM11=WGM10=0 CTC top=OCR1A - наш случай !!
в TCCR1A только регистры WGM11 и WGM10 которые в нашем MODE 4 должны быть равны нулю
ну коль это так - значит с регистром TCCR1A мы закончили !
получился код
насколько я помню решали подключать 15ую ножку - OC1A !!
видно я просмотрел при инициализации (не сверился с даташитом)
p.s. я просто тут "с головой" в своем проекте на меге32.. у меня тут артефакты при выводе видео - уже весь моСК себе вынес.. кому расскажи - не поверят что так бывает
ВитГо писал(а):p.s. я просто тут "с головой" в своем проекте на меге32.. у меня тут артефакты при выводе видео - уже весь моСК себе вынес.. кому расскажи - не поверят что так бывает
я в Тебя верю!
а у тебя модель с камерой? круууто
ВитГо писал(а):видно я просмотрел при инициализации (не сверился с даташитом)
ldi Temp,0b11110000
out DDRB,Temp ;настроили порт "В"
;х0000000 - вывод на передатчик
;00Х00000 - ДЛЯ ГЕНЕРАЦИИ (НЕ ЗНАЮ ЧТО ДЕЛАТЬ - ВЫХОД ИЛИ ВХОД)
;0000хххх - для чтения клавиатуры
OCR1B_COMP: ; ----------------------------------------------------------------------------
; вывод строки
ldi R16 , (1<<SPE)|(1<<MSTR)|(1<<CPHA) ; включили SPI, режим ведущий
out SPCR , R16
ldi r17, 10
ldi r18 , 0b11101111
lloop1: out SPDR , R18 ;
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
; 4 такта
dec r17
brne lloop1
out SPDR , R17
out SPCR , R17
cbi portb , 5
cpi r17 , 1 ; ЧУДО КОМАНДА !!
reti
вторая строка снизу ЧУДО КОМАНДА ! на вывод изображения как видно она повлиять не может (находиться вне цикла!) но стоит ее убрать - и изображение плывет из строчки в строчку по горизонтали на 1 пиксел !! причем в прерывание я захожу после sleep - так что вход точный !
сейчас вот сверху появилась какая то пиксельная линия на половину кадра - тоже не понимаю что за хрень, вроде ничего так не вывожу
Bit 7 - // Timer/Counter1 Overflow Interrupt Enable - разрешение прерывания по переполнению 1-го таймера
Bit 6 - // Timer/Counter1 Output Compare Match Interrupt Enable - разрешение прерывания компаратора 1-го таймера
Bit 5 - // видимо то же, что Bit 6
Bit 4 – Res: Reserved Bit
Bit 3 – ICIE1: Timer/Counter1, Input Capture Interrupt Enable * Включить вход прерывания захвата
Bit 2 – OCIE0B: Timer/Counter0 Output Compare Match B Interrupt Enable
Bit 1 – TOIE0: Timer/Counter0 Overflow Interrupt Enable * разрешение прерываний от переполнения
Bit 0 – OCIE0A: Timer/Counter0 Output Compare Match A Interrupt Enable
Последний раз редактировалось uwrtey Сб авг 25, 2012 23:03:16, всего редактировалось 3 раза.