Forum: Mikrocontroller und Digitale Elektronik Uhr mit Atmega169


von Dominic R. (blabla11)


Angehängte Dateien:

Lesenswert?

Hallo,

Bin neu hier und hätte mal ne frage zur Laufzeit meines Programmes. Bin 
soweit eigentlich fertig mit den Sekunden meiner Uhr. Schade ist nur, 
dass die Uhr nicht schnell genung läuft sprich si wird nachgehen. Beim 
Springen von 09s auf 10s, 19s auf 20s, 29s auf 30s braucht mein Prog 
länger als eine Sekunde ca. Faktor 3 oder 4. Vlt. könnt ihr mir helfen, 
an was das liegt.

Mfg

von Ludwig W. (lordludwig)


Lesenswert?

Ich habe das ganze jetzt nur mal überflogen. Dabei ist mir aufgefallen, 
dass du z.b. meinst, dass mit dem Befehl:
1
cpi     Sekunden, 0x60
Die sekunden mit 60 verglichen werden. Dem ist aber nicht der Fall, denn 
0x60 ist hexadezimal heißt so viel wie 96 (zwischen 60 und 96 ca. 3,5 
facher faktor, deshalt warscheinlich die verzögerung)

Des weitern kann du mit dem Befehl:
1
andi temp2,0b11110000  ; high byte isolation
leider nicht die zehnerstelle von der einerstelle trennen!

Schau dir am besten nochmal den Unterschied zwischen Dezimal und 
Hexadezimal an! Und den Kopf nicht hängen lassen, jeder hat so angefange 
wie du!

von Obelix (Gast)


Lesenswert?

Verwende mal den Debugger.

von Karl H. (kbuchegg)


Lesenswert?

Dominic Ruh wrote:
> Hallo,
>
> Bin neu hier und hätte mal ne frage zur Laufzeit meines Programmes. Bin
> soweit eigentlich fertig mit den Sekunden meiner Uhr. Schade ist nur,
> dass die Uhr nicht schnell genung läuft sprich si wird nachgehen. Beim
> Springen von 09s auf 10s, 19s auf 20s, 29s auf 30s braucht mein Prog
> länger als eine Sekunde ca. Faktor 3 oder 4. Vlt. könnt ihr mir helfen,
> an was das liegt.

Das Zeitbestimmende Glied in deinem Programm ist der Timer.
Ob die Zeit jetzt ein paar Nanosekunden früher oder
später auf das Display kommt, dürfte da wohl keine
grosse Rolle spielen.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr

von Dominic R. (blabla11)


Lesenswert?

Hallo,

Das mit dem Timer als Zeitbestimmendem Glied meines Programmes hab ich 
verstanden. Und die Hexadezimalen Zahlen auch. Das Problem wieso ich auf 
0x60
zähle ist, dass wenn ich auf weniger Zähle, meine Anzeige(LCD atmega) 
nicht bis 59 läuft. Timer und Programm laufen dann so asynchron d.h. ich 
zähle bis 39 und dann springt er wieder auf die null. Weil er schon 
genügend interrupts ausgelöst hat, aber es in der zeit nicht geschafft 
hat bis 59 zu zählen. Ist mein Programm zu schlecht(zeitaufwändig) 
geschrieben oder wieso hängt meine anzeige dem timer derart hinterher???


@Ludwig wagner

Die highbyte isolation müsste schon so funktionieren oder???
mir geht es nur darum, für die lcd-anzeige eine spaltung von high und 
low nibble zu erreichen.

Vielen vielen Dank für eure antworten

von A.K. (Gast)


Lesenswert?

Microcontroller zählen binär. Die Zahl 10 ist intern 0b00000101, hex 
0x0A, nicht 0x10. Du gibst aber die Bits 4..7 als 1. Ziffer aus.

Such mal nach binär->dezimal Wandlung.

von Dominic R. (blabla11)


Lesenswert?

das ist mir völlig klar!!!(bin schon im hauptstudium) aber was hat das 
mit meinem programm zu tun? kannst du mir das besser erklären???
vielen dank im vorrausb

von Dominic R. (blabla11)


Lesenswert?

die 0x60 ist ein experimenteller wert bei 0x59 zählt er gerade bis 58 
und springt dann auf die null. ich weis, dass 0x60 = 
6*16+0*1=96(dezimal) ist.

von A.K. (Gast)


Lesenswert?

Dein Code:
1
...
2
mov temp2,Sekunden
3
andi temp2,0b11110000  ; high byte isolation
4
...
5
mov temp2,Sekunden
6
andi temp2,0b00001111 ; low nibble in temp2
7
...

Und was kommt im weiteren Verlauf raus, wenn "Sekunden" 10..15 ist, also 
0x0A? "09". Alle Nibbles >8 laufen auf "nine" raus, und im oberen Nibble 
steht 0.




von Dominic R. (blabla11)


Lesenswert?

ich glaube mir dämmerts

d.h. eigentlich , dass ich jedesmal wenn ich sekunden werte größer zehn 
habe noch sechs dazu addieren muss, damit ich in meinem highbyte 
überhaupt was stehen habe. ansonsten würde ich die ewrte 11 12 13 14 15 
16  durch meine andi operation verlieren oder????

vielen vielen dank. das problem war mir überhaupt nicht klar. bzw. hab 
nicht dran gedacht

gleich mal ausprobieren

von A.K. (Gast)


Lesenswert?

Fast richtig. Aber nicht bei >10 noch 6 drauf, sondern bei >=10. Und 
damit wird aus dem Binärzähler ein BCD-Zähler, passend zu deiner Technik 
der Ausgabe.

von Dominic R. (blabla11)


Lesenswert?

vielen dank
der befehl müsste dann brsh sein

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.