Девайс запустился,надо было CKSEL3(2,1) галочки снять.
Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
Поверка секундомеров
-
lsv884
- Открыл глаза
- Сообщения: 76
- Зарегистрирован: Чт сен 24, 2009 18:28:40
- Откуда: severomorsk
- Контактная информация:
Re: Поверка секундомеров
Кто может помочь внести изменения в прошивку ?
Требуется подключить внешний опорный генератор на 5 мегагерц.
Требуется подключить внешний опорный генератор на 5 мегагерц.
Re: Поверка секундомеров
"Гиацинт"?
5 МГц не очень удобная частота для "Меги". Придётся выбрать прескалер для таймера 1 так, чтобы прерывания происходили через 0,1 секунды. А внутри прерывания ввести программный счётчик на 10, чтобы отсчитывать секунды.
Ну и, соответственно, изменить значения регистров OCR1A таймера 1 и OCR2 таймера 2
5 МГц не очень удобная частота для "Меги". Придётся выбрать прескалер для таймера 1 так, чтобы прерывания происходили через 0,1 секунды. А внутри прерывания ввести программный счётчик на 10, чтобы отсчитывать секунды.
Ну и, соответственно, изменить значения регистров OCR1A таймера 1 и OCR2 таймера 2
Re: Поверка секундомеров
Требуется подключить внешний опорный генератор на 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
Re: Поверка секундомеров
А мы так всё и делали. Только частота была 8 Мгц и можно было выбрать прескалер так, чтобы в режиме CTC частота делилась нацело до 1 Гц. viewtopic.php?p=211446#p211446akl писал(а):...проще осуществить тактирование контроллера прямо от опорника...
Re: Поверка секундомеров
Вот именно поэтому использование предделителя ограничивает значения частот кварцев, удобных для формирования точных интервалов времени. Кстати, замечу, что в обоих текстах есть один недостаток, заключающийся в том, что реакция на сравнение происходит в следующем цикле. Поэтому, для более точного формирования в регистры сравнения нужно заносить число на единицу меньшее.
Для примера, результаты работы студии с 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
Спойлер
и OCR1A=8'000'000/256/2-1=15'624
Спойлер
-
lsv884
- Открыл глаза
- Сообщения: 76
- Зарегистрирован: Чт сен 24, 2009 18:28:40
- Откуда: severomorsk
- Контактная информация:
Re: Поверка секундомеров
Да,есть Гиацинт,и не один .
Я в программировании ни бум-бум,мне проще залить прошивку в МК.
Поэтому и спрашивал насчет помощи.
Я в программировании ни бум-бум,мне проще залить прошивку в МК.
Поэтому и спрашивал насчет помощи.
Re: Поверка секундомеров
Ну и написали бы "хочу прошивку на 5 МГц"lsv884 писал(а):Я в программировании ни бум-бум...
Я попытался "подмондить" предыдущую программу на 5 МГц от внешнего тактового генратора. Что получилось - в присоединённых файлах. Надо тестить. Может быть там ошибок ещё больше, чем в предыдущей версии.
Тем не менее, сигнал тактовой частоты с генератора подавать, как на той схеме, которую я давал раньше. Кроме заводских фьюзов, надо ещё поставить галку на CKSEL0 - чтобы работало от внешнего генератора.
На ноге номер 15 должен быть меандр частотой ровно 5 Герц.
akl - огромное спасибо за замечания по поводу работы таймера в режиме CTC. Я был тупо уверен, что сколько пропишешь в регистр сравнения, то до столько и будет считать... Оказалось, надо на единицу меньше
А Вы прикрутите к ноге номер 1 кнопку "Reset". Очень полезная кнопка...lsv884 писал(а):Единственный минус программы, после окончании надо снимать питание для нового пуска устройства.
- Вложения
-
- secmeter.hex
- (4.31 КБ) 72 скачивания
-
- secmeter.c
- (13.87 КБ) 124 скачивания
-
lsv884
- Открыл глаза
- Сообщения: 76
- Зарегистрирован: Чт сен 24, 2009 18:28:40
- Откуда: severomorsk
- Контактная информация:
Re: Поверка секундомеров
Барсик спасибо за помощь !
Будет время,протестирую новую прошивку.
Будет время,протестирую новую прошивку.