Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 01. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

Tastenabfrage in Schleife einbinden

ATMega-Controller in BASIC programmieren

Postby el_caputo » Tue Oct 14, 2008 12:00 am

Eine neuer Frust, eine neue Frage.

Ich doktor jetzt schon seit etlichen Tagen an meinem Grundprogramm herum, nur um eine dämliche Taste abzufragen und das ergebnis mit einer Zeit an einem anderen Ausgang auszugeben. Meine Vorstellung sieht so aus:

If U = 0 Then

Seg1a = 0
Seg1b = 0
Seg1c = 0
Seg1d = 0
Seg1e = 0
Seg1f = 0
Seg1g = 1

Seg2a = 0
Seg2b = 0
Seg2c = 0
Seg2d = 0
Seg2e = 0
Seg2f = 0
Seg2g = 1

Seg3a = 0
Seg3b = 0
Seg3c = 0
Seg3d = 0
Seg3e = 0
Seg3f = 0
Seg3g = 1

Relais1 = 1
Relais2 = 1
Relais3 = 1
Relais4 = 1
Relais5 = 1

das ist eine von 25 Stufen. In jeder Stufe soll eine Taste an Porta.6 gegen 5V geschaltet abgefragt werden. Ist das ergebnis 0 soll einfach mit der nächsten Stufe weitergemacht werden. Ist das Ergebnis 1, so soll der Porta.5 auf High gehen für eine bestimmte Zeit z.B. mit waitms 1500 . Nach der Zeit soll der Porta.5 wieder auf low gehen und das Programm ganz normal weiterlaufen.

Ich habe es bisher mit jmp, goto gosub ret return... versucht umzusetzen. Das Ergebnis war immer das selbe. Entweder ist der Ausgang Porta.5 die ganze Zeit auf High oder die ganze Zeit auf Low. Ebenfalls werden dann die darauffolgenden Stufen nicht mehr abgefragt.

WAS HABE ICH FALSCH GEMACHT???

Ich hoffe dass mir irgendjemand da weiterhelfen kann.

Mit HOFFNUNGSVOLLEN Grüßen

Frank
el_caputo
 
Posts: 24
Joined: Fri Jan 03, 2014 1:52 pm

Postby burkhard kainka » Thu Oct 16, 2008 12:00 am

Tastenabfragen sind nicht ganz einfach, weil man nie weiß, wann genau gedrückt wird. Man muss dehalb mehrfach abfragen. Wenn z.B. in jeder Schleife eine Wartezeit von z.B. 100 ms liegt, sollte diese in eine Schleife mit 100 mal 1 ms plus Tastenabfrage aufgeteilt werden.

Es könnte helfen, erstmal alle erreichbaren Programme mit Tastenabfragen zu analysieren, z.B. die aus dem MT18-Projekt oder hier im Forum oder den Morsedecoder in
http://www.franzis.de/elo-das-magazin/mikrocontroller-und-programmierung/entwicklungssysteme/butterfly-morse-dekoder

In ganz kritischen Fällen muss man einen Timer-Interrupt verwenden und die Tasten sozusagen immer abfragen.

Auf jeden Fall würde ich erstmal ein Miniprogramm nur für Tastenabfragen schreiben. Veilleicht leigt der Fehler ja schon in der Hardware.

Der Fehler liegt erstens immer woanders und zweitens als man denkt.

Anderseits, wenn eine Tastenabfrage zu funktionieren scheint, kann immer nich eine Macke drin sein. Oder, wie Dietrich Drahtlos es formuliert haben soll:

Es scheint oft perfekt,
was seinen Fehler versteckt.
burkhard kainka
 
Posts: 736
Joined: Thu Jan 02, 2014 10:41 am


Return to BASCOM-AVR-Kurs

Who is online

Users browsing this forum: No registered users and 1 guest