www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer 1 beim 90S8515


Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab grad ein kleines Verständnisproblem.
Hab auf dem AT90S8515 versucht, mit dem Timer1 zu Testzwecken ein
1-Sekunden-Takt zu generieren.
Dazu hab ich erst einmal den Prescaler auf 1024 gesetzt, zusätzlich die
Option, dass bei Compare Match der Zähler auf 0 rückgesetzt wird, das
Compare Match Register A mit dem zu erreichenden Wert geladen, den IRQ
für Output-Compare-A freigegeben und danach den globalen IRQ
freigegeben.
Nur tut das Teil überhaupt nix. Wenn ich den Timer-Overflow IRQ
aktiviere, dann bekomme ich einen IRQ (weiß nur nicht, wann) und dann
ist tote Hose.
Hat jemand schonmal mit Timer 1 gearbeitet und ´hat vielleicht ne Idee,
wie das zu lösen wäre?


Gruß, ERDI - Soft.

P.S.: Würde gerne das Programm mitposten, liegt aber leider daheim auf
der Festplatte. (Macht das ganze wohl leider etwas komplizierter.)

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Viel fällt mir da momentan nicht ein, aber
- deine Int.Tabelle stimmt?
- Stack ok.?
- schon simuliert?
Was bedeutet "und dann ist tote Hose."?

MFG Uwe

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur ergaenzend zu Uwe:
"overflow" sollte der richtig Ansatz sein, funktioniert zumindest bei
mir wie erwartet. Mglw. ein ret statt reti am ende des Int-Handlers?
Zaehlregister wieder auf Anfangswert gesetzt? Timer 1 ist soweit ich
mich erinnere ein 16-bit Timer, erstmal mit einem 8-bit Timer
probieren. Wie Uwe schon schreib: simulieren (Prescaler klein, Zaehler
kurz vor $FF, sonst muss man zu lange warten im Studio4 Simulator,
Breakpoint in den Int-Handler)

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ganz beliebter Anfängerfehler bei 16bit-Zugriffen: Reihenfolge beachten.

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Hilfe, funktioniert mittlerweile.

Hab den Programmteil mal als eigenständiges Programm kompiliert, da
liefs dann. Nachdem ich den Teil rausgenommen habe, der die Relais
schaltet, hats auch im anderen Programm funktioniert. Bin aber fast
verzweifelt, als ich das ganze simuliert habe.
Arbeite in dem Programm mit Flags. Nur sind die Flags nicht ständig neu
gesetzt worden, sondern hatten immer nen statischen Wert. Dadurch
wurden einige Routinen halt nicht ausgeführt.
Aber hauptsache, es geht jetzt.

@Uwe:

Mit tote Hose meinte ich, dass die Relais nicht geschaltet haben. Hatte
testweise die Relais ein-aus geschaltet, um zu testen, ob das Programm
überhaupt funktioniert, oder meine Anzeigeroutine nicht geht.


Gruß, ERDI - Soft.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.