Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Частотомер на Atmega8 (CVAVR)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2
horoc
Я поэкспериментировал немного, сделал вот так.
Код
void freg1(void){
    TCCR1B=(0<<ICES1)|(0<<CS10);//stop
    TCNT1=0;
    TIFR =(1<<TOV1);
    TIMSK &=~_BV(TOIE1);
    nover=0;
    mover=0;
    TCCR1B=(0<<ICES1)|(1<<CS10);//start
    TIFR=(1<<ICF1);
    while((TIFR&_BV(ICF1))==0);       
    if(TIFR &_BV(TOV1))              
        {                                
        nover++;                        
        TIFR =_BV(TOV1);                
        }
    ntick2=nover;
    ntick1=ICR1;
    TIMSK |=_BV(TOIE1);
    mtick1=TCNT0;                  
    mtick2=mover;
    N1=((uint32_t)(ntick2)<<16)+(uint32_t) ntick1; //системные тики
    M1=((uint32_t)(mtick2)<<8) +(uint32_t) mtick1; //входные тики
}

void freg2(void){
    while(TCNT1<65525);
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    
    TIFR=(1<<ICF1);
    while((TIFR&_BV(ICF1))==0);
    ntick2=nover;
    ntick1=ICR1;
    mtick1=TCNT0;                    
    mtick2=mover;                
    N2=((uint32_t)(ntick2)<<16)+(uint32_t) ntick1;
    M2=((uint32_t)(mtick2)<<8) +(uint32_t) mtick1;
    N=N2-N1;                          
    M=M2-M1;                      
    Fx=12000000.0*(float)M/(float)N;
}

Может коряво laughing.gif но прыгать перестало, но особо не тестировал еще. Только вот сейчас смотрю, почему при входном 1Мег результат 999996.
Еще охота избавится от флоат, но не знаю как.
horoc
Вот еще на танцевал с бубном yeah.gif
=GM= благодарю! beer.gif я на такой результат и не рассчитывал. Для моих сугубо радиолюбительских целей лучше не надо.

--------------------------
немного изменил код
Pikt
Приветствую. Я плохо разбираюсь пока что в микроконтроллерах, но вот надо сделать частотомер, хотя там на самом деле толщиномер пойдет, но принцип на измерении частоты. Подскажите пожалуйста пойдет ли последняя схема при измерении частоты до 1 МГц и так же в какой форме там выходной сигнал (я так понял там какой то счетчик на выходе стоит) и как его вывести на LCD или что то подобное. Благодарю заранее.
Заранее извиняюсь что такие простые вопросы спрашиваю, просто разобраться надо быстро, в процессе буду изучать.
=GM=
Пойдёт.

Выходной сигнал - двоичное число в оперативной памяти МК. Выводить можно 1001 способом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.