Uhr mit 32,768Khz Quarz

OP #2623651
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?
#2623674
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
#2623686
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.
Gast #2623738
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.
#2623798
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
Gast #2623906
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 :-(
Gast #2623964
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.
OP #2624322
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
#2624406
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.
#2626765
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...
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren