PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeittakt über Uhrenquarz



Duesentrieb
19.07.2010, 21:29
Hallo,

ich benötige in einer Schaltung einen sekundengenauen Takt.
Uhrenquarze die bisher gefunden habe haben eine Frequenz von 32,768 kHz.
Kann mir jemand sagen wie ich ein solchen Quarz an einen Interrupteingang anschließen muss um einen Sekundentakt zu erzeugen?

Kampi
19.07.2010, 21:40
Du könntest das mit einem Teiler machen. Erst durch 256 teilen dann durch 128. Vorrausgesetzt es gibt so große....andernfalls musst du öfters teilen....

Duesentrieb
19.07.2010, 22:04
das ist aber ganz schön aufwendig. Geht es auch einfacher (ohne 2 zusätzliche IC's)

Ich benötige doch "nur" einen Sekundentakt

for_ro
19.07.2010, 22:08
Hallo,

ich benötige in einer Schaltung einen sekundengenauen Takt.
Uhrenquarze die bisher gefunden habe haben eine Frequenz von 32,768 kHz.
Kann mir jemand sagen wie ich ein solchen Quarz an einen Interrupteingang anschließen muss um einen Sekundentakt zu erzeugen?

Kommt auf deinen µC Typ an. Wenn du einen Mega mit TOSC Anschlüssen hast, kannst du ihn direkt dort anklemmen. Beim Mega16 geht das z.B. so. Beim Mega8 kannst du dann allerdings keinen externen XTAL anschließen, da es die gleichen Pins sind.

Duesentrieb
19.07.2010, 22:14
o.k. ich habe einen Mega32. TOSC1 und 2 sind dort vorhanden.
Bisher ahbe ich damit aber noch nichts gemacht.
Hast du ein Beispiel in Bascom?

for_ro
19.07.2010, 22:21
Lies dir mal die Hilfe zu
Config Clock = Soft
durch. Dort ist erklärt, welche Variablen damit automatisch definiert werden und was der Sinn des SECTIC Labels ist.

Duesentrieb
19.07.2010, 22:27
wow - Super!
Aber wie "aktiviere" ich die TOSC Eingänge bzw. wie erfährt der Chip dass dort eine Quarz angeschlossen ist?

for_ro
19.07.2010, 22:31
Macht Bascom automatisch, wenn du

Config Clock = Soft

angibst.

Duesentrieb
20.07.2010, 09:18
Super- Danke!
Benötige ich an den Pins auch noch Kondensatoren oder reicht das Quarz aus?

mat-sche
20.07.2010, 09:21
es reicht wenn Du den Quarz direkt anschließt.

Duesentrieb
21.07.2010, 07:47
Hallo zusammen,
das Quarz ist angeschlossen und ich habe gleich mal das Beispiel aus der Hilfe aufgespielt.
Die Uhr läuft jedoch nicht mit der richtigen Frequenz. Sie geht in jeder Minute ungefähr 5 sec nach.

Den reguläre Takt meines Mega32 gibt ein 7,3728 MHz Quarz vor.
Hat der vielleicht einen Einfluss auf den takt des Uhrenquarz?
Müssen evtl. die Fuse verändert werden?

Richard
21.07.2010, 13:02
Ich hatte einmal eine Schaltung mit externen Uhrenbaustein,
An dessen Quarz waren sehr wohl Kondensatoren, einer sogar
als Trimmer zum genauen Abgleich (ziehen der Quarzfrequenz).

Gruß Richard

Kampi
21.07.2010, 14:06
Für sowas muss man ins Datenblatt schauen. Bei der DS1307 z.B. werden keine externen Kondensatoren gebraucht. Diese könntest du z.B. auch nehmen, da der Baustein einen AUsgang hat wo ein Rechteck mit einer bestimmten, einstellbaren Frequenz rauskommt. Unter anderem kannst du da auch 1 Hz einstellen. Und die RTC ist von sich aus schon sehr genau. Und da musst du auch nicht viel bei machen außer anschließen und ein passendes I²C Programm zu schreiben.

Vitis
22.07.2010, 00:15
er hat aber keine externe RTC dran, sondern arbeitet
mit dem internen Timer und Uhrenquarz.

Die Quarze sind mehr oder weniger genau, aber so in
etwa sollte es hin kommen. 5 Sec. in der Minute ist
aber zu viel Abweichung.
Dann sollte man wissen welcher Quarz genau verwendet
wurde (-> Datenblatt) und ob der auch an den ATMega passt.
Dann kommts noch auf das Programm an, wenn der µC z.B.
in einer anderen ISR Ewigkeiten bummelt kann da schon mal
ne Sekunde verloren gehen (-> Programm / Quellcode).

PICture
22.07.2010, 01:19
Hallo!

Ich kenne die AVR nicht genug, aber vielleicht könnte der Tread behilflich sein: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=42631& .

MfG

Kampi
22.07.2010, 07:31
Hab mal ein bischen das Datenblatt von Atmel durchstöbert und die schreiben da auch das kein zusätzlicher Kondensator benötigt wird (Seite 31).
Desweiteren müssen auch keine Fuses gesetzt werden. Das macht Bascom automatisch sobald die "Soft Clock" funktion aufgerufen wird.

Besserwessi
22.07.2010, 18:40
Bei den Uhrenquarzen gibt es verschiedene Typen, je nach typ müssen die Konensatoren andere Werte haben, um die nominelle Frequenz zu erreichen. Bei einigen Quarzen kann man mit einem extra Trimmkondensator noch was retten, wenn die benötigete Kapazität kleiner als die interne ist, wird es schwer.

Eine Abweichung von 5 s je minute ist aber reichlich groß. So weit läßt sich die Quarzfrequenz normal kaum verstellen. Das spricht schon mher für ein Softwareproblem.

PICture
22.07.2010, 18:52
Hallo!

Ich habe sowas bei mißerfolgten Versuchen beobachtet, und festgestellt, dass der Qüarz sich als Kondensator verhält und weit von seiner eigener Rezonanzfrequenz oszilliert.

Es ist reine Hardwaresache, weil in meinem µC gar kein Programm gelaufen ist. Mit dem in o.g. Link skizziertem Generator habe ich bisher gar keine Probleme gehabt und konnte die Taktfrequenz mit dem Kondensator (Trimmer) sehr genau einstellen.

Die Uhrenquarzen besitzen eben großen inneren Widerstand und arbeiten am besten mit seriellem Rezonanz.

MfG

mat-sche
22.07.2010, 20:13
Hi,

ohhh, ich nutze ja gar keinen Uhrenquarz... :-b :-b

im Anhang mal meine Lösung. Ich nutze einen 32kHz Resonator der auch in Verbindung mit einen DS1307 über eine 3V Litiumzelle bei Stromausfall weiter arbeitet. Das ganze werkelt gemeinsam mit einem DCF77 Funkuhrenmodul zusammen. Somit habe ich nicht nur eine Zeit sondern auch noch das Datum dazu :D.

Bei Codefragen einfach schreiben...
Gruß MAT

Duesentrieb
23.07.2010, 11:08
Hallo zusammen,

ich habe mir das ganze nun nochmal vorgenommen.

Konfig:
Atmega32 mit 7,3728 MHz
Alles Fuse ausgeschaltet (Hacken raus über Ponnyprog).
An den TOSC 1 und 2 Ausgängen hangt das Uhrenquarz vom Typ http://www.conrad.de/ce/de/product/156007/QUARZ-MH32768C/SHOP_AREA_29142&promotionareaSearchDetail=005
Kondensatoren sind daran nicht vorhanden!
Als Programm habe ich den Beispielcode aus Bascom genommen.

Ergebnis:
Nach 24 Std Laufzeit ergibt sich eine Abweichung <1s

D.h. Die Grundfunktion über das Uhrenquarz ist gegeben. Was allerdings einen wesentlichen Einfluss hat ist der Rest vom Programm der nebenbei ja auch noch abgearbeitet werden muss.
Ich bin eingentlich davon ausgegangen dass das weitere Programm keinen Einfluss auf die Funktion das Uhrenquarz bzw. dessen Takt an den beiden speziellen Pins des A32 hat und ich eine genaue Zeit bzw. einen Minuenimpuls, um den es mir ging, bekomme.

Vitis
23.07.2010, 11:34
in 24h weniger als 1 Sekunde Abweichung ist soweit im Rahmen, die Quarze haben auch Abweichungen, z.B. über Temperatur.

Ja, der Quarz läuft programmunabhängig, aber der Timer Interrupt nicht.
Wenn Ein AVR in einer Interruptroutine drinnen ist ignoriert er weitere
Interrupts bis diese abgearbeitet ist.
Dauert eine Interruptroutine länger als eine Sekunde wird diese verschluckt.
Aus diesem Grund hält man Interruptroutinen immer sehr kurz.

PICture
23.07.2010, 14:20
Ich weiß nicht, ob die AVR,s auch für Interrupts definierbare Prioriteten haben. Wenn ja, könnte man dem Uhrinterrupt höchsten Priorität zuweisen und er wird nie durch andere unterbrochen.

Wenn nicht könnte man bei jedem Interrupt nur ein Flag setzen und die Interrupts im Hautprogramm in gewünschter Reihenfolge mit Prioritäten bearbeiten. ;)

MfG

Kampi
23.07.2010, 14:29
Also im Datenblatt vom Mega32 steht folgendes:
The list also determines the priority levels of the different interrupts. The lower the address the higher is the
priority level. RESET has the highest priority, and next is INT0 – the External Interrupt Request0. The Interrupt Vectors can be moved to the start of the Boot Flash section by setting the IVSEL bit in the General Interrupt Control Register (GICR).

Das bedeutet denk ich mal soviel wie Prio 1. RESET Prio 2. Int0 Prio 3. Int1 Prio 4 Int2
Ich denke sowas meintest du oder? 8-[

PICture
23.07.2010, 14:47
Genau um so was ist mir gegangen, Kampi ! :)

So wie es sehe, lassen sich die Prioritäten in BASCOM jedoch nicht beliebig definieren, oder ? 8-[

Ich als PIC Benutzer brauche AVR's nicht so gut kennen, dafür gibt es andere Spezialisten, wie du ...

Wenn ich aber irgendwann irgendwas mit PIC nicht realisieren könnte, würde ich dafür gerne einen AVR mit ASM oder ungern mit BASCOM nehmen ...

MfG

Kampi
23.07.2010, 14:54
Öhh wie das mit der Deffinition ist weiß ich gerade nicht so recht muss ich gestehen :-b .
Aber ich vermute mal ziemlich stark das der Compiler das von sich aus schon macht. Weil du nach dem Interrupt Befehl ja noch schreiben musst um welchen Interrupt es sich handelt.
Soweit ich in der Bascom Hilfe richtig geschaut habe ist der XMega der einzigste Chip wo man die Priorität der Interrupts konfigurieren muss. Bei allen anderen macht es der Compiler automatisch.

Edit: Hab einen Fehler gemacht. Die Interrupts haben keine unterschiedlich hohen Prioritäten sondern es ist so, dass wenn ein Interrupt ausgelöst wurde und es wird ein zweiter ausgelöst dann muss der zweite warten bis der erste abgearbeitet ist.

Steht hier nochmal genauer
-> http://www.mikrocontroller.net/topic/83787

PICture
23.07.2010, 15:02
Danke sehr vor allem für den Link ! :)

