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

Problem z timerem w ATMega 16

marcin2500 08 Lut 2009 03:02 1317 3
REKLAMA
  • #1 6119215
    marcin2500
    Poziom 12  
    Witam,
    Napisałem całkiem złożony programik w C, ale wykrzacza mi się w prostym fragmencie main'a, tzn. obsługa przerwań z timera działa, ale uC nie chce wejść do nieskończonej petli while(1). Nie działa ani w debugerze ani w rzeczywistym układzie. Pomóżcie co tu jest źle...

    Oto fragment Kodu w AVRStudio
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #define OSC 10 // częstotliwość zegara w megahercach
    #define TINIT 200
    
    char cyfry [11] = {3, 159, 37, 13, 153, 73, 65, 31, 1, 9, 255};
    char cyfryzkr [11] = {2, 158, 36, 12, 152, 72, 64, 30, 0, 8, 254};
    char A,B,C,DD,L;
    
    SIGNAL (SIG_OVERFLOW0)
    {
    TCNT0=TINIT;
    L++;
    if (L>4) L=1;
    if (L==1) {PORTA=0xF7; if (A>10) A=10; PORTC=*(cyfry+A);} else
    if (L==2) {PORTA=0xFB; if (B>10) B=10; PORTC=*(cyfry+B);} else
    if (L==3) {PORTA=0xFD; if (C>10) C=10; PORTC=*(cyfry+C);} else
    {PORTA=0xFA; if (DD>10) DD=10; PORTC=*(cyfry+DD);}
    }
    
    // Program główny
    int main(void)
    {
    	DDRC = 0xFF; 
    	PORTC = 0xFF;
    	DDRA = 0xFF;   
    	PORTA = 0xFF;
    	L=0;
    	char i=3;
    
    	TIMSK|=1;
    	TCNT0=TINIT;
    	TCCR0=5;  //timer normal z prescaler i intem
    	sei();
    
    	while (1)
    	{
    	A=1+i;
    	B=1;
    	C=1+i-1;
    	DD=2;
    	}
    	return 0;
    }
    

    Proszę używac znaczników [code] - uzupełniłem.
    [zumek]
  • REKLAMA
  • REKLAMA
  • #3 6120402
    marcin2500
    Poziom 12  
    Dziękuje za pomoc. Zrobiłem najpierw jak radził technics6 - dodałem linie kodu i sprawdziłem projekcik ale nie pomogło. OSC jest zdeklarowane bo uzywam w całym duzym programie go (tak jak powiedziałem zamieściłem fragment sprawiający problem). Rozwiązaniem problemu okazała się rada Freddie Chopina ze zmienna typu volitile.

    Dziękuje Wam za help
  • #4 6124321
    marcin2500
    Poziom 12  
    technics6 napisał:
    Taaa znalazł... pewnie walczył z tym volatile 3 godziny :)
    .


    Tak naprawdę to nie szukałem o tym volatile bo programuję w C od wielu lat i nie tylko proceduralnie ale i obiektowo oraz biblioteki graficzne do C. Dlatego same hasło Freddiego dało mi odpowiedź, ale skoro jest to częstym problemem to może warto by było napisać jakieś FAQ z najczęstszymi problemami programując AVRki?
REKLAMA