-
        

Ergebnis 1 bis 3 von 3

Thema: ATmega32 Interupt Problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.05.2007
    Beiträge
    8

    ATmega32 Interupt Problem

    Anzeige

    Hallo,

    programmiere seit kurzem den ATmega32 (habe bereits C167 programmiert) und hab folgendes Problem:

    Ich will zwei Stepper zyklisch laufen lassen (Treiberstufe aus L297/L298 wie hier schon des öfteren besprochen) und will dazu mit dem Timer1 Compare Interupt das Enable Signal der beiden Treiberstufen toggeln.

    Ich habe mir die einzelnen Config Register aus dem Datenblatt zusammengebaut, aber ich komme mit der Interupt Behandlung nicht ganz klar (zumindest denke ich dass das Problem hier liegt).

    Ich habe den Code hinten angefügt, wäre super wenn jemand mal einen kurzen blick darauf werfen würde um mir bei meinem Denkfehler weiterzuhelfen.

    Anmerkungen zum Code:
    Timer0 erzeugt den Takt für Stepper 1
    Timer2 erzeugt den Takt für Stepper 2
    Timer1 erzeugt Interupt

    Fragen:
    - Stimmt das TIMSK Register?
    - Stimmt die Verzweigung im Interupt Vektor?
    - Muss ich mich um das TIFR Register kümmern? (Hab das Datenblatt so interpretiert, dass hier nur Flags angezeigt werden wenn ein Interupt wirklich auftritt)

    --------

    Und dann hätte ich nebenbei gleich noch eine Frage:
    Ich programmiere im AVR Studio und flashe den µC per Ponyprog und ISP. Das ganze dauert aber je Durchgang 5min. Gibts ne Einstellung mit ich den "Verify" Vorgang unterdrücken kann?

    Vielen Dank erstmal
    Angehängte Dateien Angehängte Dateien

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    02.05.2007
    Beiträge
    8
    Sorry, hat sich mittlerweile erledigt.

    Für die die der Fehler interessiert:

    Ich hatte die Interrupt-Vector-Tabelle von einem kleineren mega kopiert und die zusätzlichen Vektoren dazwischen eingefügt. dabei ist anscheinend was mit der relativen Adressierung schief gelaufen.
    Mit .org Sprüngen an die richtige Stelle im Speicher funkioniert die Sache

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    46
    Beiträge
    104
    Hi FireFly

    beim mega32 ist in der Interruptvektortabelle Platz für JMP - Befehle, den es beim mega8 ja nicht gibt, weil da der RJMP reicht um den ganzen Speicher zu adressieren. JMP belegt allerdings 4 byte, RJMP nur 2 byte. Dadurch verschiebt sich die Tabelle komplett, wenn Du beim mega32 RJMP nimmst. RETI direkt in der Interruptvektortabelle erzeugt das gleiche Problem, da es auch nur 2 byte lang ist.

    greetz Rajko

Berechtigungen

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