Hallo! Ich habe vor einer ganzen Weile mir eine Wordclock selbst gebaut. Schaltung selbst entworfen, Programm selbst geschrieben. Läuft alles soweit ganz gut. Nur ist mir ein ganz typischer Anfängerfehler unterlaufen. Ich nutze nur den internen Taktgenerator, was ich jetzt mit regelmäßig falsch gehender Uhr merke. Zuerst dachte ich, wenn ich ständig mit dem DCF77 Signal syncronisiere, wird das schon klappen, nur ist teilweise der Empfang des Signals nur in der Nacht ordentlich. Ich hätte also einen Uhrenquarz für den Timer2 einsetzen müssen. Ich habe allerdings jetzt das Problem, das an den beiden XTAL1 und 2 Pins Taster angeschlossen sind. Einen der beiden Pins würde ich frei bekommen, einfach einen Taster auf einen anderen Pin verbinden. Nur leider habe ich dann keine anderen Pins mehr frei. Ich hätte also nur XTAL1 zur Verfügung. Im Datenblatt des Atmega8 wird auf Seite 30 unten davon abgeraten, nur den XTAL1 Pin zu nutzen. Jetzt ist natürlich meine Frage, ist es trotzdem möglich, das ich den XTAL1 für einen Uhrenquarz nutze und XTAL2 oder auch PB7 weiterhin als Tastereingang nutze? Oder hat jemand noch eine ganz andere Idee, wie ich das Problem in den Griff bekommen könnte? Vielen Dank schonmal im Voraus für eure Antworten MfG Dennis
Dennis H. schrieb: > Oder hat jemand noch eine ganz andere Idee, wie ich das Problem in den > Griff bekommen könnte? Du kannst den Sekundentakt, der vom internen Oszillator abgeleitet wird, trimmen. Wie sieht deine Zeitroutine aus?
Drobel schrieb: > Du kannst den Sekundentakt, der vom internen Oszillator abgeleitet wird, > trimmen. Wie sieht deine Zeitroutine aus? Mh, ich verstehe dich nicht ganz, oder vielleicht auch du mich nicht. Das Problem ist, dass der interne Quarz, wenn er kalt ist, anders läuft, als wenn er eine Woche schon läuft. Ich kann also Software-seitig nicht wirklich etwas verändern. Die Zeitroutine ist ganz simpel, es wird ein Interrupt ausgelöst, in dem in eine 16-bit Variable hochzähle, sozusagen habe ich aus meinem 8-bit Timer2 einen 16bit Timer gemacht. Und wenn diese 16-bit Variable mit meinem getesteten Wert übereinstimmt, wird wieder eine Sekunde höher gezählt. Getestet habe ich allerdings nur im Dauerbetrieb der Uhr. Das wird aber nicht ihr Anwendungsgebiet sein, da sie mit auf Messen soll, und dort macht es sich blöd, wenn die Uhr ständig falsch geht. Sie wird also mal für ein paar Tage angesteckt, und dann wieder mit nach hause genommen, zuhause wieder angesteckt, usw.. MfG Dennis
Zwei Überlegungen dazu: Wenn einer der ADC Pins frei ist, kannst Du Deine **beiden** Schalter dort mit einem Spannungsteiler mit unterschiedlichen Widerstandswerten unterbringen. Nötig ist dann nur eine ADC-Abfrage und Zuordnung zu einem von 3 Werten (kein Schalter, Schalter 1, Schalter 2 betätigt). Ob die zeitlichen Anforderungen Deines Gesamtprogramms mit einem Uhrenquarz erfüllt sind, musst Du mal überlegen. Evtl. wäre ein höherfrequenter Quarz geeigneter.
Oder High Voltage Programming, dann bekommste den Reset bin noch frei...
Fred S. schrieb: > Deines Gesamtprogramms mit einem > Uhrenquarz erfüllt sind, musst Du mal überlegen. Evtl. wäre ein > höherfrequenter Quarz geeigneter. Nein, das sicher nicht. Ich möchte den Uhrenquarz ja auch nur als Taktquelle für den Timer2. Der Rest der Schaltung kann ja weiterhin mit dem internen Takt laufen, das ist ja dann kein Problem. Nur die Zeitzählung muss genauer werden. Und das Datenblatt gibt an, das die externe Taktquelle für den Timer2 auch an den XTAL1 und 2 angeschlossen werden soll. Basti M. schrieb: > Oder High Voltage Programming, dann bekommste den Reset bin noch frei... Dazu habe ich keinen Programmierer, extra dafür einen kaufen wäre mir dann doch etwas zu weit hergeholt. Mir ist gerade selbst noch eine Idee gekommen. Wie wäre es, wenn ich einen Atmega88 nehme. Der ist ja ansich baugleich und Pinkompatibel. Dort könnte ich dann den Pin-Change Interrupt nutzen. Ist nur die Frage, wie bekomme ich den Uhrenquarz so verschalten, das er dafür geeignet ist. Also das er einen Eingang am Atmega treiben kann. MfG Dennis
Dennis H. schrieb: > Mh, ich verstehe dich nicht ganz, oder vielleicht auch du mich nicht. > Das Problem ist, dass der interne Quarz, wenn er kalt ist, anders läuft, > als wenn er eine Woche schon läuft. Skizze: Angenommen du verwendest einen 1 MHz internen Takt und einen 16-Bit Timer. Der Timer läuft nach 62.500 Takten (1/16 s nach internem Takt) über. Die Überläufe werden in einer Variablen mitgezählt. Etwa alle 24 Stunden kommt die präzise DCF-77 Zeit. Aus dem Abstand der DCF-Telegramme, bzw. der übertragenen Zeit, kann die neue Anzahl der Takte bestimmt werden, die den Timer zum Überlauf bringt. Bei einigen AVR-Controller ist eine Temperaturkompensation (z. B. ATTiny24A) möglich.
Drobel schrieb: > Aus dem Abstand der DCF-Telegramme, bzw. der übertragenen Zeit, kann die > neue Anzahl der Takte bestimmt werden, die den Timer zum Überlauf > bringt. Achso, also habe ich dich nicht richtig verstanden. Das klingt logisch. Nur muss ich mir dann auch merken, wie lange der letzte DCF Kontakt her ist, um eine genaue Abweichung hinzubekommen. Ich werd mal drüber nachdenken, sowas muss bei mir immer paar Stunden im Kopf reifen :-) MfG Dennis
Noch eine Idee, inspiriert durch Drobels Vorschlag: Takt eines Quarzgenerators mit langem Zähler runterteilen und als Referenz (z.B. 1 sec-Takt) an den freien Pin hängen. Damit den internen Zähler synchronisieren / korrigieren. Gruß Dietrich
Dietrich L. schrieb: > Takt eines Quarzgenerators mit langem Zähler runterteilen und als > Referenz (z.B. 1 sec-Takt) an den freien Pin hängen. Damit den internen > Zähler synchronisieren / korrigieren. Z.B. mit einem zusätzlichen Attiny24, den Du mit einem Uhrenquarz laufen lassen kannst. Der Attiny24 kann dann den runtergeteilten Takt ausgeben.
Dietrich L. schrieb: > Takt eines Quarzgenerators mit langem Zähler runterteilen und als > Referenz (z.B. 1 sec-Takt) an den freien Pin hängen. Damit den internen > Zähler synchronisieren / korrigieren. Naja, so ähnlich meinte ich das mit dem Tausch gegen den Atmega88, da ich dort an meinem letzten freien Pin einfach den PIN-Change Interrupt nutzen kann. Nur habe ich keine Ahnung davon, wie ich den Quarz beschalten muss, das er einen Eingang eines Atmegas treiben kann, davon habe ich keine Ahnung. MfG Dennis
> Ich habe allerdings jetzt das Problem, das an den beiden XTAL1 und > 2 Pins Taster angeschlossen sind. Einen der beiden Pins würde ich > frei bekommen, einfach einen Taster auf einen anderen Pin verbinden. > Nur leider habe ich dann keine anderen Pins mehr frei. Was fehlt mir da jetzt? Meiner Ansicht nach reicht das doch schon. Nimm einen fertigen QUarzoszillator (zb 4Mhz oder 8Mhz) und takte den µC damit. Einen Quarzoszillator (nicht: einen Quarz!) schliesst man mit lediglich einem Pin an den µC an. Damit hast du einen quarzstabilisierten µC-Takt, der die Uhr über den Tag bringt. Mehr brauchst du ja nicht. Und aus einem 8Mhz Quarztakt eine Uhr aufzubauen, die in ein paar Tagen nicht mehr als ein paar Sekunden abweicht, ist ja jetzt nicht wirklich das große Problem.
Dennis H. schrieb: > Naja, so ähnlich meinte ich das mit dem Tausch gegen den Atmega88, da > ich dort an meinem letzten freien Pin einfach den PIN-Change Interrupt > nutzen kann. Nur habe ich keine Ahnung davon, wie ich den Quarz > beschalten muss, das er einen Eingang eines Atmegas treiben kann, davon > habe ich keine Ahnung. Nicht einen Quarz beschalten, sondern einen fertigen Quarzoszillator nehmen. Der hat Versorgungsanschlüsse und einen Takt-Ausgang. Für einen Pin-Change-Interrupt sind die Frequenzen der Quarzoszillatoren aber normalerweise zu hoch, daher der Teiler dahinter. Gruß Dietrich
Karl Heinz Buchegger schrieb: > Einen Quarzoszillator (nicht: einen Quarz!) schliesst man mit lediglich > einem Pin an den µC an. In Datenblatt des ATmega8 steht allerdings bei "External Clock": XTAL1 EXTERNAL CLOCK SIGNAL XTAL2 NC Also wird XTAL2 (vermutlich) nicht als Eingang verwendet werden dürfen. Gruß Dietrich
Was spricht gegen die ADC-Lösung, um die beiden Pins frei zu bekommen? Ist kein ADC-Eingang mehr frei oder freizubekommen?
Dietrich L. schrieb: > Karl Heinz Buchegger schrieb: >> Einen Quarzoszillator (nicht: einen Quarz!) schliesst man mit lediglich >> einem Pin an den µC an. > > In Datenblatt des ATmega8 steht allerdings bei "External Clock": > XTAL1 EXTERNAL CLOCK SIGNAL > XTAL2 NC > > Also wird XTAL2 (vermutlich) nicht als Eingang verwendet werden dürfen. Hab ein wenig gegoogelt. Scheint so als ob du recht hast. Wieder was gelernt.
Der Uhrenquez muss leider an Timer 2 laufen. Es gibt auch noch die Loesung mit dem internen RC Oszillator wenn die Spannung und die Temperatur hinreichend stabil ist. Wenn dann wieder ein DCF77 signal erhaeltlich ist, die Differenz abspeichern und eine RC-Osc- Korrektur errechnen. Das waer dann ein gesampelter PLL. Der Mega8 ist uebrigen in den meisten Faellen die falsche Wahl. Denn die 20 cents, die man gegenueber einem Groesseren spart sind beim ersten Aerger aufgrund der Limitationen 1000 fach draussen. Ich wuerd nie was unterhalb einem 32k AVR machen.
Vermutlich (?) hast Du die PDIP Version des ATmega8. Dann könntest Du Dir einen TQFP=>PDIP Adapter bauen und die beiden zusätzlichen ADC-Eingänge des TQFP-ATmega8 für Deine Schalter nutzen, wenn die o.g. Variante "2 Schalter an einem ADC Eingang" nicht machbar ist, weil kein ADC Eingang frei ist.
Erstmal vielen dank für die zahlreichen antworten. Das ich den xtal2 gar nicht nutzen kann, wenn ich xtal1 als taktquelle nutze, wusste ich auch nicht, ich hab nur den Hinweis im datenblatt gelesen, das es nicht empfohlen wird. Die Schaltung so zu ändern, das ich die Taster über adc einlese ist großer Aufwand, es ist zur Zeit nur pb1 frei, welcher kein adc Eingang ist. Ich halte irgendwie immer noch an dem Pin change interrupt fest. Wäre eine einfache Lösung auf lochraster aufzubauen und funktioniert beim atmega88 an fast jedem Pin. Ein quarzosszillator klingt ja schonmal gut, nur die relativ hohe impulsfolge muss für den Pin change nicht unbedingt sein. Gibts nicht einen billigen einfachen frequenzteiler ic, der durch acht oder 32 oder sowas teilt? Das wäre vielleicht die kostengunstigste und auch am besten umsetzbare Idee, weil ich da auf der vorhandenen leiterplatte nix weiter ändern muss. Mfg Dennis
Dennis H. schrieb: > Gibts nicht einen billigen einfachen frequenzteiler ic, der durch acht oder 32 oder sowas teilt? Wie schon gesagt, ich würde einen Attiny dafür einsetzen. Wenn Du die Grundfrequenz mit einem Uhrenquarz erzeugen willst, dann z.B. Attiny24 (weiß nicht auswendig, welcher andere Tiny auch die Möglichkeit bietet, einen solchen einzusetzen), wenn Du einen höherfrequenten Quarz verwendest, geht auch ein 8-Beiner, z.B. Attiny15. Damit kannst Du ein beliebiges Teilerverhältnis programmieren.
Dennis H. schrieb: > Gibts nicht > einen billigen einfachen frequenzteiler ic, der durch acht oder 32 oder > sowas teilt? Ja, haufenweise. Schau doch mal bei der 74HCxxx-Serie. Beispiele: 74HC4020, 74HC4024, 74HC4040, 74HC4060, .... Beim 74HC4060 kannst Du bei geeigneter Quarzfrequenz auch bis genau 1Hz runterteilen. Gruß Dietrich
Hallo! Ich versuche gerade, die mir genannten Lösungen umzusetzen und irgendwie scheitere ich ziemlich daran. Das Problem ist, das es keine Uhrenquarz-Oszillatoren gibt, es gibt irgendwie nur Quarze. Einen einfachen Quarz kann ich aber nicht an so einen 74HC4060 schalten. Darum war meine Idee, nehm ich einfach einen kleinen Attiny. Z.B. Attiny13, weil ich diesen noch in der Bastelkiste habe. Bei diesem kann ich den Timer mit einer externen Quelle am T0-Pin takten. Aber da wird mein einfacher Quarz auch wieder nicht reichen weil der Attiny da sicher auch einen Oszillator haben möchte. Gibt es irgendwo einen Oszillator mit den üblichen 32,768khz? Ich habe bei meiner Suche ein gutes PDF verlinkt von Falk Brunner gefunden. http://www.mikrocontroller.net/attachment/24538/AN299.pdf Soweit so gut, aber es scheint ja deutlich auf das Layout anzukommen. Ich würde aber ungern extra dafür eine Leiterplatte bestellen wollen, ich würde es gern auf Lochraster machen. Wäre vielleicht auch ein Oszillator mit 4,194304MHz möglich? Den könnte ich dann als Systemtakt für den Attiny13 nehmen, ist nur die Frage, ob sowas dann auch noch so genau ist, wie ein Uhrenquarz. MfG Dennis
Dennis H. schrieb: > Aber da wird mein einfacher Quarz auch wieder nicht reichen weil > der Attiny da sicher auch einen Oszillator haben möchte. Tiny13 weiß ich nicht und mag nicht im Datenblatt nachschauen (das wäre eigentlich deine Aufgabe), aber an Tiny25 kannst du einen Quarz anschließen
Walter S. schrieb: > Tiny13 weiß ich nicht und mag nicht im Datenblatt nachschauen (das wäre > eigentlich deine Aufgabe), aber an Tiny25 kannst du einen Quarz > anschließen Ist richtig, das es meine Aufgabe wäre, nur weis ich nicht so richtig, unter welchem Punkt ich da suchen muss. Unter Clock Options steht nur, welche Fuses ich einstellen muss. Aber ich würde mal denken, da es nur einen Pin dafür gibt, das der Attiny13 nur einen Oszillator haben möchte, zumindest als Systemtakt. Wenn ich den Timer einen extra Takt geben möchte, die Möglichkeit bietet mir der Attiny13 finde ich gar keine Infos über die Taktquelle, aber auch hier ist nur ein Pin, der zur Verfügung gestellt wird, somit denke ich auch hier, das nur ein Oszillator angeschlossen werden kann. dolf schrieb: > das ist auch ein uhrenquarz (2^22) Genau deswegen habe ich den ja gewählt, nur ist eben die Frage nach der Genauigkeit. Ich habe auch gerade versucht, bei Maxim einen DS32KHz als Sample zu ordern, nur leider wollen die eine Firmen-Mailadresse, die ich nicht bieten kann. Mist. Das wäre ein Uhrenquarz Oszillator. Und irgendwie nur bei Mouser zu bestellen und da ganz schön teuer. Deswegen wäre Sample gut, aber die wollen nicht. MfG Dennis
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.