Forum: Mikrocontroller und Digitale Elektronik Mehrere Oszillatoren an Atmega32


von Uhrenmann (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich bastel im Moment an einer Uhr mit 6x 17 Segment Nixie Anzeigen, das 
Projekt soll mein Einstieg in den AVR werden also seit bitte gnädig ;-)

Um was gehts? Die 6 Anzeigen werden per Schieberegister angesteuert, 
(Multiplexen geht auf die Lebensdauer) Herzstück ist ein Atmega32. Der 
bekommt zusätzlich Daten von einem Temperatur/Feuchtigkeitssensor, 
(SHT25, über I2C) es gibt einen IR-Empfänger (der bei Tastendruck auf 
die Fernbedienung die Anzeigen für ein paar Minuten aktiviert) sowie 
einen Empfänger für das DCF77 Signal. Ist kein DCF77 Empfänger vorhanden 
soll der AVR seinen Takt aus einem 10MHz Quarzofen (OCXO) der hier noch 
rumliegt bekommen, dieser wird per HighSide Schalter eingeschaltet. 
Warum? Der Quarzofen verbraucht ständig ~1,5W, für den Dauerbetrieb ist 
mir das zu viel.

Die Idee ist nun den OCXO an den XTAL1 des AVRs zu legen als externer 
Oszillator, bei DCF77 Empfang wird der Quarz der eingebauten RTC (Q3) 
verwendet und der OCXO abgeschaltet. Ich weiß nur eben nicht wie der AVR 
reagiert wenn plötzlich im Betrieb der Takt vom Oszillator fehlt, 
vermutlich bleibt er einfach hängen? Man könnte vielleicht auf den 
internen Oszillator schalten nur arbeitet der sicher mit einer anderen 
Frequenz, das wird denke ich genauso Probleme bereiten. Wenn das alles 
nichts hilft teile ich die 10MHz auf 1Hz runter und lege die auf einen 
Portpin, dann darf der Atmega32 einfach mitzählen. So richtig sauber ist 
die Lösung denke ich aber nicht.

Habt ihr bessere Ideen?

Danke!

Gruß Jan

von Jim M. (turboj)


Lesenswert?

Uhrenmann schrieb:
> Quarz der eingebauten RTC (Q3)
> verwendet und der OCXO abgeschaltet. Ich weiß nur eben nicht wie der AVR
> reagiert wenn plötzlich im Betrieb der Takt vom Oszillator fehlt,
> vermutlich bleibt er einfach hängen?

So isses.

Nimm was anderes als AVR, bei modernen µC kann man normalerweise die 
Taktquelle im laufenden Betrieb ändern. Bei AVR geht das IIRC nur über 
die Fuses.

von S. Landolt (Gast)


Lesenswert?

Q3 in Kombination mit DCF reicht doch völlig; einmal am Tag DCF 
auswerten, den Gangunterschied berechnen und das dann als Gangkorrektur 
für den Q3 einfließen lassen.
  Der OCXO ist hier unnötig, da gibt es sicher bessere Anwendungsfelder, 
oder eben einen Platz in der Glasvitrine.

von Uhrenmann (Gast)


Lesenswert?

Wow, das ging ja schnell. Vielen Dank!

Ich wollte den AVR verwenden weil es da viel Beispielcode gibt, zum 
Einstieg nicht verkehrt bin aber natürlich auch für andere Controller 
offen. Kannst Du mir einen gängigen uC empfehlen?

Gruß Jan

von Uhrenmann (Gast)


Lesenswert?

>Q3 in Kombination mit DCF reicht doch völlig; einmal am Tag DCF
>auswerten, den Gangunterschied berechnen und das dann als Gangkorrektur
>für den Q3 einfließen lassen.
>  Der OCXO ist hier unnötig, da gibt es sicher bessere Anwendungsfelder,
>oder eben einen Platz in der Glasvitrine.

Der OCXO ist nur dafür gedacht wenn der DCF77 Empfänger nicht vorhanden 
ist oder am Standort kein Signal hat. (Wobei die meisten Funkuhren sogar 
in meinem Keller Empfang haben) Sonst reicht der Uhrenquarz von der 
internen RTC sicherlich. Es geht eher um die Faszination des Bauteils, 
der liegt auch schon viel zu lange ungenutzt rum. ;-)

Gruß Jan

von c-hater (Gast)


Lesenswert?

Uhrenmann schrieb:

