- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: problem mit Timer und SIG_OVERFLOW0

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119

    problem mit Timer und SIG_OVERFLOW0

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich möchte aller 3 sekunden eine aufgabe (Beschleunigen) ausführen, doch es funktioniert nicht

    der Code sind folgendermaßen aus (gekürzt):
    Code:
    #define Task_1 0
    
    volatile unsigned int Timer1_ms;
    volatile unsigned char TaskFlags;
    
    int main(void)
    {
    	init();				// init ports && ext Interrupts
    	
    	ioinit();			// init COM	
    	fdevopen(uart_putchar, NULL, 0);
    	
    	timer1_init(); 		     // init Timer1	
           TIMSK |= (1<<TOIE0); // timer0
    
    	twi_init();	
    		
    	sei();       		// Interrupts aktivieren
    
    ...
    
            if ( TaskFlags & ( 1 << Task_1) )
           {
    	     TaskFlags &= ~(1<< Task_1);
                   ....
            }
            else
            { 
            ...
            }
    }
    
    void timer1_init(void)
    {
    	TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);
      
    	TCCR1B = (0<<CS12) | (0<<CS11) | (1<<CS10);
    	
    	TIMSK &= ~0x3c;			
    	
    	OCR1A = 0;
    	OCR1B = 0;
    }
    
    SIGNAL (SIG_OVERFLOW0)
    {
    	Timer1_ms++;	
    	if(Timer1_ms % 3 == 0) // % 3 == mod 3 for 3 seconds
    	{
    		TaskFlags |= ( 1<< Task_1 );
    	}
    }
    Woran kann das liegen ?

    danke

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    timer1_init(); // init Timer1
    TIMSK |= (1<<TOIE0); // timer0
    geht es um Timer1 (eins)?

    wieso denn 'TOIE0' da ist ja timer0 (nul)

    mit
    TIMSK &= ~0x3c;
    werden ja alle timer1 interrupt ausgeschaltet

    gruss

    Henk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    Hallo Henk,

    ich benutze Timer1 für die PWM und Timer0 wollte ich für den Task.

    ok ich versuch das mal in der "void timer1_init(void)" nur auf Timer1 zustellen , aber dennoch dürfte es kaum was ändern oder ? Denn nach dem ich die init aufgerufen hab schlte ich die Interrupts für Timer0 mit " TIMSK |= (1<<TOIE0); "ein, oder seh ich das verkehrt ?


    gruss

    Alex

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    *Grummel*
    Was funktioniert denn nicht???

    Fehler beim Compilieren, stürzt ab, falsche Interruptrate, geht nur manchmal, nur das geht nicht, ...
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    Hallo,

    also es kommt kein Fehler beim Compilieren, es wird einfach nur nicht dieser Teil ausgefüht :

    Code:
            if ( TaskFlags & ( 1 << Task_1) )
           {
            TaskFlags &= ~(1<< Task_1);
                   ....
            }
    Und im Moment weiß ich noch nicht warum!!! HAbt Ihr eine Idee???

    Danke

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Da sollte mindestens eine Schleife drum, sonst landest du nach verlassen von main in exit (Endlosschleife).
    Disclaimer: none. Sue me.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    Hallo,

    das ganze befindet sich in einer Schleife, ich hab nur aus Gründen der Lesbarkeit den Sourcecode gekürzt. ...

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Bist du absolut sicher, daß dein Fehler nicht in den ... steckt?

    So ist's nur rumgerate...

    Bist du sicher, daß deine ISR weniger als 256 Takte braucht? Immerhin dividierst du da 16-Bit-Werte!! (was eigentlich unnötig ist).
    Die Initialisierung von Timer0 steht auch irgendwo in den Pünktchen.

    *Würmer-aus-der-Nase-zieh-und-Glaskugel-auspack*
    Disclaimer: none. Sue me.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    ok ok ... mein Fehler, ich hab einen Schreibfehler bei der Initialisierung von Timer0 gehabt und daher ging es nicht. Nun läuft alles.

    Danke noch mal an Alle.

    Alecs

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress