Forum: FPGA, VHDL & Co. Auf einen Tastendruck Led schalten


von Andreas (Gast)


Lesenswert?

Hallo

Ich habe warscheinlich ein Brett vor dem Kopf und komme einfach nicht 
weiter. Wenn eine von acht Tasten gedrückt wird soll eine Led leuchten.
Ich habe schon die verschiedensten Versionen probiert, die Led bleibt 
aber dunkel.Kann mir bitte jemand sagen wieso das so ist? Anbei der 
Code. Wenn ich nur :

assign Led[1] = Switch[1];

schreibe dann leuchtet die Led wem Taster 1 gedrückt wird.
1
module TestSwitch (clk, Switch, Led );
2
3
input clk; 
4
input [8:1] Switch;
5
output [2:1] Led;
6
7
assign Led[1] = (Switch != 0); // schalte Led, wenn ein Taster gedrückt
8
9
// assign Led[1] = (Switch[1] | Switch[2]); // geht auch nicht
10
11
endmodule

Vielen Dank

Andreas

von Duke Scarring (Gast)


Lesenswert?

Hast Du die Pins richtig zugeordnet? Welche Hardware verwendest Du?

Duke

von Andreas (Gast)


Lesenswert?

Hallo Duke

Ich verwende einen Altera, EPM3064ATC.

Ich habe auch jede Taste einzeln geprüft und die Led leuchtet. Also z.B.

assign Led[1] = Switch[1]; // funtioniert
assign Led[1] = Switch[2]; // funtioniert
assign Led[1] = Switch[3]; // funtioniert


Vielen Dank für deine Hilfe

Andreas

von Andreas (Gast)


Lesenswert?

Die Pinzuordnung habe ich auch nochmals überprüft. Sie stimmt. So 
langsam bin ich am verzweifeln.

von Duke Scarring (Gast)


Lesenswert?

Ich bin nicht so firm im verilog. Vielleicht schaust Du Die das ganze 
aber mal im Simulator an? Stichwort: Testbench

Duke

von Andreas (Gast)


Lesenswert?

Hallo Duke

Danke für den Hinweis, da muss ich mal schauen wie man mit Quartus 
simulieren kann.


Ich habe zum Test nun anstatt des Verilog-Files noch ein Schematics-File 
angelegt und die 8 Tasten mit logisch or verknüft. Das geht auch nicht. 
Wenn ich drin eine Taste mit einem Ausgang verbinde, dann leuchtet die 
Led. Also gleiches Verhalten wie mit Verilog-Code.

Danke nochmals

Andreas

von berndl (Gast)


Lesenswert?

nur mal ganz bloede gefragt: Hast du schon mal alle 8 Taster 
gleichzeitig gedrueckt?

von Andreas (Gast)


Lesenswert?

@berndl

Das kann ich leider nicht weil fünf der Schalter durch einen 
Navigationsschalter links/rechts/auf/ab,gedrückt geschaltet werden

von Lattice User (Gast)


Lesenswert?

Der Schalter und die Leds sind nicht zufällig low aktiv, d.h. Schalter 
schaltet gehen GND, und LED ist an bei Low Pegel?

von Andreas (Gast)


Lesenswert?

Die Schalter sind active high, die Leuchtdioden active low.

Hardwareseitig sieht das so aus, als die Leuchtdiode über einen 
Widerstand auf 3.3V liegt und ein CPLD-Pin zwischen Ground und 3.3V 
schaltet.

Bei den Schaltern: Wenn eine Taste gedrückt wird, dann liegt an einem 
entsprechenden Eingangspin des CPLDs 3.3 V an.

von Lattice User (Gast)


Lesenswert?

Andreas schrieb:
> Die Schalter sind active high, die Leuchtdioden active low.

Das steht aber im Widerspruch zu dem hier:

> assign Led[1] = Switch[1];
>
> schreibe dann leuchtet die Led wem Taster 1 gedrückt wird.

von Andreas (Gast)


Lesenswert?

Nun habe ich einen Blödsinn geschrieben:

Die Schalter und Leds sind aktive Low

Schalter: Ziehen je einen Pullup auf Ground, wenn die entsprechende 
Taste gedrückt wird.

Led:  auch, weil sie ja nur dann leuchtet, wenn der Ausgangspin des CPLD 
auf Ground schaltet

von Andreas (Gast)


Lesenswert?

Ich glaube, nun leuchtet es mir:)

von Lattice User (Gast)


Lesenswert?

Andreas schrieb:
> Die Schalter und Leds sind aktive Low

Dann probiere mal

assign Led[1] = ~(Switch != 8'b1111_1111);

von Andreas (Gast)


Lesenswert?

Viele Dank!!!!!!!

Der Wink mit active-Low-High war sehr gut!

Mann, nun habe ich mit Mikrocontroller schon hunterte Leuchtdioden 
geschaltet und falle auf diesen grundlegenden Sachverhalt rein!

Manchmal hat man wirklich ein Brett vor dem Kopf:):):):):)

Vielen Dank nochmals an Alle und speziell Lattice User, der einem 
Konkurrenzprodukt-User half!

von Andreas (Gast)


Lesenswert?

Das war dann wohl auch der Gedanke von berndl

von berndl (Gast)


Lesenswert?

Andreas schrieb:
> Code. Wenn ich nur :
>
> assign Led[1] = Switch[1];
>
> schreibe dann leuchtet die Led wem Taster 1 gedrückt wird.

aus deinem Eingangspost :o)

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.