Atmega и Proteus

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вс ноя 18, 2012 12:17:36

Сообщение Avatoro »

Всем привет. В общем есть простая мигалка по переполнению нулевого таймера. ATmega328. В АВР студии все прекрасно работает, в протеусе-0 реакции. Либо протеус тупит, либо я не настроил в нем что-то, так как собрал в железе и прошил - все работает замечательно. Файлы исходника, прошивки и протеуса прилагаю.

Добавлено after 4 hours 41 minute 41 second:
Все разобрался. Я неправильно сбрасывал счетчик предделителя. Перечитал Евстифеева. Для обнуления предделителя достаточно выставить бит PSRSYNC в регистре GTCCR, обнуляется он сам на след. такте, а я выставлял бит TSM, который хоть и обнуляется сам, но его все равно нужно в 0 выставлять для запуска. Для останова нужно выставить ОБА!!! бита в 1, а для запуска выставить их опять в 0. Прикол в другом, почему это в железа работало? странно. но нужно это запомнить.

так что инициализацию можно сделать так:

; настройка таймера Т0
; инизиализация предделителя на 1024
ldi r16, 0b00000101
out TCCR0B, r16
;разрешаем превывания по переполнению таймера
ldi r16, 1<<TOIE0
sts TIMSK0, r16
; обнуляем предделитель и разрешаем глобально прерывания
ldi r16, 1<<PSRSYNC
out GTCCR, r16
sei

clr r16
Вложения
Timer.zip
(18.65 КБ) 193 скачивания
P_5.hex
(231 байт) 343 скачивания
P_5.asm
(1.4 КБ) 409 скачиваний
Реклама
Ответить

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