MAX7219 I 8X8 LED DISPLAY

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: stojke369, pedja089, [eDo], trax

febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Dolazi zima i evo mene opet kod male skole programiranja.Posto je neko mrtvilo na forumu evo jedne teme za razbribrigu i da ozivimo forum .Stiglo mi s ebaja 3 modula s chipom MAX7219 i matricnim 8x8 led displejom.Malo sam guglao po netu ali nisam nista upotrebljivo nasao za PicBAsic pro,nikakakv primjer.Za Arduino primjera koliko ti srce zeli.
Do sad sam radio s MAX chipom i s sedam segmentnim displejima i to radi bez problema ali 8x8 matrica mi je prevelik zalogaj za pocetak.Neznam od kuda krenuti i na koji nacin ispisat neki broj ili slovo na njemu ili neku rijec posto ih imam tri komada spojena u kaskadi.Nekako mi se cini da je princip ispisa jako slican kao i na grafickom displeju koji nikad nisam do kraja skuzio osim ispisa brojki i slova pomoču Pedjinog include fajla,ali slika mi je jos nepoznanica.

Koliko vidim u arduino primjerima za svaku brojku ili slovo moram imati određenu tablicu s kombinacijam po kojoj palim ledice na displeju ,e sad kao te kombinacije iskoristit da prikazem to na displeju.
Ima li ko kakvu ideju?
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Re: MAX7219 I 8X8 LED DISPLAY

Post by Maki »

febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Moze ,pomoglo je,
isprobao sam taj kod i radi na jednom MAX 7219 chipu.Matrica je za 5x7 velicinu slova.
E sad trebam prokuziti kako taj ispis poslat na druge max chipove spojene u kaskadi da dobijem cijelu rijec ispisanu
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Primjer koda s skrolanjem brojke u lijevo.Prikazuju se brojevi od 0 do 9 na jednom displeju

Code: Select all

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  :                                  *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.10.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
	Define	OSC	4		' Set Xtal Frequency
   TRISA = %00111111    'port a je cijeli ulazni
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %1111
ADCON1 = 7	   ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE



include "modedefs.bas"

'-----VARIABLES-----
ADDRESS var word 'variable address for display
DATAREG var word 'variable data register for display
Y VAR BYTE 'contador para cargar address y datareg
X var BYTE
DES VAR BYTE


'----- symbolos ------
SYMBOL CLK = PORTB.0
SYMBOL DAT = PORTB.1
SYMBOL LOAD = PORTB.2

'-----PIN SETUPS-----
low dat 'data pin for MAX7219 (1)
low clk 'clock pin for MAX7219 (13)
low load 'load pin for MAX7219 (12)




'-----MAX7219 SETUP-----
ADDRESS = $0C : DATAREG = $01 : gosub MaxWrite ' NO SHUT, NORMAL OPERATION
ADDRESS = $09 : DATAREG = $00 : gosub MaxWrite ' COMBINACION BINARIA, NO DECODE
ADDRESS = $0A : DATAREG = $09 : gosub MaxWrite ' INTENSIDAD DE LEDS 1(MIN) A F(MAX)
ADDRESS = $0B : DATAREG = $06 : gosub MaxWrite ' SCAN LIMIT NUMERO DE DIGITOS
ADDRESS = $0F : DATAREG = $00 : gosub MaxWrite
GOSUB LIMPIAR


INICIO:
DES = 0
FOR X = 1 TO 8
FOR Y = 0 TO 7
LOOKUP Y,[$70,$88,$98,$A8,$C8,$88,$70,$00],DATAREG ' LETTER "0"
ADDRESS = Y+1 : DATAREG = DATAREG << DES
GOSUB MAXWRITE
PAUSE 10
NEXT Y
PAUSE 300
DES = DES + 1
NEXT X ' FINISH TO SCROLL


des = 0
for x =1 to 8
for y = 0 to 7
lookup y,[ $20,$60,$20,$20,$20,$20,$70,$00],datareg ' LETTER "1"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x ' FINISH TO SCROLL SECOND


des = 0
for x = 1 to 8
for y = 0 to 7
lookup y,[$70,$88,$08,$30,$40,$80,$F8,$00],datareg ' LETTER "2"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x




des = 0
for x = 1 to 8
for y = 0 to 6
lookup y,[$F8,$08,$10,$30,$08,$88,$70,$00 ],datareg ' LETTER "3"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x


des = 0
for x = 1 to 8
for y = 0 to 6
lookup y,[$10,$30,$50,$90,$F8,$10,$10,$00 ],datareg ' LETTER "4"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x

DES = 0
FOR X = 1 TO 8
FOR Y = 0 TO 7
LOOKUP Y,[$F8,$80,$F0,$08,$08,$88,$70,$00],DATAREG ' LETTER "5"
ADDRESS = Y+1 : DATAREG = DATAREG << DES
GOSUB MAXWRITE
PAUSE 10
NEXT Y
PAUSE 300
DES = DES + 1
NEXT X ' FINISH TO SCROLL


des = 0
for x =1 to 8
for y = 0 to 7
lookup y,[  $38,$40,$80,$F0,$88,$88,$70,$00],datareg ' LETTER "6"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x ' FINISH TO SCROLL SECOND


des = 0
for x = 1 to 8
for y = 0 to 7
lookup y,[ $F8,$08,$10,$20,$40,$40,$40,$00],datareg ' LETTER "7"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x




