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


Pridružen-a: Sre 28 Maj 2008 22:19 Prispevkov: 1346 Aktiv.: 6.48 Kraj: Slov.Bistrica
|
Objavljeno: Pet Dec 14, 2012 3:42 pm Naslov sporočila: ATMega in HW SPI |
|
|
Potrebujem pomoč pri komunikaciji na ATMega88PA in SPIju. Torej, komunikacija potuje le v eno smer in sicer na TLC5917, ki je 8 kanalni LED driver. Zatakne se mi pri sami ideji, kako bi izvedel zadevo s pomočjo HW SPI-ja. Samo pošiljanje in nastavitev SPIja ni problematično, ampak v tistih dveh dodatnih linij; LE (latch enable) in OE (output enable). Kako torej ti dve liniji usposobiti skupaj z clockom iz HW SPIja?
Koda: |
DDRB |= (1<<2)|(1<<3)|(1<<5); // SCK, MOSI and SS as outputs
DDRB &= ~(1<<4); // MISO as input
SPCR |= (1<<MSTR); // Set as Master
SPCR |= (1<<SPR0)|(1<<SPR1); // divided clock by 128
SPCR |= (1<<SPE); // Enable SPI
while(1){
SPDR = data; // send the data
while(!(SPSR & (1<<SPIF))); // wait until transmission is complete
.... |
Opis: |
|
Velikost datoteke: |
13.3 KB |
Pogledana: |
5515 krat |

|
Opis: |
|
Velikost datoteke: |
20.33 KB |
Pogledana: |
0 krat |

|
_________________ If you're in control, you aren't going fast enough |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Pet Dec 14, 2012 5:05 pm Naslov sporočila: |
|
|
LE in OE nimata "veze" z SPIjem. Sta le za prenos statusa LED diod iz shift-registra v nek notranji buffer ter za vklop izhodov.
Poskusi takole:
1. OE nastavi na 1, LE nastavi na 0
2. prenesi podatke preko SPIja (če imaš 1 čip, potem 8 bitov, če imaš več, pač Nx8 bitov - več jih lahko povežeš zaporedno SDO prejšnjega na SDI naslednjega).
3. pošlji impulz na LE (spremeni na 1 in nato nazaj na 0)
4. postavi OE na 0 (takrat se bodo LED diode prižgale tako, kot si poslal preko SPIja)
Poglej si timing diagram v datasheetu nad tem, ki si ga prilepil (Normal mode). Ta "Special mode" je za ugotavljanje ali lahko driver zagotavlja dovolj toka ter za fine nastavitve posameznih izhodov (balance).
p.s.: Če boš uporabljal več čipov, ne naredi iste napake, kot sem jo jaz (Problem s TLC5940) in na en izhod iz I/O kartice / uKontrolerja priklopi 25 podobnih driverjev Po možnosti v skupni dolžini kabla 20m+.
|
|
Nazaj na vrh |
|
 |
xsyt Član


Pridružen-a: Sre 28 Maj 2008 22:19 Prispevkov: 1346 Aktiv.: 6.48 Kraj: Slov.Bistrica
|
Objavljeno: Pet Dec 14, 2012 10:26 pm Naslov sporočila: |
|
|
Koda: |
In the Special Mode phase, the TLC5916/TLC5917 allows users to adjust the output current level by setting a
runtime-programmable Configuration Code. The code is sent into the TLC5916/TLC5917 via SDI. The positive
pulse of LE(ED1) latches the code in the shift register into a built-in 8-bit configuration latch, instead of the output
latch. The code affects the voltage at the terminal R-EXT and controls the output-current regulator. The output
current can be finely adjusted by a gain ranging from 1/12 to 127/128 in 256 steps. Therefore, the current skew
between ICs can be compensated within less than 1%. This feature is suitable for white balancing in LED color
display panels. |
_________________ If you're in control, you aren't going fast enough |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Pet Dec 14, 2012 10:39 pm Naslov sporočila: |
|
|
Ja, saj znam prebrat v datasheetu. Ni pa mi povsem jasno, kaj tebi ne gre in sicer na splošno prižgat LEDik tako kot želiš ali pa jim fino nastavit maksimalni tok?
|
|
Nazaj na vrh |
|
 |
xsyt Član


Pridružen-a: Sre 28 Maj 2008 22:19 Prispevkov: 1346 Aktiv.: 6.48 Kraj: Slov.Bistrica
|
Objavljeno: Sob Dec 15, 2012 3:58 pm Naslov sporočila: |
|
|
Prižiganje samih posamičnih ledik ni problematično. TLC ne znam spraviti v ta special mode za nastavitev izhodnega toka.
_________________ If you're in control, you aren't going fast enough |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Sob Dec 15, 2012 5:29 pm Naslov sporočila: |
|
|
Glede na skico, ic bere vrednosti na vhodih na rising edgeu clocka. Za preklop v "special mode" moraš očitno najprej dat negativni pulz na OE (za 1 cikel postavit OE na 0), v naslednjem ciklu mora biti spet 1, še v naslednjem pa moraš aktivirat LE za en cikel, nato pa ga spet deaktiviraš.
V datasheetu (strani 20 zgoraj) ti piše, da ko ic detekta pulz OE (na 0) dolg točno 1 cikel ure, bo potem čakal 2 cikla v "mode switching" načinu. Če v tem času dobi pulz na LE (na 1), se bo preklopil v "special mode". Če ga ne dobi, se bo preklopil oz. ostal v "normal mode".
Ko si enkrat v special modeu, pošlješ 8 bitov (ali več, če imaš več icjev zaporedoma - najprej pošlješ za zadnji čip, nato za predzadnji itd..) in na koncu "potrdiš" s pulzom na LE (stran 21 spodaj).
Ko si to naredil, preklopiš nazaj v normal mode (torej pulz na OE in nato 2 cikla nič ne spreminjaš LEja).
Sem iskal pa nisem našel... Očitno lahko fino nastavljaš samo tok za celotni čip (pri TLC5940 lahko nastavljaš vsak izhod posebej - tam to imenujejo DOT correction in lahko zapišeš v register ali pa v EEPROM).
|
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|