 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.67 Kraj: Dolenjska
|
Objavljeno: Čet Maj 26, 2016 12:11 pm Naslov sporočila: MAX7219 - priključitev - krmiljenje LED |
|
|
Silvo je napisal/a: |
arksi je napisal/a: |
@Silvo: Kako pa krmiliš ta LED displej. A je to v mulipleksu, al kako?
LP |
Na led displeju je MAX7219, ki skrbi za prikaz (dela v multiplex-u) Mikrokontroler komunicira z njim preko SPI vodila. |
Citat vzet iz te teme.
Silvo, a lahko malce razložiš kako se ta displey krmili. Katere ukaze/podateke je potrebno poslati po SPI vodilu, da se npr. na prvem digitu izpiše število 1? SPI vodilo ima več signalov SCLK, MOSI, MISO, SS(CS). Pri tem krmiljenju z MAX7219 pa se uporablja samo tri priključke, poleg napajanja. Kako se to sploh prav priključi na Mego328P?
Se že nekaj časa matram z Arduino nano pa mi ne uspe.
Hvala.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14666 Aktiv.: 62.10 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Maj 26, 2016 1:42 pm Naslov sporočila: |
|
|
Glej bolje ne znam razložit - vse imaš datashetu. Najdeš ga na spletu. Ok ga dam še v prilogo. Sam sem sicer uporabil arduino plato a nisem programiral v adruino okolju ampak v assemblerju.
Evo misim da je ravno to tista koda termometra komentarjev ni dosti, ker je šlo za testiranje in je bilo napisano na hitro.
Koda: |
;*********************************************
;testiranje displeja z MAX7219
;testiranje Konverterja za termočlen MAX6675
;testna aplikacija termometer
;03.01.16 Silvo
;**********************************************
.include "m8def.inc"
.def Stevec=r3
.def LBiti=r4
.def Hbiti=r5
.def tmp=r16
.def Ltmp=r17
.def Htmp=r18
#define Max7219 Portb,2
#define Max6675 Portb,0
#define ClkMax6675 Portb,1
#define SOMax6675 Pinb,4
.macro NaDisplej ;
cbi @2
ldi tmp,@0
rcall Poslji
; in Hbiti,SPDR ;uporabljeno ob istočasnem branju Max6675
lds tmp,@1
rcall Poslji
; in Lbiti,SPDR ;;uporabljeno ob istočasnem branju Max6675
sbi @2
.endmacro
.macro SetDisplej ;
cbi @2
ldi tmp,@0
rcall Poslji
ldi tmp,@1
rcall Poslji
sbi @2
.endmacro
.macro Pretvori
clr Stevec
ldi Ltmp,low(@0)
ldi Htmp,high(@0)
OdstejNaprej:
sub Lbiti,Ltmp
sbc Hbiti,Htmp
brcs Negativno
inc Stevec
rjmp OdstejNaprej
Negativno:
add Lbiti,Ltmp
adc Hbiti,Htmp
.endmacro
.macro MojiZnaki
lds tmp,@0
rcall BeriTabelo
sts @0,tmp
.endmacro
.equ Disp1=0x60
.equ Disp2=0x61
.equ Disp3=0x62
.equ Disp4=0x63
.equ Disp5=0x64
.equ Disp6=0x65
.equ Disp7=0x66
.equ Disp8=0x67
.equ SD1=1
.equ SD2=2
.equ SD3=3
.equ SD4=4
.equ SD5=5
.equ SD6=0x6
.equ SD7=7
.equ SD8=8
.equ DecMode=9
.equ Inten=0xA
.equ ScanL=0xB
.equ ShDown=0xC
.equ DTest=0xF
.org 0x0
rjmp GlProg
.org INT_VECTORS_SIZE
GlProg:
ldi tmp,low(ramend)
out SPL,tmp
ldi tmp,high(ramend)
out SPH,tmp
sbi DDRB,5 ;CLK
sbi DDRB,2 ;CS Max7219
sbi DDRB,0 ;CS Max6675
sbi DDRB,3 ;MOSI
sbi DDRC,0 ;testni led
sbi DDRB,1 ;clk max6675
sbi Max7219
sbi Max6675
lds tmp,0x60
; Enable SPI, Master, set clock rate fck/16 iniclizacija HW spi
ldi tmp,(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)
out SPCR,tmp
ldi tmp,22 ;startne vrednosti za prikazovalnik
sts Disp1,tmp
ldi tmp,0b0110_0011
sts Disp2,tmp
ldi tmp,3
sts Disp3,tmp
ldi tmp,4
sts Disp4,tmp
ldi tmp,0
sts Disp5,tmp
ldi tmp,0
sts Disp6,tmp
ldi tmp,0
sts Disp7,tmp
ldi tmp,0
sts Disp8,tmp
MojiZnaki Disp1
SetDisplej DTest,0x0,Max7219
SetDisplej ShDown,0x1,Max7219 ;vklop displeja
SetDisplej DecMode,0x00,Max7219 ;nacin dekodiranja - glej tabelo PDF
SetDisplej Inten,0x4,Max7219 ;intenzivnost osvetiltve 0x1-0xF
SetDisplej ScanL,0x7,Max7219
SetDisplej Inten,0x4,Max7219 ;intenzivnost osvetiltve 0x1-0xF
SetDisplej Inten,0x4,Max7219 ;intenzivnost osvetiltve 0x1-0xF ;stevilo displejev ki se osvezujejo 0x0-0x7
NaDisplej SD1,Disp1,Max7219 ;1 parameter displej 2 parameter vrednost za prikaz iz srama
NaDisplej SD2,Disp2,Max7219
NaDisplej SD3,Disp3,Max7219
NaDisplej SD4,Disp4,Max7219
NaDisplej SD5,Disp5,Max7219
NaDisplej SD6,Disp6,Max7219
NaDisplej SD7,Disp7,Max7219
NaDisplej SD8,Disp8,Max7219
Gzanka:
rcall BeriT ;branje Max6675
rcall HexDec ;pretvorba 12 bitnega rezultata v 4 registre za prikaz
rcall MojiSimboli
NaDisplej SD3,Disp3,Max7219 ;1 parameter displej 2 parameter vrednost za prikaz iz srama
NaDisplej SD4,Disp4,Max7219
NaDisplej SD5,Disp5,Max7219
NaDisplej SD6,Disp6,Max7219
rcall Pavza1s
sbi PORTC,0 ;testni led
rjmp Gzanka
;-----------------------------------------------
;procedura posle 1byte ki ga dobi v tmp na SPI
;-----------------------------------------------
Poslji:
out SPDR,tmp
nop
Wait_Transmit: ; cakaj do konca paketa
in tmp, SPSR
sbrs tmp, SPIF
rjmp Wait_Transmit
nop
ret
;-----------------------------------------------------------
;Pavza 1S Oscilator 4Mhz
;-----------------------------------------------------------
Pavza1S:
push r20
push r21
push r22
ldi r20,185
ldi r21,75
ldi r22,21
P_zanka:
dec r20
brne P_zanka
dec r21
brne P_zanka
dec r22
brne P_zanka
pop r22
pop r21
pop r20
ret
;----------------------------------------------------------
;pretvorba 12 bitne vrednosti v 4 registre za prikaz
;Vrednost prejme v register Lbiti in Hbiti rabi se regostra
;Ltmp in Htmp oba <r16 ter register stevec. V njega je po
;koncanem makru zapisan n-kratnik odstevanja za vsako dec.
;mesto
;glej makro Pretvori
;----------------------------------------------------------
HexDec:
; Pretvori 10000 ;odstevanje 10000
; sts Disp5,Stevec ;shranem rezulat
Pretvori 1000 ;odstevanje 1000
sts Disp6,Stevec ;shranem rezulat
Pretvori 100
sts Disp5,Stevec
Pretvori 10
sts Disp4,Stevec
sts Disp3,Lbiti
ret
TABELA: //0123456789AbcdEFPHI-n CALryvabcdefg.
.db 126,48,109,121,51,91,95,112,127,123,119,31,13,61,79,71,103,55,6,1,21,0,78,119,14,5,51,28,64,32,16,8,4,2,1,128
BeriTabelo:
ldi ZL,low(tabela*2)
ldi ZH,high(tabela*2)
add ZL,tmp
clr tmp
adc ZH,tmp
lpm tmp,Z
ret
MojiSimboli:
rcall Preveri0 ;preverja ce je na na 4 in 3 dispjleju 0 potem je ne kaze
MojiZnaki Disp3
MojiZnaki Disp4
MojiZnaki Disp5
MojiZnaki Disp6
ret
Preveri0:
lds tmp,Disp6
tst tmp
breq JeNic
ret
JeNic:
ldi tmp,21
sts Disp6,tmp
lds tmp,Disp5
tst tmp
brne NiNic
ldi tmp,21
sts Disp5,tmp
NiNic:
ret
;test
Pristej:
ldi tmp,1
add r19,tmp
clr tmp
adc r20,tmp
mov Lbiti,r19
mov Hbiti,R20
ret
;---------------------------------------------------
;branje temperaterature Max6675
;softwerski SPI
;Uporabljeni registri Lbiti,Hbiti
;---------------------------------------------------
BeriT:
ldi tmp,0b0000_0010
mov Lbiti,tmp
clr Hbiti
cbi Max6675
Ponovi:
sbi ClkMax6675
nop
nop
cbi ClkMax6675
clc
sbic SOMax6675
sec
rol Lbiti
rol Hbiti
brcc Ponovi
sbi Max6675
lsr Hbiti ;izločim bite, ki jih trenutno ne potrebujem
ror Lbiti
lsr Hbiti
ror Lbiti
lsr Hbiti
ror Lbiti
lsr Hbiti
ror Lbiti
lsr Hbiti
ror Lbiti
ret
Izloci:
lsr Hbiti ;izločim bite, ki jih trenutno ne potrebujem
ror Lbiti
lsr Hbiti
ror Lbiti
lsr Hbiti
ror Lbiti
lsr Hbiti
ror Lbiti
ret |
Opis: |
|
 Download |
Ime datoteke: |
MAX7219-MAX7221.pdf |
Velikost datoteke: |
491.3 KB |
Downloadano: |
9 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.67 Kraj: Dolenjska
|
Objavljeno: Pon Maj 30, 2016 10:46 am Naslov sporočila: |
|
|
Hvala Silvo. Če bi razumel datasheet potem, verjemi, tega nebi spraševal. Enemu strojniku, ki se malo za hobi igračka z elektroniko, ni prav enostavno izluščiti vseh potrebnih informacij iz datasheeta. Zato sprašujem za malo bolj "kmečko" razlago.
Hja, tudi iz ASM-ja se bo bolj težko znajti. Očitno bo tole prevelik zalogaj zame .
Če prav razumem se omenjeni LED displeji krilijo tako, da se najprej pošlje vrednot posameznega LED 7-seg prikazovalnika in nato še vrednost, katera naj bi bila prikazana.
Silvo, če ni preveč za razlagat, kako bi izpisal št. 1 na prvem LED displeju? Kakšna je sintaksa programa?
LP
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14666 Aktiv.: 62.10 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Maj 30, 2016 11:43 am Naslov sporočila: |
|
|
Od začetka na splošno.
Domnevam, da imaš kak narejen hardware z displeji? Sam sem uporabil kitajskega s 8 7segmentnimi prikazovalniki. Čip namreč omogoča multipleksiranje matrice 8x8. (seveda ni nujno da je to 7 segmentni prikazovalnik)
V nadaljevanju bom pisal bolj splošno oz. opisoval povzetke datasheta.
Čip (vezje) se poveže na napajanje Vcc=+5V GND=-
V koliko ima mikrokontroler SPI vodilo in se bo le to uporabilo, se poveže preko njega . Torej v danem primeru CLK -> CLK MOSI >DIN SS->CS
CLK - so urni impulzi, ki jih generira mikrokontroler
MOSI - pin s katerem mikrokontroler POŠILJA podatke
SS (CS) - izbira periferije na vodilu. (nizko stanje - izbrana periferija)
(glej stran 6 datashet)
Format podatkov je 16 biten. Nizkih 8 bitov je podatek. naslednji štirje so naslov.
Tabele z naslovi imaš od 7 strani naprej datasheta.
Najprej bo potrebno narediti inicializacijo čipa - torej osnovne nastavitve, ki jih želimo.
Torej displej vklopimo -Shutdown Register Format (Address (Hex) = 0xXC)
na 0xC pošljemo 0x1
Določimo način dekodiranja - Decode-Mode Register Examples (Address (Hex) = 0xX9)
Izbiramo med načinom, da sami določujemo kateri segmenti se bodo prižgali oz izberemo da se bo uporabila vgrajena tabela. Torej v koliko ne izberemo kodiranja se bo v primeru, da pošljemo podatek 0x0 na displeju prižgal segment G sicer pa po displej prikazal 1. Glej tabele stran 8 naprej.
Torej, če navodilo pošljemo 0x9 0xFF smo izbrali dekodiranje za segmente od 0-7
Določimo jakost osvetlitve displeja - Intensity Register Format (Address (Hex) = 0xXA) 0d 0x0 (min) do 0xF (max)
Določimo koliko displejev bomo prikazovali -Scan-Limit Register Format (Address (Hex) = 0xXB)
Torej, če vseh 8 potem pošljemo na vodilo 0xB 0x7 (glej tabelo 8 stran 9
Ok, če sedaj želimo na prvi displej prikazati 1 potem pošljemo 0x1 0x1 na drugega 2 = ox2 0x2 na tretjega 5 0x3 0x5 itd
Ok v kakem višjem jeziku gre to enostavneje. Verjetno lahko inicializacijo narediš v eni vrstici (tudi sam bi lahko spisal tak makro)
Torej to je bila splošna razlaga na hitro.
Na forumu je kar nekaj "arduino-vcov". Mogoče se bo kdo ogasil
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.67 Kraj: Dolenjska
|
Objavljeno: Tor Maj 31, 2016 10:07 am Naslov sporočila: |
|
|
Silvo, hvala, res, za tako obširno razlago. Mi je sedaj več razumljivega.
Za igračkanje uporabljam Arduino NANO ploščico in tale prikazovalnik.
Priključil sem ga po spodnji shemi, samo nisem siguren, če je taka priključitev pravilna.?
Silvo je napisal/a: |
Od začetka na splošno.
Format podatkov je 16 biten. Nizkih 8 bitov je podatek. naslednji štirje so naslov.
Tabele z naslovi imaš od 7 strani naprej datasheta.
Najprej bo potrebno narediti inicializacijo čipa - torej osnovne nastavitve, ki jih želimo.
Torej displej vklopimo -Shutdown Register Format (Address (Hex) = 0xXC)
na 0xC pošljemo 0x1............ |
Torej: podatek pošljemo tako, da najprej pošljemo naslov (4 bitni adress) in nato 8 bitni podatek.
Silvo je napisal/a: |
.........
SS (CS) - izbira periferije na vodilu. (nizko stanje - izbrana periferija)
......... |
Tole mi še ni jasno. Je linija SS (CS) že v sklopu SPI vodila, ali jo je potrebno "ročno" vklapljat/izklapljat? Kaj pomeni "izbrana periferija"? Moramo to linijo spustiti na nizek nivo, da lahko vpisujemo podatek, ali kako?
Bom poizkusil malo se poigrati s temi nastavitvami pa mi mogoče celo uspe .
LP
Opis: |
|
Velikost datoteke: |
215.13 KB |
Pogledana: |
8 krat |

|
Opis: |
|
Velikost datoteke: |
115.49 KB |
Pogledana: |
3 krat |

|
|
|
Nazaj na vrh |
|
 |
arksi Član

Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 748 Aktiv.: 3.67 Kraj: Dolenjska
|
Objavljeno: Čet Jun 02, 2016 6:31 am Naslov sporočila: |
|
|
Sicer bom moral vse skupaj še malo naštudirati. Sem pa našel eno dobro stran/vodič za začetnike. Dobi se tudi Arduino knjižnica za delo z MAX7219. Klik!
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 471 dni
Powered by phpBB © 2001, 2005 phpBB Group
|