Led Matrix en PIC16F628A

Bavelt

Golden Member

Ok,
Voor degene die begint met een LED Matrix van 8 * 8, voorzien van MAX7219 driver en aangestuurd vanuit PICBASIC met de PIC16F628A als microcontroller, hierbij een voorbeeldprogramma.

Het programma toont wat testresultaten. Het is op zich redelijk beperkt, maar kan een hulp zijn om te beginnen.

pic basic code:

;************************************
;*  Naam    : Test LED Matrix 8*8   *
;*  Auteur  : Bavelt                *
;*  Datum   : 27-09-2019            *
;************************************

DEVICE 16F628A                      ;PIC 16F628A Microcontroller
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL True                    ;Alle ingangen digitaal
DECLARE XTAL 4

SYMBOL ClockPin = PORTB.1           ;Poort B.1 is de Clock
SYMBOL latch    = PORTB.2           ;Poort B.2 is de latch
SYMBOL DataPin  = PORTB.3           ;Poort B.3 is de Datapin

;        76543210
PORTA = %00000000
PORTB = %00000000             
TRISA = %11111111             
TRISB = %11110001

DIM Kolom   AS BYTE                 ;Hiermee wordt de kolom (digit) van de matrix geselecteerd 
DIM Inhoud  AS BYTE                 ;De inhoud van de kolom, ieder '1' laat een ledje branden op de betreffende positie

CLEAR                               ;Wis alle RAM geheugen 

DIM Kar_Tabel[8] AS BYTE
Kar_Tabel [0] = $00                 ;Dit zijn de kolomwaarden voor het karaker "A"
Kar_Tabel [1] = $7F                 ;Bijvoorbeeld $7F = %01111111, alle LEDS aan behalve de eerste
Kar_Tabel [2] = $88                 ;De complete tabel van de karakterset zou in een EEPROM kunnen worden opgeslagen
Kar_Tabel [3] = $88
Kar_Tabel [4] = $88
Kar_Tabel [5] = $7F
Kar_Tabel [6] = $00
Kar_Tabel [7] = $00
                                                                    
START:

GOSUB Max7219_Init  
GOSUB Display_Testen
GOSUB Uitzetten_Leds
GOSUB Binair_Tellen
GOSUB Binair_Terugtellen
GOSUB Karakter_Tonen

GOTO Einde

;******************************
;Hieronder staan de subroutines
Display_Testen:                     ;Testen van het display; alle LEDS aan
Kolom = $0F                       
Inhoud = $01                       
GOSUB Max_Write
DELAYMS 1000
Kolom = $0F                       
Inhoud = $00                       
GOSUB Max_Write
DELAYMS 200
RETURN

Uitzetten_Leds:                     ;Weer uitzetten van de LEDS
DIM i1 AS BYTE
i1 = 0
FOR i1 = 1 TO 8
  Kolom = i1
  Inhoud = %00000000
  GOSUB Max_Write
NEXT
RETURN

Binair_Tellen:                      ;Binair tellen, wordt getoond in de kolommen
FOR Kolom = 1 TO 8
  FOR Inhoud = 1 TO 255
      GOSUB Max_Write
      DELAYMS 30
  NEXT
NEXT
RETURN

Binair_Terugtellen:                 ;Binair terugtellen
FOR Kolom = 8 TO 1 STEP -1
  FOR Inhoud = 255 TO 0  STEP -1
      GOSUB Max_Write
      DELAYMS 30
  NEXT
NEXT
RETURN
    
                                    
Karakter_Tonen:                     ;Toon het karakter A
DIM Ind AS BYTE                     ;Later uitbreiden
FOR Kolom = 1 TO 8
  latch = 0
  SHOUT DataPin, ClockPin, MSBFIRST, [Kolom \ 8, Kar_Tabel [Kolom - 1]] 
  latch = 1  
NEXT
RETURN

Max_Write:

latch = 0
SHOUT DataPin, ClockPin, MSBFIRST, [Kolom \ 8, Inhoud \ 8] 
latch = 1
RETURN

Max7219_Init:                       ;Hier worden de registers geïnitialiseerd
Kolom = $09                         ;Decode Mode Register:
Inhoud = $00                        ;Code B for digits
GOSUB Max_Write                   

Kolom = $0B                         ;Scan-Limit Register:
Inhoud = $07                        ;Digit 0,1,2,3,4,5,6,7 ($00-$07)
GOSUB Max_Write

Kolom = $0C                         ;Shutdown Register:
Inhoud = $01 
GOSUB Max_Write
  
Kolom = $0A                         ;Intensity Register
Inhoud = $00                       
GOSUB Max_Write
RETURN

Einde:                              ;Einde Programma
END 
Fouten zijn het bewijs dat je het probeert..

Mooi, netjes gemaakt, je bent al redelijk ver gevorderd volgens zien. _/-\o_

edit: als bonus heb ik het programma met de DS3231 wat opgeschoond maar ik kan het niet proberen en er zullen waarschijnlijk nog wel opbouwfouten instaan maar dat zul jij wel uitpluizen.
Alle compilerfouten zijn weg, nu aan u en lees zeer goed de commentaren die erbij staan hoe je de routines moet gebruiken.
Als je vragen of aanvullingen hebt maak aub een nieuw topic zodat het later makkelijker terug te vinden is.

LDmicro user.
Bavelt

Golden Member

Dank je,

Als ik met de LED Matrix ben 'uitgespeeld'(Er zijn nog wat dingen die ik verder wil uitdiepen, zoals geheugenopslag en een betere manier om met Arrays om te gaan), dan ga ik graag verder met de DS3231.
Een uitdaging. Ik zal me zeker melden.

Fouten zijn het bewijs dat je het probeert..