Mega8 Timer0

Gast #2115410
Lesenswert?

Hallo,

ich muss gerade recht schnell ne kleine Demo auf nem Mega8 zum laufen 
bringen. Kenne mich aber mit Atmels und Programmieren allgemein nicht 
sonderlich gut aus. Zur Verfügung steht mir das AVR-Starterkit. 
Programmieren tue ich in C mit AVR-Studio-4.

Aktuell habe ich ein Problem mit Timer0 und nem dazu gehörigen 
Interrupt. Was mache ich da falsch im Code?

#include <avr/io.h>
#include <avr/interrupt.h>

int main (void)
{
  cli();
  //Register Ein- / Ausgänge definieren
  DDRD = 0xFF;  //alle Ausgang
  DDRB = 0x03;  //PB0 & PB1 Ausgang

  //Startzustände definieren
  PORTB |= (1 << PB0);  //Transistor aus
  PORTB &= ~(1 << PB1);  //Transistor ein

  PORTD |= (1 << PD0);  //Segment aus
  PORTD |= (1 << PD1);  //Segment aus
  PORTD |= (1 << PD2);  //Segment aus
  PORTD |= (1 << PD3);  //Segment aus
  PORTD |= (1 << PD4);  //Segment aus
  PORTD |= (1 << PD5);  //Segment aus
  PORTD |= (1 << PD6);  //Segment aus
  PORTD |= (1 << PD7);  //Segment aus

  // Timer 0 konfigurieren
    TCCR0 |= (1 << CS00);   //Prescaler
    // Overflow Interrupt erlauben
    TIMSK |= (1 << TOIE0);

    // Global Interrupts aktivieren
    sei();


  for(;;)
  {

    PORTD &= ~(1 << PD2);  //Segment ein

  }
}


//Interrupt Routinen

ISR(TIMER0_OVF_vect)
{
  PORTD &= ~(1 << PD0);  //Segment ein

}
Gast #2115425
Lesenswert?

Das der aktuelle Code noch nicht viel Sinn ergibt ist klar, der ist nur 
zu Testzwecken.

Ich hab 2 7-Segment-Anzeigen welche ich multiplexen will. Die Segmente 
sind an Port D angeschlossen. Zwei Transistoren zum umschalten an PB0 
und PB1. Das lässt sich auch alles so Problemlos ansteuern.

Jetzt möchte ich gerne das Umschalten der Transistoren zyklisch durch 
nen Timer geschehen lassen. Und die Anzeigen sollen dann erstmal einfach 
von 0-99 zählen.

Zum Testen möchte ich jetzt erstmal einfach in der ISR ein Segment 
einschalten um zu sehen ob da überhaupt reingesprungen wird. Da passiert 
aber nix und das ist das aktuelle Problem.

Gruß Michael
Gast #2115461
Lesenswert?

Hab mittlerweile rausgefunden, dass es nicht am Timer liegt. Der läuft, 
habe dazu in der main einfach mal ne Abfrage auf den aktuelle Timerwert 
eingebaut.

Daher muss es wohl am Interrupt liegen, habe ich denn da was falsch 
gemacht?
Gast #2115536
Lesenswert?

Michael schrieb:
> Was genau meinst du mit "Hardware und Kontrollerdefinition überprüfen?

Überprüfen ob die Signale so wie ich sie schrieb an den µC-Pins anliegen 
und ob da auch ATmega8 im Projekt drinsteht. Nicht daß das .hex für 'nen 
anderen Typen erzeugt wird. Kannst auch im Projekt --> default-Ordner 
das dort enthaltene Makefile im Texteditor öffnen um da zusätzlich 
sicher zu gehen. Anbei das erzeugte .hex, kannst ja mal testen.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren