www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

MAX7219 - priključitev - krmiljenje LED

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.67
Kraj: Dolenjska

PrispevekObjavljeno: Čet Maj 26, 2016 12:11 pm    Naslov sporočila:  MAX7219 - priključitev - krmiljenje LED Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14666
Aktiv.: 62.10
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Maj 26, 2016 1:42 pm    Naslov sporočila:   Odgovori s citatom

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



MAX7219-MAX7221.pdf
 Opis:

Download
 Ime datoteke:  MAX7219-MAX7221.pdf
 Velikost datoteke:  491.3 KB
 Downloadano:  9 krat


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.67
Kraj: Dolenjska

PrispevekObjavljeno: Pon Maj 30, 2016 10:46 am    Naslov sporočila:   Odgovori s citatom

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 Wink.

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14666
Aktiv.: 62.10
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Maj 30, 2016 11:43 am    Naslov sporočila:   Odgovori s citatom

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 Confused

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.67
Kraj: Dolenjska

PrispevekObjavljeno: Tor Maj 31, 2016 10:07 am    Naslov sporočila:   Odgovori s citatom

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 Wink.

LP



Max7219_prikljucitev_na_Arduino_NANO.jpg
 Opis:
 Velikost datoteke:  215.13 KB
 Pogledana:  8 krat

Max7219_prikljucitev_na_Arduino_NANO.jpg



Tabela_MAX7219.jpg
 Opis:
 Velikost datoteke:  115.49 KB
 Pogledana:  3 krat

Tabela_MAX7219.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.67
Kraj: Dolenjska

PrispevekObjavljeno: Čet Jun 02, 2016 6:31 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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