Страница 1 из 1

Atmega и Proteus

Добавлено: Вт май 30, 2017 17:56:19
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