Forum: Mikrocontroller und Digitale Elektronik Programmkorrektur


von Max (Gast)


Lesenswert?

Hi ich habe hier ein Programm geschrieben dass verschiedene Leds auf
Tastendruck einschalten soll.
Könnt ihr mir den Fehler sagen?
Wenn man sich das auf dem STK500 anguckt, dann leuchten immer schwach
die LED4,LED5,LED6.

Gruß MAX

von Heinz (Gast)


Lesenswert?

@max
Sorry hab meine Kristallkugel wohl gerade verlegt...

von Rufus, das dicke Ei (Gast)


Lesenswert?

"Sorry hab meine Kristallkugel wohl gerade verlegt..."

Dann such sie.

von Max (Gast)


Lesenswert?

Hi sorry (;

Hier ist der Code:

$regfile = "2313def.dat"
$crystal = 3686400
Dim X As Byte
Config Portb = Output
Config Portd = Input

Portd = &B1111111
Portb = &B1111111

Do

If Pind.0 = 0 Then Portb = 250 Else Portb = 255             '1
If Pind.1 = 0 Then Portb = 193 Else Portb = 255             '2
If Pind.2 = 0 Then Portb = 208 Else Portb = 255             '3
If Pind.4 = 0 Then Portb = 184 Else Portb = 255             '4
If Pind.5 = 0 Then Portb = 148 Else Portb = 255             '5
If Pind.6 = 0 Then Portb = 132 Else Portb = 255             'R
If Pind.7 = 0 Then Portb = 143 Else Portb = 255             'L
Loop

von Max (Gast)


Lesenswert?

Habt ihr eine Erklärung dafür,warum bei Nichtdrücken eines Tasters
trotzdem 3Leds schwach leuchten?

von Peter D. (peda)


Lesenswert?

"Habt ihr eine Erklärung dafür,warum bei Nichtdrücken eines Tasters
trotzdem 3Leds schwach leuchten?"

Zieh mal das ISP-Kabel ab.


Trotzdem ist Dein Code bestimmt nicht das, was Du vorhast.


Peter

von Andi K. (Gast)


Lesenswert?

So, wie es aussieht, möchtest Du 7-Segment-LED´s steuern.
Das haut so nicht hin.
Wenn einer der 8 IF-Bedingungen erfüllt ist, müßtest Du den ganzen
IF-Block sofort verlassen, ansonsten wird das, was vorher auf low
gesetzt wurde von der nächsten IF-Bedingung, welche nicht zutrift,
wieder auf hi-Pegel gesetzt (255).
Mach es doch lieber mit Variablen wie z. B.:

Dim LEDVar as Byte

Do

LEDVar=255    'Wenn keine Taste gedrückt leuchtet keine LED
If Pind.0 = 0 Then LEDVar = 250             '1
If Pind.1 = 0 Then LEDVar = 193             '2
If Pind.2 = 0 Then LEDVar = 208             '3
If Pind.4 = 0 Then LEDVar = 184             '4
If Pind.5 = 0 Then LEDVar = 148             '5
If Pind.6 = 0 Then LEDVar = 132             'R
If Pind.7 = 0 Then LEDVar = 143             'L
Portb = LEDVar

Loop

MfG
Andi

von Max (Gast)


Lesenswert?

HI Andi ,

danke für deine Antwort. Deine Erklärung verstehe ich, aber mit den
Variablen funktioniert nun überhaupt nichts mehr(:
Was könnte man da noch machen?

von Andi K. (Gast)


Lesenswert?

Dann check mal die LED´s ob die auch wirklich auf GND leuchten:
VCC -> Vorwiderstand -> Anode -> Katode -> PortB.

MfG
Andi

von Max (Gast)


Lesenswert?

Hallo Andi ,
ich habe die Leds vom STK500 zum Test angeschlossen.
Ich habe durch den Befehl INPUT mir den Wert an die Variablen liefern
lassen. habe ich da im Terminalprogramm zB 208 geschrieben, dann
leuchtete die korrekte ledzusammensetzung. (also zB die2. und 5.Led)

MfG Max

von Max (Gast)


Lesenswert?

Habt ihr eine Idee wie man das machen kann? DAs muss doch machbar sein
oder?

von Andi K. (Gast)


Lesenswert?

Dann probier erst mal einen Code ohne Schnickschnack wie z. B.:

PortB=255-1
End

Wenn die LED´s auf GND geschaltet sind müßte jetzt genau die LED an
PortB.0 leuchten. Wenn alle anderen leuchten, an PortB.1 bis PortB.7,
dann sind die hi-active.
Wenn das dann richtig geht dann probierst Du einfach 255-2,
255-4...255-128.
Zumindest hilft Dir das bei der Fehlersuche.

MfG
Andi

von Andi K. (Gast)


Lesenswert?

Ach ja, am Programmstart (Init) kannst Du noch "DDRB=255" schreiben,
damit ist der PortB sicher als Ausgang.

MfG
Andi

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.