Zeiten im PIC : Frequenz und Zeitschleifen

Begonnen von picass, 20.10.2021, 15:31:29 CEST

Vorheriges Thema - Nächstes Thema

picass

Um mich der exakten Messung der Dauer von Zeitschleifen anzunähern, habe ich erst mal die Taktfrequenz bei einem Exemplar eines PIC18F14K22 zu ermitteln versucht. Gewählt war der interne Oszillator und die anschließende maximale Teilung auf den offiziellen Takt von 31,25 kHz. Dazu hatte ich dem PIC ein Programm verpasst, welches in einer Schleife genau 100 Zyklen ausführt. Das Prog enthält am Anfang die Toggle-Anweisung (1 Cyc.) für einen Pin, an dem eine LED geschaltet wird, und am Ende eine BRA-Anweisung (2 Cyc.) auf den Anfang, dazwischen NOPs. Das Digi-Oszi zeigt 26,22 ms für eine komplette Schwingung, bestehend aus 200 Cyclen. Also die 26,22 mS geteilt durch 200 ergeben 0,131 µS. Dessen reziproker Wert gibt dann die Frequenz, mit welcher die Cyclen abgerechnet werden, das wären 7,628kHz. Weil der µC-Takt noch durch vier zu teilen ist, um  die Zeit für einen Instruction Cycle zu ergeben, also die 7 k noch multipliziert mit 4, das wären dann 30,511 kHz. Und das wiederum wäre eine Abweichung vom offiziellen Wert in der Größe von 2,4 %.
Für echt zeitkritische Anwendungen sicher nicht geeignet, aber bei solchen Programmen mit langsamsten Änderungen von z.B. Messwerten wie meiner Öltemp-Messung für das Auto oder die Feuchte-Messung eh' egal. 2% Abweichung bei z.B. Widerständen gilt ja noch als guter Wert. Insgesamt also ein erbauliches Ergebnis für eine Schaltung ohne Quarz oder Keramikschwinger– sofern ich da nicht was missverstanden und ungut gerechnet haben sollte.
Grüße, picass

picass

#1
Wieder ein Rätsel gelöst! (Teil-) Ziel war es, mithilfe eines PIC's lange Zeiten, also einen Rechteck-Impuls mit großer Länge  – gemeint sind 30 Minuten bis mehrere Stunden – zu erzeugen. Erst hatte ich eine voll alte Uhrenplatine am Wickel, die immerhin schon 2-Sec-Impulse ausgab, und an einem PIC – bitte weghören – hatte ich noch nie einen der internen Timer/Counter in Betrieb gehabt. Letzteres habt ihr jetzt echt nicht gelesen. Aber nun doch der Versuch "mit nur" einem PIC:
Also mit dem s.o. ermittelten Takt von 30,51 kHz des HF-Oszillators eines PIC18F14K22 gestartet, und dem ein erschütternd kurzes Assembler-Prog verpasst, in dessen Voreinstellung der Timer0 im 8-bit-Teilermodus durch 256 teilt, in einer Winzig-Schleife eine LED toggelt und hauptsächlich sich mit NOP's vergnügt. Das sollte dann einen Impuls immerhin schon im Sekundenbereich erwirtschaften.
Beim ersten Einschalten tat sich scheinbar nichts, irgendwann leuchtete die Kontroll-LED los und blieb auch so los. War wohl nix! Der Simulator versagte, weil es mir nicht gelang, den notwendigen Interrupt des Timer-Überlaufes zu simulieren. Der um Hilfe gebetene Digi-Oszi half zur Erkenntnis, dass der PIC mit 38 Hz die LED beschaltete, anstelle von Sekunden leider nur 26 Milli-Sekunden.
Wie üblich schweres Wälzen des PIC-Datenblattes und irgendwann fiel mir endlich der an mindestens zwei Stellen im Extra-Kasten hervorgehobene Sonderhinweis der Microchip-Truppe auf, dass nach einem ausgelösten Interrupt der gleich wieder einzufangen wäre, indem noch in der IRQ-Routine das TMR0IF-Flag des INTCON-Register zu löschen wäre. Schwitz, zig mal gelesen, aber lass' ma..... Die Zeile rein, und der PIC kam endlich aus seiner IRQ-Routine raus. Nun blinkt die LED, zumindest dann, wenn man geduldig hinschaut alle 8,59 Sekunden für genau diese Dauer.
Und wieder werden nur wenige Frauen – also meine auf keinen Fall – nachvollziehen können, warum sich der Mann am Blinken einer LED derart erbauen kann! Dieses Blinken verhilft mir u.a. zu einer neuartigen Erkenntnis: das fleißige interne Zählen der Befehls-Zyklen läuft ja gänzlich ohne irgendwelche Programmzeilen-Abarbeitung ab! Der Timer-Betrieb ist wohl vollständig in Hardware gegossen und beeinträchtigt in keiner Weise weder Programmplatz noch die sonstige Abarbeitung eines Programms! Das hatte ich mir bislang genau andersrum vorgestellt, und mich aus diesem Grund vor der Nutzung der Timer-/Counter-Resourcen gedrückt! Liegt vielleicht an meinen wenig ausgeprägten Englisch-Kenntnissen, aber ein solcher explizierter Hinweis auf die von der Hardware ermöglichte Unabhängigkeit war mir bislang entgangen, und auch beim Betrachten der Diagramme war mir diese Erkenntnis nicht gelungen.
Nun hat mir das verschlafene Blinken einer LED aus meinem Tiefschlaf geholfen: fortan wird getimert, was das Laufwerk hergibt. Wenn das so weiter gehen sollte, werde ich irgendwann die Grundlagen eines PICs noch raffen.
Grüße, picass

Schnellantwort

Achtung: In diesem Thema wurde seit 120 Tagen nichts mehr geschrieben.
Wenn Sie nicht absolut sicher sind, dass Sie hier antworten möchten, starten Sie ein neues Thema.

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Similar topics (5)