des = 0
for x = 1 to 8
for y = 0 to 6
lookup y,[$70,$88,$88,$70,$88,$88,$70,$00],datareg ' LETTER "8"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x


des = 0
for x = 1 to 8
for y = 0 to 6
lookup y,[$70,$88,$88,$78,$08,$10,$E0,$00],datareg ' LETTER "9"
address = y+1 : datareg = datareg << des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x

GOSUB LIMPIAR
GOTO INICIO

MaxWrite:
shiftout DAT,CLK,MSBFIRST,[ADDRESS,DATAREG] 'Shift out the data to the 'MAX7219 'first the address, then data.
pulsout LOAD,1 'load the data into the MAX7219
return


LIMPIAR:
for Y = 1 to 7 'write $0F (blank) to all digits
ADDRESS = Y : DATAREG = $00 : gosub MaxWrite
next Y
return
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Re: MAX7219 I 8X8 LED DISPLAY

Post by Maki »

Koliko vidim iz datasheeta, trebas samo redom punit registre. Znaci imas npr. 2 ta chipa. Od prvog je data out pin spojen na data input pin od drugog. Clk su im skupa. Ti sad prvo poslajes 16 bita kojih treba dobiti ovaj drugi, a zatim 16 bita kojih treba dobiti prvi. Na kraju aktiviras load za oba.
Jel si shvatio ?
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Jesam to mi je jasno.Dobio sam s ovim primjerom da mi se prvo broj nula skrola s lijeve strane na desnu na prvom displeju i nakon toga da mi se broj jedan skrola s lijeva na desno na drugom displeju i tako u krug.
Jos mi je jasno kako mogu staticno bez pomaka napisat na svaki displej brojku ili slovo,ali mi nije jasno kako mogu napraviti da mi recimo brojka 0 krene s lijeve strane na prvom displeju i ide skroz do kraja desne strane na trecem displeju.Kako izlazi s jednog displeja da odma ide na drugi displej.Na netu sam nasao sheme s 74HC595 i 4017 chipovima i primjerom programa u Picbasicu ,ali vidim i dosta projekata s MAX chipom ali na ARDUINO platformi, pa si mislim ako moze arduino zasto to nebi mogao i PICBASIC

Code: Select all

'****************************************************************

'****************************************************************
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'                                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.10.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :   pic16f877a                                                *
'*          :                                                   *
'****************************************************************
	Define	OSC	4		' Set Xtal Frequency
   TRISA = %00111111    'port a je cijeli ulazni
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %1111
ADCON1 = 7	   ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE



include "modedefs.bas"

'-----VARIABLES-----
ADDRESS var word 'variable address for display
DATAREG var word 'variable data register for display
Y VAR BYTE 'contador para cargar address y datareg
X var BYTE
DES VAR BYTE
ADDRESS2 var word 'variable address for display
DATAREG2 var word 'variable data register for display


'----- symbolos ------
SYMBOL CLK = PORTB.0
SYMBOL DAT = PORTB.1
SYMBOL LOAD = PORTB.2

'-----PIN SETUPS-----
low dat 'data pin for MAX7219 (1)
low clk 'clock pin for MAX7219 (13)
low load 'load pin for MAX7219 (12)




'-----MAX7219 SETUP-----
ADDRESS = $0C : DATAREG = $01 : gosub MaxWrite ' NO SHUT, NORMAL OPERATION
ADDRESS = $09 : DATAREG = $00 : gosub MaxWrite ' COMBINACION BINARIA, NO DECODE
ADDRESS = $0A : DATAREG = $09 : gosub MaxWrite ' INTENSIDAD DE LEDS 1(MIN) A F(MAX)
ADDRESS = $0B : DATAREG = $06 : gosub MaxWrite ' SCAN LIMIT NUMERO DE DIGITOS
ADDRESS = $0F : DATAREG = $00 : gosub MaxWrite

ADDRESS2 = $0C : DATAREG2 = $01 : gosub MaxWrite ' NO SHUT, NORMAL OPERATION
ADDRESS2 = $09 : DATAREG2 = $00 : gosub MaxWrite ' COMBINACION BINARIA, NO DECODE
ADDRESS2 = $0A : DATAREG2 = $09 : gosub MaxWrite ' INTENSIDAD DE LEDS 1(MIN) A F(MAX)
ADDRESS2 = $0B : DATAREG2 = $06 : gosub MaxWrite ' SCAN LIMIT NUMERO DE DIGITOS
ADDRESS2 = $0F : DATAREG2 = $00 : gosub MaxWrite
GOSUB LIMPIAR


INICIO:
DES = 0
FOR X = 1 TO 9
FOR Y = 0 TO 7
LOOKUP Y,[$70,$88,$98,$A8,$C8,$88,$70,$00],DATAREG ' LETTER "0"
ADDRESS = Y+1 : DATAREG = DATAREG >> DES  'POMAK U DESNO
'ADDRESS = Y+1 : DATAREG = DATAREG << DES  'POMAK U LEVO
GOSUB MAXWRITE
PAUSE 10
NEXT Y
PAUSE 300
DES = DES + 1
NEXT X ' FINISH TO SCROLL


des = 0
FOR X = 1 TO 8
for y = 0 to 7
lookup y,[ $20,$60,$20,$20,$20,$20,$70,$00],datareg2 ' LETTER "1"
address2 = y+1: datareg2 = datareg2 >>des
gosub maxwrite
pause 10
next y
pause 300
des = des + 1
next x ' FINISH TO SCROLL SECOND



GOSUB LIMPIAR
GOTO INICIO

MaxWrite:
shiftout DAT,CLK,MSBFIRST,[ADDRESS2,DATAREG2,address,datareg]

 'Shift out the data to the 'MAX7219 'first the address, then data.
pulsout LOAD,1 'load the data into the MAX7219
return




LIMPIAR:
for Y = 1 to 7 'write $0F (blank) to all digits
ADDRESS = Y : DATAREG = $00 : gosub MaxWrite
next Y
return
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

To pomeranje se postize presipanjem iz supljeg u prazno :D
Bukvalno...
Samo prvoj koloni dodelis vrednost sa druge, drugoj koloni vrednost trece i redom.
Ovo ti je najlakse ako sve vrednosti stavis u niz.
Tipa:

Code: Select all

Displej VAR BYTE[BrojKolona]
Pomeri_za_jednu_kolonu:
FOR i=0 to BrojKolona-2
     Displej[i+1]=Displej[i]
NEXT i
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Moze malo detaljnije obješnjenje nije mi bas najbistrije ovo suplje u prazno.

Displej VAR BYTE[BrojKolona] u zagradu pisem broj kolona koliko imam na tri displeja to je ukupno 24 kolone

Pomeri_za_jednu_kolonu:
FOR i=0 to BrojKolona-2 ovo bi trebalo biti u ovom obliku FOR i = 0 to 24-2
Displej[i+1]=Displej
NEXT i

Sto od toga saljem na upis u MAX7219 i kako bi izgledao upis u MAX

Dolje je primjer malo bolje skomentiran,u njemu pomičem brojku nula s lijeva na desno na prvom displeju


Code: Select all

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  :                                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.10.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :  PIC16F877A                                                 *
'*          :                                                   *
'****************************************************************
	Define	OSC	4		' Set Xtal Frequency
   TRISA = %00111111    'port a je cijeli ulazni
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %1111
ADCON1 = 7	   ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE



include "modedefs.bas"

'-----VARIABLES-----
ADDRESS var word 'variable address for display
DATAREG var word 'variable data register for display
Y VAR BYTE 'contador para cargar address y datareg
X var BYTE
DES VAR BYTE
ADDRESS2 var word 'variable address for display
DATAREG2 var word 'variable data register for display


'----- symbolos ------
SYMBOL CLK = PORTB.0
SYMBOL DAT = PORTB.1
SYMBOL LOAD = PORTB.2

'-----PIN SETUPS-----
low dat 'data pin for MAX7219 (1)
low clk 'clock pin for MAX7219 (13)
low load 'load pin for MAX7219 (12)




'-----MAX7219 SETUP 1 displej-----
ADDRESS = $0C : DATAREG = $01 : gosub MaxWrite ' NO SHUT, NORMAL OPERATION
ADDRESS = $09 : DATAREG = $00 : gosub MaxWrite ' COMBINACION BINARIA, NO DECODE
ADDRESS = $0A : DATAREG = $09 : gosub MaxWrite ' INTENSIDAD DE LEDS 1(MIN) A F(MAX)
ADDRESS = $0B : DATAREG = $06 : gosub MaxWrite ' SCAN LIMIT NUMERO DE DIGITOS
ADDRESS = $0F : DATAREG = $00 : gosub MaxWrite
 '-----MAX7219 SETUP 2 displej-----
ADDRESS2 = $0C : DATAREG2 = $01 : gosub MaxWrite ' NO SHUT, NORMAL OPERATION
ADDRESS2 = $09 : DATAREG2 = $00 : gosub MaxWrite ' COMBINACION BINARIA, NO DECODE
ADDRESS2 = $0A : DATAREG2 = $09 : gosub MaxWrite ' INTENSIDAD DE LEDS 1(MIN) A F(MAX)
ADDRESS2 = $0B : DATAREG2 = $06 : gosub MaxWrite ' SCAN LIMIT NUMERO DE DIGITOS
ADDRESS2 = $0F : DATAREG2 = $00 : gosub MaxWrite
GOSUB BRISI_DISPLAY


pocetak:  'salji brojku NULA na prvi displej i skrolaj ju s lijeve strane na desnu
DES = 0
FOR X = 1 TO 9' TU ODREĐUJEM ZA KOLIKO SE BROJ NULA BUDE POMAKNUO U DESNO,U OVOM SLUČAJU 9 PUTA DOK NE NESTANE S DISPLEJA 'TO SU KOLONE ,VERTIKALA
FOR Y = 0 TO 7 ' TO SU REDOVI,I U NJIMA JE SMJESTEN IZGLED BROJA  HORIZONTALA 
LOOKUP Y,[$70,$88,$98,$A8,$C8,$88,$70,$00],DATAREG ' BROJKA "0"
ADDRESS = Y+1 
DATAREG = DATAREG >> DES  'POMAK S LIJEVE NA DESNU STRANU ,NIJE MI BAS NAJASNIJI TAJ RED NAREDBE
GOSUB MAXWRITE
PAUSE 10
NEXT Y
PAUSE 300  'VRIJEME POMAKA  za svakih 300 milisekundi brojka se pomakne za jedno mjesto u desno
DES = DES + 1
NEXT X ' FINISH TO SCROLL
GOSUB BRISI_DISPLAY
GOTO pocetak




