Ovládání RGB led – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ovládání RGB led – Assembler – Fórum – Programujte.comOvládání RGB led – Assembler – Fórum – Programujte.com

 

misisnik
~ Anonymní uživatel
17 příspěvků
22. 8. 2013   #1
-
0
-

Zdravím,

Jak můžu ovládat barvy na RGB ledce jen pomocí procesoru.
Na netu jsem se dočetl, že pomocí PWM.

Zkoušel jsem to, ale barvy nesedí. Jde mi o to jak dostat z ledky barvu podle kódu např. R:59 G:34 B:14 (hnědá)
Jedná se o led se společnou anodou.

Díky Michal

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
22. 8. 2013   #2
-
0
-

zase tak dobry barvy z ledky nedostanes... jednotlive barvy musi byt velice dobre promichane a ty krystaly na ledce sou vetsinou strasne daleko... 

pak pwm se musi trosku vic skalovat... ci pouzit rc clanek aby byly zmeny svitivosti trosku jemnejsi.. . i nejkratsi impuls je uz pomerne vyrazne svetlejsi nez kdyz nesviti vubec a pak jsou ty zmeny mnohem mene viditelne...

tusim ze zajimavejsi metoda je tusim bitbanging ci jak se to menuje... jde o to ze jednotlive bity z bajtu vypisujes na port a pak cekas primerene dlouhou dobu podle toho jak dulezity bit to byl...

tj pro LSB cekas jednu jednotku casu, pro dalsi bit 2, 4, 8, 16, 32... 128... vyjde to podobne jako pwm ale mohlo by to byt trosku viditelnejsi (ale tezko rict .. moc sem to netestoval)

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
22. 8. 2013   #3
-
0
-

j no já si hraju už s hotovým výrobkem, tudíž můžu měnit jenom program v 8051..

Při hraní si dostanu mimo červené, zelené a modré taky růžovou žlutou a bílou bohužel když si hraju moc tak i odstíny těchto barev jde mi spíše o to abych mohl barvy měnit podle kódu co jsem psal nahoře (např. R:59 G:34 B:14 )

Jinak ledky si myslím mám celkem kvalitní :D  (http://www.netmart.cz/detail.aspx?…)

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
22. 8. 2013   #4
-
0
-

kazdopadne 8051 nema PWM (pokud teda nemas nejaky specialni model) takze bud budes emulovat PWM nebo emulovat ten druhej princip... ani neni tezke, 51 ma region pameti co jde dobre adresovat po bitech... 

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
22. 8. 2013   #5
-
0
-

to je pravda nema PWM..

Píšu sem především proto, že si nejsu docela jistej jak to udělat. :)

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #6
-
0
-

