MAX7219 I 8X8 LED DISPLAY
Moderators: pedja089, stojke369, [eDo], trax
MAX7219 I 8X8 LED DISPLAY
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?
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?
Re: MAX7219 I 8X8 LED DISPLAY
Može li ovo pomoći ?
http://www.picbasic.co.uk/forum/archive ... 15735.html
http://www.picbasic.co.uk/forum/archive ... 15735.html
Re: MAX7219 I 8X8 LED DISPLAY
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
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
Re: MAX7219 I 8X8 LED DISPLAY
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
Re: MAX7219 I 8X8 LED DISPLAY
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 ?
Jel si shvatio ?
Re: MAX7219 I 8X8 LED DISPLAY
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
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
Re: MAX7219 I 8X8 LED DISPLAY
To pomeranje se postize presipanjem iz supljeg u prazno 
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:

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
Re: MAX7219 I 8X8 LED DISPLAY
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
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
Re: MAX7219 I 8X8 LED DISPLAY
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...
Prvo provali kako u maxu mozes kontrolisati svaku kolonu zasebno. I onda podatke iz ovog niza ubacuj samo u kolone...
Re: MAX7219 I 8X8 LED DISPLAY
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
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
Re: MAX7219 I 8X8 LED DISPLAY
Sve se moze kad se oce 
Probaj naci primer biblioteke za displej od nokie 3310. Tako imas par nacina za cuvanje i baratanje stringovima.

Probaj naci primer biblioteke za displej od nokie 3310. Tako imas par nacina za cuvanje i baratanje stringovima.
Re: MAX7219 I 8X8 LED DISPLAY
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.
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'
'
Re: MAX7219 I 8X8 LED DISPLAY
Probaj skontati iz ovog include fajla za pbp
- Attachments
-
- LCD_3310v32.inc.rar
- (4.07 KiB) Downloaded 353 times
Re: MAX7219 I 8X8 LED DISPLAY
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.....
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.....
Re: MAX7219 I 8X8 LED DISPLAY
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.
Re: MAX7219 I 8X8 LED DISPLAY
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.
Onaj include PEDJA bio bi idealan kad bi se uspio osposobiti da radi isto kao i na grafickom displeju.
Tako bi onda izgledao cijeli program za ispis texta.
Probao sam se s njime igrati ali ga nisam uspio skontati ....
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"
Probao sam se s njime igrati ali ga nisam uspio skontati ....
Re: MAX7219 I 8X8 LED DISPLAY
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...
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...
Re: MAX7219 I 8X8 LED DISPLAY
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.
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.
Re: MAX7219 I 8X8 LED DISPLAY
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
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.
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
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.
Re: MAX7219 I 8X8 LED DISPLAY
Da li je adresa word ili bajt zavisi od eeproma i broja lokacija u njemu.