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: Scrolltext auf 8x32-Dot-Matrix-LED-Display ausgeben II Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 4.04.2022 19:48)
 Als Antwort auf Demoprogramm: AZ-Delivery MAX7219 8x32 4 in 1 Dot-Matrix-LED-Display-Modul von Dietmar - 4.04.2022 19:43
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Scrolltext auf 8x32-Dot-Matrix-LED-Display ausgeben II
' In OCBASIC 1.12a_e1 f├╝r Open-Maxi von Dietmar Harlos am 19. 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.

' 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,d 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 daten5 BYTE
DIM data BYTE

DIM lens BYTE                    'L├Ąnge des Strings

' --- 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 lens=0 TO 255 : IF LOOKTABBYTE(string,lens)<>0 THEN NEXT lens

WHILE TRUE
  FOR c=0 TO lens-5
    IF c=4 THEN PAUSE 50
    FOR d=1 TO 8
      FOR a=0 TO 7
        daten1=LOOKTABBYTE(char0,LOOKTABBYTE(string,c  )*8+a)
        daten2=LOOKTABBYTE(char0,LOOKTABBYTE(string,c+1)*8+a)
        daten3=LOOKTABBYTE(char0,LOOKTABBYTE(string,c+2)*8+a)
        daten4=LOOKTABBYTE(char0,LOOKTABBYTE(string,c+3)*8+a)
        daten5=LOOKTABBYTE(char0,LOOKTABBYTE(string,c+4)*8+a)

        daten1=(daten1 SHL d) OR ((daten2 SHL d) SHR 8)
        daten2=(daten2 SHL d) OR ((daten3 SHL d) SHR 8)
        daten3=(daten3 SHL d) OR ((daten4 SHL d) SHR 8)
        daten4=(daten4 SHL d) OR ((daten5 SHL d) SHR 8)

        ledmatrix_dataout a+1,daten1,daten2,daten3,daten4
      NEXT a
      IF RXD THEN GOTO abbruch
      PAUSE 1
    NEXT d
  NEXT c
  PAUSE 10
WEND
#abbruch

?:?"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
  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 --------------------------------------------------------------

' Der auf der LED-Matrix auszugebende String

TABLE string BYTE
"    Open-Maxi ist toll! ",1,"     ", 0
0
END TABLE

' PC-Zeichensatz: Aus ZIP-Archiv des OCBASIC-Compilers im Verzeichnis OM

INCLUDE "CHARS.TAB"

' --- Programmende ---------------------------------------------------------


Passender Link: Offizielle Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: