Hallo Gemeinde, folgende Frage hat mich heute Nacht nicht schlafen lassen. Den Code in der Test.c habe ich gestern Abend geschrieben, damit ging auch mein Ziel für gestern auf. Bei drücken einer Taste auf dem STK500 leuchtet die dazugehörige LED auf. Schön. Danach wollte ich das bei drücken des Tasters SW0 erst die LED 0 beim nächsten drücken des Tasters SW0 die LED 1 usw. angeht. Ich hab jetzt mehrere Stunden probiert leider ohne Erfolg. Meine 3 Bücher habe ich auch befragt aber irgendwie habe ich eine Blockade. Kann mir jemand bei dem Problem helfen? Bestimmt simpel aber Ihr wisst ja wie das am Anfang ist. Danke und Beste Grüße Eric
Eric W. schrieb: > Ich hab jetzt mehrere Stunden probiert leider ohne Erfolg Ja, probieren ist natürlich der falsche Ansatz, man muß überlegen. Und zwar erstmal abseits jeglicher Programmiersprache, d.h. wie muß überhaupt der Ablauf sein. Verschiedene Zustände kann man z.B. durch eine Variable erreichen, die man hochzählt. Und die Variable wertet ein switch/case aus. Damit ist man dann bei der allseits bekannten Statemaschine. Peter
Schau mal nach wie man Taster entprellt. Sobald dir das gelingt, sollte die Ansteuerung einfach sein.
Du fängst gerade erst an zu programmieren, oder? Das was Du jetzt in deinem Programm mit festen Werten machst(PORTA= 0b111....), muss variabel werden. Dazu deklarierst Du eine Variable. Wie das geht, findest Du in Deinen Büchern. Da diese Variable in ihrem Wert veränderbar ist, kann man ihr mit jedem Tastendruck einen anderen Wert geben. Und am Ende bekommt der PORTA den Wert der Variablen, mit PORTA= variable; Und schon blinkts:)
Hallo und danke für die Denkanstöße! Ja ich bin ziemlicher Anfänger was programmieren angeht. Ich habe jetzt versucht eine variable Namens a einzubringen und diese mittels Linksverschiebung immer um ein Bit zu verschieben. Leider funktioniert es nicht. Seht ihr den Fehler?
Das ist schon gut gedacht mit dem Schieben(a<<1). Aber a braucht einen StartWert. Z.B. 0x01 oder 0xfe. Und wenn Du a auf Null setzt, " else a= 0; " dann schiebst Du danach auch nur Nullen durch die Gegend! Veilleicht versuchts Du es erst mal ohne Tastenabfrage, nur einen festgelegten Wert, a= 0x55 oder a= 0xaa a auf PORTA(den LED´s) auszugeben.
Letzte Nacht ist so einiges passiert.
Alle Probleme lösten sich in Luft auf und alles funktioniert so wie ich
es will.
Problem 1:
Autor: STK500-Besitzer (Gast)
Datum: 05.08.2012 07:41
Was soll da passiern?
a<<1;
Richtig da kann ja gar nix passieren ->
Lösung: variable = Operand << n(Stellen);
a = a << 1;
Problem 2:
"
else
a= 0; <-- hier liegt der Fehler!
"
Wenn a = 0 ist dann werden ja auch nur 0en geschoben, also -->
Lösung: a = 1; <-- und zack es funktioniert
Dann habe ich noch wie empfohlen ein paar #define eingefügt <-- geht
sehr gut!
Dann das Problem das die Ausgabe noch invertiert werden muss.
Lösung: XOR vor die übergebene Variable in der Ausgabefunktion.
Ende vom Lied: Vielen Dank für alle Denkanstöße!!! Manchmal sieht man
die 1 vor lauter 0en nicht... ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.