Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Поменяй строки местами
out OCR1AL, temp
out OCR1AH, temp
out OCR1AL, temp
out OCR1AH, temp
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Запись в 16 разрядные регистры периферии старший-младший, чтение наоборот.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
neoneon писал(а):Доброго времени сутокНебольшая загвоздка с таймером1 в меге8
Значит, установил режим СТС, разрешил прерывания таймера по совпадению с OCR1A, загрузил числа в OCR1A. По прерыванию инвертируем состояние портаB. В avrstudio4 работает нормально, в протеусе и железе - почему-то частота инвертирования порта не зависит от OCR1AH, т.е. все происходит только по младшему регистру.
![]()
...
1. Читаем правила обращения к 16 разрядным регистрам таймер-счетчиков.
2. загрузка начального значения OCR1A должна производится ДО установки режима работы таймера
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем спасибо, заработало
Что-то может быть "не так", если, например, счетчик тактируется с большим делителем, а сразу после установки режима записать значение OCR1A?BOB51 писал(а):2. загрузка начального значения OCR1A должна производится ДО установки режима работы таймера
Полный чайник.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Старт режима будет с предшествующим произвольным значением содержимого регистров.
Перенос значения в момент времени в соответствии с заданным режимом.

Перенос значения в момент времени в соответствии с заданным режимом.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для полноты картины, сбрасывать флаг(и)
Спойлер
Код: Выделить всё
;таймер
ser temp ; устанавливаем числа, с которыми будет сравниваться таймер
out OCR1AH, temp
out OCR1AL, temp
; out OCR1AH, temp
clr temp
out TCCR1A, temp ; ОС1А отключен
ldi temp, (1<<OCIE1A)
out TIMSK, temp ; разрешаем прерывания по совпадению
out TIFR, temp ; Cброс флага OCF1A
ldi temp, 0b00001001
out TCCR1B, temp ; режим СТС :1
seiRe: Ассемблер (ASM) для AVR в вопросах и ответах
Я к тому, что при больших делителях это некритично; таймер не успеет единичку отсчитать, а у нас уже записано верное значение OCR1A.BOB51 писал(а):Старт режима будет с предшествующим произвольным значением содержимого регистров.
akl, да, точно, я не подумал о сбросе флага, благодарю
Полный чайник.
- Starichok51
- Модератор
- Сообщения: 19044
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
при такой последовательности
ldi R16, 159
out OCR1AH, ZH ; ZH (R31) = 0
out OCR1AL, R16
ldi R16, 0b00000000 ; таймер1, Normal port operation, OC1A/OC1B disconnected
out TCCR1A, R16
ldi R16, 0b00001010 ; таймер1, Compare Match, предделитель 8
out TCCR1B, R16
флаг в TIFR не устанавливается, поэтому и сбрасывать его не надо.
ldi R16, 159
out OCR1AH, ZH ; ZH (R31) = 0
out OCR1AL, R16
ldi R16, 0b00000000 ; таймер1, Normal port operation, OC1A/OC1B disconnected
out TCCR1A, R16
ldi R16, 0b00001010 ; таймер1, Compare Match, предделитель 8
out TCCR1B, R16
флаг в TIFR не устанавливается, поэтому и сбрасывать его не надо.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, флаг не устанавливается, если нет предистории. Если она есть и связана с другими режимами работы Т1, сбрасывать обязательно. Например, генерация 1 секунды без сброса флагаStarichok51 писал(а):...флаг в TIFR не устанавливается, поэтому и сбрасывать его не надо.
И генерация того же ,но со сбросом флага
- Starichok51
- Модератор
- Сообщения: 19044
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
я имел в виду без предыстории...
а что, если в первом случае еще покрутить отладчик, разве потом не установится ровно 1с?
а что, если в первом случае еще покрутить отладчик, разве потом не установится ровно 1с?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А это как раз не первый, а последующий(е) периоды, так же как и на картинке со сбросом флага.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Помогите разобраться. есть вот такой код:
; Main.asm file generated by New Project wizard
;
; Created: Пн фев 27 2017
; Processor: ATtiny13
; Compiler: AVRASM (Proteus)
;==============
; предделители и частоты
; рабочая частота 128 кГц
; делитель на 8 выкл.
; предделитель 1024
; сброс при совпадении
; регистр сравнения = 125-1
; результат = прерывание 1 сек
;
;==============
; DEFINITIONS
;==============
;==============
; VARIABLES
;==============
.def Temp=r20
.def Temp1=r21
.def Second=r22
.def Minutes=r23
;==============
; вектора прерываний
;==============
.cseg
.org 0
rjmp Reset
.org 6
rjmp T0_COMPA ;Timer/Counter0 Compare Match A
rjmp Start
Reset: ldi Temp,0b11111111
out DDRB,Temp
ldi temp, low(RAMEND) ; инициализацыя стека
out SPL,temp
ldi Temp,0
out TCNT0,Temp ;обнуляем счетный регистр
ldi Temp,124 ;регистр сравнения
out OCR0A,Temp
ldi Temp,0b00000100 ;разрешить прерывание по совпадению таймера/счетчика 0
out TIMSK0,Temp
ldi Temp,0b00000100 ;Флаг наступления прерывания по совпадению
out TIFR0,Temp
ldi Temp,0b00000101 ;тактовый сигнал = CK/1024
out TCCR0B,Temp
ldi Temp,0b00000010 ;
out TCCR0A,Temp
ldi Temp1,0
clr Second
clr Minutes
sei
rjmp Start
T0_COMPA:
inc Second
cpi Second,60
brne Exit_compa
ldi Second,0
inc Minutes
Exit_compa:
reti
;==============
Start: out PortB,Minutes
rjmp Start
По идее на 5й ноге должен изменятся сигнал каждую минуту (60 сек), но в реальности это происходит каждые 69 сек. Proteus 8,5 моделирует красиво, прошитый контроллер считает криво.
программа прошивки: progisp 1,7
програматор: USBasp
Спойлер
;==============; Main.asm file generated by New Project wizard
;
; Created: Пн фев 27 2017
; Processor: ATtiny13
; Compiler: AVRASM (Proteus)
;==============
; предделители и частоты
; рабочая частота 128 кГц
; делитель на 8 выкл.
; предделитель 1024
; сброс при совпадении
; регистр сравнения = 125-1
; результат = прерывание 1 сек
;
;==============
; DEFINITIONS
;==============
;==============
; VARIABLES
;==============
.def Temp=r20
.def Temp1=r21
.def Second=r22
.def Minutes=r23
;==============
; вектора прерываний
;==============
.cseg
.org 0
rjmp Reset
.org 6
rjmp T0_COMPA ;Timer/Counter0 Compare Match A
rjmp Start
Reset: ldi Temp,0b11111111
out DDRB,Temp
ldi temp, low(RAMEND) ; инициализацыя стека
out SPL,temp
ldi Temp,0
out TCNT0,Temp ;обнуляем счетный регистр
ldi Temp,124 ;регистр сравнения
out OCR0A,Temp
ldi Temp,0b00000100 ;разрешить прерывание по совпадению таймера/счетчика 0
out TIMSK0,Temp
ldi Temp,0b00000100 ;Флаг наступления прерывания по совпадению
out TIFR0,Temp
ldi Temp,0b00000101 ;тактовый сигнал = CK/1024
out TCCR0B,Temp
ldi Temp,0b00000010 ;
out TCCR0A,Temp
ldi Temp1,0
clr Second
clr Minutes
sei
rjmp Start
T0_COMPA:
inc Second
cpi Second,60
brne Exit_compa
ldi Second,0
inc Minutes
Exit_compa:
reti
;==============
Start: out PortB,Minutes
rjmp Start
По идее на 5й ноге должен изменятся сигнал каждую минуту (60 сек), но в реальности это происходит каждые 69 сек. Proteus 8,5 моделирует красиво, прошитый контроллер считает криво.
программа прошивки: progisp 1,7
програматор: USBasp
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А какая точность установки частоты 128 кГц?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
trofim2 писал(а):А какая точность установки частоты 128 кГц?
простите не понял вопрос.
установка фьюзов:
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я спросил какое ДЕЙСТВИТЕЛЬНО значение частоты встроенного генератора 128 кГц.
Можно открыть описание:
Figure 19-52. 128 kHz Watchdog Oscillator Frequency vs. VCC;
Figure 19-53. 128 kHz Watchdog Oscillator Frequency vs. Temperature.
Изучай матчасть.
Можно открыть описание:
Figure 19-52. 128 kHz Watchdog Oscillator Frequency vs. VCC;
Figure 19-53. 128 kHz Watchdog Oscillator Frequency vs. Temperature.
Изучай матчасть.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
trofim2 писал(а):Изучай матчасть.
...
все равно что google тебе в помощь
Если бы все знали мат часть, то зачем тогда форумы?
И да, спасибо за подсказку.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А почему Вы выбрали 128 кГц? Чем неугодил internal RC,скажем, 9,6 МГц?
Я всё-всё узнAю и стану профессором.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Просто на 4,8 и 9,6 МГц я не сразу нашел целых делителей так что бы считать одним регистром, так как 16ти битного регистра в 13 нету, а морочится с ними программным путем - лень.
И судя по графикам, внутренний генератор на любых частотах в ней кривоватый, и нужно пересчитывать с поправками.
И судя по графикам, внутренний генератор на любых частотах в ней кривоватый, и нужно пересчитывать с поправками.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Подобрать коэффициенты всегда можно (ежли немножко пошевилить мозгами
).
У 13-й предделителей море-мореванное...

У 13-й предделителей море-мореванное...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
9.6 МГц / 8 / 1024 = 1171,875
9,6 МГц / 1024 = 9375
4,8 МГц / 8 / 1024 = 585,9375
4,8 МГц / 1024 = 4687
128 Кгц / 8 /1024 = 15,625
128 КГц / 8 / 256 = 65,2
128 Кгц / 8 / 64 = 250
128 Кгц / 1024 = 125
128 Кгц / 256 = 500
какой из вариантов можно посчитать одним регистром и без десятичной части??
А так действительно вариантов море, а точнее 30:
9,6 МГц / 1024 = 9375
4,8 МГц / 8 / 1024 = 585,9375
4,8 МГц / 1024 = 4687
128 Кгц / 8 /1024 = 15,625
128 КГц / 8 / 256 = 65,2
128 Кгц / 8 / 64 = 250
128 Кгц / 1024 = 125
128 Кгц / 256 = 500
какой из вариантов можно посчитать одним регистром и без десятичной части??
А так действительно вариантов море, а точнее 30:
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.