Forum: Mikrocontroller und Digitale Elektronik Tutorial, tasten in asm


von Claude44 (Gast)


Lesenswert?

Schönes neues Jahre an alle.

Irgend jemand soll anfangen, und ich fändt doch an.

als Anfänger versuch ich der Tutorial Tasten nach zu machen, und ich 
stoss auf ein menge fehler.
ich habe das erste programm versucht aber wir erwartet reagiert mein 
Taten nicht so wie es sein sollt. ich comme auf die Enprellung mit 
abfrage, aber blinken die LED an dauer ohne das ich etwas machen kann. 
obtisch prüfung meiner Code schein in Ordnung sein. kann mann mich noch 
helfen?

ich benüzt der STK 500 und AmelStudio 6.2

Vielen Danke für euer hilfe
Claude

von diag (Gast)


Lesenswert?

Claude44 schrieb:
> obtisch prüfung meiner Code schein in Ordnung sein. kann mann mich noch
> helfen?

Nein.

von R. F. (rfr)


Lesenswert?

Prüfe, ob "m8def.inc" zu deinem Board passt.

Was sagt der Assembler, welche Fehlercodes gibt er aus?

Gruss

Robert

von Claude44 (Gast)


Lesenswert?

Danke für dein Antwort
Der m8def.inf pass zu mein Board, und ich habe kein fehler meldung, nur 
das beim starten des Programms, alle LED blinken, sollen aber nicht 
(ausser 6 und 7 aus) und die Tasten bleiben ohne effect.
Claude

von R. F. (rfr)


Lesenswert?

welches Programm aus dem Tutorial ist es? Kannst du es hier posten?

von Claude44 (Gast)


Lesenswert?

Das ist der Lik," 
https://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten";

Mein Quellcode
/*
 * Tasten_1.asm
 Das folgende Programm soll bei jedem Tastendruck eines
 Tasters am Port D (egal welcher Pin) eine LED am Port B0
 in den jeweils anderen Zustand umschalten:
 *************************************************
 Nun kann es natürlich sein, dass ein neuer Taster zunächst
 überhaupt nicht prellt. Ist der Taster vom Hersteller nicht
 explizit als 'prellfreier Taster' verkauft worden, besteht
  aber kein Grund zur Freude. Auch wenn der Taster heute
  noch nicht prellt, irgendwann wird er es tun. Dann nämlich,
  wenn die Kontaktfeder ein wenig ihrer Spannung verliert
  und ausleiert, bzw. wenn sich die Kontaktflächen durch
  häufige Benutzung abgewetzt haben.
  ****************************************************
 Entprellung
 Aus diesem Grund müssen Tasten entprellt werden.
 Im Prinzip kann eine Entprellung sehr einfach durchgeführt
 werden. Ein 'Tastendruck' wird nicht bei der Erkennung der
 ersten Flanke akzeptiert, sondern es wird noch eine zeitlang
 gewartet. Ist nach Ablauf dieser Zeitdauer die Taste immer
 noch gedrückt, dann wird diese Flanke als Tastendruck
 akzeptiert und ausgewertet.
 */

 ;************************************
 ;         Include datei
 ;************************************

 .Include  "m8def.inc"

 ;************************************
 ;       Definition
 ;************************************

 .def  key_old    =  r3
 .def  key_now    =  r4

 .def  temp1    =  r17
 .def  temp2    =  r18


 .equ  key_pin    =  PIND
 .equ  key_port  =  PORTD
 .equ  key_ddr    =  DDRD

 .equ  led_port  =  PORTB
 .equ  led_ddr    =  DDRB
 .equ  LED      =  0

 ;************************************
 ;      I)nitialiesierung
 ;************************************

  ldi  temp1,  1<<LED
  out  led_ddr, temp1    ; Port B als Ausgang

  ldi  temp1,  $00    ; Port D auf Eingaenge
  out  key_ddr, temp1
  ldi  temp1,  $FF          ; die pull up  einschalten
  out  key_port, temp1

  mov  key_old, temp1    ;  war kein taster gedruckt

;*************************************
;    Programmstart
;*************************************


Start:

  in  key_now, key_pin    ;  Zustand der Taster holen
  mov  temp1,  key_now    ; ud in temp1 sichern
  eor  key_now, Key_old  ;  vorhergehenden Zustand XOR
  mov  key_old, temp1    ; jetzign Zustand für den nächsten

    ; Schleifendurchlauf als alten Zustand merken

  breq  Start    ;

  ldi  temp1,  $FF  ; ein bisschen warten
wait1:
  ldi  temp2,  $FF
wait2:
  dec  temp2
  brne  wait2
  dec  temp1
  brne  wait1
                    ; nachsehen ob die Tast noch steht
  in  temp1,  key_pin
  and  temp1,  key_now
  brne  Start

  in  temp1,  led_port  ; der Zustande der LED umdrehen
  com  temp1
  out  led_port,temp1

  rjmp  Start

von R. F. (rfr)


Lesenswert?

Du hast das Programm assembliert. Mit welchem Ergebnis?
Weleche Meldungen hat der Assembler ausgegeben, welche sonstigen 
Meldungen gibt es?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Und: welche Hardware? Wie sind die Tasten angeschlossen?

Claude44 schrieb:
> alle LED blinken, ... und die Tasten
> bleiben ohne effect.
Was sagt der Simulator zu dem Code?

: Bearbeitet durch Moderator
von Claude44 (Gast)


Lesenswert?

mit der simulation ist es auch ein sach, ich muss über 500 zyclen 
warten, die initialiesierung schein OK zu sein. aber als anfänger, ich 
kann nicht beurteilen ob die interrupt richtig reagiere, und der rest 
auch nicht

von Claude44 (Gast)


Lesenswert?

Wie schon erklärt, ich habe kein Fehlermeldung, der SDK 500 ist OK, wie 
die Tasten angeschlossen sind, ich muss der Shaltplan der SDK nach 
sehen, Ich habe gerade probiert die Tastenverbindungen zu trennen, und 
blinkt immer weiter, ich denk an ein Fehler in die Software
Claude

von Dietrich L. (dietrichl)


Lesenswert?

Claude44 schrieb:
> ich kann nicht beurteilen ob die interrupt richtig reagiere

Ich sehe im Programm keinen Interrupt.

Gruß Dietrich

von Claude44 (Gast)


Lesenswert?

diag schrieb:
> Claude44 schrieb:
>> obtisch prüfung meiner Code schein in Ordnung sein. kann mann mich noch
>> helfen?
>
> Nein.

Hast du rechts
Claude

von Claude44 (Gast)


Lesenswert?

Dietrich L. schrieb:
> Ich sehe im Programm keinen Interrupt.

Sorry, ich habe verwechsel von ein Andere Programm. aber es funktioniere 
trotzdem nicht, und es binkt immer weiter

von Peter D. (peda)


Lesenswert?

Ich würde die Entprellung und Flankenauswertung erstmal nur für eine 
Taste programmieren und testen.
Und wenn das zuverlässig funktioniert kann man es auf 2 Tasten 
erweitern.

von Claude44 (Gast)


Lesenswert?

Peter D. schrieb:
> Ich würde die Entprellung und Flankenauswertung erstmal nur für eine
> Taste programmieren und testen.

Vielen Dank für dein Antwort, leider für mich ist es so, dass ich dieser 
Programm angegeben habe, ich möchte wissen warum es nicht functioniert, 
une für einzeltaste ist aufwindiger, da ich einzeln taste ansprechen 
muss. Ich habe andere programmen probiert, und alle funktionieren 
einwandfrei
Claude

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.