staci ti vesmes neco jako (akorat je to v C - ale potreboval bys jen najit instrukce jako srovnani (nebo jeste lepe rozdil a pak zjistit jestli byl vysledek zaporny) a nastaveni bitu v bitove casti pameti.. (kousek pameti vcetne portu a podobne je adresovatelne primo po bitech):

unsigned char i = 0;
while (1) {
  PA.0 = red<i;    // pro spolecnou anodu je aktivni LOW - proto pro i: 0..red => 0 a zbytek 1 jako vypnuto
  PA.1 = green<i;
  PA.2 = blue<i;   // zalezi ktere piny to opravdu ovladaji
  ++i;
}

jinak daleko lepsi by bylo nastavit si preruseni a tohle vykonavat primo v nem (tak moc pomaly to nebude aby se to muselo nutne vyhazovat ven.. - pak budes moci aspon delat i neco jineho

EDIT:  v assembleru by bylo mozna lepsi udelat to srovnani tak aby vysledek byl v carry, a pak shiftem s carry to natahnout do nejake pomocne promenne... tu pak nastelovat na spravny vystup a poslat tam

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #7
-
0
-

Tak jsem to cca přepsal do asm..
ale moc to nefunguje, chci zobrazit zlutou a ukaze se me cervena :D

HAH:        CLR P3.0
            CLR P3.1
            CLR P3.2
            SETB P3.3
            
            SETB P3.4
            SETB P3.5
            SETB P3.6
            MOV P0,#00000000B
            MOV P1,#00000000B
            MOV P2,#00000000B             
            
        
        
ZAC:MOV A,#0
    MOV R0,#255 ;RED
    MOV R1,#249 ;GREN
    MOV R2,#97 ;BLUE        
        
HL: MOV B,R0  ;DO B HODNORU CERVENE
    CJNE A,B,RS ;POROVNEJ POKUD SE LISI SKOC NA RS
    ;/*ROVNA SE PROTO SE UZ NESMI ZOBRAZOVAT
    SETB P3.4
    MOV R0,A
    INC R0
    JMP RSA

RS: CLR P3.4  ;ZAPNI CERVENOU LEDKU

    
RSA:MOV B,R1  ;DO B HODNORU ZELENE
    CJNE A,B,GS ;POROVNEJ POKUD SE LISI SKOC NA GS
    ;/*ROVNA SE PROTO SE UZ NESMI ZOBRAZOVAT
    SETB P3.5
    MOV R1,A
    INC R1
    JMP GSA
    
GS: CLR P3.5  ;ZAPNI ZELENOU LEDKU

GSA:MOV B,R2  ;DO B HODNORU MODRE
    CJNE A,B,BS ;POROVNEJ POKUD SE LISI SKOC NA BS
    ;/*ROVNA SE PROTO SE UZ NESMI ZOBRAZOVAT
    SETB P3.6
    MOV R2,A
    INC R2
    JMP BSA

BS: CLR P3.6  ;ZAPNI MODROU LEDKU

BSA:INC A ;PRICTI K A JEDNICKU
    CJNE A,#255,HL  ;JESTE NENI MAXIMALNI HODNOTA MUZEME OPAKOVAT
    JMP ZAC ;SKOK NA ZACATEK PROGRAMU
 

   
  end  
Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #8
-
0
-

no moc tam toho nevidim ale urcite nemuzes dat  pokud se lisi...

counter muze bezet porad dokola.. neni potreba zadne kontroly

odectes  red - counter (ale nemenit ani jedno z nich) a pak testem jestli byl vysledek zaporny -> nastavit na vystupu nulu (zapnout led) jinak vypnout

a to same v jednom kole pro vsechny barvy... pak inkrementovat counter a opakovat za chvili

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #9
-
0
-

Upravil jsem to ale dělá to pořád to samé většinou se rožně růžová :)

ZAC:MOV A,#0
    MOV R0,#255 ;RED
    MOV R1,#249 ;GREN
    MOV R2,#97 ;BLUE        
        
HL: MOV R3,A  ;DO R3 HODNORU A
    SUBB A,R0
    MOV A,R3
    JNC RS
    ;/*MUZEM ZAPNOUT CERVENOU
    CLR P3.4

    MOV R3,A  ;DO R3 HODNORU A
    SUBB A,R1
    MOV A,R3
    JNC GS
    ;/*MUZEM ZAPNOUT ZELENOU
    CLR P3.5

    MOV R3,A  ;DO R3 HODNORU A
    SUBB A,R2
    MOV A,R3
    JNC BS
    ;/*MUZEM ZAPNOUT MODROU
    CLR P3.6
    
    INC A ;PRICTI K A JEDNICKU
    CJNE A,#255,HL  ;JESTE NENI MAXIMALNI HODNOTA MUZEME OPAKOVAT
    JMP ZAC ;SKOK NA ZACATEK PROGRAMU
 
;/*VYPINANI*/
RS: SETB P3.4
    RET
GS: SETB P3.5
    RET   
BS: SETB P3.6
    RET 
  end  
Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #10
-
0
-

no me pripada ze si neco nahrajes a pak to menis... counter musi byt naprosto nezavislej a muze pocitat porad dokola... pak pouzit JZ po inkrementaci counteru a treba zapnout vsechny barvy ...

;; R0 red, R1 green, R2 blue, R3 counter

LOOP:	MOV A, R0   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	JC RLIGHT
	SETB P3.4
RLIGHT:	MOV A, R1
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	JC GLIGHT
	SETB P3.5   ;; preskocit pokud jeste ma svitit (vypinat se bude pokazde)
GLIGHT:	MOV A, R2
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	JC BLIGHT
	SETB P3.6
BLIGHT:	INC R3      ;; tady se postarat o counter... 
	JNZ LOOP    ;; pokud neni zero flag nastavenej skocit na zacatek
	CLRB P3.4   ;; jinak vynulovat jednotlivy bity (jde vynulovat i naraz)
	CLRB P3.5
	CLRB P3.6
	JMP LOOP    ;; opakovat

neco takovyho sem mel na mysli... jen to neni overeny ze bude fungovat... jen nastrel

Jo a jeste to bezi moc rychle... chtelo by to pred inkrementaci aspon 40 mikrosekund pockat (aby nebyla obnovovaci frekvence moc rychla ze by to skoro nestihalo zobrazovat)  40us je pak na obnovovaci frekvenci kolem 100hz

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #11
-
0
-

#9 misisnik
mimochodem proc tam mas RET? se pak nedivim ze to bezi jen nekde kolem cerveny... kdyz vyskocis z procedury jakmile ma vypnout svit cervene

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #12
-
0
-

j ty rety tam nemely co delat oddelal jsem je ale stejne to nedelalo to co melo.

Pouzil jsem program který jsi napsal + hodil 40us zpozdeni..

;; R0 red, R1 green, R2 blue, R3 counter
    MOV R0,#255 ;RED
    MOV R1,#210 ;GREN
    MOV R2,#0 ;BLUE 
    MOV R3,#0
LOOP:	MOV A, R0   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	JC RLIGHT
	SETB P3.4
  
RLIGHT:	MOV A, R1
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	JC GLIGHT
	SETB P3.5   ;; preskocit pokud jeste ma svitit (vypinat se bude pokazde)
  
GLIGHT:	MOV A, R1
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	JC BLIGHT
	SETB P3.6
  
BLIGHT:	
  CALL ZP ;ZPOZDENI 40 US
  INC R3      ;; tady se postarat o counter... 
	JNZ LOOP    ;; pokud neni zero flag nastavenej skocit na zacatek
	CLR P3.4   ;; jinak vynulovat jednotlivy bity (jde vynulovat i naraz)
	CLR P3.5
	CLR P3.6
	JMP LOOP    ;; opakovat
 
    
;#####Zpozdeni 40.0 us####
ZP:	MOV TMOD,#00000001B
	MOV TH0,#0FFH
	MOV TL0,#0E7H
	CLR TF0
	SETB TR0;zapnem casovac
SEM:	JNB TF0,SEM
	CLR TR0 ;konec muzem vypnout casovac
	RET


bohuzel pořád to nejde..

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #13
-
0
-

nejde jak?

v:  GLIGHT: MOV A, R1   ma byt  R2

Dal uz asi jen krokovat nekakym simulatorem ci podobne.

Pripadne rozjet aspon jednu barvu...a pak pridat ty zbyly az bude fungovat spolehlive

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #14
-
0
-

Odkrokoval jsem si to.

Místo JC má být JNC jinak to je ok..
Některé barvy už se alespoň přibližují ale když dám třeba žlutou:

    MOV R0,#255 ;RED
    MOV R1,#234 ;GREN
    MOV R2,#0 ;BLUE 


tak se ukáže červeno-oranžová :)

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #15
-
0
-

no ze zacatku pro nulu vznikne kratkej impuls kterej se asi taky projevi... v nejhorsim bys i to rozsviceni musel ridit nejakym JZ u odpovidajiciho R* registru aby se vubec nerozsvecovala kdyz je nastaveno na 0

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #16
-
0
-

ci tam mit neco jako  

	MOV A, R0   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	MOV bit_address, C  ;; jen zjistit bitovou adresu pro P3.4 a doufat ze C neni obracene :D
	MOV A, R1   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	MOV bit_address, C  ;; jen zjistit bitovou adresu pro P3.5 a doufat ze C neni obracene :D
	MOV A, R2   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	MOV bit_address, C  ;; jen zjistit bitovou adresu pro P3.6 a doufat ze C neni obracene :D
;; dal jen inc, delay a skok na zacatek

mozna pujde pouzit primo  P3.4 - P3.6

SUBB nastavi C pokud byl counter vetsi nez barva (jen zase bude asi problem s tim prvnim bitem...)

mozna obratit logiku

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #17
-
0
-

   

    MOV R0,#255 ;RED
    MOV R1,#255 ;GREN
    MOV R2,#0 ;BLUE 
    MOV R3,#0
LOOP:	MOV A, R0   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	MOV P3.4, C  ;; jen zjistit bitovou adresu pro P3.4 a doufat ze C neni obracene :D
	MOV A, R1   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	MOV P3.5, C  ;; jen zjistit bitovou adresu pro P3.5 a doufat ze C neni obracene :D
	MOV A, R2   ;; kopie R0
	SUBB A, R3  ;; counter muze byt klidne R3 primo
	MOV P3.6, C  ;; jen zjistit bitovou adresu pro P3.6 a doufat ze C neni obracene :D
  
  CALL ZP ;ZPOZDENI 40 US
  INC R3      ;; tady se postarat o counter... 
	JMP LOOP    ;; pokud neni zero flag nastavenej skocit na zacatek


Tohle je úplně to samé pořád to nedává žlutou jen takou světlou červenou :)

Nahlásit jako SPAM
IP: 109.69.211.–
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #18
-
0
-

jinak když tam napíšu bit adresy

    MOV 0B4H, C
    MOV 0B5H, C
    MOV 0B6H, C

Tak mi to při kompilaci hodí varování "bad SFR adress"
A barvu to ukáže stejnou jako když použiju MOV P3.4...

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
23. 8. 2013   #19
-
0
-

no pokud je to dobre, tak je todle asi jediny, co se z PWM da dostat... pripadne nesmatat primo na port ale vypocitat to a pak zapsat na port najednou (a dalo by se to pak pred tim i invertovat)

pripadne pouzit tu druhou verzi jak sem zminoval... 

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
misisnik
~ Anonymní uživatel
17 příspěvků
23. 8. 2013   #20
-
0
-

ok diky mockrat za pomoc
Až to budu mít vyladěné napíšu :)

Nahlásit jako SPAM
IP: 109.69.211.–
KIIV
~ Moderátor
+43
God of flame
24. 8. 2013   #21
-
0
-

jeste by mohlo jit odecist od  pocitadla  hodnotu barvy, pak  CPL C (negace Carry) a pak to poslat na bit portu tim MOV P3.4, C  atd

tim vlastne dostanes z (barva<pocitadlo)  !(pocitadlo>=barva) a pote kdyz pocitadlo = 0 a barva = 0 =>  0-0 =0 C=0 =>  CPC C => C=1  ->  P3.4 == nesviti a ani nezacne

zatimco ted je tam pro  0-0 = 0   C=0   ->   P3.4 <= C    (ledka se v tomto pripade rozsviti - ikdyz jen na moment)

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Choze
~ Anonymní uživatel
2 příspěvky
30. 8. 2013   #22
-
0
-

Ahoj.

Není to generování PWM zbytečné?

Když u stejného prodejce mají za super cenu WS2811 http://netmart.cz/detail.aspx?id=202

Kdybys použil tyto, tak si ušetříš plno práce. Naprogramuješ si akorát komunikační protokol a máš to hotové.

Nahlásit jako SPAM
IP: 85.135.54.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý