7-Segement Multiplex

Elektronik-Labor  Projekte  Mikrocontroller  TLScript  




Beim Kosmos-Mikrocontroller gab es ein zweistelliges Siebensegment-Display mit einem CMOS-Displaytreiber, das über vier Leitung D0 bis Do angesteuert wurde. Eine weitere Leitung "Digit" diente dazu, zwischen beiden Stellen umzuschalten. Wenn ich es mit meinem CH32V003 ansteuern will, muss ich beachten, dass alle Bits um eine Stelle verschoben sind, weil D0 am Controller die Eingangsleitung ist und die digitalen Ausgänge mit D1 beginnen. Das Display wird aber genauso angesteckt wie im Handbuch zum Kosmos Mikrocontroller. .



Im Testlab kann man nun diverse Ausgaben testen. Wenn ich eine 8 ausgebe, erscheint auf dem rechten Digit eine 4, weil die Ausgaben um eine Stelle verschonen sind.



Um das linke Digit anzusteuern, muss D5 gesetzt werden. zusätzlich zur Ziffer muss also 32 ausgegeben werden.



Um links eine 3 auszugeben, muss ich also 3 * 2 + 32 = 38 ausgeben.



Um beide Ziffern zu verwenden, muss man schnell hintereinander das rechte und das linke Digit ansteuern. Die Ausgabe wird hier also gemultiplext, wobei jede Zahl für eine Millisekunde leuchtet. Für ein zweistelliges Display bedeutet das eine Ausgabefrequenz von 500 Hz, sodass man kein Flackern erkennen kann.



Hier werden die Zahlen von 1 bis 99 hochgezählt. Um die Ziffen zu trennen, wird zuerst ganzzahlig durch 10 geitelt. so erhält man die obere Digit und kann es ausgeben. Danach wird diese Ziffer mit 10 Multipliziert. Aus 74 wurde 7, und nun 70. Durch Subtraktion 74-70 landet die untere Ziffer 4 in A und kann rechts ausgegeben werden. Das Ganze läuft in eienr D-Schleife 250 Mal, also 0,5 Sekunden lang, bis die folgende Zahl ausgegebnen wird.

        REM Display
0x09FE  Pdir = 254
0x0A01  Pullup = 1
0x0100  A = 0
              L1:
0x4200  Print A
0x04FA  D = 250
0x2108  Call L2:
0x2800  A = A + 1
0x2003  Jmp L1:
              L2:
0x3600  C = A
0x020A  B = 10
0x2D00  A = A / B
0x3400  B = A
0x3100  A = A Shl 1
0x1320  A = A OR = 32
0x4500  Pout = A
0x1901  Delay ms = 1
0x3500  A = B
0x020A  B = 10
0x2C00  A = A * B
0x3400  B = A
0x3700  A = C
0x2B00  A = A - B
0x3100  A = A Shl 1
0x4500  Pout = A
0x1901  Delay ms = 1
0x3700  A = C
0x2608  D*Jmp L2:
0x0263  B = 99
0x221E  If A=B Jmp L4:
0x4800  Ret
              L4:
0x0100  A = 0
0x4800  Ret


Elektronik-Labor  Projekte  Mikrocontroller  TLScript