TIMER0 beim PIC12F1480

Begonnen von picass, 09.01.2023, 18:13:20 CET

⏪ vorheriges - nächstes ⏩

picass

Der Versuch, endlich mal einen PIC12 in Betrieb zu nehmen, scheitert. Der PIC soll ja "nur" das gleiche Prog abarbeiten, welches beim PIC18F14K22 bereits arbeitet: zwei Zeiten (Arbeit,Pause) generieren und einmal schalten. Is klar, die Umstellungen im Assembler von 18-Zehner auf den 12-er sind ausgeführt - alle, und die stimmen auch. Es hakt bei der Inbetriebnahme des Timers. Ein Interrupt ist dabei nicht gefragt, der Überlauf soll - wie üblich - ein Flag setzen (INTCON) und das soll per Polling abgefragt werden. Funktioniert - wie gesagt - beim größeren Bruder. Beim 12-er käme der Timer1 in Frage, weil der gleich ein 16-Bitter ist und der ein eindeutiges Start-/Stopp-Bit hat. Nur gibts für den kein Überlauf-Flag und der arg begrenzte Befehlssatz lässt ein gutes Abfragen des Überlaufs nicht zu, rsp. macht das kritisch.

Der Timer0 hat ja so'n prima Überlaufflag im INTCON, nur finde ich keine Möglichkeit, diesen Timer0 überhaupt zu starten. Der ist intern via OPTION-REG so eingestellt, dass er den µC-Takt geteilt durch 4 als Taktgeber nutzen soll und der Vorteiler ist auch erst mal ausgeschaltet. Aber im Simulator sehe ich unter "TMR0" keine Bewegung, auch nicht, wenn via INTCON das Bit "TMR0IE" gesetzt wird.
Schalte ich dieses Prog ab, lade das für den 18-Zehner-PIC, dann fluppt die Timer-Anzeige prima. Nach dem Zurückschalten auf den 12-er rührt sich wieder nichts. Der hat auch keinen extra Ein-Aus-Schalter, und auch nach dem Null-Setzen rührt der sich nicht. Wie bekommt man den überhaupt zum Laufen?
Grüße, picass

Peter

Was für ein Pic ?
Für einen 12F ist für Timer0 folgender Code:

sub procedure InitTimer0()
  OPTION_REG     = 0x82
  TMR0         = 6
  INTCON     = 0xA0
end sub
 Für 1ms

vloki

Für TMR0 eines PIC12F1840 passt als Beispiel die Lektion 9 vom PICkit3 Starter.
(Der 1840 ist ja ein kleinerer 1829) TMR0 Läuft bei mir auch im Simulator.

Natürlich hat TMR1 auch ein TMR1IF (in PIR1)
MPLABX  XC8  KiCAD

picass

Zurück aus dem Kurzurlaub. Kurz also nach Volkers Hinweis auf den Ort für das Überlauf-Flag (ÜF) des Timers1 das Prog für den PIC12F1840 überarbeitet und nun kann der 12-er-PIC auch timern. :)
Diese Lektion 9 des PICkit StarterKits hatte ich als Basis benutzt. Mein Problem war ein anderes: das ÜF war – mit Verlaub – sehr, sehr gut versteckt in dem Datenblatt: erst ellenlange und komplizierte Ausführungen über Gate-Kontrollen und ihre verschachtelten Bedingungen, dann an deren Ende noch Ausführungen von Interrupts unter diesen Bedingungen und dann stand da noch ein klitzekleiner Hinweis auf eine Ausnahme alle dieser Bedingungen und – Tusch – diese Ausnahmebedingung war dann der Ort für die Erklärung, wie man den ganz normalen Überlauf des Timers erkennen kann. Wenn dieses Verstecken Absicht war, dann war das ein voller Erfolg, Glückwunsch auch! hammer Aber nu' timert es ja auch im 12-er-Bereich und damit ist eine weitere, nämlich die kleinste meiner Steuerplatinen einsatzbereit! Danke für die Suche, das Finden, etc....

Anbei: der Kurzurlaub führte nach München und dort – ist völlig klar – auch ins ,,Deutsche Museum". In der Computerabteilung sind Microprozessor-Schaltungen entweder gar nicht vertreten oder auch vortrefflich versteckt – im raschen Durchlauf wurde keine Präsentation von µCs entdeckt.
Grüße, picass



picass

Ein Problem - wenn auch kein großes - beim Timern bleibt mir leider treu:
Auch beim PIC18F14K22 bei Nutzung z.B. des Timers0 wird im Simulator weder ein Überlaufflag angezeigt, noch dort berücksichtigt. D.h., das Prog gerät dort in eine Endlos-Schleife und auch das manuelle Beeinflussen der Register für TIMERH und TIMERL bringt nichts. Witzigerweise ist das beim Simul-Debuggen anders. Sobald dasselbe Prog im PIC läuft, reagiert der oder das richtig und springt bei Überlauf raus, rsp. zurück.

Ein Grund könnte sein, dass ich bislang keinen Interrupt damit verbinde, d.h., das generelle GIE wird nicht enabled. So wie ich das Datenblatt interpretiere, müsste der T-Überlauf aber auch ganz ohne Interrupt auskommen. Vielleicht einfach nur eine Schwäche des Soft-Simulators in der MPLAB-X-IDE 5.20 .
Grüße, picass

Schnellantwort

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