Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: AZ-Delivery MAX7219 8x32 4 in 1 Dot-Matrix-LED-Display-Modul Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 4.04.2022 19:43)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station


' ===========================================================================
' 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
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

Bisherige Antworten:

Demoprogramm: Gesamten Zeichensatz auf 8x32-Dot-Matrix-LED-Display ausgeben (von Dietmar - 4.04.2022 19:54)
Demoprogramm: Scrolltext vertikal auf 8x32-Dot-Matrix-LED-Display ausgeben (von Dietmar - 4.04.2022 19:52)
Demoprogramm: Scrollstrings auf 8x32-Dot-Matrix-LED-Display ausgeben (von Dietmar - 4.04.2022 19:50)
Demoprogramm: Scrolltext auf 8x32-Dot-Matrix-LED-Display ausgeben II (von Dietmar - 4.04.2022 19:48)
Demoprogramm: Scrolltext auf 8x32-Dot-Matrix-LED-Display ausgeben I (von Dietmar - 4.04.2022 19:46)