Forum: Mikrocontroller und Digitale Elektronik Tasterabfrage geht nicht, mega8 avrasm


von Mirko (Gast)


Angehängte Dateien:

Lesenswert?

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

von Mirko (Gast)


Lesenswert?

Hat keiner Lust meinen Code mal kurz anzuschauen, denn es sind ja immer 
noch o Downloads :(

von Mirko (Gast)


Lesenswert?

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

von Uwe N. (ulegan)


Lesenswert?

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.

von Google Nutzer (Gast)


Lesenswert?

ich würde mal raten ...
Tastenentprellung ....

von Mirko (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von Mirko (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.