styra RGB LED
styra RGB LED
Hej! har nu spenderat en dag eller 2 för att försökt hitta något enkelt exempel men hittar inget i alla fall inte till C kod:(
Det jag vill göra är att styra en RGB led via en ATmega8. Den ska bara fadda i alla färger.
Det råkar inte finns någon som har en sådan kod snutt som kan kan få kika lite på?
tack på förhand
Det jag vill göra är att styra en RGB led via en ATmega8. Den ska bara fadda i alla färger.
Det råkar inte finns någon som har en sådan kod snutt som kan kan få kika lite på?
tack på förhand
Re: styra RGB LED
Jag körde två "snurror" inne i varandra.
1.
Först en variabel "p" som i procent säger hur mycket ljus det ska vara.
En snurra som går från 1 till 100 byter från den ena färgen till den andra när den når "p".
[är variabeln 70, så kommer tex grön att vara "på" dom första 70 varven och tex gul dom 30
2.
En större snurra som ställer tillbaka till start färg och ökar "p".
Den byter även färger när "p" når hundra.
På så sätt får du alltid samma strömförbrukning.
Ska du ha många lysdioder använder du en NPN-transistor:
http://www.kpsec.freeuk.com/trancirc.htm
1.
Först en variabel "p" som i procent säger hur mycket ljus det ska vara.
En snurra som går från 1 till 100 byter från den ena färgen till den andra när den når "p".
[är variabeln 70, så kommer tex grön att vara "på" dom första 70 varven och tex gul dom 30
2.
En större snurra som ställer tillbaka till start färg och ökar "p".
Den byter även färger när "p" når hundra.
På så sätt får du alltid samma strömförbrukning.
Ska du ha många lysdioder använder du en NPN-transistor:
http://www.kpsec.freeuk.com/trancirc.htm
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
Re: styra RGB LED
Enklast är väl att använda en PWM-kanal per färg.
Jag skulle börja med att få fart på PWM-n och sedan koppla till din lysdiod. Beroende på vilken det är kan du behöva transistorer för att inte överlasta din mega8
Jag skulle börja med att få fart på PWM-n och sedan koppla till din lysdiod. Beroende på vilken det är kan du behöva transistorer för att inte överlasta din mega8
Re: styra RGB LED
problemet är ju att atmega8 bara har 2 PWM.
så nu testa att göra lite loopar se hur det går det där dom som är mitt största problem. Med hur jag får den att gå av och på lagom mycket
så nu testa att göra lite loopar se hur det går det där dom som är mitt största problem. Med hur jag får den att gå av och på lagom mycket
Re: styra RGB LED
Enligt databladet har den tre, två på timer1 och en på timer2.problemet är ju att atmega8 bara har 2 PWM.
Re: styra RGB LED
Du kan inte utvecka det lite eller ge exempel har nu försökt men blir inget vidare samma ljus sken ännetrunner skrev:Jag körde två "snurror" inne i varandra.
1.
Först en variabel "p" som i procent säger hur mycket ljus det ska vara.
En snurra som går från 1 till 100 byter från den ena färgen till den andra när den når "p".
[är variabeln 70, så kommer tex grön att vara "på" dom första 70 varven och tex gul dom 30
2.
En större snurra som ställer tillbaka till start färg och ökar "p".
Den byter även färger när "p" når hundra.
På så sätt får du alltid samma strömförbrukning.
Ska du ha många lysdioder använder du en NPN-transistor:
http://www.kpsec.freeuk.com/trancirc.htm


kan också tillvägga omd et gör skiland att jag just nu testar på en led bara, inget rgb
Re: styra RGB LED
Börja med den första snurran.
Lysdioden ska vara på 50% och av 50%. Lägg en fördröjning på 1ms innan varje byte.
Nu har du 50% ljusstyrka.
Genom att bygga ut koden i små steg, så kan du styra ljusstyrkan med en variabel, flyta över till en annan lysdiod osv...
Lysdioden ska vara på 50% och av 50%. Lägg en fördröjning på 1ms innan varje byte.
Nu har du 50% ljusstyrka.
Genom att bygga ut koden i små steg, så kan du styra ljusstyrkan med en variabel, flyta över till en annan lysdiod osv...
Re: styra RGB LED
Vad du gör är att du blinkar med den, men snabbare än 100Hz.
Procentuellt sett så varierar du tiden den är av och på, utan att du blinkar långsammare än 100Hz.
Hårdvaru-PWM suger för RGB-lampor, troligen bättre för motorer och så.
Procentuellt sett så varierar du tiden den är av och på, utan att du blinkar långsammare än 100Hz.
Hårdvaru-PWM suger för RGB-lampor, troligen bättre för motorer och så.
Re: styra RGB LED
Hur galet är denna koden?
Kod: Markera allt
while(p<100){
while(fart<f){
fart++;
}
PORTB ^= 0x01;
fart =0;
p++;
}
Re: styra RGB LED
> while(fart<f){
> fart++;
> }
Lite taskig i magen ?
I alla fall, sådana här lösningar blir ofta väldigt specifika till hur var och
en vill ha det, så du lär nog inte få mycket annat än generella beskrivningar
hur det i princip kan gå till, alltså vad du mer eller mindre har fått här. Alternativet
är att någon skriver hela hela koden precis så som du vill ha det, men det är inte
lika lätt...
Den där koden som du postade säger inte speciellt mycket. För det första är det nog
alldeles för lite för att göra någon större nytta, sen är det inte kommenterat så ingen
vet vad du tänkte på när du skrev den.
> fart++;
> }
Lite taskig i magen ?

I alla fall, sådana här lösningar blir ofta väldigt specifika till hur var och
en vill ha det, så du lär nog inte få mycket annat än generella beskrivningar
hur det i princip kan gå till, alltså vad du mer eller mindre har fått här. Alternativet
är att någon skriver hela hela koden precis så som du vill ha det, men det är inte
lika lätt...

Den där koden som du postade säger inte speciellt mycket. För det första är det nog
alldeles för lite för att göra någon större nytta, sen är det inte kommenterat så ingen
vet vad du tänkte på när du skrev den.
Re: styra RGB LED
NU vet jag inte om du har ens läst övriga tråden men får väll ta det igen. försöker just nu bara få en led att fade:a ut/in men problmet är att den aningen blinkar eller lyster skarpt... Och frågan var hur fel den där koden var då det inte funkar med att den dimmar sig...
Re: styra RGB LED
Den kod fungerar inte!
Loopen kommer att ge en <kort> puls ut som beror på värdet, javisst, men med PWM är det viktiga att den puls återkommer regelbundet.
Enklast är att ha en snabb timer-interrupt:
static unsigned char Counter;
if(R_Intensity > Counter) R_Out = true;
else R_Out = false;
if(G_Intensity > Counter) G_Out = true;
else G_Out = false;
if(B_Intensity > Counter) B_Out = true;
else B_Out = false;
if(++Counter > 99) Counter = 0;
I mainloopen kan man sedan styre R_Intensity (och de andra) för att ändra, timer-interrupten tar hand om resten.
Loopen kommer att ge en <kort> puls ut som beror på värdet, javisst, men med PWM är det viktiga att den puls återkommer regelbundet.
Enklast är att ha en snabb timer-interrupt:
static unsigned char Counter;
if(R_Intensity > Counter) R_Out = true;
else R_Out = false;
if(G_Intensity > Counter) G_Out = true;
else G_Out = false;
if(B_Intensity > Counter) B_Out = true;
else B_Out = false;
if(++Counter > 99) Counter = 0;
I mainloopen kan man sedan styre R_Intensity (och de andra) för att ändra, timer-interrupten tar hand om resten.
Senast redigerad av Icecap 24 september 2009, 21:15:35, redigerad totalt 1 gång.
Re: styra RGB LED
> Nu vet jag inte om du har ens läst övriga tråden men får väll ta det igen.
Jag har läst allt och det hjälper nog inte mycket att du "tar det igen".
Och angående koden så har jag redan svarat. Det är ganska osannolikt
att de där rederna skulle få en LED att göra det du vill. Om det hade varit
50-100 rader så vore det mer sannolikt att det i alla fall ligger nära.
Men å andra sidan så har du fått flera principiella beskrivningar över hur
den funktion du vill ha ska fungera. Och det ligger så vitt jag kan se
ganska långt från din kod. Det jag försöker säga är bara att du får
försöka gå "tillbaka till ritbordet" och fundera lite mer i detalj över funktionen.
Som Icecap säger så är det sannolikt enklast att lösa med lite timers.
Jag har läst allt och det hjälper nog inte mycket att du "tar det igen".
Och angående koden så har jag redan svarat. Det är ganska osannolikt
att de där rederna skulle få en LED att göra det du vill. Om det hade varit
50-100 rader så vore det mer sannolikt att det i alla fall ligger nära.
Men å andra sidan så har du fått flera principiella beskrivningar över hur
den funktion du vill ha ska fungera. Och det ligger så vitt jag kan se
ganska långt från din kod. Det jag försöker säga är bara att du får
försöka gå "tillbaka till ritbordet" och fundera lite mer i detalj över funktionen.
Som Icecap säger så är det sannolikt enklast att lösa med lite timers.