Разбираюсь с таймером

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Аватара пользователя
Сообщения: 16
Зарегистрирован: Сб авг 10, 2013 08:45:59

Сообщение avr_proger »

Мряу коты и кошечки !!!

Хочу подёргать вывод с частотой 5 Гц. attiny2313a тактируется от кварца на 4 МГц. Использую 16 битный таймер 1. Тактирую таймер от предделителя на 256. Итого, таймер считает каждый 15625 такт, что равно 0,000064 с. 5 Гц это 0,2 с, следовательно, для 5Гц таймер должет считать до 0,2/0,000064 = 3125 = 0xC35. Пишу код:
Спойлер

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

.include "tn2313adef.inc"

.def	tmp = r16
.def	tmp1 = r17 ;здесь будет состояние порта B
	
	.org	0

	rjmp	init
	reti
	reti
	reti
	rjmp	timer1
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti

init:
	; отсюда будем считать порт В
	ldi	tmp1, 0xff

	; Все порты на выход с подтяжкой
	ldi	temp, 0xff
	out	DDRD, temp
	out	DDRB, temp
	out	PORTD, temp
	out	PORTB, temp

	;предделитель на 256, обнуление при совпадении с OCR1A
	ldi	temp, 0b00001100
	out	TCCR1B, temp

	; считаем до 3125 потом сбрасываем счётчик и уходим на прерывание
	ldi	temp, 0xC
	out	OCR1AH, temp
	ldi	temp, 0x35
	out	OCR1AL, temp

	;разрешаем прерывание при совпадении счетчика с содержимым OCR1A
	ldi	temp, 0b01000000
	out	TIMSK, temp

	sei

main:
	rjmp	main

timer1:
	inc tmp1
	out	PORTB, tmp1
	reti
В итоге имею на 0 ножке порта В 3 Гц вместо 5 Гц, что я делаю не так?
Реклама
Родился
Аватара пользователя
Сообщения: 16
Зарегистрирован: Сб авг 10, 2013 08:45:59

Сообщение avr_proger »

Что-то меня заносит. Почти неделю понять не мог.
В общем вот:
Изображение
Состояние ножки 0 порта В действительно меняется с частотой 5 Гц, но период сигнала, допустим с 0 до 0 равен 400 мс, т.е. 2,5 Гц мой мультиметр (VICTOR VC9808+) посчитал за 3 Гц, честь ему и хвала. Когда ж я задушу жабу на осциллограф...
Реклама
Ответить

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