MaxWrite:     'Shift out the data to the 'MAX7219 'first the address, then data.
shiftout DAT,CLK,MSBFIRST,[ADDRESS2,DATAREG2,address,datareg] 'PRVO SE SALJU  PODACI NA DRUGI DISPLEJ ZATIM NA PRVI 
pulsout LOAD,1 'load the data into the MAX7219
return




BRISI_DISPLAY:
for Y = 1 to 7 'write $0F (blank) to all digits
ADDRESS = Y : DATAREG = $00 : gosub MaxWrite
next Y
return
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

Nisam radio sa tim maxom, pa da se ne petljam ja puno oko njega. Moras naci kako se upisuje u koju kolonu. Pretpostavljam da negde ima neki registar u koji ubacis podatke za tu kolonu. Ceo taj niz od 24 bajta ubacujes u max.
Prvo provali kako u maxu mozes kontrolisati svaku kolonu zasebno. I onda podatke iz ovog niza ubacuj samo u kolone...
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Imam drugi primjer coda koji sam skinuo s Parallax foruma i koji je radjen za Basic stamp i MAX7219 i taj kod radi bez greske ,pomice slova s desne strane u lijevu preko tri MAX7219 chipa.Toliko ih imam trenutno kod kuce drugi su u dolasku.Jedina zamjerka u kodu je sto mu se text na pocetku programa upisuje u internu memoriju chipa pa ne mogu ispisati duzi text od ovoga koji je trenutno duzine 35 slova.Na koji nacin bi se moglo pojednostaviti to ispisivanje poruke.Da li bi se mogla poruka smjestii u neku varijablu ili string pa da program prepozna sam koja su slova u poruci i da ih salje na displeje.

primjer coda

Code: Select all

' Nuts & Volts - February 2000 - Modified for (2) cascaded MAX7219 and (2) 8x8 LED Matrix Display

' -----[ Title ]-----------------------------------------------------------
'
' File...... LEDARRAY_MOD.BS2
' Purpose... Uses the MAX7219 to drive a 8x8 LED array
' Author.... Jon Williams / Tim Gilmore
' E-mail.... jonwms@aol.com / gilmoret@us.saic.com
' Started... 06 JAN 2001
' Updated... 18 APR 2007

' {$STAMP BS2}


' -----[ Program Description ]---------------------------------------------
'
' Demonstrates the use of Maxim's MAX7219 LED display driver in the
' non-decoded mode.  In this mode, the programmer is responsible for
' sending segment (row) data for each digit (column).
'
' In this application, the MAX7219 is connected to a common-cathode LED
' array.  The array is 8 columns wide by 8 rows tall (64 LEDs).  The
' digit outputs from the MAX7219 are connect to the columns; the segment
' control lines to the rows.
'
' MAX7219 --> LED Connections:
'
'   MAX7219.2  (0) --> Col 1 (left)
'   MAX7219.11 (1) --> Col 2
'   MAX7219.6  (2) --> Col 3
'   MAX7219.7  (3) --> Col 4
'   MAX7219.3  (4) --> Col 5
'
'   MAX7219.17 (g) --> Row 1 (top)
'   MAX7219.15 (f) --> Row 2
'   MAX7219.21 (e) --> Row 3
'   MAX7219.23 (d) --> Row 4
'   MAX7219.20 (c) --> Row 5
'   MAX7219.16 (b) --> Row 6
'   MAX7219.14 (a) --> Row 7


' -----[ Revision History ]------------------------------------------------
'
' 07 JAN 2001 - Version 1
' 19 APR 2007 - Version 2 modified for (2) cascaded MAX7219 and (2) 8x8 LED Display Matrix


' -----[ I/O Definitions ]-------------------------------------------------
 #CONFIG
__config _HS_OSC & _WDT_ON & _PWRTE_ON &_CP_ON  & _BODEN_OFF & _LVP_OFF

#ENDCONFIG

 DEFINE OSC 20
include "modedefs.bas"

 
TRISA=0
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%1111
CMCON=7



SYMBOL CLK = PORTC.0
SYMBOL DAT = PORTC.1
SYMBOL LOAD = PORTC.2


' -----[ Constants ]-------------------------------------------------------
'
Decode    CON   $09         ' bcd decode
Intensity CON   $0A         ' brightness
Scan      CON   $0B         ' scan (column) limit
ShutDn    CON   $0C         ' shutdown (1 = on)
Test      CON   $0F         ' display test mode
NoOp      CON   $00
Yes       CON   1
No        CON   0

' -----[ Variables ]-------------------------------------------------------
'
index     VAR   byte       ' loop counter
idxOdd    VAR   byte  ' is index odd? (1 = yes)
d7219     VAR   Byte        ' data for MAX7219
d7219A    VAR   Byte
char      VAR   Byte        ' character ee address
col       VAR   byte        ' column value
row       VAR   byte        ' row value
eeAddr1   VAR   Byte        ' ee pointer
eeAddr1A  VAR   Byte
eeAddr2   VAR   Byte
eeAddr2A  VAR   Byte
vScroll   VAR   Word         ' scrolling data buffer
vScrollA  VAR   Word
scrollpause var WORD

' -----[ EEPROM Data ]-----------------------------------------------------
'

