Forum: Mikrocontroller und Digitale Elektronik Timer 1 beim 90S8515


von ERDI - Soft (Gast)


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.)

von Uwe (Gast)


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

von mthomas (Gast)


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)

von crazy horse (Gast)


Lesenswert?

ganz beliebter Anfängerfehler bei 16bit-Zugriffen: Reihenfolge beachten.

von ERDI - Soft (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.