Forum: Mikrocontroller und Digitale Elektronik PIC16F886 Uhrenquarz schwingt nicht!


von Patrick U. (patrick_u)


Lesenswert?

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

von Ottmar K. (wil1)


Lesenswert?

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

von Kein Name (Gast)


Lesenswert?

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.

von Patrick U. (patrick_u)


Lesenswert?

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

von Kein Name (Gast)


Lesenswert?

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.

von usuru (Gast)


Lesenswert?

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.

von Patrick U. (patrick_u)


Lesenswert?

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 :/

von Schlumpf (Gast)


Lesenswert?

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

von usuru (Gast)


Lesenswert?

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

von B. S. (bestucki)


Lesenswert?

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.

von Kein Name (Gast)


Lesenswert?

OSC1, OSC2 und T1OSCEN? Wolltest du T1OSO, T1OSI schreiben oder hängt 
der Uhrenquarz wirklich an OSC1, OSC2?

von Patrick U. (patrick_u)


Lesenswert?

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

von usuru (Gast)


Lesenswert?

Mach 1-2 Fotos von Deinem Aufbau und stelle sie hier rein

von Patrick U. (patrick_u)


Lesenswert?

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

von Patrick U. (patrick_u)


Lesenswert?

Er schwingt :D

Danke für die Hilfe, Problem gelöst :)

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.