Space       DATA   0 
            DATA   0
            DATA   0 'RAZMAK
        




            DATA   31   'V  
            DATA   32
            DATA   64
            DATA   32
            DATA   31
            DATA   0
            DATA   0
            DATA   0
           

            DATA    65
            DATA   127
            DATA    65     'I 
            DATA     0
            DATA     0
            DATA     0
           

            DATA   38
            DATA   73    'S   
            DATA   73
            DATA   73
            DATA   50
            DATA    0
            DATA    0
            DATA    0

            DATA   127
            DATA     4
            DATA     8     'N  
            DATA    16
            DATA   127
            DATA     0
            DATA     0
            DATA     0
                               

            DATA    64
            DATA   128 'j  
            DATA   128
            DATA   122
            DATA     0
            DATA     0
            DATA     0
            DATA     0

            DATA   124
            DATA    18
            DATA    17 'A 
            DATA    18
            DATA   124
            DATA     0
            DATA     0
            DATA     0
            

            DATA   0
            DATA   0
            DATA   0 'RAZMAK
            DATA   0
            

            DATA   65
            DATA   127
            DATA   65     'I 
            DATA    0
            DATA    0
            DATA    0
            DATA    0
            DATA    0
           

             DATA   0
            DATA    0
            DATA    0 'RAZMAK
            DATA    0
           
            


            DATA   127  'K 
            DATA     8
            DATA    20
            DATA    34
            DATA    65
            DATA     0
            DATA     0
            DATA     0
                  

            DATA   32  'a 
            DATA   84
            DATA   84     
            DATA  120      
            DATA   64     
            DATA    0     
            DATA    0      
            DATA    0
            

            DATA   124   'r 
            DATA   8     
            DATA   4      
            DATA   4     
            DATA   8     
            DATA   0     '
            DATA   0
            DATA   0
          

            DATA   65     'l 
            DATA  127     
            DATA   64     
            DATA   0     
            DATA   0     
            DATA   0     
            DATA   0
            
            
           
           
             DATA   32  'a 
            DATA    84
            DATA    84    
            DATA   120      
            DATA    64      
            DATA     0     
            DATA     0      
            DATA     0
           

             DATA  0
            DATA   0
            DATA   0 'RAZMAK
            DATA   0
           
            
             
            
            DATA  127
            DATA    9     ' F
            DATA    9    
            DATA    9     
            DATA    1     
            DATA    0    
            DATA    0
            DATA    0
           
            
            
            
            DATA   127
            DATA    73     ' E
            DATA    73     
            DATA    73      
            DATA    65     
            DATA     0     
            DATA     0
            DATA     0
            
            
            
            
            
            DATA   127
            DATA     9      ' R
            DATA    25    
            DATA    41     
            DATA    70     
            DATA     0     
            DATA     0
            DATA     0
            
       
            
            DATA   65
            DATA  127
            DATA   65     'I 65, 127, 65,
            DATA    0
            DATA    0
            DATA    0
            DATA    0
            DATA    0
           
            
          
            DATA   62
            DATA   65     ' C
            DATA   65    
            DATA   65     
            DATA   0    
            DATA   0      
            DATA   0
            DATA   0
           
            
            
            DATA   0
            DATA   0
            DATA   0'RAZMAK
            
             DATA   127
            DATA      9
            DATA      9   'P 
            DATA      9
            DATA      6
            DATA      0
            DATA      0
            DATA      0
         
            
            
            DATA  65
            DATA 127
            DATA  65     'I 
            DATA   0
            DATA   0
            DATA   0
            
            
            
            
             DATA   3
            DATA    1
            DATA  127     'T 
            DATA    1
            DATA    3
            DATA    0
            DATA    0
            D
            
            
            
             DATA  62
            DATA   65
            DATA   65     'O 
            DATA   65
            DATA   62
            DATA   0
            DATA   0
            DATA   0
          
            
            
             DATA  127
            DATA     2
            DATA    28     'M  
            DATA     2
            DATA   127
            DATA     0
            DATA     0
            DATA     0
          
            
            
            
            DATA   124
            DATA    18
            DATA    17 'A 
            DATA    18
            DATA   124
            DATA     0
            DATA     0
            DATA     0
          
            
            
            DATA   62
            DATA   65     ' C
            DATA   65    
            DATA   65     
            DATA   0    
            DATA   0      
            DATA   0
            DATA   0
             
            
            DATA   124
            DATA      18
            DATA      17     'A 
            DATA      18
            DATA     124
            DATA       0
            DATA       0
            DATA       0
           
            
            
            DATA   94   'OMEGA
            DATA   97
            DATA    1 
            DATA   97
            DATA   94
            
              DATA   0
              DATA   0
              DATA   0
              DATA   0
            
                    
            DATA     114
            DATA      73
            DATA      73     '2  	
            DATA      73
            DATA      70
            DATA       0
            DATA       0
            DATA       0
            
                 
            DATA      62
            DATA      81
            DATA      73     '0 
            DATA      69
            DATA      62
            DATA       0
            DATA       0
            DATA       0
            
                 
            DATA      66
            DATA      127
            DATA      64    '1 
            DATA       0
            DATA       0
            DATA       0
           
            
            
          
Char_Space2 DATA      24
            DATA      20
            DATA      18     '4 	
            DATA      127
            DATA      16
            DATA       0
            DATA       0
            DATA       0
                          
           
 
          


' -----[ Initialization ]--------------------------------------------------
'
  scrollpause = 200
  
  
  Initialize:
