-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Timerinteruppt will irgendwie nicht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.01.2006
    Beiträge
    60

    Timerinteruppt will irgendwie nicht

    Anzeige

    hi,
    ich habe mir einen Timer programmiert, der nach einer Sekunde laufzeit den PD0 high schalten soll , das ganze in C mit AVR Studio 4, er amcht aber nichts, der Led rührt sich nicht

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/delay.h>
    
    uint8_t secound=0;
    
    SIGNAL (SIG_OVERFLOW1)
    {
        secound ++;
    }
    
    
    int main(void)
    {
    	OCR1AL = 0x09;
    	OCR1AH = 0x3d;
    	TCNT1L = 0xf7;
    	TCNT1H = 0xc2;
    
    	TCCR1B |= (1<<CS11)|(1<<CS10);
    	sei();
    	while(1)
    	{
    		if(secound == 1)
    		{
    			DDRD = 0x01;
    			PORTD = 0x01;
    			secound = 0;
    		};
    	};
    
    }
    Diese werte :
    OCR1AL = 0x09;
    OCR1AH = 0x3d;
    TCNT1L = 0xf7;
    TCNT1H = 0xc2;

    Hab ich von nem tool auf AVRfreaks, die sollen bei 1Mhz Quarz eine Sekunde brauchen damit der Timer neu anfängt

    was ist an meinem COde falsch ?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    in deinem Code fehlt was:
    Code:
    TIMSK |= (1 << TOIE1);
    damit wird der Timerinterrupt aktiviert!

    statt TCNT1L = 0xf7; und TCNT1H = 0xc2; kannst du auch TCNT1 = 0x1B9 schreiben find ich übersichtlicher!

    Gruß Michi

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    04.01.2006
    Beiträge
    60
    hmmm,
    ich hab das jetzt dazugeschrieben , aber da rührt sich irgedwie nichts am µC ,
    stimmt das das man einen TImer schwer im AVRstudio Simulieren kann, denn der braucht eeeeeeeeewig bis der timer mal nen überlauf hat

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    AUF JEDEN FALL

    VOLATILE uint8_t secound=0;
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    04.01.2006
    Beiträge
    60
    k , aber wiso dieses
    VOLATILE ???

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    damit man diese Variable auch in den Interrupts benutzen kann!! Klappt's jetzt?
    Gruß Michi

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    04.01.2006
    Beiträge
    60
    ne es klappt nich , da rührt sich gar nix nur wenn ich als Bedinnung secound < 1 eingebe leuchtet die led dauernt, also kommt der zu keinem Overflow bzw. der interuppt geht nich

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    04.01.2006
    Beiträge
    60
    ich hab jetzt nen timer gemacht der alle 1000µs fertig ist , so hab ich das im studio gut überwachen können , also der timer fängt neu an , also er ladet die variablen neu ... ABER der interruppt geht nich , also diese Interuppt schleife ignoriert er einfach

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Weiss jetzt nicht, ob du nicht den OutputCompare-Interrupt belegen müßtest.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    04.01.2006
    Beiträge
    60
    ich hab bei irgendeinem Tutorial gelesen das da bei de rinterupt funktion der signame des interuppts angegeben werden muss ich hab jetzt mal im datenblatt geschaut, aber keinen Signame gefunden , dann hab ich probiert die verschiedenen Namen für den 16BIT timer einzugeben , ohne erfolg,
    vl passt dieses SIG_OVERFLOW1 nich ?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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