Hallo! Nachdem mein Display endlich korrekt vom PIC angesteuert wird, wollte ich mich nun weiter in Richtung Digitaluhr bewegen. Nun ergibt sich aber das nächste Problem mit dem Quarz. Ich habe einen "Mini-Uhrenquarz" von Reichelt, Taktfrequenz 32 kHz. Anschließend habe ich einige Teile Code aus dem LCD Uhren Beispiel auf Sprut genommen und in meine Anwendung eingepasst. Hier das Problem: Läuft der PIC im Low Power mode mit dem Externen Quarz, so wird auf dem Display nur 00:00:01 angezeigt und die Uhr "hängt" scheinbar. Der PIC selber läuft aber, da ich auf Tastendruck die Uhrzeit verstellen kann, nur läuft sie eben nicht eigenständig. Nehme ich exakt den gleichen Sourcecode, nur mit anderer Config ( _INTOSC_OSC_NOCLKOUT), so läuft die Uhr eigenständig, nur eben viel zu schnell (da der interne Oszillator ja ein "wenig" schneller ist ;-)) Es sieht also so aus, als würde der Quarz nicht "anspringen". Wie kann ich einfach testen ob der Quarz funktioniert? Habe kein Ossziloskop oder ähnliches, nur ein einfaches Multimeter :-D Hab den Source mal hochgeladen. Zeit wird verstellt, in dem der Button an Pin 0, Port A gedrückt gehalten wird und dann mit Pin 1 die Minuten oder Pin 2 die Stunden verstellt.
Schreib Dir doch ein Mini-Programm, das nix weiter tut als in einer Endlosschleife einen Portpin zu toggeln. Mit einer passenden Delayschleife drin wirds so langsam, dass Du das Blinken einer LED bequem sehen kannst. Blinkt sie ordnungsgemäß fünf Minuten lang, dürfte Dein Quarz OK sein.
Hab folgendes Programm gebastelt. Das Programm müsste dann alle 65000 "Ticks" ( == alle 2 Sekunden ungefähr?) den Status der Leds umschalten. Hab das Programm auf den Chip geflasht und .. nichts passiert. Die LEDs bleiben dunkel. Interrupts müssten an sein, PORTB steht auch auf Ausgang. Schlussfolgerung : Quarz defekt? Oder doch ein Fehler im Code? =)
Hab von der PIC-Programmierung leider keine nennenswerte Ahnung. Aber das Testprogramm kann doch viel einfacher sein: Loop: [Verzögerungsschleife] [Register inkrementieren] [irgendein Bit des Registers auf Pin ausgeben] jmp Loop Da Interrupts und Timer unnötig sind, würde ich auch drauf verzichten, und mir das allersimpelste überlegen, was seinen Zweck erfüllt. Sonst weißt Du wieder nicht worans liegt, wenns nicht geht. Just my 2 cents...
Hallo, ich unterstelle du wilst den Timer benutzen. Ich sehe aber keine initialisierung des Timers und keine Freigabe des Timer-Interrupts. außerdem wird der Timer nicht gestartet. Schreibe doch in deinem Hauptprogramm eine verschachtelte Schleife und verzichte auf Timer und Interrupt. Gruß Manfred
Ach, soo.. ich ging eigentlich davon aus, dass der externe Quarz nur die Impulse für die Interrupts "abgibt". Da er ja den kompletten Takt vorgibt, ist es selbstverständlich einfacher, die Schleife ins Hauptprogramm zu tun. Ich teste dies mal sofort, dankeschön. Anschließend werde ich das Ergebnis hier herein editieren. EDIT: Hat nicht funktionert :-/ Hab den Source nochmal angehängt
Ich habe jetzt den Quarz gegen einen neuen ausgetauscht, allerdings funktioniert es weiterhin nicht. Dann habe ich mal die Konfiguration des Chips auf IntRC, no CLKOUT geändert und siehe da, es blinkt. Der Programmcode scheint also zu funktionieren. Nur in der Schaltung stimmt etwas nicht. Könnten die Kondensatoren schuld sein? Laut Schaltplan sollten es 2 x 100pF Kondensatoren sein. Auf meinen steht die Beschriftung 101, was eben 100pF entspricht. Also laut Schaltplan stimmt alles, trotzdem funktioniert es nicht... Laut Reichelt besitzt der Quarz eine Lastkapazität von 12pF besitzt. Allerdings ist mir der Begriff der "Lastkapazität" nicht ganz klar. Bedeutet diese, dass nicht 100pF, sondern eben 12pF Kondensatoren angeschlossen werden? Ich würde mich sehr über eine Antwort freuen.
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.