Страница 5 из 15
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Пт авг 24, 2012 20:14:43
uwrtey
ВитГо писал(а):и вопрос: после какого действия инициализации счетчик Т1 начинает считать?
шепотом:
SEI ?
команда компилятора .org помещает следующий за ней код по адресу
метки адресов (типа PCIDaddr, OC1Aaddr ну в общем всех) указаны в inс файле
по адресу если прерывание не используется сразу ставим RETI (возврат из прерывания)
если прерывание используется то ставим RJMP и нужную нам метку процедуры обработчика прерываний
что за метка адресов ( с PCIDaddr, OC1Aaddr ну в общем со всеми - не знаком я ) ?
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Пт авг 24, 2012 20:43:22
ВитГо
про счетчик: нет, он начинает считать момента установки предделителя !
sei - это разрешение прерываний, но счетчик может считать и без прерываний...
про метки: глянь файл tn2313A.inc (самый его конец)
эти метки - адреса точек прерываний..
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Пт авг 24, 2012 20:52:24
uwrtey
ВитГо писал(а):про метки: глянь файл tn2313A.inc (самый его конец)
эти метки - адреса точек прерываний..
нет у меня этого файла - я в блокноте пишу
был у меня пятый авр студио на второй машине, но на ней сдох HDD - куплю новый, восстановлю все программы
и только потом настраиваем встроенные устройства контроллера: счетчики, компараторы, АЦП и так далее
так?
Спойлер
Код: Выделить всё
reset: ; включение микроконтроллера
Sli ; глобальный запрет на прерывания
ldi Temp,low(RamEnd) ;
out SPL,Temp ;инициализации стека
ldi Temp,0b10000000
out DDRB,Temp ;настроили порт "В"
;х0000000 - "вывод" на передатчик
;0000хххх - "ввод" для чтения клавиатуры
ldi Temp,0b00001111
out DDRD,Temp ;настраиваем порт "D" на вывод(запись)(0-ввод, 1-вывод)
;0000хххх - на сканирование столбцов клавы
ldi Temp, (1<<OCIE1A) ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000001 ; тактовый сигнал = CK (1:1)
out TCCR1B,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 ;
ldi Temp,0 ;обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp
я вот только про TCCR1A ни как не пойму...
нам что, нужно установить два тактовых сигнала ?
вот так
Код: Выделить всё
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 ;
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Пт авг 24, 2012 23:37:58
ВитГо
я просил так
Код: Выделить всё
ldi Temp,0b00000001 ; тактовый сигнал = CK (1:1)
out TCCR1B,Temp ; тут счетчик начинает считать
не писать !!
правильно вот так:
Код: Выделить всё
ldi Temp, (1<<CS10) ; тактовый сигнал = clk/1 no prescaling
out TCCR1B,Temp ; тут счетчик начинает считать
угу, считать то начали... но вот что ?
лишних битов конфигурации не бывает, ты установил далеко не все !
так что давай начнем с TCCR1A и TCCR1B
какие в нем видишь биты конфигурации (и в какое состояние их нужно установить)
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 11:02:57
uwrtey
ВитГо писал(а):я просил так........не писать !!
я думал это касается только регистра Timsk
...видимо это касается всех регистров? - теперь ясно
ВитГо писал(а):
какие в нем видишь биты конфигурации (и в какое состояние их нужно установить)
TCCR1A - Timer/Counter1 Control Register A - контрольный регистр 1-го таймера А
TCCR1B - Timer/Counter1 Control Register B - контрольный регистр 1-го таймера B
http://www.promelec.ru/pdf/ATTINY2313.pdf страница 107
три младших бита TCCR1B устанавливают источник тактового сигнла
остальные - ну в общем вот

Bit 7 – ICNC1: Input Capture Noise Canceler
Bit 6 – ICES1: Input Capture Edge Select
Bit 5 – Reserved Bit
Bit 4:3 – WGM13:2: Waveform Generation Mode/
режим генерации сигнала
Bit 2:0 – CS12:0: Clock Select
и TCCR1A

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
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 19:11:07
ВитГо
давай с TCCR1A
какие биты и за что отвечают ?
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 19:11:32
uwrtey
DI HALT об этом писал тут
http://easyelectronics.ru/avr-uchebnyj- ... -shim.html ровно 4 года назад
Другие комбинации битов WGM задают режимы Phase Correct PWM и CTC (сброс OCxx при совпадении).
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 19:15:08
ВитГо
а в даташите что написано ?
стр. 104
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 19:35:17
uwrtey
там по английски

