www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uhr mit Atmega169


Autor: Dominic Ruh (blabla11)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das ganze jetzt nur mal überflogen. Dabei ist mir aufgefallen, 
dass du z.b. meinst, dass mit dem Befehl:
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:
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!

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwende mal den Debugger.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominic Ruh (blabla11)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dominic Ruh (blabla11)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominic Ruh (blabla11)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Code:
...
mov temp2,Sekunden
andi temp2,0b11110000  ; high byte isolation
...
mov temp2,Sekunden
andi temp2,0b00001111 ; low nibble in temp2
...

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.




Autor: Dominic Ruh (blabla11)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dominic Ruh (blabla11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank
der befehl müsste dann brsh sein

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.