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?
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
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
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.
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.
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
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<
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.
> 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 :-(
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.
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
http://www.mikrocontroller.net/articles/PIC_Codebeispiele Ja da gibt es dieses Beispiel werde mir das mal reinziehen
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.
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...
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.