Forum: Mikrocontroller und Digitale Elektronik XC164 Timer auf 0.5 Sek


von Max (Gast)


Lesenswert?

Hallo,

ich möchte im Rahmen eines Projekts bestimmte LED's für genau 0.5 
Sekunden (oder länger als Ampelsteuerung) zum leuchten bringen. 
Realisiert wird die Steuerung durch eine Statetabelle in der ich die 
Verschiedenen LED's bestimmte Zeiten lang leuchten lasse. Das 
Grundintervall soll 0.5 Sekunden sein hier habe ich noch ein paar 
Probleme um die Zeit genau einzustellen mittels 2 16Bit Timer.

Ich benutze hier T3 im Timer Mode und T2 im Reload Mode.


Clock: 20 MHz
T3:

Konfiguration: Timer Mode, aufwärtszählend, prescaler von 256
T3 Wert im Register: 26473

Berechnung des Prescalers/Wert im Register:

2^(16) - (0.5s * 20MHz/256) = 26473.5

T2:

Wird im Reload benutzt, dh. soweit mir bekannt ist, dass der Wert der 
sich im T2 befindet bei einem Overflow in T3 geschrieben wird.

Daraus folgt dass der Wert gleich dem oben berechneten entsprechen muss 
also 26473. Mir ist bloß völlig unklar warum und wie ich den Prescaler 
einstellen muss.

Sind meine Berechnungen und Einstellungen soweit richtig, sodass das 
ganze 0.5 Sekunden entspricht?

Hier noch der Code falls es jemanden interessiert:

http://codeviewer.org/view/code:394f

von Only One (Gast)


Lesenswert?

Max schrieb:
> einzustellen mittels 2 16Bit Timer

Wofür 2 Timer?

Du stellst einen Timer auf einen Wert von 1ms, 10ms oder so etwas ein. 
Mit einer Zählevariablen in der ISR kannst du jetzt jeden beliebigen 
vielfachen Wert einstellen.

von Guido B. (guido-b)


Lesenswert?

Die 0,5 s sind halt bei 20-MHz-Takt nicht exakt zu
treffen.

Mit T3 downcounting und Reload durch T2 bei einem
Vorteiler von 256 beträgt der Reloadwert (nach meiner
Rechnung) 39062,5, also stimmt deine Rechnung wohl.

von Only One (Gast)


Lesenswert?

Guido B. schrieb:
> und Reload durch T2

Ja klar! Es geht um die GPT1. Sorry, ich war ganz wo anders unterwegs.

von Guido B. (guido-b)


Lesenswert?

Only One schrieb:
> Ja klar! Es geht um die GPT1. Sorry, ich war ganz wo anders unterwegs

War schon o.k., mit deinem Tip schafft er auch die 0,5 s exakt.

von Max (Gast)


Lesenswert?

Was macht aber denn genau ein Timer im Reload Mode?

Seinen ihm gegebenen Wert Auf/abzählen mit dem prescale faktor und was 
folgt dann?

von Guido B. (guido-b)


Lesenswert?

Max schrieb:
> Was macht aber denn genau ein Timer im Reload Mode?
>
> Seinen ihm gegebenen Wert Auf/abzählen mit dem prescale faktor und was
> folgt dann?

Beim Aufwärtszählen erfolgt beim Überlauf ein Setzen seines
Interruptflags und ein (Neu-) Laden des Reloadwertes. Von diesem Wert
aus zählt er dann wieder weiter. Abwärts erfolgt dasselbe wenn der
Zähler = 0 wird.

: Bearbeitet durch User
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.