logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8-16][C]Atmega8 - problem z TIMER0

galsan 08 Cze 2008 12:56 1882 2
REKLAMA
  • #1 5225238
    galsan
    Poziom 12  
    Witam, mam następujący problem. Chciałem przetestować timer0 w Atmega8-16PU, aby gasił i zapalał diodkę co jedną sekundę. Obliczyłem, że przy kwarcu 8MHz i ustawieniu preskalera na CK/8 program w C powinien wyglądać następująco:
    
    #include <avr/io.h>
    #include <avr/sfr_defs.h>
    
    int main(void)
    {
    	
    	DDRB = 255;
    	PORTB = 0;
    	TCCR0 = 2;
    	TCNT0 = 6;
    	
    	int pt = 4000;
    	
    	for(;;)
        {
    		TCNT0 = 6;
    		//while(bit_is_clear(TIFR, TOV0));
    		while(TCNT0 != 0);
    		
    		if(--pt == 0){
    			PORTB ^= 2;
    			pt = 4000;
    			}
    		
    		//TIFR = 1 << TOV0;
    	}
        
        return(0);
    }
    


    Wydaje mi się, że czas obliczany jest następująco 1us * (256-6) * 4000 = 1 sekunda. Jak widać próbowałem na dwa sposoby sprawdzać przekręcenie licznika. Dioda nie zapala się jednak co sekundę, ale tak na oko co 7 do 8 sekund...
    Nie wiem co jest nie tak.. (?)
    Z góry dziękuję za pomoc i pozdrawiam.

    Post raportowany
    Proszę stosować tagi !
    And!
  • REKLAMA
  • #2 5225391
    ZbeeGin
    Poziom 39  
    Procesor nowy ze sklepu? Jeśli tak to pracuje z Frc=1MHz. Trzeba zmienić ustawienia w fuse bitach na External Crystal.
  • #3 5225396
    galsan
    Poziom 12  
    ach... tak ze sklepu nowy.. dzięki, spróbuję..
REKLAMA