Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
Поверка секундомеров
Девайс запустился,надо было CKSEL3(2,1) галочки снять.
Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
- Реклама
Кто может помочь внести изменения в прошивку ?
Требуется подключить внешний опорный генератор на 5 мегагерц.
Требуется подключить внешний опорный генератор на 5 мегагерц.
- Сообщения: 3459
- Зарегистрирован: Ср сен 27, 2006 16:18:57
"Гиацинт"?
5 МГц не очень удобная частота для "Меги". Придётся выбрать прескалер для таймера 1 так, чтобы прерывания происходили через 0,1 секунды. А внутри прерывания ввести программный счётчик на 10, чтобы отсчитывать секунды.
Ну и, соответственно, изменить значения регистров OCR1A таймера 1 и OCR2 таймера 2
5 МГц не очень удобная частота для "Меги". Придётся выбрать прескалер для таймера 1 так, чтобы прерывания происходили через 0,1 секунды. А внутри прерывания ввести программный счётчик на 10, чтобы отсчитывать секунды.
Ну и, соответственно, изменить значения регистров OCR1A таймера 1 и OCR2 таймера 2
По мне, проще осуществить тактирование контроллера прямо от опорника, переводом в режим External Clock (CKSEL3...0 0000, где 0-запрограммирован). Таймер Т1 перевести в режим CTC на счёт значения 10мсек. В прерывании сравнения OCR1A программно отсчитывать значения полупериодов 0,1 секунды и 1,0 секунды. Для примераТребуется подключить внешний опорный генератор на 5 мегагерц.
Спойлер
Код: Выделить всё
.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
А мы так всё и делали. Только частота была 8 Мгц и можно было выбрать прескалер так, чтобы в режиме CTC частота делилась нацело до 1 Гц. http://radiokot.ru/forum/viewtopic.php?p=211446#p211446akl писал(а):...проще осуществить тактирование контроллера прямо от опорника...
- Реклама
Вот именно поэтому использование предделителя ограничивает значения частот кварцев, удобных для формирования точных интервалов времени. Кстати, замечу, что в обоих текстах есть один недостаток, заключающийся в том, что реакция на сравнение происходит в следующем цикле. Поэтому, для более точного формирования в регистры сравнения нужно заносить число на единицу меньшее.
Для примера, результаты работы студии с OCR1A=8'000'000/256/2=15'625
и OCR1A=8'000'000/256/2-1=15'624
Для примера, результаты работы студии с OCR1A=8'000'000/256/2=15'625
Спойлер
Спойлер
Да,есть Гиацинт,и не один .
Я в программировании ни бум-бум,мне проще залить прошивку в МК.
Поэтому и спрашивал насчет помощи.
Я в программировании ни бум-бум,мне проще залить прошивку в МК.
Поэтому и спрашивал насчет помощи.
- Сообщения: 3459
- Зарегистрирован: Ср сен 27, 2006 16:18:57
Ну и написали бы "хочу прошивку на 5 МГц"lsv884 писал(а):Я в программировании ни бум-бум...
Я попытался "подмондить" предыдущую программу на 5 МГц от внешнего тактового генратора. Что получилось - в присоединённых файлах. Надо тестить. Может быть там ошибок ещё больше, чем в предыдущей версии.
Тем не менее, сигнал тактовой частоты с генератора подавать, как на той схеме, которую я давал раньше. Кроме заводских фьюзов, надо ещё поставить галку на CKSEL0 - чтобы работало от внешнего генератора.
На ноге номер 15 должен быть меандр частотой ровно 5 Герц.
akl - огромное спасибо за замечания по поводу работы таймера в режиме CTC. Я был тупо уверен, что сколько пропишешь в регистр сравнения, то до столько и будет считать... Оказалось, надо на единицу меньше
А Вы прикрутите к ноге номер 1 кнопку "Reset". Очень полезная кнопка...lsv884 писал(а):Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
- Вложения
-
- secmeter.hex
- (4.31 КБ) 74 скачивания
-
- secmeter.c
- (13.87 КБ) 125 скачиваний
Барсик спасибо за помощь !
Будет время,протестирую новую прошивку.
Будет время,протестирую новую прошивку.