Jetzt ist mir alles Klar und ich sehe deutlich, dass wenn jemand, wie ich, hardwarenahe programmieren will, eignet sich dafür BASCOM, wie meisten Hochsprachen ausser C, leider nicht ... :(

MfG

Kampi
23.07.2010, 15:05
Naja du kannst im Bascom auch mitten im Programm auf Assembler umswitchen und dann ein Mixprogramm aus Basic und Assembler machen.
Wenn man allerdings Prioritäten für die Interrupts festlegen will muss man auf einen XMega wechseln und das entweder auf Registerebene proggen(glaube so geht das ohne Bascomvollversion?) oder man kauft sich das Programm :)

PICture
23.07.2010, 15:16
Ich habe früher gemischte Programme in QBASIC für PC (80286, 80283, und 80284) geschrieben, mir ist aber für µC ohne Betriebsystem rein ASM lieber, weil einfacher ... :)

MfG

Richard
23.07.2010, 16:14
Ich habe früher gemischte Programme in QBASIC für PC (80286, 80283, und 80284) geschrieben, mir ist aber für µC ohne Betriebsystem rein ASM lieber, weil einfacher ... :)

MfG

G*** Leider muss Mensch dann aber für jeden Chip Typ das
Datenblatt auswendig lernen....Aus diesem Grund habe ich in
ASM Zeiten nur alle xyz Jahre den Prozessor gewechselt. Kennt
man den Chip allerdings in und auswendig, ist ASM recht einfach. :-)

