Hallo,
ich stelle kurz mal mein Projekt vor. Ziel ist es eine Art Bordcomputer
für ein Auto zu erstellen.
Ausgabegerät ist ein 4x20 Zeichen LCD 4bit-Modus, 4 Kanal ADC (PC0-PC3),
2 Tasten(Erste für Bestätigung von Fehlern, Zweite zum Blättern bzw. zum
einstellen der Uhr)
Das LCD ist an Port D, der ADC an Port C und die Taster an Port B.
Die Funktionalität des Computers habe ich soweit fertig. Jetzt möchte
ich noch eine Uhr und vll ein Datum, das Datum ist aber zweitrangig. Mir
geht es in diesem Thread eher darum das die Uhr exakt ist. Ich habe mir
Gedanken gemacht, jedoch habe ich Angst das sich die Uhr durch mein
bestehendes Programm "verläuft".
Ist diese Kombination überhaupt mit meiner Konfiguration möglich? Eine
einzelne Uhr wäre nicht das Problem nur habe ich bedenken im Bezug auf
meinen bisherigen Code, die Uhr müsste quasi parallel laufen?!?
Systemfrequenz ist momentan auf 4MHZ interner Takt, da ich noch keine
exakte Zeit gebraucht habe. Durch die Suche kam ich auf das DCF77...
Ich will hier keinen fertigen Code, nur einen kleinen Schubs in die
richtige Richtung.
Ich bedanke mich schon einmal im voraus!
Gruß Andreas
Was für ein Controller? Gibts nen Schaltplan oder Code?
Ich würde evtl. zu nem Timer tendieren, der über ein externes Quarz
getriggert wird (Wenns nen Almel ist: Uhrenquarz an XTAl1 und XTAL2).
gruß
tobi
hacker-tobi schrieb:> Was für ein Controller? Gibts nen Schaltplan oder Code?
Atmega8.
Habe ich das jetzt geraten oder die Überschrift gelesen?
Andreas schrieb:> Ziel ist es eine Art Bordcomputer>> für ein Auto zu erstellen.
Sowas ähnliches habe ich schon mal gemacht. Allerdings nicht mit dem
Atmega8 sondern mit dem 168.
Uhrenquarz an Timer2, 8 MHz intern.
Alles völlig Problemlos.
mfg.
Controller ist ein ATMEL ATMEGA 8, wenn es mit einem anderen besser
ginge wäre ich nicht abgeneigt zu wechseln, sollte aber avr sein, damit
ich den code übernehmen kann. Gibt keinen Schaltplan, habe es über das
STK500 aufgebaut.
Ich frage mich nur wie ich die Uhr aufbau ohne, dass diese vom
bisherigen Code abhängt, einen Timer muss ich ja auch auswerten, und je
nachdem welchen "Umweg" das Programm läuft, komm ich ja nicht immer
genau auf den Wechsel nach 60 Sekunden.
Meine Denkweise ist doch richtig oder?
Thomas Eckmann schrieb:> Uhrenquarz an Timer2, 8 MHz intern.>> Alles völlig Problemlos.
Das mit dem Uhrenquarz und 8 MHZ intern hat mich verwirrt. Ich nutze
doch nur eine Quelle?!?
Andreas schrieb:> Meine Denkweise ist doch richtig oder?
Nein.
Eine Uhr ist ganz einfach.
volatile char nS = 0;
volatile char nM = 0;
volatile char nH = 0;
volatile char bClockout = false;
ISR(TIMER2_OVF_vect)
{
bClockout = true;
nS++;
if (nS == 60)
{
nS = 0;
nM++;
if (nM == 60)
{
nM = 0;
nH++;
if (nH == 24) nH = 0;
}
}
}
Und dann machst du in der main() die Ausgabe der Uhrzeit, damit er nicht
ewig in der Interrupt-Routine hängt.
mfg.
Hi
>Das mit dem Uhrenquarz und 8 MHZ intern hat mich verwirrt. Ich nutze>doch nur eine Quelle?!?
Du kannst an TOSC1/2 einen Uhrenquarz anschliessen und Timer2 als RTC
benutzen.
Hat noch einer n paar Fakten zum initialisieren?
hab zu Hause noch Quarze mit 7,3728 MHZ, muss ich den µC dann nicht auf
16 MHZ intern betreiben? Hab noch was im Kopf das der externe von Timer
nur maximal halb so groß sein darf wie der interne?!?!
Bin noch auf Arbeit, kann also leider nicht jetzt schon dran arbeiten.
Thomas Eckmann schrieb:> Andreas schrieb:>> hab zu Hause noch Quarze mit 7,3728 MHZ,>> Das geht nicht.>> Da muss ein 32,768 KHz Quartz dran.>>> mfg.
intern muss ich also nicht höher sein?
Und warum schliesst du an dem AVR nicht einen extern Quarz an und
stellst einen Internen Timer passend ein?
Also keinen internen RC Oszillator sondern direkt einen Quarz
anschliessen.
Dann programmierst du einen der Timer so das er dir laufend einen
Interrupt generiert. In dieser Service Routine zaehlst du deine Uhr dann
hoch. Der Rest des Programmes merkt davon nichts.
Andreas schrieb:> hab zu Hause noch Quarze mit 7,3728 MHZ
Kann man auch nehmen, dann aber als CPU-Takt.
Im Auto sollten die paar mA ja keine Rolle spielen.
Der einzige Vorteil des Uhrenquarz wäre, daß im Power Down (nur die Uhr
läuft weiter) nur wenige µA fließen.
Peter
Nee nee ich besorg mir nen 32,768 KHz Quartz.
Mir fällt grad auch auf, dass ich mich noch gar nicht mit beschäftigt
habe, dass wenn die Zündung aus ist, alles aus ist aber die Uhr weiter
läuft...
Hi
>Mir fällt grad auch auf, dass ich mich noch gar nicht mit beschäftigt>habe, dass wenn die Zündung aus ist, alles aus ist aber die Uhr weiter>läuft..
Es gibt auch Dauer-Plus. Oder du nimmst eine batteriegepufferte RTC.
MfG Spess
Andreas schrieb:> Mir fällt grad auch auf, dass ich mich noch gar nicht mit beschäftigt>> habe, dass wenn die Zündung aus ist, alles aus ist aber die Uhr weiter>> läuft...
Ohne Spannung läuft die natürlich nicht weiter. Aber das Radio hängt
meistens auch ständig an +. Und das sollte ja auch nicht allzu weit
entfernt sein.
Man kann den Atmega dann in den Power-Save-Mode versetzen, dann läuft
nur noch der Timer2 mit der Uhr. Das Display mitsamt Beleuchtung
schaltet man dann komplett ab.
Das Aufwecken ginge dann über die Auswertung der Zündung mit einem
Interrupt. Da drängt sich dann wieder der Atmega 88 auf. Bei dem kann
man jeden Pin als Interrupt-Quelle verwenden.
mfg.
Nimm doch einfach einen externen Uhrenchip. Ein PCF8583 kostet in
Einzelstückzahlen unter einem Euro. 32 kHz Quarz dran, Knopfzelle als
Backup-Spannungsversorgung, und gut ist. Du bekommst außerdem noch 240
Bytes batteriegepuffertes RAM dazu.
Problem gelöst.
fchk
fchk schrieb:> Nimm doch einfach einen externen Uhrenchip. Ein PCF8583 kostet in> Einzelstückzahlen unter einem Euro. 32 kHz Quarz dran, Knopfzelle als> Backup-Spannungsversorgung, und gut ist. Du bekommst außerdem noch 240> Bytes batteriegepuffertes RAM dazu.>> Problem gelöst.>> fchk
hab ich schon verbaut, sehr schönes teil. einfach anzusteuern und man
muss es nur einmal richtig einstellen. danach kan man wenn der cpu
gerade mal zeit hat, das datum bzw. uhrzeit aktualisieren.
Andreas schrieb:> ich noch eine Uhr und vll ein Datum, das Datum ist aber zweitrangig. Mir> geht es in diesem Thread eher darum das die Uhr exakt ist.
Genaue Uhren gibt es nicht. Nur mehr oder weniger ungenaue. Die Frage
ist also eher, wie ungenau zulässig ist.
fchk schrieb:> Nimm doch einfach einen externen Uhrenchip.
Das ist aber nicht einfacher, als einfach den internen Timer zu nehmen.
Du mußt extra Hardware dranpappen, Du mußt dessen Schnittstelle und
Protokoll programmieren und Du mußt jedesmal die Zeit von dem Chip holen
bzw. beim Stellen zu ihm hinschicken.
Mit dem Timer brauchst Du nur im Interrupt ein paar Variablen hoch zu
zählen und hast dann Sekunden, Minuten, Stunden usw. jederzeit in den
Variablen verfügbar.
1/100 Sekunden sind auch kein Problem und Sommerzeit auch nicht.
Und den Abgleich kann man auch bequem in Software machen und muß keinen
Trimmer drehen.
Peter
Peter Dannegger schrieb:> Mit dem Timer brauchst Du nur im Interrupt ein paar Variablen hoch zu> zählen und hast dann Sekunden, Minuten, Stunden usw. jederzeit in den> Variablen verfügbar.> 1/100 Sekunden sind auch kein Problem und Sommerzeit auch nicht.> Und den Abgleich kann man auch bequem in Software machen und muß keinen> Trimmer drehen.
Und wenn das Teil aus ist?
Der Uhrenchip braucht bloß ein paar uA und tickt dann vor sich hin.
Frank K. schrieb:> Der Uhrenchip braucht bloß ein paar uA und tickt dann vor sich hin.
Mehr braucht der Atmega im Sleepmode auch nicht. Und eine Knopfzelle für
den Fall der Fälle lässt sich da auch ransetzen.
mfg.
Ich merk grad ich muss mich in die Timer und Sleepmode Themen mehr
einlesen :)
die externe Variante klingt auch gut, aber wenn es intern geht würde ich
dies eher vorziehen, somit schließt man schon ein paar mögliche
Fehlerquellen aus.
Wollte schon fragen wie es ist, weil ich ja auch nen ADC hab und ich
glaube gelesen zu haben, dass der auch relativ lastig ist was Verbrauch
angeht. Aber das werde ich denke ich unter Sleep Mode lesen.
Hallo, ich hol den Thread mal wieder aus der Versenkung.
Ich habe jetzt schon ein paar Funktionen die richtig gut laufen.
Ich bin nun dabei, die Bordnetzspannung abzufragen.... aber da stellt
sich mir die Frage wie ich das genau anstellen soll... KFZ-Spannung ist
ja in dem Bereich von 11-15V und es treten auch Spannungsspitzen auf.
Wie kann man denn diese Spannunsgspitzen filtern? Hat doch bestimmt
schon mal jemand gemacht!
Wäre schon einen kleinen Denkanstoss zu bekommen.