Hallo, ich möchte mir eine Uhr mit einem Microcontroller bauen (PIC16F627A), und dazu verwende ich einen Uhrenquarz 32,768kHz: http://www.reichelt.de/?ACTION=3;ARTICLE=1089;PROVID=2402 (hat 10pF) Es ist allerdings das erste Mal, dass ich so einen langsamen Quarz verwende, vorher habe ich immer ein 4MHz-Quarz verwendet, mit zwei 22pF gegen Masse. Im Config-Word vom PIC besteht die Möglichkeit, zwischen XT (normales Quarz) oder LP (low power crystal) zu wählen. Muss ich da zweiteres wählen? Was ist nun bei dem langsameren Quarz zu beachten? Ich habe im Zusammenhang zu Uhrenquarzen meistens 33pF als Massekondensatoren gefunden. Wie kommt mensch auf diesen Wert? Und was würde sich als Trimmkondensator zur Feinjustierung empfehlen? Viele Fragen, ich weiß. Ich danke euch jetzt schon für eure Hilfe. Viele Grüße Jens
Nimm den internen Takt (OSC) und verbinde das Quarz am Timer1 . Der hat einen eigenen Oszillator extra für Uhrenquarze, welcher auch während eines sleep funktioniert. Genaueres im Datenblatt bei der Beschreibung des Timer1.
schliess den Uhrenquarz an Timer1 an, Kondis laut Datenblatt 2x 15pF. Timer1 generiert Interrupts, die schalten die Uhr weiter. Den Rest (Anzeige etc.) machst Du im Hauptprogramm, das läuft mit dem internen Oszillator (4MHz oder 48kHz).
Hallo, danke für eure Antworten. Vielleicht habe ich mich unklar ausgedrückt, aber ich würde gerne den PIC mit den 16kHz als Haupttakt betreiben, weil der nunmal nicht sehr viel mehr machen muss als zehn LEDs anzusteuern. Das wird ein batteriebetriebenes Gerät, das nur auf Knopfdruck die LEDs durchschaltet. Daher sollte der PIC möglichst wenig Strom ziehen (i.e. mit geringerem Takt laufen). Was muss ich speziell beachten, wenn ich den PIC mit 16kHz laufen lassen möchte? Gruß & gute Nacht Jens
Nichts. Bei mir läuft ein 16F628 auch mit 32768 Hz Uhrenquarz. Ganz normal beschalten. Die Kondensatoren sind m.E. unkritisch. Der Tip mit Timer1 ist allerdings richtig. Wenn Timer1 läuft, kann der ganze Rest vom PIC schlafen und verbraucht so nur minimal Strom. Bei mir ist der Uhrenquarz nur deshalb der Haupt-Takt, weil ich vorher einen PIC ohne internen Oszillator vorgesehen hatte. Gruß HerrSchrader
Hmm, die Tips zum Timer1 hören sich in der Tat praktisch an, da habt ihr schon Recht. Die Schaltung ist bateriegepuffert [die werden bei Stromausfall über ein Relais zugeschaltet], und wenn am Pin RB2 (habe ich willkürlich gewählt) auf einmal nur noch eine digitale null anliegt, dann sage ich dem Controller SLEEP ();, um Strom zu sparen, weil er ja nun an den Batterien hängt. Also ich stelle mir die vorherige Konfigurationen dann so vor: Ich setze im Config-Word den Oszillator-Modus auf INTOSC (RA6 und RA7 sind dann als IOs verwendbar). Der PIC läuft dann mit internem Takt (ich werde hier 4MHz auswählen weil ich noch PWM brauche). Globale Interrupts sind aktiviert (GIE = 1). Dann schalte ich Timer1 an (TMR1ON = 1), setze den Prescaler auf 1:8 (T1CKPS = 0b11), und sage ihm, er soll als Timer arbeiten (TMR1CS = 0), und den externen Takt, also die 32768Hz, dazu benutzen (T1OSCEN = 1). Den Uhrenquarz schließe ich dann an RB6 und RB7 an, mit 15pF-Kondensatoren. Zudem setze ich den Power-Up-Timer (PWRT = 1) damit das Uhrenquarz einschwingen kann. Dann muss noch der Interrupt bei Überlauf des Timer1 aktiviert werden (TMR1IE = 1), und in der ISR wird dann einfach geschaut, ob TMR1IF == 1. Dort wird ein Zähler auf 4096 hochgezählt, und wenn der resettet, dann ist eine Sekunde um, und die Uhrzeit wird geupdatet. In der ISR kann er dann auch überprüfen, ob an RB2 immer noch eine Null liegt. Wenn ja, dann gehe wieder schlafen ( SLEEP (); ), aber wenn dort eine 1 liegt, dann bleibe wach (das macht er doch, wenn ich ihm nicht explizit erneut schlafen lege, oder?). Puhh, das war viel Text, aber mir würde es sehr gut helfen, wenn da jemand, der das schonmal gemacht hat, drübersehen könnte. Ich hab bestimmt etwas falsch verstanden und/oder vergessen. Danke für eure Hilfe. Jens
(nur der Vollständigkeit halber, die Lösung findet sich hier: Beitrag "Timer1 läuft nicht an bei Uhrenquarz")
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.