Hallo liebes Forum :) Ich habe ein kleines Projekt am Laufen, welches eine Digitale Uhr mittels LEDs realisieren soll. Dafür verwende ich den PIC16F886 und einen 32kHz Uhrenquarz -> mittels Interrupt möchte ich dann die LEDs umschalten. Der PIC und die Schaltung laufen, allerdings schwingt der Quarz nicht mit der gewünschten Frequenz. Ich habe den Quarz (bedrahtet, Röhrenform) an OSC1 und OSC2 gehängt und beiden Beinchen noch nen 33pF Kondensator (orange scheibe) gegen Masse verpasst. Wenn der PIC beim Debugging auf "Pause" ist, zeigt mir das Oszi eine schöne 32kHz Schwingung. Sobald ich den PIC wieder starte, bricht die Schwingung ab und der TMR1 zählt gaaaaanz langsam mit (TMR1 soll laut Firmware die Schwingungen des Quarz zählen) Nach einer Sekunde hat der 16-Bit Timer ca. 400 Zählungen gemacht also viieel zu langsm! Bitte um Hilfe / Tipps! :) Danke im Voraus
Hallo Patrick, vielleicht bewirken die zusätzliche Kapazität und der Widerstand des angeschlossenen Tastkopfes ein Schwingen? Schau Dir doch mal diese Druckschriften von microchip zum Thema "oscillator" an: AN949 "Making Your Oscillator Work" AN849 "Basic PICmicro® Oscillator Design" mfG Ottmar
Uhrenquarz an OSC1, OSC2? http://ww1.microchip.com/downloads/en/AppNotes/91097A.pdf behauptet, da würde man noch einen zusätzlichen Widerstand benötigen.
Also ich hab mir nun alle ANs von Microchip zu dem Thema durchgelesen, bringt mich aber leider nicht weiter. Was ich rausgefunden habe ist, dass die Kapazitäten eventuell nicht genau genug sind :S der Widerstand dient nur zur Begrenzung des Stroms, hier konnte ich ein Problem jedoch nicht feststellen ich habe die "genaue" Schwingfrequenz nun ermittelt, sind relativ erstaunlich genaue 40Hz
40kHz? Die Application Notes schreiben - bei zu viel Strom kann der Quarz in einem anderen Mode angeregt werden und auf einer anderen Frequenz schwingen. Oder 40Hz? Mit den richtigen Kondensatoren braucht ein Uhrenquarz mehrere Sekunden zum Anschwingen. Sind sie zu groß, schwingt er gar nicht mehr. Eventuell fängt der Pic nur 40 Störungen pro Sekunde ein.
Ich habe schon etliches mit dem 16F886 gemacht, ein schöner und problemloser PIC, möglicherweise sitzt das Problem in der Software: ist T1OSCEN ein, TMR1GE evtl. aktiviert ? Und: schau Dir mal das Datenblatt Page 76-79 an.
40 Hertz .. Kann es denn sein, dass bereits 2x 33pf zu groß sind?? ich habe leider keine kleineren Kondensatoren daheim, müsste zum Conrad rausfahren.. Wegen der Software: T1OSCEN is enabled, ebenso TMR1ON, TMR1GE ist abgestellt (Gatefunktion) Wenn die Clocksource auf Intern (fosc/4) gestellt ist, und der Prozessor mit einem internen Takt von 125kHz (125/4 = 31,25kHz) läuft der Timer samt Interrupts problemlos (abgesehen von der fehlenden Genauigkeit aufgrund des ungenauen internen Taktes) Dazu habe ich lediglich " TMR1CS = 0; " statt " TMR1CS = 1; " in den C-Compiler getippt (also internen statt externen Takt für TMR1 verwenden) scheint daran also auch nicht zu liegen :/
Patrick U. schrieb: > der Widerstand dient nur zur Begrenzung des Stroms, > hier konnte ich ein Problem jedoch nicht feststellen Wie konntest du hier KEIN Problem feststellen? Wenn eine Oszillatorschaltung nicht sauber abgestimmt ist, und dazu gehört eben auch ggf ein Serienwiderstand, dann schwingt das nicht richtig. Ein Quarz hat auch immer eine maixmale Verlustleistung, die er umsetzen kann. Abgesehen davon sollte die Gesamtkapazität der Schaltung etwa der Kapazität des Quarzes entsprechen. Dazu solltest du in´s Datenblatt des Quarzes schauen, welche Kapazität der aufweist und entsprechend deine Beschaltung anpassen. 33pF erscheinen mir auf jeden Fall recht hoch
Der 16F886 ist bezüglich der Kondensatoren völlig unproblematisch, selbst auf einem Steckbrett läuft der noch mit 2x 33pF oder 2x 47pF, 18-27 pF wären aber besser, als Quarz nehme ich diese meist hier http://www.reichelt.de/index.html?;ARTICLE=32847
Wie bereits mehrmals geschrieben, kann der Tastkopf die Frequenz deines Quarzes beeinflussen. Besser ist es, ein Programm in Assembler zu schreiben und einen beliebigen Pin zu togglen, dessen Frequenz du dann mit dem Oszi misst. Die zu erwartende Frequenz kannst kannst du anhand deines Programms ermitteln (Befehle zählen). Dies kannst du natürlich auch mit einem Timer machen, erfordert jedoch, dass der Timer richtig eingestellt ist.
OSC1, OSC2 und T1OSCEN? Wolltest du T1OSO, T1OSI schreiben oder hängt der Uhrenquarz wirklich an OSC1, OSC2?
Kein Name schrieb: > OSC1, OSC2 und T1OSCEN? Wolltest du T1OSO, T1OSI schreiben oder hängt > der Uhrenquarz wirklich an OSC1, OSC2? Kopf an Wand Der Quarz hängt wirklich an OSC1 und OSC2 <.< Ja ich bin wohl echt doof, man man. Aber die Bezeichnungen sind echt zu ähnlich Q.o Kann man das über Software irgendwie noch retten oder heißts da nur: Umlöten? Weil auf Seite 64 (Datenblatt) steht folgendes: LP Mode - Uhrenquarz zwischen OSC1 und OSC2 hängen Kann ich dann einfach den Quarz für Prozessortakt verwenden und den Timer1 über Prozessortakt speisen? Danke für den tollen Hinweis!! PS: Wegen Oszi -> Habs auch ohne Oszi mit Software gemacht, kam ja das gleiche Raus
Ok - kurzes Update: Habe jetzt den LP - Prozessortakt hergenommen, er läuft auch stabil laut OSCCON-Register und damit füttere ich nun TMR1 Fazit: Da TMR1 nur fosc/4 verwenden kann, kommt nun nicht jede 2. Sekunde ein INT sondern jede 8. Sekunde Lösung: die Interrupt Routine schreibt "TMR1H = 0b11100000;" und lässt damit nur das "letzte achtel" ablaufen -> Interrupt alle 1Sekunden Ich prüfe gerade, ob die Genauigkeit stimmt, wenn ja -> Uhrenquarz schwingt Wenn nein -> Bekomme ich anscheinend den INTOSC-Takt (Glaub aber eh nicht das das passiert :) ) Danke schonmal für die hoffentliche Lösung meines Problemes :D :D :D
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.