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
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!
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
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
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.
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
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.