roboforum.ru

Технический форум по робототехнике.

Не понятный глюк

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Не понятный глюк

Сообщение Олег » 14 янв 2006, 23:47

Вот кусок программы, микроконтроллер ATmega8, частота кварца 16 Мгц.

.include "m8def.inc"

;r31 - temp

rjmp init

.org $09
rjmp TIMER0_OVF

;конфигурирование
init:

;инициализация стека
ldi r31,HIGH(RAMEND)
out SPH,r31        
ldi r31,LOW(RAMEND)
out SPL,r31

;конфигурирование таймера 100 мс
ldi r31, (1<<TOIE0)  ;разрешение прерывание
out TIMSK, r31       ;по переполнению счетчика
ldi r31, $64     ;Устанавливаем переполнение
out TCNT0, r31   ;каждые 10 ms
ldi r31, (1<<CS02) | (1<<CS00) ; CK/1024 = 15625 Hz = 0,064 ms
out TCCR0, r31    

sei  ;разрешение глобальных прерываний

ldi r30, 10    ;количество переполнений

;основная часть
start:
rjmp label


TIMER_100ms:

nop

TIMER0_OVF:
dec r30
breq TIMER_100ms

ldi r31, 82        ;дополнительная задержка
TIMER0_OVF_1:
dec r31
brne TIMER0_OVF_1

;конфигурирование таймера 100 мс
ldi r31, (1<<TOIE0)  ;разрешение прерывание
out TIMSK, r31       ;по переполнению счетчика
ldi r31, $64     ;Устанавливаем переполнение
out TCNT0, r31   ;каждые 10 ms
ldi r31, (1<<CS02) | (1<<CS00) ; CK/1024 = 15625 Hz = 0,064 ms
out TCCR0, r31    

reti


На базе TIMER_COUNTER_0 выполнена задержка 100 мс, т.к. максимум переполнения счетчика могут

происходить через каждые 16 мс, время переполнения поставлено 10 мс, и переполнения

выполняются 10 раз.(TIMER_COUNTER_1 нужен для других целей, поставить частоту кварца меньше

нельзя).
Эмулирую все это дело на AVR STUDIO 4.12 (пробовал 4.11, 4.05, 3.56), первое переполнение

происходить как надо через 10 мс, а последующие через 9,98 мс.
Не знаю что это, глюк AVR STUDIO или моей программы?
Олег
 
Сообщения: 23
Зарегистрирован: 25 сен 2005, 20:26

Сообщение -= Александр =- » 15 янв 2006, 00:36

Я в ассемблере не силен, но вопрос такой:
Ты по прерыванию таймера сначала кладешь в него новое значение или сначала прибавляешь счетчик? Попробуй поменять эти операции местами...  :roll:
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Сообщение avr123.nm.ru » 15 янв 2006, 02:48

думаю это глюк впрограмме - отличается что-то при первом промежутке и последующих, нет единообразия - поищи.

ИМХО: лучше эмулировать в VMLAB а писать прогу и компилировать в CodeVisionAVR
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron