LEDs per Taster auf STK500 anschalten (ATmega16)

OP #2772404
Lesenswert?

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
Angehängte Dateien:
#2773364
Lesenswert?

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
Gast #2778206
Lesenswert?

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:)
Gast #2781288
Lesenswert?

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.
OP #2781697
Lesenswert?

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... ;-)
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren