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

[atmega128] Problem ze zliczaniem czasu

veldrin 18 Mar 2009 12:11 1032 4
REKLAMA
  • #1 6297947
    veldrin
    Poziom 10  
    Witam,
    wzorując się na książce "Mikrokontrolery AVR w praktyce" powstał taki oto kod
    #include <io.h>
    #define tau0 6
    
    
    int main(void){
    	char licznik = 100;
    	
    	DDRB = 0x01;	//wyjsciem generatora bedzie PB0
    	TCNT0 = tau0;	//stala czasowa
    	TCCR0 = 1;		//timer0 bedzie pracowal bez preskalera
    	
    	while(1){
    		while((inp(TIFR) & 0x02) != 0x02);	//czekaj na ustawienie flagi TOV0 (przekrecenie licznika)
    		
    		TCNT0 = tau0; 		//odnawiamy stala czasowa
    		if(--licznik == 0){
    			PORTB ^= 0x01;	//zmiana stanu wyjscia na przeciwny
    			licznik = 100;
    		}
    		
    		TIFR=1<<TOV0;	// kasujemy flage przepelnienia
    	}
    }


    czyli zlicza mi 100 razy po 250 taktów = 25000 taktów na każdy stan na wyjściu (tzn 25000 taktów na "1" i 25000 na "0", cały okres trwa 50000 taktów)
    Czas trwania tych 25000 taktów to ~5 sekund. Patrząc na uzyskne wyniki daje to ok 50kHz.
    Pytanie brzmi jak to się ma do zainstalowanego 16MHz kwarcu?

    Używam zestawu minimodułu MMnet02 na płytce EVBnet02 (z Propoxu)
  • REKLAMA
  • #2 6298966
    rfhzcx
    Poziom 14  
    Ja bym obstawiał że coś jest nie tak z while((inp(TIFR) & 0x02) != 0x02)
    Może nie czeka na odliczenie licznika ?
  • REKLAMA
  • #3 6298996
    veldrin
    Poziom 10  
    Gdyby nie czekał, to zliczyłby szybciej, a on zlicza za wolno.
  • REKLAMA
  • Pomocny post
    #4 6300463
    MarcinKawka
    Poziom 12  
    z tego co widzę w datasheecie to TIFR wygląda następująco:
    OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

    zatem jeśli czekasz na TOV0 to powinieneś chyba zrobić
    while((inp(TIFR) & 0x01) != 0x01);
  • #5 6324850
    veldrin
    Poziom 10  
    Faktycznie pomyliłem się co do kolejności pól - jednak wciąż coś nie działa.
    Jak zanalizuję dokładnie ten problem, wrócę po dalsze porady :)
REKLAMA