Forum: Mikrocontroller und Digitale Elektronik Uhr mit 32,768Khz Quarz


von Martin M. (ats3788)


Lesenswert?

Hallo
** PIC16F887 **

Ich bin noch Anfänger, der sich langsam
zu komplexeren Aufgaben hinarbeitet.

Das Problem - Erst mal eine Uhr mit Siebensegment Anzeige
verwirklichen.

Ich lehne mich an das Beispiel
http://www.sprut.de/electronic/pic/programm/stop.htm
an.

Nur mit einem 32,768Khz Quarz ist das aufrufen der Segmente
6 an der Zahl einfach zu langsam.

Ich habe ein heftiges Flackern.

Komme so auf ca. 10Hz geschätzte Wiederholungsrate.
Bevor ich einen schnelleren Quarz in der Schaltung verlöte
die Frage.

Sollte so was mit einem 32,768KHz gehen?

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Hallo!


Also wie es beim PIC genau ist, kann ich dir jetzt auch nicht sagen, da 
ich bisher nur AVR programmiert habe. Aber für gewöhnlich nimmst du den 
32khz Quarz nicht als Taktgeber für den kompletten Chip, sondern nur als 
TAktquelle für einen Timer. Beim AVR gibts da für einen Timer den 
asynchronen Modus, und da kannst du mithilfe eben so eines Uhrenquarzes 
den Timer ansprechen. Ich denke, beim PIC ist es ähnlich. Und als 
Taktquelle für den eigentlichen Chip nimmst du einfach den internen Takt 
von ein paar Mhz, und damit wird das Anzeigen der Uhrzeit wieder schnell 
genug.


MfG Dennis

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, sollte gehen.
PIC teilt Takt durch 4, bleiben 8kHz.
Nimmt man pro Stelle 50Hz, hast du einen Multiplextakt von 300Hz, also 
27 Takte, um:
-Anodenansteuerung löschen
-neues Wort ausgeben
-nächste Anode einschalten

von Karl H. (kbuchegg)


Lesenswert?

Martin Michael Kunkies schrieb:

> Sollte so was mit einem 32,768KHz gehen?


Wenn ich das richtig sehe, dann läuft der eigentliche µC mit 1Mhz. Davon 
abgeleitet ist der Multiplex-Takt und der beläuft sich auf 250Hz (laut 
Kommentaren im Code), was dann pro Stelle ein bischen über 60Hz 
ausmacht. 60Hz ist zwar schon ein wenig knapp, aber bei normaler 
Betrachtung sollte da nichts flimmern.

die 32kHz dienen zur Versorgung des Timer 2, der die eigentlich zählende 
Uhr realisiert.

von usuru (Gast)


Lesenswert?

Der 32.768 gehört an den Timer1 (nicht 2), dafür gibt es sogar extra 
Pins (T1OSO und T1OSI), der Kern kann dann mit dem internen Oszillator 
laufen (beim 16F887 bis 8 MHz). Das ist bei PICs (und auch anderen µC) 
so Standard.

von Ottmar K. (wil1)


Lesenswert?

Das wäre doch auch eine Lösung:

1. fosz mit 4.096MHz-Quarz
2. Prescaler 1:16 vor TMR0
2. Interrupt bei TMR0-Overflow
4. 4.096.000Hz : 4 : 16 : 256 = 250 Interrupts/sek,
   entspricht einem Interrupt-Takt von 4ms.
5. 4ms-Zähler Preset 250 increment bei jedem Interrupt
6. 4ms-Zähler = 0 dann ist 1 Sekunde rum

Der nunmehr fü eine Uhr doch recht schnelle Arbeitstakt von 1MHz sollte 
hinsichtlich multiplexen all Möglichkeiten offen halte.

mfG Ottmar

von Ottmar K. (wil1)


Lesenswert?

Ottmar K. schrieb:
Berichtigung:
Falsch: > 5. 4ms-Zähler Preset 250 INcrement bei jedem Interrupt<
Richtig > 5. 4ms-Zähler Preset 250 DEcrement bei jedem Interrupt<

von Werner (Gast)


Lesenswert?

Wie wäre es mit einem ganz normalen Quarz für alles?
Beitrag "Die genaue Sekunde / RTC"
Das sollte sich auch auf einem PIC umsetzen lassen.

von MaWin (Gast)


Lesenswert?

> Sollte so was mit einem 32,768KHz gehen?

Natürlich.

Es ist sogar gut und sinnvoll, weil bei so langsamem Takt die 
Stromaufnahme gering bleibt.