гугл переводчик
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).
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 19:38:49
ВитГо
ну и что ?
смотрим табличку:
1. normal operation, oc1a\oc1b - disconnected
2. toggle oc1a\oc1b on Compare match
3. clear oc1a\oc1b on compare match
4. set ----\----\-----\----\----
что из этого нам подходит?
напомню, мы хотели чтобы таймер при совпадении сам менял состояние вывода oc1a......
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 19:59:52
uwrtey
теперь нужно подумать в какой режим нужно получить от таймера T1.
......
......
теперь открывай datasheet на свой контроллер и смотри как настроить T1 чтобы он работал так как я описал (подсказка: это раздел 16 bit Timer/Counter, далее подраздел 16 bit Timer/Counter Register Description (он последний в списке подразделов таймера)
я видимо где то тут тупанул и не могу понять что нужно от таймера..
я понимаю что нужно настроить tccr1a но не понимаю для чего...
напомню, мы хотели чтобы таймер при совпадении сам менял состояние вывода oc1a......
01 ? Переключить OC1A/OC1B по совпадению.
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 20:15:21
ВитГо
гм..
нужно настроить таймер,
нам нужен счет таймера Т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 мы закончили !
получился код
Код: Выделить всё
LDI temp, (1<<COM1A0) ; COM1A1 у нас равен нулю, поэтому его устанавливать не нужно
OUT TCCR1A, temp
дальше идет TCCR1B
попробуешь ?
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 20:48:04
uwrtey
конечно
Код: Выделить всё
LDI temp, (1<<COM1A0) ;
OUT TCCR1A, temp
ldi Temp,(1<<wgm12)|(1<<cs10)
out OCCR1B,Temp
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 20:55:05
ВитГо
главное не спеши, и смотри как работает КАЖДЫЙ БИТ !
в конфигурации мелочей не бывает
TCCRA1 и TCCR1B у нас готовы...
теперь TIMSK !
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 21:07:40
uwrtey
код постом выше получился...
ВитГо писал(а):нам нужен счет таймера Т1 с изменением значения внешнего выхода OC1A при совпадении значения таймера с регистром OCR1A
А для чего нам изменение значения внешнего выхода OC1A ???
к передатчику ведь подключена 12 ножка микросхемы
Код: Выделить всё
ldi Temp,0b10000000
out DDRB,Temp ; настроили порт "В"
; х0000000 - "вывод" на передатчик
; 0000хххх - "ввод" для чтения клавиатуры
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 21:10:48
ВитГо
насколько я помню решали подключать 15ую ножку - OC1A !!
видно я просмотрел при инициализации (не сверился с даташитом)
p.s. я просто тут "с головой" в своем проекте на меге32..

у меня тут артефакты при выводе видео - уже весь моСК себе вынес.. кому расскажи - не поверят что так бывает

Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 21:17:18
uwrtey
ВитГо писал(а):p.s. я просто тут "с головой" в своем проекте на меге32..

у меня тут артефакты при выводе видео - уже весь моСК себе вынес.. кому расскажи - не поверят что так бывает

я в Тебя верю!
а у тебя модель с камерой? круууто
ВитГо писал(а):видно я просмотрел при инициализации (не сверился с даташитом)
я тут писал
Код: Выделить всё
ldi Temp,0b11110000
out DDRB,Temp ;настроили порт "В"
;х0000000 - вывод на передатчик
;00Х00000 - ДЛЯ ГЕНЕРАЦИИ (НЕ ЗНАЮ ЧТО ДЕЛАТЬ - ВЫХОД ИЛИ ВХОД)
;0000хххх - для чтения клавиатуры
а Ты ответил
Код: Выделить всё
ldi Temp,0b10000000
out DDRB,Temp ;настроили порт "В"
;х0000000 - выход на передатчик
;0000хххх - вход чтения клавиатуры
вот оно чё.........
вот и датащит на тини 2313
http://www.promelec.ru/pdf/ATTINY2313_kr.pdf и вот
http://www.promelec.ru/pdf/ATTINY2313.pdf
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 21:23:50
ВитГо
чисто поржать
есть такой код обработчика прерывания:
Код: Выделить всё
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 - так что вход точный !
сейчас вот сверху появилась какая то пиксельная линия на половину кадра - тоже не понимаю что за хрень, вроде ничего так не вывожу
в общем отлаживаю глюки...
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 21:26:19
uwrtey
TIMSK стр 78 и 109
http://www.promelec.ru/pdf/ATTINY2313.pdf

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
Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Сб авг 25, 2012 21:55:51
ВитГо
ураа!
текущих своих тараканов я победил!
завтра буду делать новых....