Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Поменяй строки местами
out OCR1AL, temp
out OCR1AH, temp
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Запись в 16 разрядные регистры периферии старший-младший, чтение наоборот.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

neoneon писал(а):Доброго времени суток :) Небольшая загвоздка с таймером1 в меге8 :) Значит, установил режим СТС, разрешил прерывания таймера по совпадению с OCR1A, загрузил числа в OCR1A. По прерыванию инвертируем состояние портаB. В avrstudio4 работает нормально, в протеусе и железе - почему-то частота инвертирования порта не зависит от OCR1AH, т.е. все происходит только по младшему регистру. :dont_know:

...


1. Читаем правила обращения к 16 разрядным регистрам таймер-счетчиков.
2. загрузка начального значения OCR1A должна производится ДО установки режима работы таймера
Аватара пользователя
neoneon
Встал на лапы
Сообщения: 115
Зарегистрирован: Ср окт 22, 2014 07:39:26
Откуда: Омск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение neoneon »

Всем спасибо, заработало :))
BOB51 писал(а):2. загрузка начального значения OCR1A должна производится ДО установки режима работы таймера
Что-то может быть "не так", если, например, счетчик тактируется с большим делителем, а сразу после установки режима записать значение OCR1A?
Полный чайник.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Старт режима будет с предшествующим произвольным значением содержимого регистров.
Перенос значения в момент времени в соответствии с заданным режимом.
8)
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Для полноты картины, сбрасывать флаг(и)
Спойлер

Код: Выделить всё

;таймер
      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
      sei
Аватара пользователя
neoneon
Встал на лапы
Сообщения: 115
Зарегистрирован: Ср окт 22, 2014 07:39:26
Откуда: Омск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение neoneon »

BOB51 писал(а):Старт режима будет с предшествующим произвольным значением содержимого регистров.
Я к тому, что при больших делителях это некритично; таймер не успеет единичку отсчитать, а у нас уже записано верное значение OCR1A. :)
akl, да, точно, я не подумал о сбросе флага, благодарю :)
Полный чайник.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19043
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Starichok51 »

при такой последовательности

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 не устанавливается, поэтому и сбрасывать его не надо.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Starichok51 писал(а):...флаг в TIFR не устанавливается, поэтому и сбрасывать его не надо.
Да, флаг не устанавливается, если нет предистории. Если она есть и связана с другими режимами работы Т1, сбрасывать обязательно. Например, генерация 1 секунды без сброса флага
COMPA1_NO_TIFR.PNG
(26.57 КБ) 319 скачиваний

И генерация того же ,но со сбросом флага
COMPA1_TIFR.PNG
(28.33 КБ) 304 скачивания
Аватара пользователя
Starichok51
Модератор
Сообщения: 19043
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Starichok51 »

я имел в виду без предыстории...
а что, если в первом случае еще покрутить отладчик, разве потом не установится ровно 1с?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

А это как раз не первый, а последующий(е) периоды, так же как и на картинке со сбросом флага.
COMPA1_FLAG.ASM
(840 байт) 322 скачивания
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jetetex »

Помогите разобраться. есть вот такой код:
Спойлер;==============
; 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
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

А какая точность установки частоты 128 кГц?
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jetetex »

trofim2 писал(а):А какая точность установки частоты 128 кГц?


простите не понял вопрос.

установка фьюзов:
СпойлерИзображение
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Я спросил какое ДЕЙСТВИТЕЛЬНО значение частоты встроенного генератора 128 кГц.
Можно открыть описание:
Figure 19-52. 128 kHz Watchdog Oscillator Frequency vs. VCC;
Figure 19-53. 128 kHz Watchdog Oscillator Frequency vs. Temperature.
Изучай матчасть.
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jetetex »

trofim2 писал(а):Изучай матчасть.

...
все равно что google тебе в помощь

Если бы все знали мат часть, то зачем тогда форумы?
И да, спасибо за подсказку.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение dgrett »

А почему Вы выбрали 128 кГц? Чем неугодил internal RC,скажем, 9,6 МГц?
Я всё-всё узнAю и стану профессором.
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jetetex »

Просто на 4,8 и 9,6 МГц я не сразу нашел целых делителей так что бы считать одним регистром, так как 16ти битного регистра в 13 нету, а морочится с ними программным путем - лень.
И судя по графикам, внутренний генератор на любых частотах в ней кривоватый, и нужно пересчитывать с поправками.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Подобрать коэффициенты всегда можно (ежли немножко пошевилить мозгами :wink: ).
У 13-й предделителей море-мореванное...
8)
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jetetex »

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:
СпойлерИзображение
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Ответить

Вернуться в «AVR»