www.mikrocontroller.net

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


Autor: Mirko (Gast)
Datum:
Angehängte Dateien:

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

Autor: Mirko (Gast)
Datum:

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

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
loop:
  
  mov    temp, key_press
  cpi    temp,2
  breq  min
  cpi    temp,1
  breq  hou
  clr    temp
  clr    temp1
  cpi    second, $3C
  brsh  _mai2
  rjmp  loop2
_mai2:
  clr    second
  inc   minute
  mov    temp, minute
    cpi    minute, $3C
  brsh  _mai3
  rjmp   loop2
_mai3:
  clr    minute
  inc   hour
  mov    temp1, hour
    cpi    hour, $18
  brsh  clear
  rjmp  loop2

loop2:
  mov    temp, minute
  mov   temp1, hour
   rcall   out_number
 
  rjmp    loop  

Autor: Uwe Nagel (ulegan)
Datum:

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

Autor: Google Nutzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde mal raten ...
Tastenentprellung ....

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
    cpi    minute, $3C
    brsh   _mai3
    rjmp   loop2
_mai3:
    clr    minute
    inc    hour
    mov    temp1, hour
    cpi    hour, $18
    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.

Autor: Gast (Gast)
Datum:

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

Autor: Mirko (Gast)
Datum:

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

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.