-         

Ergebnis 1 bis 5 von 5

Thema: Timer soll zählen, tut er aber nicht. Hilfe!! :)

  1. #1
    Neuer Benutzer Öfters hier Avatar von robo-man
    Registriert seit
    19.07.2009
    Ort
    Rosenheim
    Alter
    33
    Beiträge
    7

    Timer soll zählen, tut er aber nicht. Hilfe!! :)

    Anzeige

    Hallo!! Ich hab ein Problem. Ich möchte das der Timer beim überlauf die konstante [a] um einen Wert erhöht. Das Problem ist aber, dass die konstante immer auf 0 bleibt, weil bei mir PORTC=0x05; die ganze zeit als ausgang ist und sich nichts ändert. Hat vielleicht jemand eine Ahnung , was falsch in meinem Programm ist? Weil ich denke das Programm hat keinen Fehler.
    Danke im Vorraus!!!

    #define F_CPU 3686400
    #include <avr\io.h>
    #include <avr/interrupt.h>
    #include <util\delay.h>
    uint8_t a;

    ISR (TIMER1_OVF_vect)
    {
    a++;
    }


    int main (void)
    {
    TCCR1A=0x40;
    TCCR1B=0x04;
    TCNT1=0x0FFF;
    DDRC=0x3F;
    SREG=0x80;
    TIMSK=0x04;
    a=0;
    sei();
    while (true)
    {
    switch (a)
    {
    case 0: PORTC=0x05;
    break;
    case 1: PORTC=0x01;
    break;
    case 2: PORTC=0x02;
    break;
    case 3: PORTC=0x04;
    break;
    case 4: a=0;
    break;
    default: PORTC=0x07 ;
    break;
    }
    }
    return 0;
    }

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    volatile uint8_t a; // ???

    Bitte Code-Tags verwenden. Das Timer-Setup habe ich nicht überprüft weil es mir zu mühselig ist die Bits (wie mode, prescal, enable, interrupt?) rauszufummeln. Hilfreich, auch für dich selbst, wäre jeweils ein kleiner Kommentar dazu:

    TCCR1A=0x40; // hier wird dies und das eingestellt
    TCCR1B=0x04; // noch mehr Einstellungen

    Ob die ISR aufgerufen wird könntest du einfach so testen:

    ISR (TIMER1_OVF_vect)
    {
    a++;
    PORTC = 0x03;
    }

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier Avatar von robo-man
    Registriert seit
    19.07.2009
    Ort
    Rosenheim
    Alter
    33
    Beiträge
    7
    Cool, es funktioniert jetzt. Vielen Dank!!! Danke für die Tipps, die werde ich in zukunft befolgen.
    Schönen Tag noch!! \/

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Von dem Abgesehen das mein Compiler das while(true) nicht mag, läuft dein Code. Einige Zeilen machen für mich allerdings keinen Sinn.
    //TCCR1A=0x40;
    TCCR1B=(1<<CS10);
    //TCNT1=0x0FFF;
    DDRC=0x3F;
    //SREG=0x80;
    TIMSK=(1<<TOIE1);
    Hab das mal auskommentiert.
    Variable in einer ISR deklariert man volatile
    volatile uint8_t a;

    Welchen Kontroller und Compiler du verwendest wäre in der Angabe auch nicht schlecht.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Neuer Benutzer Öfters hier Avatar von robo-man
    Registriert seit
    19.07.2009
    Ort
    Rosenheim
    Alter
    33
    Beiträge
    7
    Ich benutze den Atmega8. Den compiller WinAvr20081205. Mit dem SisyAvr Program.

Berechtigungen

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