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

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

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

Сообщение lsv884 »

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

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

Сообщение lsv884 »

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

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

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

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

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

Сообщение 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

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

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

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

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

Сообщение 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
lsv884
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт сен 24, 2009 18:28:40
Откуда: severomorsk
Контактная информация:

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

Сообщение lsv884 »

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

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

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

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

akl - огромное спасибо за замечания по поводу работы таймера в режиме CTC. Я был тупо уверен, что сколько пропишешь в регистр сравнения, то до столько и будет считать... Оказалось, надо на единицу меньше :oops:

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

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

Сообщение lsv884 »

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

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