www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hauptuhr mit ATMega8


Autor: Patrick (Gast)
Datum:
Angehängte Dateien:
  • UHR.bas (884 Bytes, 132 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich plane eine Nebenuhr über einen ATMega8 anzusteuern. Die Uhr erwartet 
jeweils einen Impuls je Minute mit wechselnder Polarität.

Ich plane einen ATMega und einen L293 einzusetzten um die Polwendung zu 
erreichen. Dazu einen 32khz bzw. einen DS32khz Quarz Oscillator um die 
Genauigkeit zu erreichen.

Ich hab aktuell einen Probeaufbau mit einem 1Mhz Quarz und lass in 
Bascom einen Timer jede Sekunde zählen sodass ich bei 60 dann die Pole 
ändern kann.

Mein Problem ist noch das ich ja nicht dauerhaft Strom auf die Spule 
geben kann. Wenn ich allerdings den ATMega ein paar Sekunden anhalte ist 
meine Zeitzählung pfutsch.

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst z.B. bei Stromausfall oder bei Feierabend die Uhren ausmachen, 
in der Früh bei "Arbeitsantritt" wieder korrekte Zeit haben?

Häng doch eine externe Echtzeituhr wie z.B. eine DS1307 dran. In dem 
1307-Uhrenchip ist zusätzlich ein Batteriegepuffertes Non-Volatile RAM.

Der Atmega speichert nach jedem Stellbefehl/Impuls die angezeigte 
Uhrzeit im NV-RAM. Wenn nun der Strom ausfällt, geht im DS1307 die Uhr 
trotzdem weiter und der Speicher bleibt erhalten. Der Atmega liest bei 
wiedereinschalten die zuletzt gestellte Zeit aus dem NV-RAM aus und gibt 
solange Stellimpulse, bis die Uhrzeit der Nebenuhren wieder korrekt ist.

Lösung mit internem EEPROM des Atmega würde zwar funktionieren, aber den 
EEPROM zu stark "ausleiern".

mfg mf

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay Nein also das mit der RTC hab ich mir dann auch schon überlegt aber 
erst als 2ten Schritt. Hab auch schon fleißig Datenblatt gelesen DS1307 
und DS32khz.

Mein aktuelles Problem/Frage ist das der Schaltkreis erst nach jeder 
Minute den Impuls sendet was aber kein Impuls ist sondern ein 
Dauer-"An".

Portx.0 = 0 'Spule'
Portx.1 = 1 'Spule'
Portx.2 = 1 'An'
Bei der nächsten Minute:

Portx.0 = 0
Portx.1 = 1
Portx.2 = 1

Das funktioniert auch wunderbar allerdings brennt mir irgendwann die 
Spule in der Uhr durch wenn ich 60 Sekunden lang Strom drauf gebe. Ich 
wollte halt was einbauen wie waitms 1000 und dann Portx.2 = 0 Strom aus 
-> Impuls.

Wenn ich nun den µC 1000ms warten lass dann ist die Timer geschichte 
hinfällig.

MfG

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick schrieb:
> Wenn ich allerdings den ATMega ein paar Sekunden anhalte ist
> meine Zeitzählung pfutsch.

Warum willst Du ihn denn anhalten?

Die RTC macht man mit nem Timerinterrupt.
Ob nun 32kHz oder 10MHz Quarz, ist egal.
32kHz lohnt sich nur bei Batteriebetrieb (weniger Stromverbrauch).


Peter

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schalte in Reihe zur Uhr einen Bipolaren Elko. Falls die Uhr Haltekraft 
benötigt, kommt noch ein Widerstand parallel zum Elko.
mfg && Gute N8 mf

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick schrieb:
> Wenn ich nun den µC 1000ms warten lass dann ist die Timer geschichte
> hinfällig.

Hä?

Der Timer läuft weiter, deshalb nimmt man ja Timer.


Peter

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS:
Mit Elko natürlich nur halbe Betriebsspannung für den Leistungsteil, da 
der Elko ja jedesmal seine Spannung dazu addiert.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick schrieb:
> Wenn ich nun den µC 1000ms warten lass dann ist die Timer geschichte
>
> hinfällig.

Wieso das denn?

Lasse den Atmega mit internem Takt laufen und schliesse an den 
Oszillator-eingang einen Uhrenquarz an. Dann stellst für Timer2 den 
asynchronen Takt ein und fertig ist deine Uhr. Der Timer2 läuft sogar im 
Sleepmode.

mfg.

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Sekundenticker läuft doch eh rund.
Warum merkst du dir nicht die Zeit, wenn der Impuls zur Spule raus geht
und setzt die Spule eine Sekunde später wieder zurück?

Spule_an = Zeit_X
Spule_aus = Zeit_X + 1

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Timer läuft wirklich weiter? Das muss ich morgen probieren wenn ich 
wieder richtig wach bin :)

Danke erstmal für eure Gedankenanregungen.

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast noch einen kleinen Fehler im Programm.
Es gibt nur 59 Einheiten in der Zeit. Also nur 59 Sekunden.
Musst also deine Bedingung ändern in if sekunden > 59 then sekunden = 0.
Sonst zählst du pro Minute jeweils eine Sekunde zuviel.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.