Hallo, habe ein Programm zsuammenkopiert und angepasst für meine Uhr mit 4 7-Seg.anzeigen. Funktioniert auch alles soweit, bis auf die Tasterabfrage. Und zwar wenn ich den Taster an PD1 drücke, wird meine ausgegeben Uhrzeit um 256 erhöht. Im Simulator ist das nicht der Fall. Ich finde aber auch einfach keinen Fehler. Weiterhin habe ich das Problem, dass wenn die Uhr bei 60 angekommen ist weiterzählt, obwohl das ja eigentlich in der Mainloop verhindert wird. Im Simulator funktioniert auch das aber auf dem µc wieder nicht, seltsamerweise nur bei den Sekunden und bei Stunden un Minuten nicht. Kann mir da bitte jemand weiterhelfen, bin nämlich am verzweifeln. P.S.: Hab extra das ganze Programm reinkopiert, weil der Fehler ja vielleicht an einer Stelle liegt, wo ich ihn überhaupt nicht vermute. mfg
Hat keiner Lust meinen Code mal kurz anzuschauen, denn es sind ja immer noch o Downloads :(
Nagut, jetzt sind 22 Downloads aber das nütz mir ja nichts. Also im Programm ist zum Tasten entprellen die Routine von Peter Danegger enthalten. Außerdem habe ich von ihm auch "die genaue Sekunde ohne RTC". Aber warum der Teil des Programms nicht funktioniert ist mir schon echt ein Rätsel:
1 | loop: |
2 | |
3 | mov temp, key_press |
4 | cpi temp,2 |
5 | breq min |
6 | cpi temp,1 |
7 | breq hou |
8 | clr temp |
9 | clr temp1 |
10 | cpi second, $3C |
11 | brsh _mai2 |
12 | rjmp loop2 |
13 | _mai2: |
14 | clr second |
15 | inc minute |
16 | mov temp, minute |
17 | cpi minute, $3C |
18 | brsh _mai3 |
19 | rjmp loop2 |
20 | _mai3: |
21 | clr minute |
22 | inc hour |
23 | mov temp1, hour |
24 | cpi hour, $18 |
25 | brsh clear |
26 | rjmp loop2 |
27 | |
28 | loop2: |
29 | mov temp, minute |
30 | mov temp1, hour |
31 | rcall out_number |
32 | |
33 | rjmp loop |
Deine Fragestellung ist mir nicht ganz klar. Wie erhöht sich die Uhrzeit um 256? Das sind doch alles Bytes und die können doch nur 0..255 sein. Welche Stelle zählt über 60 hinaus? Stunden, Minuten oder Sekunden. Wenn es im Simulator geht (das Programm sieht eigentlich so aus, als könnte es gehen) und im realen Aufbau nicht, dann solltest du dir den Unterschied zwischen realer Welt und Simulation überlegen. Wie hoch ist die Interruptrate für das Tasten abfragen? Was passiert, wenn man länger als einen Interrupt auf die Taste drückt usw.
Also die Sekunden gehen, die werden bei 60 nicht weitergezählt. Die Minuten jedoch werden weitergezählt und die Stunden werden bei 24 auch einfach witergezählt, was ja aber eigentlich das hier verhindert:
1 | cpi minute, $3C |
2 | brsh _mai3 |
3 | rjmp loop2 |
4 | _mai3: |
5 | clr minute |
6 | inc hour |
7 | mov temp1, hour |
8 | cpi hour, $18 |
9 | brsh clear |
Wenn die Taste länger als einen Interrupt gedrückt ist, passiert zumindest im Simulator auch nichts, es wird eben ganz normal erhöht. Tasten werden über Timer2 abgefragt, der läuft mit Prescaler 1024 bei 8MHz.
> habe ein Programm zsuammenkopiert und angepasst für meine Uhr mit 4 > 7-Seg.anzeigen. Und jetzt sollen Andere die Fehler suchen? Verwende doch bitte nur die Codeschnipsel, die Du auch genau verstehst. Du musst zwar nicht jede Routine selbst schreiben, aber Du solltest sie und das Zusammenspiel mit anderen Routinen verstehen. Wenn Du den Überblick verlierst, ist das Projekt (momentan) eine Nummer zu groß für Dich. Specke es ab, teste und debugge die Einzelmodule, und erweitere das Programm langsam und systematisch.
Na den Überblick habe ich ja nicht verloren. Es ist nur das Problem, das es im Simulator geht und in der Realität nicht. Und das ist eben mein Problem, ich kann es nicht weiter nachvollziehen, warum es nicht geht.
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.