> Die Idee ist nun den OCXO an den XTAL1 des AVRs zu legen als externer
> Oszillator, bei DCF77 Empfang wird der Quarz der eingebauten RTC (Q3)
> verwendet und der OCXO abgeschaltet.

Verfrachte den OCXO dahin, wo er gehört und kauf' einen Uhrenquarz für 
ein paar Cent.

von S. Landolt (Gast)


Lesenswert?

Nun denn.
Beim ATmega32 lässt sich die Quelle des Systemtaktes nicht per Software 
umschalten. Es bliebe also nur, ihn auf 'externer Takt' einzustellen und 
per zusätzlicher Hardware zwischen zwei externen Oszillatoren, einer 
davon der OCXO, umzuschalten. Oder eben, wie Sie bereits schrieben, das 
OCXO-Signal, auch per zusätzlicher Hardware, soweit herunterzuteilen, 
dass der ATmega32 es zählen kann.

von Uhrenmann (Gast)


Lesenswert?

OK, wenn die Idee wirklich nicht gut ist bleibt der OCXO wo er ist oder 
kommt mal in einen Frequenzzähler.
Ist es nicht praktischer komplett auf die RTC zu verzichten und einen 
einigermaßen vernünftigen Oszilator (TCXO z.B.) an den Takteingang des 
AVR zu hängen?

von S. Landolt (Gast)


Lesenswert?

Dies nun halte ich weitgehend für Geschmackssache, da gibt es mehrere 
Möglichkeiten. Und die RTC-Modul-Fraktion wird sicher gleich ein 
Ebay-Angebot, 3 Stück für einsfuffzig oder so ähnlich, vorschlagen, 
Genauigkeit 1 oder 2 ppm - nun ja, sogar Reichelt bietet etwas, wenn 
auch für 2.75 EUR.

von Frank K. (fchk)


Lesenswert?

Uhrenmann schrieb:
> OK, wenn die Idee wirklich nicht gut ist bleibt der OCXO wo er ist oder
> kommt mal in einen Frequenzzähler.
> Ist es nicht praktischer komplett auf die RTC zu verzichten und einen
> einigermaßen vernünftigen Oszilator (TCXO z.B.) an den Takteingang des
> AVR zu hängen?

Nein. Eine RTC läuft mit einer CR2032 Zelle mindestens 5 Jahre. Ich habe 
in einem anderen Thread 
(Beitrag "Re: Interne Uhr Microcontroller") einen DS3231 
erwähnt, der in einem ganzen Jahr maximal eine Minute falsch geht. Die 
Kurzzeitstabilität reicht immer aus, um einen kurzzeitigen DCF77-Ausfall 
abzufangen, selbst einen Monat ohne Empfang wirst Du in der Regel kaum 
bemerken. In dem CHip steckt einiges an Know-How - das musst Du erstmal 
selber implementieren können.

Dein AVR braucht auch einfach viel mehr Energie - es ist halt alte 
5V-Technik. Ja, es gibt auch etwas modernere AVRs, aber Du hast Dir 
zielsicher eine alte Kamelle ausgesucht.
Eine für diesen Anwendungsfall geeignetere Architektur wäre z.B. MSP430 
- der kann auch seine Taktquelle z.B. dynamisch und glitchfrei 
umschalten und hat noch andere nette Gimmicks. Auch nicht schlecht sind 
die Teile von Energy Micro, jetzt SiLabs.

fchk

von S. Landolt (Gast)


Lesenswert?

Nur am Rande, es fällt mir gerade im Schaltplan auf: AVcc nicht 
anzuschließen ist eine schlechte Idee.

von Uhrenmann (Gast)


Lesenswert?

Ich weiß, die 8 Bit AVRs sind überholt, mein Gedanke war wie gesagt 
leichter Einstieg weil es tausende Projekte mit diesen Controllern gibt. 
Vermutlich ist es aber sowieso besser gleich mit modernen Bauteilen zu 
starten.
Den MSP430 schaue ich mir auf jeden Fall an, der scheint ja eine USB 
Schnittelle zum Programmieren zu haben was ziemlich praktisch wäre. Der 
Preis für eine externe RTC wäre mir auch erstmal egal, ist ja ein reines 
Hobbyprojekt ohne Kostendruck. Ich denke so werde ich das dann 
realisieren, MSP430 + externen RTC Baustein.

Nochmals vielen Dank für Eure/Ihre Tipps!

Gruß Jan

von S. Landolt (Gast)


Lesenswert?

Zwar bedauere ich, einen zukünftigen AVR8-Mitstreiter verloren zu haben, 
wünsche aber trotzdem viel Spaß & Erfolg!

von Maxim B. (max182)


Lesenswert?

Uhrenmann schrieb:
> Um was gehts? Die 6 Anzeigen werden per Schieberegister angesteuert,
> (Multiplexen geht auf die Lebensdauer)

Was meinst du? Was haben Lebensdauer und Multiplexen zusammen?
Man kann so und so machen, je nachdem. Beides legitim.

Uhrenmann schrieb:
> Ist kein DCF77 Empfänger vorhanden
> soll der AVR seinen Takt aus einem 10MHz Quarzofen (OCXO) der hier noch
> rumliegt bekommen, dieser wird per HighSide Schalter eingeschaltet.
> Warum? Der Quarzofen verbraucht ständig ~1,5W, für den Dauerbetrieb ist
> mir das zu viel.
>
> Die Idee ist nun den OCXO an den XTAL1 des AVRs zu legen als externer
> Oszillator, bei DCF77 Empfang wird der Quarz der eingebauten RTC (Q3)
> verwendet und der OCXO abgeschaltet.

Ich glaube, ATmega32 ist hier weniger bequem als etwas aus der Reihe 
88-168-328 oder auch 324-644-1284. Die haben Prescaler für F_CPU, im 
Programm umschaltbar. So kannst du kritische Sachen schnell machen und 
was nicht so schnell sein muß, langsamer. Z.B. mit 20 MHz Wichtiges und 
dann mit 20000000/256=78125 Hz etwas Unwichtiges.

Außerdem: wozu externe Oscillator? Hier reicht einfache Quarz und 2 
Kondensatoren. Viel stromsparender.

Uhrenmann schrieb:
> das
> Projekt soll mein Einstieg in den AVR werden
Ist dein Vorhaben nicht zu kompliziert für Einstieg? Du willst ja alles 
und sofort: externe Frequenzen umschalten, dann noch Timer 2 asynchron 
für Uhr... Versuche mal zuerst etwas einfacher machen. Es gibt genug 
Quellen für Fehler. Wenn du alles gleich machst, findest du sie einfach 
ne.

: Bearbeitet durch User
von jz23 (Gast)


Lesenswert?

Die neuen Attinys können problemlos die Takquelle umschalten. Da die 
auch nur einen Pin für Reset und Programmieren brauchen, bleiben dir 
noch 17 andere (20 Pins, zweimal Versorgung, einmal Prog/Reset). 
Vielleicht reicht das ja (Habs jetzt nicht nachgezählt in deinem 
Schaltplan).

von Uhrenmann (Gast)


Lesenswert?

>Zwar bedauere ich, einen zukünftigen AVR8-Mitstreiter verloren zu haben,
>wünsche aber trotzdem viel Spaß & Erfolg!

Vielen Dank, werde ich sicher haben. (Zumindest Spaß)

>Was meinst du? Was haben Lebensdauer und Multiplexen zusammen?
>Man kann so und so machen, je nachdem. Beides legitim.

Die Röhren dürfen laut Telefunken zwar gemultiplext werden, ich meine 
aber gelesen zu haben das das häufigere Zünden mit (vorallem) höherem 
Strom auf die Lebensdauer bei der Art von Anzeige geht. Die Teile sind 
mittlerweile recht teuer und schlecht verfügbar, ich möchte es also 
nicht riskieren. Ein paar 74HC595 + Transistoren gibt es für wenige Euro 
sodass man sich da keine Gedanken machen muss.

Datenblatt für interessierte. Die gab es wohl nur kurz weil dann LED 
Anzeigen einfacher und günstiger wurden:

http://www.jogis-roehrenbude.de/Roehren-Geschichtliches/Nixie/ZM1350/ZM1350.pdf

von Uhrenmann (Gast)


Lesenswert?

>Außerdem: wozu externe Oscillator? Hier reicht einfache Quarz und 2
>Kondensatoren. Viel stromsparender.

Das wird so gemacht nachdem ich jetzt einen extra Chip für die RTC 
geplant habe.

>Ist dein Vorhaben nicht zu kompliziert für Einstieg? Du willst ja alles
>und sofort: externe Frequenzen umschalten, dann noch Timer 2 asynchron
>für Uhr... Versuche mal zuerst etwas einfacher machen. Es gibt genug
>Quellen für Fehler. Wenn du alles gleich machst, findest du sie einfach
>ne.

