Внутренние часы atmega168

Обсуждаем контроллеры компании Atmel.
Ответить
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Сообщение kotriks »

Ребята помогите реализовать внутренние часы реального времени, а то у меня повсей видимости они отстают сделан просто

Код: Выделить всё

ISR(TIMER0_OVF_vect) {

time++;

   if (time==488)     {asm("wdr");time=0;seconds++;}
   if (seconds==60)   {seconds=0; minutes++;  }
   if (minutes==60)   {minutes=0; hours++;    }
 }

TCCR0B=0x02;
TIMSK0=0x01;
может кварц повесить 32768 кГц?
только не знаю как регистры и формулу прописать помогите пожалуйста.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Часовой кварц 32768Гц.

Код: Выделить всё

/*---------------------------------------------- 
RTC IRQ (1 sec)
------------------------------------------------*/
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
        OCR2A = 0;//sync process
        rtc_irq = TRUE;//было прерывание от секунд
        
        /*== time correction ==*/
        if( rtc_corr_cnt < 0 )//negative correction
                {
                ++rtc_corr_cnt;
                return;
                }                 
        if( ( rtc_sec == 0 ) && ( rtc_min == 0 ) && ( rtc_hour == 0 )  )//коррекция запускается в полночь
                {
                if( rtc_corr > 0 )//positive correction
                        {
                        rtc_sec = rtc_corr;//значение коррекции (+/- секунд)
                        return;
                        }
                else
                        {
                        rtc_corr_cnt = rtc_corr;
                        }
                }
        /*====*/
        ++rtc_sec;        
        if( rtc_sec>59 )
                {
                rtc_sec = 0;
                ++rtc_min;
                if( rtc_min>59 )
                        {
                        rtc_min = 0;
                        ++rtc_hour;
                        if( rtc_hour>23 )
                                rtc_hour = 0;
                        };
                };              
}
инициализаця таймера:

Код: Выделить всё

// Timer/Counter 2 initialization
// Clock source: Crystal on TOSC1 pin
// Clock value: PCK2/128
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x20;
TCCR2A=0x00;
TCCR2B=0x05;
TCNT2=0x00;
Читать раздел даташита
Asynchronous operation
of the Timer/Counter
Asynchronous Operation of
Timer/Counter2
До полного понимания сути процесса.
Реклама
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Сообщение kotriks »

спасибо попробуем!
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Сообщение kotriks »

ещё вопрос, если у меня фьюзы стоят на 8мгц с делителем на 8 нечего не нужно менять в коде, это роли не играет?
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Для работы асинхронного таймера2 с часовым кварцем, тактирование должно быть настроено фузами на внутр.RC генератор.
Реклама
Ответить

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