low dat 'data pin for MAX7219 (1)
low clk 'clock pin for MAX7219 (13)
low load 'load pin for MAX7219 (12)


   SHIFTOUT DAT,ClK,MSBFIRST,[Scan,7,Scan,7,Scan,7]
   PULSOUT Load,1
   SHIFTOUT DAT,ClK,MSBFIRST,[Intensity,5,Intensity,5,Intensity,5]
   PULSOUT Load,1
   SHIFTOUT DAT,ClK,MSBFIRST,[ShutDn,1,ShutDn,1,ShutDn,1]
   PULSOUT Load,1
   SHIFTOUT DAT,ClK,MSBFIRST,[DECODE,0,DECODE,0,DECODE,0]
   PULSOUT Load,1



Main:
Crawl_Characters:   'HORIZONTALNI POMAK S DESNE NA LIJEVU STRANU
FOR eeAddr1 = Space TO Char_Space2
'*******************POSTELAVANJE BRZINE POMAKA PORUKE
     if PORTB.6=1 THEN scrollpause=scrollpause-1 
   IF PORTB.7=1 THEN scrollpause=scrollpause+1 
   IF SCROLLPAUSE=> 200 AND PORTB.7=1 THEN SCROLLPAUSE=SCROLLPAUSE+100 
   IF SCROLLPAUSE=> 200 AND PORTB.6 =1 THEN SCROLLPAUSE=SCROLLPAUSE-100 
   IF SCROLLPAUSE=2100 THEN SCROLLPAUSE=2000
   IF SCROLLPAUSE=1 THEN SCROLLPAUSE =2
   
   
  GOSUB ShowChar2
  
   PAUSE SCROLLPAUSE
 
  NEXT
  GOTO Main
  END


' -----[ Subroutines ]-----------------------------------------------------
  

  ShowChar2:
        FOR col = 1 TO 8            ' character is 8 columns wide
    READ (eeAddr1 + col - 1),d7219      ' read column data from EEPROM
    SHIFTOUT DAT,ClK,MSBFIRST,[0,0,0,0,COL,d7219]
PULSOUT Load,1
       NEXT
  
  FOR col = 1 TO 8            ' character is 8 columns wide
    READ (eeAddr1 + col - 9),d7219      ' read column data from EEPROM
    SHIFTOUT DAT,ClK,MSBFIRST,[0,0,col,d7219,0,0]
PULSOUT Load,1
  NEXT
  
  
  FOR col = 1 TO 8            ' character is 8 columns wide
    READ (eeAddr1 + col - 17),d7219      ' read column data from EEPROM
    SHIFTOUT DAT,ClK,MSBFIRST,[COL,d7219,0,0,0,0]
PULSOUT Load,1
  NEXT
  RETURN 
  
  
  
  
 
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

Sve se moze kad se oce :)
Probaj naci primer biblioteke za displej od nokie 3310. Tako imas par nacina za cuvanje i baratanje stringovima.
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Probao sam po PICbasic forumu naci nesto upotrebljivo ali bez uspjeha.Nisu mi bas najasnije stvari kako to izvest.

iz ove tablice uzimam pojedine kombinacije za svako slovo i upisujem na pocetku programa s DATA naredbom u interni eprom PIC-a.
Kako da nju iskoristim a da izbjegnem koristenje internog eproma da bi mogao ispisati vece poruke.

Tablica je za ARDUINO skinuta s parolla web stranice i s njom oni isto scrolaju text pomocu MAX7219 chipa
Nakoji nacin citaju iz tablice nisam skuzio.

Code: Select all


uint8_t fontArabic[] PROGMEM = // modern arabic
	2,    0, 0,		                        // 32 - 'Space'
	1,     95,		                         // 33 - '!'
	3,     7, 0, 7,		                 // 34 - '"'
	5,    20, 127, 20, 127, 20,          // 35 - '#'
	5,    36, 42, 127, 42, 18,	         // 36 - '$'
	5,    35, 19, 8, 100, 98,		 // 37 - '%'
	5,    54, 73, 85, 34, 80,		 // 38 - '&'
	3,     8, 7, 3,		                // 39 - '''
	3,    28, 34, 65,		                 // 40 - '('
	3,    65, 34, 28,		                // 41 - ')'
	5,      42, 28, 127, 28, 42,		// 42 - '*'
	5,      8, 8, 62, 8, 8,		         // 43 - '+'
	3,      128, 112, 48,		          // 44 - ','
	5,      8, 8, 8, 8, 8,		          // 45 - '-'
	2,      96, 96,		                  // 46 - '.'
	5,      32, 16, 8, 4, 2,	   	         // 47 - '/'
	5,      62, 81, 73, 69, 62,		// 48 - '0'
	3,       66, 127, 64,		        // 49 - '1'
	5,       114, 73, 73, 73, 70,		// 50 - '2'
	5,       33, 65, 73, 77, 51,          // 51 - '3'
	5,       24, 20, 18, 127, 16,		// 52 - '4'
	5,       39, 69, 69, 69, 57,		// 53 - '5'
	5,       60, 74, 73, 73, 49,		// 54 - '6'
	5,      65, 33, 17, 9, 7,		// 55 - '7'
	5, 54, 73, 73, 73, 54,		// 56 - '8'
	5, 70, 73, 73, 41, 30,		// 57 - '9'
'
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

Probaj skontati iz ovog include fajla za pbp
Attachments
LCD_3310v32.inc.rar
(4.07 KiB) Downloaded 337 times
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

To je jako slicno onom fajlu koji si mi dao za Graficki LCD 128*64.....
probao sam par kombinacija danas ali bezuspjesno niti jedna nije proradila.Danas nije moj dan..nist nede od ruke....Idem sa dalje igrat s fajlom.....
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

