Forum: Mikrocontroller und Digitale Elektronik ADC, LCD und Uhr mit ATMEGA8, ist das möglich?


von Andreas (Gast)


Lesenswert?

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

von hacker-tobi (Gast)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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?

von Andreas (Gast)


Lesenswert?

Andreas schrieb:
> ..., sollte aber avr sein, ...

meinte natürlich ATMEL

von Andreas (Gast)


Lesenswert?

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?!?

von Thomas E. (thomase)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

Andreas schrieb:
> Ich nutze
>
> doch nur eine Quelle?!?

Nein.

Timer2 hat einen Asynchron-Mode. Damit läuft der unabhängig vom 
CPU-Takt.

mfg.

von Andreas (Gast)


Lesenswert?

Ich finde das Forum so unglaublich hilfreich!

Danke schonmal für die Tipps!

Ich werde das alles gegen Abend testen!

Großes Lob an euch!

von Andreas (Gast)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

Andreas schrieb:
> hab zu Hause noch Quarze mit 7,3728 MHZ,

Das geht nicht.

Da muss ein 32,768 KHz Quartz dran.


mfg.

von Andreas (Gast)


Lesenswert?

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?

von Helmut L. (helmi1)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

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.

von fchk (Gast)


Lesenswert?

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

von mr. mo (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Frank K. (fchk)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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.

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.