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
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.
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.
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
>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
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.
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.
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?
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.
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
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
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.
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).
>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
>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?
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.
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.
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.
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.
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.