Za pocetak napravi niz sa clanova koliko imas kolona. Napravi da iz tog niza mozes prekopirati stanja na led. Kad to napravis ostaje ti samo ono pomeranje i dodavanje po jedne kolone karaktera sa desne strame displeja.
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Za sada nema napredka.

S ovim kodom sam uspio da mi procita znakove u stringu i pokaza na prvoj matrici ali bez scrollanja,staticni znakovi S-C-R-O-L-L-I-N-G- itd.

Code: Select all

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : ZELJKO FERIC                                      *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 19.10.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
   #CONFIG
__config _HS_OSC & _WDT_ON & _PWRTE_ON &_CP_ON  & _BODEN_OFF & _LVP_OFF

#ENDCONFIG   

DEFINE OSC 20
  
 include "modedefs.bas" 
  
TRISA=0
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%1111
CMCON=7


SYMBOL CLK = PORTB.0
SYMBOL DAT = PORTB.1
SYMBOL LOAD = PORTB.2

  
      Chr         VAR Byte
      BitMap      VAR Word
      CharCount   VAR Byte
      PosX        VAR Byte
      PosY        VAR Byte
      Column      VAR Byte [6]
      LCDstr      VAR Byte [26]
      LcdData     VAR Byte
  
Decode    CON   $09         ' bcd decode
Intensity CON   $0A         ' brightness
Scan      CON   $0B         ' scan (column) limit
ShutDn    CON   $0C         ' shutdown (1 = on)
Test      CON   $0F         ' display test mode


Initialize:
low dat 'data pin for MAX7219 (1)
low clk 'clock pin for MAX7219 (13)
low load 'load pin for MAX7219 (12)


   SHIFTOUT DAT,ClK,MSBFIRST,[Scan,7,Scan,7,Scan,7]
   PULSOUT Load,1
   SHIFTOUT DAT,ClK,MSBFIRST,[Intensity,0,Intensity,0,Intensity,0]
   PULSOUT Load,1
   SHIFTOUT DAT,ClK,MSBFIRST,[ShutDn,1,ShutDn,1,ShutDn,1]
   PULSOUT Load,1
   SHIFTOUT DAT,ClK,MSBFIRST,[DECODE,0,DECODE,0,DECODE,0]
   PULSOUT Load,1
   
   
   
  
Start:
 

  FOR Chr=0 TO 13
      LOOKUP Chr,["SCROLLING TEXT"],BitMap
      LCDstr(Chr)=BitMap
  NEXT Chr
  GOSUB LCD_StringOut

   FOR Chr=0 TO 13
      LOOKUP Chr,["PROBA 88"],BitMap
      LCDstr(Chr)=BitMap
  NEXT Chr
  GOSUB LCD_StringOut
  


  

'******************************************************************  
LCD_CharOut:
  IF lcddata=32 THEN BitMap=216             ' SPACE
  IF lcddata=42 THEN BitMap=240             ' *
  IF lcddata=43 THEN BitMap=222             ' +
  IF lcddata=45 THEN BitMap=228             ' -
  IF lcddata=46 THEN BitMap=234             ' .
  IF lcddata=58 THEN BitMap=246             ' :
  
  IF LCDData > 47  THEN                     ' Numbers 0-9
     IF lcddata < 59 THEN
        BitMap=6*(lcddata-48)+156
     ELSE                                   ' Capital Letters A-Z
        BitMap=(LcdData-65) * 6
     ENDIF
  ENDIF

    
FOR Chr=0 TO 5 
    PAUSE 50
    READ (BitMap+Chr-1),Column 
    SHIFTOUT DAT,CLK,1,[0,0,0,0,CHR,Column]
    PULSOUT Load,1
NEXT CHR
RETURN

 '************************************************************* 
LCD_StringOut:
  FOR CharCount=0 TO 13
      LcdData=LCDstr(CharCount)
      PAUSE 80
      GOSUB LCD_CharOut
  NEXT CharCount
RETURN
  


