несоответствие времени в avr studio и реале

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Razor
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт июл 03, 2008 13:09:52
Контактная информация:

несоответствие времени в avr studio и реале

Сообщение Razor »

Постараюсь покороче:
ATMega16 + код (без таблицы прерываний). Кварц 10Мгц
По идее (что и показывает студия) портС должен моргать в режиме SOS с периодом точки - 1 сек,
тире - 2 сек, пауза между ними - 2 сек что задается в массиве и умножением значения задержки на 98. В реале же порт моргает гораздо чаще. Переключения порта еле заметны глазом. Подскажите пожалуйста в чем я ошибся.

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

.include "m16def.inc"

.def temp=R16
.def time=R20
.def stage=R21
.def sign=R17

.DSEG
.CSEG

         .ORG $000        ; (RESET)
         RJMP   Reset
   
Reset:
;èíèöèàëèçèðóåì ñòåê
LDI R16, low(RAMEND)
out SPL, R16
LDI R16, high(RAMEND)
out SPH, R16

;nastroyka portov
ldi R16, 0b11111111
out DDRC, R16
;out DDRA, R16
;out DDRB, R16

;ïåðâè÷íûé íàñòðîéêà è çàïóñê òàéìåðà

ldi ZH, high(array*2)
ldi ZL, low(array*2)

lpm

out OCR1AL, R0

ldi temp, 0
out TCNT1H, temp
out TCNT1L, temp

ldi temp, 1<<2|1<<0
;ldi temp, 1<<0
out TCCR1B, temp
ldi temp, 1<<4
out TIMSK, temp

sei

ldi temp, 1
add ZL, temp
ldi temp, 0
adc ZH, temp
lpm
mov sign, R0

;îáíóëÿåì âðåìÿ ÷òîáû ïðîãðàììà çàãðóçèëà ñëåäóþùåå çíà÷åíèå âðåìåíè
ldi time, 0

ldi stage, 2



ldi R16, 0b11111111
out PORTA, R16
ldi R16, 0b00000000
out PORTB, R16


Main:
rcall tststage
cpi sign, 1
brne offsignal
ldi R16, 0b11111111
out PORTC, R16
rjmp oute

offsignal:
ldi R16, 0b00000000
out PORTC, R16

oute:

rjmp Main

array:
.db 100, 1, 200, 0
.db 100, 1, 200, 0
.db 100, 1, 200, 0
.db 200, 1, 200, 0
.db 200, 1, 200, 0
.db 200, 1, 200, 0
.db 100, 1, 200, 0
.db 100, 1, 200, 0
.db 100, 1, 200, 0



;*********************************************************************
;ïîäïðîãðàììû
tststage:
push temp
cpi time, 0
brne out1
cpi stage, 36
brne okstage
ldi stage, 0
okstage:
ldi ZH, high(array*2)
ldi ZL, low(array*2)
mov temp, stage
add ZL, temp
ldi temp, 0
adc ZH, temp
lpm

mov time, R0
ldi temp, 1
add ZL, temp
ldi temp, 0
adc ZH, temp
lpm
mov sign, R0

ldi temp, 2
add stage, temp
out1:
pop temp
ret

;********************************************************************
;ïðåðûâàíèÿ

tim1a:
push temp
push R1
push R0
ldi temp, 0
out TCNT1H, temp
out TCNT1L, temp
ldi temp, 98
mul time, temp
out OCR1AL, R0
out OCR1AH, R1
ldi time, 0
pop R0
pop R1
pop temp
reti
не выдрючивайся, да не выдрючен будешь ...
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: несоответствие времени в avr studio и реале

Сообщение ChipKiller »

Razor писал(а):Подскажите пожалуйста в чем я ошибся.
.. либо в коде, либо в настройках симулятора Аvr Studio - все должно работать нормально.
s64
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пн окт 18, 2010 21:18:21

Re: несоответствие времени в avr studio и реале

Сообщение s64 »

студия достаточно точно симулирует временные интервалы, скорее всего проблема в настройках.
Аватара пользователя
Razor
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт июл 03, 2008 13:09:52
Контактная информация:

Re: несоответствие времени в avr studio и реале

Сообщение Razor »

А по коду что скажете? Я правильно настроил таймер? По идее при максимальном значении в регистре сравнения таймера пауза должна быть около 6 секунд. На деле светодиод мигает на частоте 10-20 герц.
не выдрючивайся, да не выдрючен будешь ...
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: несоответствие времени в avr studio и реале

Сообщение ChipKiller »

Razor писал(а):По идее (что и показывает студия) портС должен моргать в режиме SOS...
... не знаю, что там "показывает студия", но программа будет делать именно то, что написано Вами. В чем могут быть ошибки - уже писал. Не обладая возможностью телепата - не могу знать, правильно ли заданы параметры симулятора. Что касается кода - то
Razor писал(а):

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

;

;********************************************************************
;ïðåðûâàíèÿ

tim1a:
push temp
push R1
push R0
ldi temp, 0
out TCNT1H, temp
out TCNT1L, temp
ldi temp, 98
mul time, temp
out OCR1AL, R0
out OCR1AH, R1
ldi time, 0
pop R0
pop R1
pop temp
reti
... никогда не получит управления, потому что
Razor писал(а):

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

.CSEG

         .ORG $000        ; (RESET)
         RJMP   Reset
   
Reset:
... нет RJMP tim1a
Аватара пользователя
Razor
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт июл 03, 2008 13:09:52
Контактная информация:

Re: несоответствие времени в avr studio и реале

Сообщение Razor »

... никогда не получит управления, потому что

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

Re: несоответствие времени в avr studio и реале

Сообщение akl »

Может быть из-за этого? Ну и, естественно, JTAG должен быть отключен.

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

;*************************************************
   OUT OCR1AH, R1
   OUT OCR1AL, R0
;out OCR1AL, R0
;out OCR1AH, R1
;*************************************************
Аватара пользователя
Razor
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт июл 03, 2008 13:09:52
Контактная информация:

Re: несоответствие времени в avr studio и реале

Сообщение Razor »

akl :-))))
Только что сам нашел это и хотел написать что проблема решена.

Проблема была именно из за этого. Так как протеус показывал результаты схожие с реалом начал отслеживать различия между протеусом и студией пошагово. Оказалось что если сначала загружать данные в OCR1AL то число в OCR1AH почему то не загружается.

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

Re: несоответствие времени в avr studio и реале

Сообщение akl »

Razor писал(а):это баг или фича и почему студия этого не учитывает?
Порядок записи и чтения 16-разрядных регистров объявлен DS на AVR
To do a 16-bit write, the High byte must be written before the Low byte. For a 16-bit read, the Low byte must be read before the High byte.
Почему студия не учитывает этот факт. Фиг его знает.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»