Gruß Richard

PICture
23.07.2010, 17:20
Eigentlich muss man nur die innere Struktur des µC's, SFR- und Befehlliste vor Augen haben und das Assemblerprogramm genug kennen. Den Rest lernt man ziemlich schnell aus Fehler, oder ? 8-[

Das eigentliche ASM Programm ist für mich, von der Struktur, immer gleich. Ich benutze, aus eingeborener Faulheit, momentan PIC's mit 35/75 Befehlen, habe aber nach dem Z80 mit ca. 1000 Befehlen keine Angst mehr vor beliebigen µC (z.B. AVR) ... :)

MfG

Vitis
23.07.2010, 19:01
nein, AVRs haben keine Prioritäten.
Kannste nur per kurzer ISR und Flags setzen
lösen. Dann noch ne ganz ausgefuchste Statemachine
und Du kannst ne Priorisierung erreichen ... ist aber
mehr Aufwand als für die Aufgabe gerechtfertigt.

Richard
23.07.2010, 19:22
Eigentlich muss man nur die innere Struktur des µC's, SFR- und Befehlliste vor Augen haben und das Assemblerprogramm genug kennen. Den Rest lernt man ziemlich schnell aus Fehler, oder ? 8-[
MfG

Stimmt auch wieder, ich bin mit 6502/6510/8051 und PIC
"groß geworden". Sehr viel umdenken musste man im Grunde
nicht wirklich. :-)

Das schöne an Bascom ist halt (Man Darf faul sein) und Kopiert
sich sein Programm auf die Schnelle zurecht. Geht aber auch mit
ASM wenn Mensch sich erst einmal genug Standard aufgaben in
einer Lib gespeichert hat. Dann besteht das Hauptprogramm fast nur
noch aus Call xxxx......Ich hatte mir einmal eine Serielle I/O mit
automatischer Baudraten Erkennung gebaut, ging ganz gut.:-)

Gruß Richard

Gruß Richard

Kampi
23.07.2010, 19:29
nein, AVRs haben keine Prioritäten.
Kannste nur per kurzer ISR und Flags setzen
lösen. Dann noch ne ganz ausgefuchste Statemachine
und Du kannst ne Priorisierung erreichen ... ist aber
mehr Aufwand als für die Aufgabe gerechtfertigt.

Soweit ich das Verstanden habe ist das bei XMegas dann aber mit Prios gemacht worden.

Config Priority
Action
Configures the interrupt system and priority for Xmega
Syntax
CONFIG PRIORITY= prio, VECTOR= vector, HI= hi, LO= lo, MED= med

Oder verstehe ich das falsch? 8-[
Wobei man davon ausgehen kann das nicht jeder Mensch ein XMega benutzt....vorallem da die kein ISP haben *weint*
Ja und das mit dem faul sein ist das schöne an Bascom. Nur der Nachteil ist das man sich selten in das Programm rein denkt und auch in die abläufe.

Vitis
24.07.2010, 10:03
sind wir beim xmega oder beim 8-bitter avr?
beim xmega muss ich passen, noch nicht verwendet.

was die Hardwarenähe angeht ... man muss ja die highlevelbefehle
von bascom nicht verwenden, mitunter ist es sogar sinnvoll das nicht
zu tun, sondern direkt auf den Registern zu arbeiten ...
spart ausführungszeit und erleichtert sogar manchmal das debuggen.
ich verwende die bascominternen praktisch nur bei komplexen berechungen,
schleifen und verzweigungen ... ansonsten lieber direkt.

was die interrupts angeht ...
man kann in einer ISR wiederum interrupts enablen .... aber das debuggen
wird da nicht einfacher, stichwort stack und frame

Kampi
24.07.2010, 10:12
Naja braucht er überhaupt mehr als 1 Interrupt? Er will ja nur einen Sekundengenauen Timer und da reicht 1 Interrupt ja vollkommen aus oder? 8-[
Was den XMega angeht.....gearbeitet hab ich damit auch noch nicht. War mehr oder weniger eine Verständnissfrage :)