'-------------------------------------------------  
' Font DATA table
'-------------------------------------------------  
                                  '  DEC  Chr  HEX
  Data $7E,$11,$11,$11,$7E,$00  '  65   A   41
  Data $7F,$49,$49,$49,$36,$00    '  66   B   42
  Data $3E,$41,$41,$41,$22,$00   '  67   C   43
  Data $7F,$41,$41,$22,$1C,$00    '  68   D   44
  Data $7F,$49,$49,$49,$41,$00   '  69   E   45
  Data $7F,$09,$09,$09,$01,$00   '  70   F   46
  Data $3E,$41,$49,$49,$7A,$00    '  71   G   47
  Data $7F,$08,$08,$08,$7F,$00    '  72   H   48
  Data $00,$41,$7F,$41,$00,$00    '  73   I   49
  Data $20,$40,$41,$3F,$01,$00  '  74   J   4A
  Data $7F,$08,$14,$22,$41,$00    '  75   K   4B
  Data $7F,$40,$40,$40,$40,$00    '  76   L   4C
  Data $7F,$02,$0C,$02,$7F,$00    '  77   M   4D
  Data $7F,$04,$08,$10,$7F,$00   '  78   N   4E
  Data $3E,$41,$41,$41,$3E,$00    '  79   O   4F
  Data $7F,$09,$09,$09,$06,$00    '  80   P   50
  Data $3E,$41,$51,$21,$5E,$00    '  81   Q   51
  Data $7F,$09,$19,$29,$46,$00    '  82   R   52
  Data $46,$49,$49,$49,$31,$00   '  83   S   53
  Data $01,$01,$7F,$01,$01,$00    '  84   T   54
  Data $3F,$40,$40,$40,$3F,$00    '  85   U   55
  Data $1F,$20,$40,$20,$1F,$00   '  86   V   56
  Data $3F,$40,$38,$40,$3F,$00    '  87   W   57
  Data $63,$14,$08,$14,$63,$00    '  88   X   58
  Data $07,$08,$70,$08,$07,$00    '  89   Y   59
  Data $61,$51,$49,$45,$43,$00    '  90   Z   5A
  Data $3E,$51,$49,$45,$3E,$00    '  48   0   30
  Data $00,$42,$7F,$40,$00,$00    '  49   1   31
  Data $42,$61,$51,$49,$46,$00    '  50   2   32
  Data $21,$41,$45,$4B,$31,$00    '  51   3   33
  Data $18,$14,$12,$7F,$10,$00    '  52   4   34
  Data $27,$45,$45,$45,$39,$00    '  53   5   35
  Data $3C,$4A,$49,$49,$30,$00    '  54   6   36
  Data $01,$71,$09,$05,$03,$00    '  55   7   37
  Data $36,$49,$49,$49,$36,$00    '  56   8   38
  Data $06,$49,$49,$49,$3E,$00    '  57   9   39
  Data $00,$00,$00,$00,$00,$00,0,0    '  32       20
  Data $08,$08,$3E,$08,$08,$00,0,0    '  43   +   2B
  Data $08,$08,$08,$08,$08,$00,0,0    '  45   -   2D
  Data $00,$60,$60,$00,$00,$00,0,0    '  46   .   2E
  Data $14,$08,$3E,$08,$14,$00,0,0    '  42   *   2A
  Data $00,$36,$36,$00,$00,$00,0,0    '  58   :   3A




Onaj include PEDJA bio bi idealan kad bi se uspio osposobiti da radi isto kao i na grafickom displeju.

Code: Select all

@print 1,1," DOBRO nam DOSLI"
Tako bi onda izgledao cijeli program za ispis texta.

Probao sam se s njime igrati ali ga nisam uspio skontati ....
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

Bacio sam oko na brzinu na tvoj kod, nisam ga uspeo pohvatati. Sad nemam vremena da bi se igrao sa tim...
Ja bi krenuo onako kako sam ti rekao, ceo displej drzi u ramu u memoriji. Napravi da ti kopira sadrzaj niza na displej. Odatle ces lako popunjavati niz i igrati se sa shiftovanjem itd...
Napravis niz sa brojem elemenata koliko i kolona ima.
I jedan bajt ti predstavlja jednu vertikalnu liniju niza. Napuni taj niz samo samo nekim brojevima, i prikazi ga na displeju. Znaci napravi sam da bit koji je na 1 u tom nizu pali odgovarajucu led. Recimo setujes bit 0 prvog bajta i treba da ti sija donja desna led na displeju.
Setujes bit 0 treceg bajta i treba da ti sija led u donjem redu 3 kolona sa desno.
Naravno to treba da se izvrsava kada pozovs neki podprogram tipa GOSUB LCD_StringOut.
A kad to napravis onda cu ti pokazati kako da ubacujes karaktere kao u ovom include...
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Sutra ću probati jos jednu foru s kodom od Parallaxa- nalazi se par postova prije u ovoj temi.Kod njega je jedini problem sto ne moze ispisat vise od 35 slova jer se na pocetku programa naredbom DATA upisuju u interni EEPROM svi nizovi za pojedino slovo u ovom obliku

DATA 31,32,64,32,31,0,0,0 'slovo V
DATA 65,127,65,0,0,0,0,0 ' slovo I

Budem probao te nizove napisat u hex fajl i isprogramirat EEPROM 24c16 i umjesto naredbe READ koristit I2CREAD naredbu da vidim sto ce se desiti.Dok procitam sadrzaj PIC procesora u njegovom epromu je tocno po redu zapisan sadrzaj nizova za svako slovo kako je upisano i u PICBASICPRO-u.Možda bu delalo i tak,jest da je to muka za pisanje nekog texta ali vrijedi pokusati.
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: MAX7219 I 8X8 LED DISPLAY

Post by febo26 »

Neda mi vrag mira pa sam probao ovu foru s vanjskim EEPROM-om i stvar funkcionira ali opet samo mogu procitati 32 slova jer mi naredba za citanje iz eproma i ispis na led matricu izgleda ovako

Code: Select all

 
main:
FOR eeAddr1 =0 TO 800 
gosub izlaz
pause 100
goto main

izlaz:
    FOR col = 1 TO 8            ' character is 8 columns wide
    ADR= (EEADDR1+COL-1)
    I2CREAD SDA,SCL,$A0,ADR,[D7219]
    SHIFTOUT DAT,ClK,MSBFIRST,[0,0,0,0,COL,D7219]
PULSOUT Load,1
  NEXT
return

koliko sam ja skuzio problem je u ovom redu
ADR var byte
adresa za citanje iz eproma je velicine byte tj. od 0-255, a dok pomnozim 32slova puta 8 bajta za svako slovo dobim 256 mjesta.
Ako stavim ADR var word onda mi ispise dva hijeroglifa i dalje prazne matrice nema ispisa vise.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: MAX7219 I 8X8 LED DISPLAY

Post by pedja089 »

Da li je adresa word ili bajt zavisi od eeproma i broja lokacija u njemu.
Post Reply