Hallo zusammen,
ich habe in ABEL einen 7Seg-Decoder angepasst, um ihn im Lattice ISP
Lever zu verwenden.
Funktioniert einwandfrei, bis auf den Schönheitsfehler, dass bei
Ansteuerung mit Adresse 0 auch "0" angezeigt wird. Da aber bei Adresse 0
angefangen wird zu zählen, soll hier eine "1" auf der Anzeige
erscheinen.
Nochmal: Adresse 0..15 => Anzeige 1..16
Wie ändere ich das im beiliegenden Code ab??
Danke!
Tobe
1
module bcd7_2seg
2
title 'seven segment display decoder'
3
4
" angepasst auf ein Ausgabe a-g und einer Ansteuerung für
5
" LowerSegment und HigherSegment
6
7
" The 5 -bit binary (0 - 64) score is converted into two BCD outputs.
8
" The integer division '/' and the modulus operator '%' are used to
9
" extract the individual digits from the two digit score.
@ Tobe (Gast)
>Nochmal: Adresse 0..15 => Anzeige 1..16>Wie ändere ich das im beiliegenden Code ab??
Wenn du nicht mal soviel Verständnis für ABEL hast und nur copy & paste
betreibest, sehe ich für weitere Problemlösungen schwarz.
Du musst die beiden Tabellen um eine Zeile verschieben. 1->0, 2->1 ...
0->9
MfG
Falk
@ Timo (Gast)
>Leider stimmt das so nicht! Problematisch ist der Übergang auf 10*x, da>stimmt die Zehnerstelle nicht..
Man muss die Tabelle als zwei Tabellen betrachten, schliesslich ist ja
ein Einagng mit X definiert. Dann passt das schon. Einfach mla
hinschreiben.
So sollte es geben
1
truth_table ([bcd2,bcd1,Seg] -> [ a , b , c , d, e , f , g ])
2
[X,0,ON] -> [OFF, ON, ON, OFF, OFF, OFF, OFF]; "1
3
[X,1,ON] -> [ ON, ON, OFF, ON, ON, OFF, ON];
4
[X,2,ON] -> [ ON, ON, ON, ON, OFF, OFF, ON];
5
[X,3,ON] -> [OFF, ON, ON, OFF, OFF, ON, ON];
6
[X,4,ON] -> [ ON, OFF, ON, ON, OFF, ON, ON];
7
[X,5,ON] -> [ ON, OFF, ON, ON, ON, ON, ON];
8
[X,6,ON] -> [ ON, ON, ON, OFF, OFF, OFF, OFF];
9
[X,7,ON] -> [ ON, ON, ON, ON, ON, ON, ON];
10
[X,8,ON] -> [ ON, ON, ON, ON, OFF, ON, ON]; "9
11
[X,9,ON] -> [ ON, ON, ON, ON, ON, ON, OFF]; "10
12
13
[0,X,OFF] -> [OFF, ON, ON, OFF, OFF, OFF, OFF]; " 11
@Tobe
Sehe ich das richtig, dass Du zwei Dezimalstellen anzeigst und "Seg" ein
Ausgang ist, der auf die ein oder andere Anzeige schaltet??
@ Falk
wenn ich recht habe, würdest Du damit bei 00 eine 11 anzeigen.
@ Timo (Gast)
>wenn ich recht habe, würdest Du damit bei 00 eine 11 anzeigen.
Hmmm, stimmt. Das wird alles recht verkorkst. Da gibt es zwei Lösungen.
- Eine neue Tabelle schreiben, die aus einem 4 Bit HEX-Wert (kein BCD)
die Zahlen 1..16 dekodiert.
- den Eingangswert mittels Addierer um 1 erhöhen und dann ausgeben
MfG
Falk
mir scheint die Addiererlösung am saubersten.
Ich habe von ABEL selbst keine Ahnung, aber ich vermute per equation
wird um 1 hochgezählt.
ich tippe mal in der Art
MyZahl=[V19..V15] ' neue Variablen schaffen
equations
MyZahl=Zahl+1
Könnte das so gehen?