Die Idee ist es langsam aufzubauen. Schritt 1 wäre "nur" die Anzeigen 
per Schieberegister bedienen (+ Timeout damit sie nicht ständig 
leuchten) und die RTC. DCF77, Temperatur, Fernbedienung (...) kann man 
später noch bei Bedarf erweitern, die Leiterplatte lasse ich aber machen 
sodass ich die ganzen Bauteile schon im Layout vorgesehen habe.
Zu viel für den Start?

von Maxim B. (max182)


Lesenswert?

Uhrenmann schrieb:
> Die Idee ist es langsam aufzubauen. Schritt 1 wäre "nur" die Anzeigen
> per Schieberegister bedienen (+ Timeout damit sie nicht ständig
> leuchten) und die RTC. DCF77, Temperatur, Fernbedienung (...) kann man
> später noch bei Bedarf erweitern, die Leiterplatte lasse ich aber machen
> sodass ich die ganzen Bauteile schon im Layout vorgesehen habe.
> Zu viel für den Start?

Problem ist so:
natürlich brauchst du eine Leiterplatte, um guten GND und VCC zu haben 
und überhaupt, so ist es bequemer und sicherer, als mit dünnem Draht und 
Stecker.
Aber nach deinen ersten Schritten wirst du mit Garantie kleine 
Veränderungen auf der Platte wünschen, die dann nicht so einfach zu 
machen sind.

Besser wäre es, schrittweise Prototypen zu machen.

Ich würde doch lieber multiplexieren. Freie Pins hast du ja genug. DU 
brauchst dann 7 oder 8 Pin für Segmente und 6 Pin für Zeichen (evtl mit 
Transistoren verstärkt). Du brauchst sowieso Systemtakt (für Tasten 
usw), so kannst du auch Anzeige in Timer-ISR bedienen.

Schieberegister bringen hier nichts: du muß sowieso die Ziffer ständig 
erneuern. Nur mehr Leiter auf der Platte und mehr Platz. Auch mehr 
Widerstände.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Maxim B. schrieb:
> Schieberegister bringen hier nichts: du muß sowieso die Ziffer ständig
> erneuern. Nur mehr Leiter auf der Platte und mehr Platz. Auch mehr
> Widerstände.

Gerade Schieberegister machen das Layout sehr einfach, man plaziert es 
direkt an der Röhre. Auch kann Multiplexen leicht den DCF-77 Emfpang 
stören, daher sind Schieberegister unproblematischer.
Widerstände braucht man genau einen je Röhre.
Es gibt auch Schieberegister für hohe Spannung, z.B. HV5522 von 
Microchip, die Röhren direkt treiben können.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

S. Landolt schrieb:
> Nur am Rande, es fällt mir gerade im Schaltplan auf: AVcc nicht
> anzuschließen ist eine schlechte Idee.

Und auch bitte den im Moment noch unbeschalteten zweiten GND Anschluss.
Für die Uhr reicht es doch völlig, den schon vorgesehenen 32,768kHz 
Quarz zu benutzen und meinetwegen mit DCF77 zu synchronisieren. Der Rest 
des MC kann auch mit dem internen RC Oszillator laufen, das ist dann 
völlig egal.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Uhrenmann schrieb:
> Es geht eher um die Faszination des Bauteils,
> der liegt auch schon viel zu lange ungenutzt rum. ;-)

Dann laß ihn weiter rum liegen.
Nimm ein 32kHz Uhrenquarz an Timer 2. Der reicht dicke, um DCF-77 Fehler 
zu überbrücken.
Wenn Du Lust hast, kannst Du mit DCF-77 einen Korrekturwert ermitteln 
lassen und im EEPROM abspeichern. Dann ist der Uhrenquarz auf wenige 
Sekunden / Jahr stabil.

von Maxim B. (max182)


Lesenswert?

Peter D. schrieb:
> Auch kann Multiplexen leicht den DCF-77 Emfpang
> stören, daher sind Schieberegister unproblematischer.

Einmal hatte ich so ein Problem, mit Vakuum-Fluoreszenzdisplay und 
Kurzwellenempfänger. Aber ich glaube, das lag eher in unsauberer 
Schaltung: ich sollte dV/dT begrenzen.

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.