-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 37

Thema: Problem mit Timer0

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240

    Problem mit Timer0

    Anzeige

    Hallo

    Ich habe leider noch ein Problem mit dem Timer0 meines AtMega8. Ich bekomme den Timer zum laufen. In die ISR geht er auch. Dort möchte ich eine Variable hochzählen... Also soetwas wie einen verschachtelten Timer. Das benötige ich um ein großes Zeitfenster zu bekommen. Mir schwebt da soetwas vor wie while(t<50)... in der Zeit wird im Hauptprogramm etwas ausgeführt. Und "Zwischendurch" wird in der ISR immer wieder die Variable t hochgezählt. Das scheint aber nicht zu funktionieren.... Dass ich die Variable auch irgendwann wieder zurücksetzten muss weiß ich auch... mir geht`s im Moment ersteinmal überhaupt einen Durchlauf hin zu bekommen... Hier mal mein Code:

    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #include <avr/interrupt.h>
    #include <stdlib.h>
    #include <util/delay.h>
    
    #define F_CPU = 12000000L
    
    int t=0;							//Variable t für Timer anlegen
    
    
    
    int main(void)
    {
    
    	DDRD  &= ~(1<<DDD2);			//Pin D2 (INT0) als Eingang deklarieren
    	PORTD |= (1<<PD2);				//Pull Up für D2 einschalten
    	
    	DDRB = (1<<DDB0);				//Port B0 als Ausgang definieren (LED)
    	PORTB |= (1<<PB0);				//LED aussschalten
    		
    	TCCR0 |= (1<<CS00)|(1<<CS02);	//Timer initialisieren und einschalten
    	TIMSK |= (1<<TOIE0);			//TimerOverflow Interrupt freigeben??
    	sei();							//Interrupts freigeben
    
    	
    	while(t<10)
    	{
    		PORTB &= ~(1<<PB0);			//Einschalten der LED
    	}
    
    	while(1);
    	
    }
    Und hier die ISR:
    Code:
    ISR(TIMER0_OVF_vect)
    {
    	t++;
    }
    Vielleicht könnt ihr mir ja auch sagen dass das so gar nicht möglich ist und ich das anders versuchen muss... Vielen Dank schonmal...

    Grüße!!

    Bean

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Klasischer Fehler:

    Deklariere mal t als volatile

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240
    Mhh Danke... muss zugeben das mit dem volatile hab ich noch nicht so ganz verstanden hab das jetz mal in "volatile int t=0;" geändert. Hab aber leider nichts gebracht... Brauch ich einen Return aus der ISR?
    Grüße!!

    Bean

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Nein return brauchst Du nicht, woran erkennst Du daß Dein Programm nicht klappt ?
    geht die LED nicht an ?

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240
    Doch, bei while(t<10) geht die LED an. Aber ich bin Meinung dass Sie nur so lange an sein sollte wie t<10... sobald t>10 sollte Sie aus gehen.. aber kann auch sein dass da mein Denkfehler liegt... Jetzt wo ich näher drüber nachdenk...

    Grüße

    Bean

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Aber ich bin Meinung dass Sie nur so lange an sein sollte wie t<10... sobald t>10 sollte Sie aus gehen.
    warum soll sie dann ausgehen ?
    Nachdem die while Schleife verlassen wird ist das Programm auch zu Ende,
    kommt nur noch eine Endlosschleife...
    irgendwo mußt Du sie ja noch ausschalten...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240


    Ja Ich hab es jetzt grad mal mit einem Blinklicht innerhalb der Schleife versucht... Das scheint zu funktionieren...

    Grüße!!

    Bean

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Zitat Zitat von Mr Bean
    ... das mit dem volatile hab ich noch nicht so ganz verstanden ...
    Schau mal hier (klicken) im C-Tutorial nach und Suche dort nach volatile.

    Oder in anderen Tutorials.
    http://www.mikrocontroller.net/artic...R-GCC-Tutorial
    http://www.schellong.de/c.htm
    http://www.galileocomputing.de/openbook/c_von_a_bis_z/ in einem Unerpunkt ist hier volatile
    recht gut erklärt http://www.galileocomputing.de/openb...0027701F02618E
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ja Ich hab es jetzt grad mal mit einem Blinklicht innerhalb der Schleife versucht... Das scheint zu funktionieren...
    Ja siehst Du, alles wird gut

    @Joe, wie ich sehe hast Du Dir eine gute Samlung an Links angelegt...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Hallo Sebastian,

    wenn ich das wüsste, was ich nicht weiß, und das nicht wüsste was ich weiß - dann wäre ich (in C) VIEL besser
    Ciao sagt der JoeamBerg

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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