![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
![]() ' =========================================================================== ' Demoprogramm: AZDelivery MAX7219 8x32 4 in 1 Dot-Matrix-LED-Display-Modul ' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 17. März 2022 ' =========================================================================== ' "AZDelivery MAX7219 8x32 4 in 1 Dot-Matrix LED-Display-Modul" für 9,99 EUR: ' https://www.amazon.de/dp/B079HVW652 ' Es handelt sich um eine LED-Dot-Matrix-Anzeige mit 256 (4*64) LEDs. Sie ' wird von vier Treiberchips "Maxim 7219" angesteuert. Jeder MAX7219 steuert ' dabei 8*8 LEDs. Die vier ICs sind hintereinander geschaltet und werden ' über einen SPI-Bus angesprochen. Die Betriebsspannung beträgt 5 Volt. ' Die Stromaufnahme der LED-Matrix-Anzeige ist davon abhängig, wie viele der ' LEDs leuchten und mit welcher Intensität. Ich betreibe das Modul an einem ' Labornetzgerät mit 5 Volt Spannung und einer Strombegrenzung von 500 ' Milliampere. Die Open-Maxi hat ihre eigene Stromversorgung. Bei den ' Demoprogrammen zieht das LED-Modul zirka 200 mA. Mit dem folgenden Befehl ' kann die Stromaufnahme auf zirka 40 mA gesenkt werden. Der Befehl sollte ' in der "PROCEDURE ledmatrix_initialisierung" stehen und den dort ' befindlichen Befehl ersetzen: ' ledmatrix_dataout &h0A,0,0,0,0 ' Intensität 0..15 ' Idealerweise sollten die drei Leitungen des Moduls mit externen Pull-Up- ' Widerständen von zirka 10 Kiloohm ausgestattet werden. Sonst hängen die ' Leitungen in der Luft und das Modul zieht nach Anlegen der Betriebs- ' spannung und vor Start der Open-Maxi mitunter viel Strom. ' Dieses Programm basiert auf dem Beispielprogramm "max_aus1.bas" von ' Eckhard Raetz zum IC "Maxim 7219": ' http://www.eraetz.de/ ' Interessant ist auch die folgende Anleitung von Stefan Buchgeher: ' http://www.stefan-buchgeher.info/elektronik/max7219/max7219_dot_matrix.html ' An dieser Stelle möchte ich mich bei Dirk von "das |_ Team" und bei Norbert ' für ihre Unterstützung bedanken. In Memoriam Norbert Klein. ' --- Definitionen ---------------------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi DIM bitarray BYTE 'ein Bitarray DIM debug BIT[1] OF bitarray 'ist HIGH, wenn Debugging aktiv DIM basinterf BIT[2] OF bitarray 'ist HIGH, wenn BASIC-Interface aktiv ' nachgebildetes SPI-Interface: DEFINE d_in PORT[1] 'Dateneingang des ersten MAX7219 DEFINE load PORT[3] 'Steuerleitung, ist gleich CS (Chip Select) DEFINE clk PORT[5] 'Taktleitung DEFINE port1 BYTEPORT[1] 'an diesem BYTEPORT liegen die Leitungen DIM a,b,c BYTE 'temporäre Variablen DIM adresse BYTE 'für die vier MAX 7219 DIM mask BYTE DIM daten1 BYTE DIM daten2 BYTE DIM daten3 BYTE DIM daten4 BYTE DIM data BYTE ' --- Hauptprogramm --------------------------------------------------------- PrintSpc=ON 'Bei PRINT dezimale Zahlen mit führendem Leerzeichen ausgeben End2Host=ON 'Bei Programmende (siehe END) gleich in den Host-Modus wechseln ' Titel: PRINT "8x32-LED-Matrix-Modul" PRINT "=====================" ' Initialisierungen: debug=OFF 'ON 'Datenverkehr anzeigen basinterf=OFF 'ON 'BASIC-Interface benutzen ' Das Hauptprogramm: ledmatrix_initialisierung ledmatrix_display_aus FOR a=0 TO 7 daten1=LOOKTABBYTE(char0,ASC("O")*8+a) daten2=LOOKTABBYTE(char0,ASC("M")*8+a) daten3=LOOKTABBYTE(char0,ASC("A")*8+a) daten4=LOOKTABBYTE(char0,ASC("X")*8+a) ledmatrix_dataout a+1,daten1,daten2,daten3,daten4 NEXT a ?:?"Programmende." END 'Zurück in den Hostmodus. Neustart mit RETURN-Taste. ' --- Subroutinen und Funktionen -------------------------------------------- ' LED-Matrix initialisieren ' Anhand "max7219_doku.pdf" geprüft. PROCEDURE ledmatrix_initialisierung d_in = ON load = ON clk = ON ledmatrix_dataout &h09,0,0,0,0 ' Decode Mode, keine Decodierung ledmatrix_dataout &h0A,5,5,5,5 ' Intensität 0..15 ledmatrix_dataout &h0B,7,7,7,7 ' Anzahl der Digits: Alle Digits an ledmatrix_dataout &h0F,0,0,0,0 ' Display Test aus ledmatrix_display_aus ledmatrix_dataout &h0C,1,1,1,1 ' Display einschalten: Normal RETURN END PROCEDURE ' Alle LEDs der LED-Matrix ausschalten PROCEDURE ledmatrix_display_aus FOR a = 1 TO 8 ledmatrix_dataout a,0,0,0,0 NEXT a RETURN END PROCEDURE ' Alle vier MAX7219 über den nachgebildeten SPI-Bus mit Adresse und 4*Daten laden PROCEDURE ledmatrix_dataout(adresse, daten1, daten2, daten3, daten4) IF debug ?"adresse:"adresse ?"daten1:"daten1 ?"daten2:"daten2 ?"daten3:"daten3 ?"daten4:"daten4 END IF load = OFF 'CS ist low-aktiv clk = OFF ledmatrix_dataout_onebyte adresse ledmatrix_dataout_onebyte daten1 ledmatrix_dataout_onebyte adresse ledmatrix_dataout_onebyte daten2 ledmatrix_dataout_onebyte adresse ledmatrix_dataout_onebyte daten3 ledmatrix_dataout_onebyte adresse ledmatrix_dataout_onebyte daten4 load = ON RETURN END PROCEDURE ' Ein Byte zu einem MAX7219 über den nachgebildeten SPI-Bus senden PROCEDURE ledmatrix_dataout_onebyte(data) IF basinterf THEN ledmatrix_dataout_onebyte_bas data ELSE ledmatrix_dataout_onebyte_asm data END IF RETURN END PROCEDURE ' Ein Byte zu einem MAX7219 über den nachgebildeten SPI-Bus senden in BASIC PROCEDURE ledmatrix_dataout_onebyte_bas(data) mask=&b10000000 WHILE mask 'Schleife so lange durchlaufen bis mask 0 ist d_in=(data AND mask) 'Data wird maskiert, ein Bit wird gesendet PULSE clk mask=mask SHR 1 'schiebt Bits eine Stelle nach rechts aus &b10000000 wird &b01000000 usw. WEND RETURN END PROCEDURE ' Ein Byte zu einem MAX7219 über den nachgebildeten SPI-Bus senden in Assembler DEFINE din bPTA0 DEFINE lad bPTA2 DEFINE clock bPTA4 PROCEDURE ledmatrix_dataout_onebyte_asm(data) INLASM ! ldx #8 #lm_do_ob_asm_loop ! lsla ! bcc lm_do_ob_asm_is0 ! bset din,port1 ! bra lm_do_ob_asm_1 #lm_do_ob_asm_is0 ! bclr din,port1 #lm_do_ob_asm_1 ! bset clock,port1 'CLK Pulse Width High = min. 50 ns ! bclr clock,port1 'CLK Pulse Width Low = min. 50 ns ! dbnzx lm_do_ob_asm_loop ! rts END PROCEDURE ' --- Tabellen -------------------------------------------------------------- INCLUDE "CHARS.TAB" 'PC-Zeichensatz: Aus ZIP-Archiv des OCBASIC-Compilers im Verzeichnis OM ' --- Programmende --------------------------------------------------------- Passender Link: Offizielle Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |