Hauptuhr mit ATMega8

Gast #2082331
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.
Angehängte Dateien:
#2082354
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
Gast #2082387
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
Gast #2082422
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
Gast #2082505
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren