TIMER0 beim PIC12F1480

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

Vorheriges Thema - Nächstes Thema

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

vloki

Also bei mir scheint es bei einer alten Version (5.35) zu funktionieren.

Wäre nicht schlecht, wenn du immer ein kleines gepacktes Projekt mitliefern könntest,
das demonstriert, was da nicht funktioniert...
MPLABX  XC8  KiCAD

picass

Die 5.35-er Version habe ich auch irgendwo installiert, nutze aber in der Regel die 5.20-er. Grabbel gleich mal im Packen der SSDs nach der entsprechenden und teste das dort. Falls das nichts wird, stelle ich einen Auszug aus dem Prog hier ein.
Grüße, picass

vloki

Zitat von: picass in 06.02.2023, 10:07:08 CETFalls das nichts wird, stelle ich einen Auszug aus dem Prog hier ein.
Wirklich sinnvoll ist ein kleines, komplettes und gepacktes Projekt, welches möglichst wenig Sourcecode enthält.
Einfach auspacken, fix und fertig lauffähig...
MPLABX  XC8  KiCAD

picass

#8
Die Lage hat sich geklärt. Aber vorher stand die Suche nach der SSD, die aber nur die betrübliche Erkenntnis brachte: das MPLAB X IDE 5.35 war auf einer solchen, die als einzige bisher den Löffel abgab: "unallocatet cluster" und das wohl im Bootbereich. Also neue SSD her, das Windows endlos updaten, andere Progs updaten, das 5.35-er drauf und gucke da: auch hier wollte das genauso wenig fluppen mit dem Überlauf. Aber....

...dann kam der Trichter: es fluppt schon im Simulator, aber nur dann, wenn man den frei laufen lässt. Was mich gestört hatte, war die fehlende Beobachtung beim Single-Steppen, was ich recht häufig anwende. Im SS-Modus kann man ruhig das Timer0-Register (was ein 16-bit-R ist) auf FFFE setzen und dem Übersprung zusehen, das lässt das INTCON-Reg ziemlich kalt. Gleich drauf auf speed gehen und den Simulator "run" lassen, gerät er nicht in eine Endlosschleife und gleich hinter dieser Routine aufgestoppt zeigt sich endlich auch das TMR0IF-Flag als gesetzt!

Das dann anschließend auf meiner "alten" SSD mit der 5.20-er IDE und gucke da: dort genauso! Single-Steppen zeigt offenbar nicht alle Flags. Aber nu' weiß ich es und kann mit Breakpoints diesen Zahn ziehen!

Danke sehr, auch und gerade für das Angebot des Testens des Progs. Das hatte ich vor dem Neu-Entdecken und hier Einstellen schon "aufbereitet", damit es vernünftig lesbar ist und von unnötigem Ballast befreit. Wenn ich mit der Install der Maulwurf-Anlage fertig bin, kann ich das ja hier unter Projekten einstellen.
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 (2)