Hallo!
Mein Problem ist folgendes:
ein Mikrocontroller (STK 500) hat 5 Taster-Eingänge (für das Problem
sind die ersten 4 relevant) und 6 LED Ausgänge (Hier sind die ersten 5
relevant)
Bei druck auf Taster 0 (am PORTD, also PIND auf 0x01) soll erst led 0
(Am PORTB) angehen und kurze zeit später die led 1. Beim druck auf
taster 1 erst led 0, kurze zeit später led 2 und so weiter. Anschließend
soll sie wieder ausgehen.
Doch irgendwie tut sich garnix.
Dieses kleine Testprogramm soll einfach nur die LEDs anmachen, wenn
irgendein taster gedrückt ist und alle aus, wenn keiner gedrückt ist.
kann mir jemand helfen?
Tobias Keller schrieb:> if(ind>0) {> outb = 0xFF;> } else {> outb = 0x00;> }> ind = PIND;> PORTB = outb;> }> }
Ich bin mir zwar nicht ganz sicher aber ivh glaube es wird "negative
Logik" verwendet. D.h. ein gedrückter Taster zeichnet sich dadurch aus,
dass das entsprechende Bit 0 ist.
Bei den LED ist es genauso, wenn du ne 0 an den Port schicktst ist die
entsprechende LED an!
Ich hoffe ich liege jetzt nicht ganz danenben!
Tastenabfrage ist keine so triviale Sache, wie es sich Anfänger gerne
vorstellen. Man braucht dazu schon recht ausgefeilte Routinen. Diese
machen dann Entprellung, Störunterdrückung, Flankenerkennung, Speichern
und Auswertung.
Zeitverzögerungen sind auch nicht trivial. Der Anfänger wartet gerne,
aber dann kann die CPU nichts anderes machen. Das ist also ne Sackgasse.
Es gibt gute Lösungen, die allerdings nicht ganz einfach zu verstehen
sind:
Beitrag "Wartezeiten effektiv (Scheduler)"
Es ist jetzt die Frage, ob man mühsam Schritt für Schritt alles nochmal
selber neu erfinden will oder die Erfahrungen anderer nachnutzt.
Ein PC-Programmierer entwickelt ja auch nicht die Funktionen der
Grafikkarte selber, sondern installiert die Treiber-DLL und ruft deren
Funktionen auf.
Peter
Oliver R. schrieb:> Ich bin mir zwar nicht ganz sicher aber ivh glaube es wird "negative> Logik" verwendet. D.h. ein gedrückter Taster zeichnet sich dadurch aus,> dass das entsprechende Bit 0 ist.> Bei den LED ist es genauso, wenn du ne 0 an den Port schicktst ist die> entsprechende LED an!>> Ich hoffe ich liege jetzt nicht ganz danenben!
Das stimmt teilweise, und da ist glaube ich auch der Hund begraden. Weil
AVRs interne Pullups haben werden Schalter/Taster oft so verschaltet,
daß sie den Pin nach GND ziehen. Bei Ausgängen ist das aber nicht mehr
üblich.
Das Problem ist doch: wenn du so abfragst:
if(ind>0)
Dann sind bei bei ungedrückten TAstern und aktivierten Pullups alle Bits
1 (>0, z.B. 0xFF). Wenn du jetzt einen Taster drückst wird ein Bit 0,
Dann steht da z.B. 0xFE. Und: das ist immer noch >0 !
Gruß
Ja, das war ja auch nur ein Test, ob der überhaupt die eingaben
ausliest. Hab das problem auch gefunden, es war eben diese Negative
Logik. Es geht bei dem Projekt darum, wenn eine taste gedrückt wird, auf
einer USB-Tastatur eine Tastenkombination zu drücken (Via Optokoppler),
da ist es sogar gut, dass der Controller nur eine Sache gleichzeitig
machen kann.
Mann, hab ich einen "Bitte nicht lesen"-Vermerk vor meinen Beiträgen?!
Ob Test oder nicht, ist doch Wurst, wenns nicht geht! Und weil du dich
nicht präziser ausdrückst als
Tobias Keller schrieb:> Doch irgendwie tut sich garnix.
kann man auch nicht präzise helfen. Deine if-Abfrage scheint Kappes zu
sein, mehr nicht. Siehe oben!
Ich hab aber keine Lust dir zu sagen, wie es richtig wäre. Schließlich
steht oben ja schon, warum es nicht geht (ich vermute mal, daß alle
deine LEDs immer an sind). Ob du abfragst, ob 255 > 0 ist, oder 150 > 0
oder weißdergeierwas > 0 ist egal, du wirst immer JA als antwort
kriegen...
Gruß
Naja ok, dann lag ich mit meiner Vermutung eben falsch. Ich kenne den
Schaltplan vom STK500 nicht. Dennoch bleibt das Problem mit der fast
immer wahren Abfrage bestehen. Außer er hat acht Taster und drückt alle
gleichzeitig... ;)
also es geht jetzt, das Problem war eben, dass die Taster bei aktivität
auf 0 stehen und bei inaktivität auf 1.
Da ich gedacht hatte, dass es garnicht auf die Taster reagiert, hatte
ich mit dem beispiel halt IRGENDEINE tasterverändeurng abfragen wollen.
Tobias Keller schrieb:> Thread kann geschlossen werden...
Wie kommst Du darauf?
Noch hat niemand auf Peters sehr berechtigten Hinweis reagiert.
Deine Tasterspielerei ist zwar gut und schön, mag für Dich auch ein
"Lernerfolg" sein, ist aber in der Praxis zu nichts und garnichts zu
gebrauchen.
...