|
Отстает секундомер, ATmega8 |
|
|
|
Oct 23 2010, 08:34
|

Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202

|
Отстает секундомер на 2 минуты за полчаса. И в протеусе и в железе примерно так же. Резонатор керамический 1 МГц, ATmega8L. Компилятор WinAvr. Что не так? Код #include <avr/io.h> #define F_CPU 1000000 #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #include <stdlib.h> #include <lcd_lib.h> #include <lcd_lib.c> #include <avr/signal.h>
unsigned int counter; // счетчик для секундомера: 488 прерываний = 1 секунда unsigned char sec,minut,hour; // сек.,мин.,часы для секундомера unsigned char c[5];
ISR(TIMER0_OVF_vect) { counter++; if (counter==488) { Lcd_Goto(0,0); Lcd_WriteData('t'); Lcd_WriteData('i'); Lcd_WriteData('m'); Lcd_WriteData('e'); Lcd_WriteData(' '); itoa(hour,c,10); if (hour<10) { Lcd_WriteData('0'); Lcd_WriteData(c[0]); } else { Lcd_WriteData(c[0]); Lcd_WriteData(c[1]); } Lcd_WriteData(':'); itoa(minut,c,10); if (minut<10) { Lcd_WriteData('0'); Lcd_WriteData(c[0]); } else { Lcd_WriteData(c[0]); Lcd_WriteData(c[1]); } Lcd_WriteData(':'); itoa(sec,c,10); if (sec<10) { Lcd_WriteData('0'); Lcd_WriteData(c[0]); } else { Lcd_WriteData(c[0]); Lcd_WriteData(c[1]); } Lcd_WriteData(' '); Lcd_WriteData(' '); Lcd_WriteData(' '); counter=0; sec++; if (sec==60) { sec=0; minut++; if (minut==60) { minut=0; hour++; } } } }
int main (void) { Lcd_Init(); DDRD = 0b00000001; sei(); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 125,000 kHz TCCR0=0x02; TCNT0=0x00; TIMSK=0b00000001; // разреш. прерыв. timer0 while (1) { } return 0; }
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Oct 23 2010, 14:41
|

Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202

|
Цитата(ILYAUL @ Oct 23 2010, 17:56)  Почему бы просто не задействоать асинхронный таймер с 32,768 Кгц если уж стоит задача СЕКУНДОМЕР На самом деле будет велокомпьютер. 32,768 в данном случае мало. Сейчас положу в холодильник, посмотрю как будет плавать от температуры, если не сильно, то программно подкорректирую.
|
|
|
|
|
Oct 23 2010, 15:48
|

Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202

|
Цитата(ILYAUL @ Oct 23 2010, 19:07)  Не понял , как так может быть , что вдруг для секундомера стало мало часового кварца ? У меня на этом таймере еще куча всего будет. В холодильнике убежали еще на +5 секунд, т.е. 20 сек за полчаса. Для меня достаточно, скорректирую программно. Кстати, думал,что контрастность дисплея (WH1602) упадет в холоде, а он так же показывает, тормозит только немного.
|
|
|
|
Сообщений в этой теме
LexRoss Отстает секундомер Oct 23 2010, 08:34 kolobok0 Цитата(LexRoss @ Oct 23 2010, 12:34) Отст... Oct 23 2010, 08:43 Палыч Цитата(LexRoss @ Oct 23 2010, 12:34) Что ... Oct 23 2010, 08:44 Vasily_ Секундомер на керамическом резонаторе? забавно... Oct 23 2010, 08:53 DpInRock И когда вынесите процедуру вывода на экран наружу,... Oct 23 2010, 08:56 LexRoss Вынес вывод на экран в main. Вроде лучше стало.
Ке... Oct 23 2010, 09:17 kolobok0 Цитата(LexRoss @ Oct 23 2010, 13:17) ..Те... Oct 23 2010, 10:01 chief_olimp Цитата(LexRoss @ Oct 23 2010, 12:17) Пита... Oct 23 2010, 13:08 DpInRock Ну, вообще-то математика доступная.
Резонатор 0.5%... Oct 23 2010, 10:00 demiurg_spb Цитата(DpInRock @ Oct 23 2010, 14:00) А п... Oct 23 2010, 11:09 Xenia Ваши часы шли бы точнее, если бы вы нормально запр... Oct 23 2010, 15:01 ukpyr сначала измените программу - в прерывании таймера ... Oct 23 2010, 15:02 ILYAUL Посчитал:
Только 16 битный таймер при прескалере... Oct 23 2010, 16:29 DpInRock Поставьте кварц - ЛЮБОЙ - и не канифольте себе моз... Oct 23 2010, 16:32 ukpyr ЦитатаНо для велосекундомера - это совершенно не к... Oct 23 2010, 16:46 DpInRock Вы тоже мозг не канифольте, а посмотрите на стабил... Oct 23 2010, 16:54 LexRoss Кварц есть только на 4Мгц, причем потребление с ни... Oct 23 2010, 17:33 Клим Цитата(LexRoss @ Oct 23 2010, 20:33) Квар... Oct 23 2010, 17:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|