гуляет время отчёта на мега48 с кварцем

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

гуляет время отчёта на мега48 с кварцем

Сообщение RoboTok » 12 фев 2008, 22:29

Здравствуйте.

Собрал контроллер на МК atmega48 схема внизу.

Прошил программу эту:

Код: Выделить всё
#include <mega48.h>

unsigned long int timen = 0;//повышаю разрешение таймера

// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMPA] void timer2_compa_isr(void)
{
timen++;
}

main() {

unsigned char sw = 0;

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

DDRC=0b111000;//
PORTC.2 = 1;//

DDRD=0b11111100;//

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
// Mode: CTC top=OCR0A
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x00;
TCCR2A=0x02;
TCCR2B=0x05;
TCNT2=0x00;
OCR2A = 15;//1000 Гц
OCR2B=0x00;


// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x02;

// Global enable interrupts
#asm("sei")

while(1)
        {

if(timen > 20000) {PORTC.5++; timen = 0;}
if(PINC.2 == 0 && timen > 50) {PORTC.4++; timen = 0;}

}

Внизу фотка Фусе битов.

Считал делители по формуле ДШ на мега48
Формула: Ф = Фклк/2*N*(1+OCR2A)
Ф - нужная частота, Фклк тактирование таймера.

Поставил отчёт времени по 20 сек и переключение светодиода.
В результате замеров вышло следующее:
1 отчёт) 25 сек
2 отчёт) 42 сек
3 отчёт) 33 сек

Конечно я фиксировал с точностью 1 +-1 сек, но разброс заметно больше.

Подскажите пожалуйста, что не так ?
Вложения
Untitled-1.jpg
plata1.gif
Последний раз редактировалось Myp 12 фев 2008, 22:34, всего редактировалось 1 раз.
Причина: учимся использовать ТЕГИ!!!
Аватара пользователя
RoboTok
 
Сообщения: 1060
Зарегистрирован: 04 фев 2008, 13:18
Откуда: Москва
прог. языки: PHP

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9