Forum: Mikrocontroller und Digitale Elektronik XC164 Timer auf 0.5 Sek


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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

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]
  • [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.