Programme werden nur zu langsam, wenn man nicht programmieren kann.
Allerdings gibt es davon viele Beispiele :-(

von W.S. (Gast)


Lesenswert?

MaWin schrieb:
> Natürlich.

Ach MaWin, du großer Theoretiker..

Hier haben wir ein 'blutiges' Anfangsprojekt, zu dem ich mal meinen Senf 
hinzugeben möchte:

1. Ein Takt von 32 kHz ist nett, wenn man Strom sparen will. Dazu gehört 
aber auch, daß nicht nur der uC Strom spart, sondern die restliche 
Schaltung auch.

2. Als Anzeige LED's zu nehmen, ist alles andere als stromsparend. 
Nehmen wir mal 4 Stellen, von denen im Mittel so etwa die Hälfte an ist. 
Nehmen wir dann mal an, daß der Martin sich vier besonders 
'stromsparende' Anzeigen ausgesucht hat, die mit 1 mA pro Segment 
auskommen. Macht 4*7/2 = 14 leuchtende LED's und somit 14 mA. Da fällt 
der Betriebsstrom des PIC gar nicht auf, selbst wenn der mit 20 MHz 
getaktet würde.

Fazit: Es ist allemal besser, vorher nachzudenken.

Ich hätte da 2 Vorschläge:
a) den PIC mit einem Quarz versehen, der im Bereich 8..20 MHz liegt. Die 
eigentliche Frequenz ist egal, solange man sie ablesen und entsprechend 
im Programm berücksichtigen kann.

b) die LED-Anzeige entfällt und stattdessen wird ein LCD benutzt. Ein 
unbeleuchtetes Alpha-LCD braucht nicht viel Strom, ich schätze mal 0.1 
mA bis 2 mA je nach Typ. Beim PIC16F887 käme mir da noch die Idee, ein 
passives LCD, also 4x Siebensegment zu nehmen und ein bissel mit den 
Portbeinen zu zirkeln: Port B+C+D machen 24 Pins, A+E nochmal 6 (den OC 
lassen wir) Das reicht für 4x7=28 Segmente und eine Backplane. Könnte 
hinhauen, wenn das LCD langsam ist. Man braucht ja bloß 1x pro Minute 
neu zu rechnen und in der Zwischenzeit nur die Ports zyklisch zu 
invertieren.

W.S.

Ähem.. ich hätte da nochwas: Hab mal vor einiger Zeit ein Grafik-LCD an 
einen PIC16F871 angeschlossen. War ein ALPS-LSU von Pollin, gibt es dort 
immer noch. Die Bedienroutine war etwas tricky, aber es geht - zumindest 
mit Ziffern. Wenn hier jemand dringend danach schreit, dann poste ich 
das mal.

von Martin M. (ats3788)


Lesenswert?

Danke Danke Danke
für die vielen Antworten

Wie geschrieben ich bin Anfänger und möchte lernen.
Wie W.S. richtig geschrieben ist mir die Stromaufnahme egal.

Mit LCD hätte ich das Beispiel von Sprut kopieren können.
So lernt man aber nicht.

Ich wünsche allen µC Begeisterten Fohe Ostern

von Martin M. (ats3788)


Lesenswert?

http://www.mikrocontroller.net/articles/PIC_Codebeispiele

Ja da gibt es dieses Beispiel
werde mir das mal reinziehen

von Karl H. (kbuchegg)


Lesenswert?

Martin Michael Kunkies schrieb:

> Mit LCD hätte ich das Beispiel von Sprut kopieren können.
> So lernt man aber nicht.

Ketzerische Frage:
Und wo ist da jetzt der Unterschied zu jetzt?
Du benutzt die Sprut-Uhr. Scheinbar hat Sprut da mit dem Quarz einen 
Fehler gemacht und ihn falsch angeschlossen (wenn ich usuru richtig 
interpretiere) und du kriegst das nicht raus.
Ich hab meine Erkentnisse, wie Sprut sich das gedacht hat, auch nur aus 
den Programm-Kommentaren, weil ich die PIC nicht kenne. Aber: Ich habe 
aus dem Programm gelernt, wie Sprut sich die Funktion vorgestellt hat. 
Wenns für mich wichtig gewesen wäre, hätt ich mir das Datenblatt zum 
Prozessor geschnappt und das alles mal kontrolliert.
Hättest du auch machen können, dann hättest du tatsächlich was dabei 
gelernt. Denn in einem geb ich dir vollkommen recht: Einfach nur 
Nachbauen und das Programm draufspielen ... da lernt man nicht viel 
dabei. Das ist Malen nach Zahlen, mehr nicht.

von P. S. (fetter_homer)


Angehängte Dateien:

Lesenswert?

usuru schrieb:
> Der 32.768 gehört an den Timer1 (nicht 2), dafür gibt es sogar extra
> Pins (T1OSO und T1OSI), der Kern kann dann mit dem internen Oszillator
> laufen (beim 16F887 bis 8 MHz). Das ist bei PICs (und auch anderen µC)
> so Standard.

Mit meinem PIC16F84A würde ich gerne genau das Gleiche machen, 
allerdings habe ich für den externen Oszillator nur einen Pin zur 
verfügung... Wie kann ich damit die Quarzfrequenz nutzen?
Außerdem kann ich in den Optionen (siehe Bild) keinen internen 
Oszillator auswählen. Wenn ich also den Uhren-Quarz als allgemeinen 
Arbeitstakt an den "normalen" Oszillatoreingang schalte, arbeitet mein 
Controller natürlich recht langsam. Ohne Oszillator macht er allerdings 
gar nichts...

von P. S. (fetter_homer)


Lesenswert?

??

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
Noch kein Account? Hier anmelden.