Часы реального времени на кварце 16 мГц
Часы реального времени на кварце 16 мГц
Есть проблема с часами реального времени.
У меня мега 8 и стоит кварц на 16 мгц.
Я весь инет перерыл и овета не нашол...
Попщем в инете пишут, что надо протикать 256 раз по 62500 тиков и получится 16 000 000 тиков.
Вопщем в инете люди пишут, что в регистре TCNTn надо выставить 62500 и поставить счетчик на 1/256 . Делаю - не получается.
Не получается потомучто каждый раз начинает считать с 65535 (кроме первого раза).
Как у людей получается не понимаю....
У меня есдинственный выход на данный момент.
Записать в регистр сравнения 62500 и далать прерывания по сравнению.(или 3035 и делать прерывание по переполнению) и когда дойдет до 256, то это и будет секунда.
Не нравится мне это тем, что каждые 62500 тик программа будет уходить в прерывание.
И еще. если в этот момент будет работать другое прерывание, то надо это вызывать.
Разрешить прерывание в прерывании.
Да и из прерывания это прерывание вызывать не охото, а надо.
Подскажите как у людей работает????
У меня мега 8 и стоит кварц на 16 мгц.
Я весь инет перерыл и овета не нашол...
Попщем в инете пишут, что надо протикать 256 раз по 62500 тиков и получится 16 000 000 тиков.
Вопщем в инете люди пишут, что в регистре TCNTn надо выставить 62500 и поставить счетчик на 1/256 . Делаю - не получается.
Не получается потомучто каждый раз начинает считать с 65535 (кроме первого раза).
Как у людей получается не понимаю....
У меня есдинственный выход на данный момент.
Записать в регистр сравнения 62500 и далать прерывания по сравнению.(или 3035 и делать прерывание по переполнению) и когда дойдет до 256, то это и будет секунда.
Не нравится мне это тем, что каждые 62500 тик программа будет уходить в прерывание.
И еще. если в этот момент будет работать другое прерывание, то надо это вызывать.
Разрешить прерывание в прерывании.
Да и из прерывания это прерывание вызывать не охото, а надо.
Подскажите как у людей работает????
- Реклама
- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: Часы реального времени на кварце 16 мГц
Люди ставят часовой кварц на 32768Amstron писал(а): Подскажите как у людей работает????
Выложите часть кода где у вас таймер настраивается.
only pure true norwegian blackx 
Re: Часы реального времени на кварце 16 мГц
такого кода нет.blackx писал(а):
Выложите часть кода где у вас таймер настраивается.
Подскажите как сделать на практике.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Часы реального времени на кварце 16 мГц
Убила эта фраза, чессловотакого кода нет.
Re: Часы реального времени на кварце 16 мГц
Давайте начнем с этого:Аlex писал(а):Убила эта фраза, чессловотакого кода нет.![]()
![]()
Спойлер
interrupt [TIM1_OVF] void timer1_ovf_isr(void) //прерывание по перепонению TC/1{ sec ++;
if (sec == 60)
{min++, sec = 0;
if (min == 60)
{hours++, min = 0;
if (hours == 24) hours = 0;
}
}
}
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Часы реального времени на кварце 16 мГц
Давайте начнём не через @опу, ага ?
blackx писал(а):Выложите часть кода где у вас таймер настраивается.
Re: Часы реального времени на кварце 16 мГц
TCCR1B=0b100; // делитель на 256
TIMSK=0b1000101; // Разрешение прерывания по переполнению таймера/счетчика 0 , 1, 2
Подскажите как настроить, что бы счет начинался каждый раз с TCNT1 = 3035 /
тогда после 256 раз сложений 62500 получится 16 000 000 тиканей???
TIMSK=0b1000101; // Разрешение прерывания по переполнению таймера/счетчика 0 , 1, 2
Подскажите как настроить, что бы счет начинался каждый раз с TCNT1 = 3035 /
тогда после 256 раз сложений 62500 получится 16 000 000 тиканей???
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Часы реального времени на кварце 16 мГц
Ну смотрите, Вы тактовую частоту таймера поделили на 256 предделителем, теперь таймер тикает с частотой 62500 Гц. Устанавливайте компаратор на это значение, и у Вас получатся прерывания каждые 1 Гц.
Re: Часы реального времени на кварце 16 мГц
Спасибо огромное.Аlex писал(а):Ну смотрите, Вы тактовую частоту таймера поделили на 256 предделителем, теперь таймер тикает с частотой 62500 Гц. Устанавливайте компаратор на это значение, и у Вас получатся прерывания каждые 1 Гц.
Вот в этом и загвоздка.
как правильно называется этот компаратор - как выставить в нем число.
Таймер у меня TCCR1B
КОНТРОЛЛЕР - MEGA8
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Часы реального времени на кварце 16 мГц
Устанавливаешь режим СТС таймера1:
; Включаем режим СТС Timer1, запускаем Timer1 делитель частоты 1:256 (001=1:1;010=1:8;011=1:64;100=1:256;101=1:1024)
TCCR1B = (0b01<<WGM12)|(0b100<<CS10);
и компаратор:
OCR1A=62500-1
; Включаем режим СТС Timer1, запускаем Timer1 делитель частоты 1:256 (001=1:1;010=1:8;011=1:64;100=1:256;101=1:1024)
TCCR1B = (0b01<<WGM12)|(0b100<<CS10);
и компаратор:
OCR1A=62500-1
Последний раз редактировалось zero648 Пн фев 18, 2013 19:52:36, всего редактировалось 1 раз.
Re: Часы реального времени на кварце 16 мГц
Если я правильно понял.., чтоб каждый раз не начинал считать с 65536, а с 62500, TCNT надо прописывать внутри обработчика прерывания таймера.Amstron писал(а): Вопщем в инете люди пишут, что в регистре TCNTn надо выставить 62500 и поставить счетчик на 1/256 . Делаю - не получается.
Не получается потомучто каждый раз начинает считать с 65535 (кроме первого раза).
Re: Часы реального времени на кварце 16 мГц
у меня делитель 256.dm211 писал(а):Если я правильно понял.., чтоб каждый раз не начинал считать с 65536, а с 62500, TCNT надо прописывать внутри обработчика прерывания таймера.Amstron писал(а): Вопщем в инете люди пишут, что в регистре TCNTn надо выставить 62500 и поставить счетчик на 1/256 . Делаю - не получается.
Не получается потомучто каждый раз начинает считать с 65535 (кроме первого раза).
от сюда следует, что обработчика и не будет.
256 * 62500 = 16 000 000 Гц.
Re: Часы реального времени на кварце 16 мГц
Ну как не будет, если он естьAmstron писал(а): от сюда следует, что обработчика и не будет.
Re: Часы реального времени на кварце 16 мГц
да, вы правы.dm211 писал(а):Ну как не будет, если он естьAmstron писал(а): от сюда следует, что обработчика и не будет.
это моя мечта... спасибо всем кто участвовал в решении моей маленькой проблемы !
Re: Часы реального времени на кварце 16 мГц
Я только хотел обьяснить это- вот так--Amstron писал(а):Подскажите как настроить, что бы счет начинался каждый раз с TCNT1 = 3035 ]
Код: Выделить всё
interrupt [TIM1_OVF] void timer1_ovf_isr(void){
TCNT1 = 3035; // и дальше тикай,если не хочешь как на примере выше
}
Re: Часы реального времени на кварце 16 мГц
я знал, что так можно сделать.dm211 писал(а):Я только хотел обьяснить это- вот так--Amstron писал(а):Подскажите как настроить, что бы счет начинался каждый раз с TCNT1 = 3035 ]Код: Выделить всё
interrupt [TIM1_OVF] void timer1_ovf_isr(void){ TCNT1 = 3035; // и дальше тикай,если не хочешь как на примере выше }
Хотел, что бы у меня прерывание было один раз в секунду.
Re: Часы реального времени на кварце 16 мГц
не будет! 256 раз как переполнится, так и будет секунда.ibiza11 писал(а):так оно и будет 1 раз в секунду)))
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Часы реального времени на кварце 16 мГц
так у вас же делитель стоит на 256.
16 МГц - тактирование микроконтроллера. делитель таймера = 256
16 МГц/256 = 62500 Гц. - тактирование таймера.
через 62500 тактов таймера пройдет ровно секунда и за это время произойдет единственное прерывание.
16 МГц - тактирование микроконтроллера. делитель таймера = 256
16 МГц/256 = 62500 Гц. - тактирование таймера.
через 62500 тактов таймера пройдет ровно секунда и за это время произойдет единственное прерывание.
Ставим плюсы: )
Re: Часы реального времени на кварце 16 мГц
таймер начинает считать с 3035. далее , за 1 секунду таймер переполнется 256.ibiza11 писал(а):так у вас же делитель стоит на 256.
16 МГц - тактирование микроконтроллера. делитель таймера = 256
16 МГц/256 = 62500 Гц. - тактирование таймера.
через 62500 тактов таймера пройдет ровно секунда и за это время произойдет единственное прерывание.
каждое переполнение будет иметь прерывание!!!
КТО ТУТ ПРАВ????????


