Поверка секундомеров

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт сен 24, 2009 18:28:40
Откуда: severomorsk

Сообщение lsv884 »

Девайс запустился,надо было CKSEL3(2,1) галочки снять.
Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
Контактная информация:
Реклама
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт сен 24, 2009 18:28:40
Откуда: severomorsk

Сообщение lsv884 »

Кто может помочь внести изменения в прошивку ?
Требуется подключить внешний опорный генератор на 5 мегагерц.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

"Гиацинт"?
5 МГц не очень удобная частота для "Меги". Придётся выбрать прескалер для таймера 1 так, чтобы прерывания происходили через 0,1 секунды. А внутри прерывания ввести программный счётчик на 10, чтобы отсчитывать секунды.
Ну и, соответственно, изменить значения регистров OCR1A таймера 1 и OCR2 таймера 2
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Требуется подключить внешний опорный генератор на 5 мегагерц.
По мне, проще осуществить тактирование контроллера прямо от опорника, переводом в режим External Clock (CKSEL3...0 0000, где 0-запрограммирован). Таймер Т1 перевести в режим CTC на счёт значения 10мсек. В прерывании сравнения OCR1A программно отсчитывать значения полупериодов 0,1 секунды и 1,0 секунды. Для примера
Спойлер

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

	.INCLUDE "m8def.inc"

.equ	Fo=5000000

.CSEG

.ORG	$0000

	RJMP	START

.ORG	$0006
	IN	R0,PORTB
SET_0_5_SEK:
	DEC	YH
	BRNE	SET_0_05_SEK
	LDI	YH,100/2
	EOR	R0,R18
	OUT	PORTB,R0
	RJMP	TIME_OUT
SET_0_05_SEK:
	DEC	YL
	BRNE	TIME_OUT
	LDI	YL,10/2
	EOR	R0,R17
TIME_OUT:
	OUT	PORTB,R0
	RETI

START:
	LDI	XH,HIGH(RAMEND)
	OUT	SPH,XH
	LDI	XL,LOW(RAMEND)
	OUT	SPL,XL

	LDI	R18,0b00011000
	OUT	DDRB,R18
	LDI	R17,0b00001000
	OUT	PORTB,R17		; начальный вывод 10

	LDI	R22,1<<SE
	OUT	MCUCR,R22		; режим SLEEP IDLE

	LDI	R22,1<<OCIE1A
	OUT	TIMSK,R22
	OUT	TIFR,R22		; разрешение прерывания по сравнению с OCR1A

	LDI	XH,HIGH(Fo/100-1)
	LDI	XL,LOW(Fo/100-1)
	OUT	OCR1AH,XH	
	OUT	OCR1AL,XL		; значение сравнения 5000000/100=50000 == 10 мсек

	LDI	YH,100/2	; половина периода 1,0 секунда
	LDI	YL,10/2		; половина периода 0,1 секунда

	LDI	R20,1<<WGM12|1<<CS10	; F/1 CTC
	OUT	TCCR1B,R20

	SEI
WAIT_TEST:
	SLEEP
	NOP
	RJMP	WAIT_TEST
.EXIT
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

akl писал(а):...проще осуществить тактирование контроллера прямо от опорника...
А мы так всё и делали. Только частота была 8 Мгц и можно было выбрать прескалер так, чтобы в режиме CTC частота делилась нацело до 1 Гц. http://radiokot.ru/forum/viewtopic.php?p=211446#p211446
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Вот именно поэтому использование предделителя ограничивает значения частот кварцев, удобных для формирования точных интервалов времени. Кстати, замечу, что в обоих текстах есть один недостаток, заключающийся в том, что реакция на сравнение происходит в следующем цикле. Поэтому, для более точного формирования в регистры сравнения нужно заносить число на единицу меньшее.
Для примера, результаты работы студии с OCR1A=8'000'000/256/2=15'625
СпойлерИзображение
и OCR1A=8'000'000/256/2-1=15'624
СпойлерИзображение
OCR1A_256.GIF
OCR1A_256_MINUS1.GIF
Реклама
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт сен 24, 2009 18:28:40
Откуда: severomorsk

Сообщение lsv884 »

Да,есть Гиацинт,и не один .
Я в программировании ни бум-бум,мне проще залить прошивку в МК.
Поэтому и спрашивал насчет помощи.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

lsv884 писал(а):Я в программировании ни бум-бум...
Ну и написали бы "хочу прошивку на 5 МГц" :)
Я попытался "подмондить" предыдущую программу на 5 МГц от внешнего тактового генратора. Что получилось - в присоединённых файлах. Надо тестить. Может быть там ошибок ещё больше, чем в предыдущей версии. :)
Тем не менее, сигнал тактовой частоты с генератора подавать, как на той схеме, которую я давал раньше. Кроме заводских фьюзов, надо ещё поставить галку на CKSEL0 - чтобы работало от внешнего генератора.
На ноге номер 15 должен быть меандр частотой ровно 5 Герц.

akl - огромное спасибо за замечания по поводу работы таймера в режиме CTC. Я был тупо уверен, что сколько пропишешь в регистр сравнения, то до столько и будет считать... Оказалось, надо на единицу меньше :oops:
lsv884 писал(а):Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
А Вы прикрутите к ноге номер 1 кнопку "Reset". Очень полезная кнопка...
Вложения
secmeter.hex
(4.31 КБ) 74 скачивания
secmeter.c
(13.87 КБ) 125 скачиваний
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт сен 24, 2009 18:28:40
Откуда: severomorsk

Сообщение lsv884 »

Барсик спасибо за помощь !
Будет время,протестирую новую прошивку.
Контактная информация:
Ответить

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