Arduinostyrd skylt med RGB lysdioder i 4 grupper

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
WhiWhi
Inlägg: 5
Blev medlem: 29 april 2010, 18:24:13

Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av WhiWhi »

Hej

Skulle vilja ha hjälp med att lösa ett problem.

Är hyfsat ny på det här med Arduino.

Jag ska göra en skylt med fyra bokstäver som jag med hjälp av rgb lysdioder vill kunna styra varje bokstav för sig eller hela skylten. Men har inte kommit på något bra sätt att göra detta på. Har tittat lite på skiftregister men är inte redigt överens hur jag ska göra där heller.

Ni får gärna komma med förslag på smidiga sätt att göra detta på och eventuellt lite programkod med.

Tacksam för lite hjälp.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av Micke_s »

Ta denna t.ex.
http://www.ebay.com/itm/100-x-WS2811-Bu ... 56564d432a

Varje led är addreserbar.

Edit: Är det en led per siffra eller flera?
Är det bara 4st RGB led:ar så kan du koppla dessa via ett motstånd till Digitala pinnar, går åt 12st.
RGB ledarna bör helst vara Common anode, arduinon drar lätter mot jord.
WhiWhi
Inlägg: 5
Blev medlem: 29 april 2010, 18:24:13

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av WhiWhi »

Det är 4 st rgb led per bokstav men dom 4 ska lysa i samma färg så dom kommer styras parallellt via en transistor var min tanke.

Skulle vilja ha pwm styrning på dom så man kan få vilken färg man vill.

Satt och googlade lite idag och hittade eventuellt en lösa men vet inte riktigt om det är lösningen på mitt problem eller hur svårt det blir att programmera och det TLC5940 från Texas Instruments.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av Micke_s »

Kör mjukvarupwm
http://forum.arduino.cc/index.php/topic,19451.0.html

Jag hade inte krånglat till det om inte delmålet är att spara pinnar på arduinon.

Varje RGB behöver 3st pwm:er. totalt 12st pinnar på arduinon.
WhiWhi
Inlägg: 5
Blev medlem: 29 april 2010, 18:24:13

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av WhiWhi »

Har testat lite med softPWM och det kommer funka alla tiders. Så tack så mycket för hjälpen.

Men nu undrar jag. En del av programmet vill jag att skylten ska bli som ett rinnande ljus eller att färgerna ska vandra vidare till nästa bokstav ungefär som videoklippet jag länkar till nedan . Men jag och min hjärna kommer inte överens om hur man ska lösa det. Det måste ju gå lösa med några räknare men jag får inte ihop tankesättet.

http://www.youtube.com/watch?v=NyUmsAfVBjg

Så ni får gärna bistå med lite hjälp.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av Icecap »

Jag har en undring: är bokstäverna fasta? Alltså att de inte flyttar sig men de kan styras till olika färger inkl. svart.
WhiWhi
Inlägg: 5
Blev medlem: 29 april 2010, 18:24:13

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av WhiWhi »

Det är en skylt med ett ord som är 4 bokstäver.

Dom funktionerna jag vill att skylten ska ha är:

1, Hela skylten alltså alla bokstäver lyser samma färg. Där man väljer färg med hjälp av pottar.
2, Hela skylten skiftar färg.
3, Och ett scenario där färgerna vandra från bokstav till bokstav antingen i alla regnbågens färger eller efter förutsatta färger.

Dom två översta scenariona ska inte vara några problem men det är det 3 scenariot där det slår slint för mig får inte till hur man redigt går till väga. Som sagt är ju hyfsat ny på det här med arduino.
WhiWhi
Inlägg: 5
Blev medlem: 29 april 2010, 18:24:13

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av WhiWhi »

Alla guider och liknande program använder dom ju shiftregister eller liknande. Men nu är det så att jag ska ju köra alla dioderna direkt från arduinon med softPWM. Får det inte att gå ihop. Det är ju säkert inte så svårt när man väl förstår tankesättet.

Så ni får gärna hjälpa mig att förklara hur jag flyttar färgerna mellan dom olika dioderna. Antingen svepa mellan alla regnbågens alla färger och/eller mellan olika patterns.

Ska gärna bli något liknande det filmklippet jag länkade till ovan.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Arduinostyrd skylt med RGB lysdioder i 4 grupper

Inlägg av Icecap »

Det beror ju på hur softPWM fungerar. Mitt sätt att lösa detta på hade varit att ha ett R-, G- och B-värde för varje tecken, alltså 12 värden. Sedan ville en snabb timer-interrupt läsa dessa värden och avgöra huruvida de olika utgångar ska vara på eller av.

Sedan är det i grunden bara en fråga om att styra rätt värde i main-loopen till vilken kombination man vill ha.

Där kan ett "klocksignal" från PWM-delen vara användbart som synkronisering så att main-loop kan reagera med rätt hastighet. Jag har gjort liknande i några projekt.

Om man nu antar att antal PWM-steg är 64 kan man enkelt göra en räknare i en timer-ISR:

Kod: Markera allt

unsigned char R[4], G[4], B[4];
unsigned char Timer_Flag;

void Timer_ISR(void)
  {
  // Rensa bort interruptflagga om det behövs
  unsigned char X;
  static unsigned char PWM_Counter;
  if(++PWM_Counter >= 64)
    {
    PWM_Counter = 0; // Får den att räkna 0-63
    Timer_Flag++; // Räkna upp för att visa att det har gått en hel "period"
    }
  Pin_R1 = (R[0] >= PWM_Counter);
  Pin_R2 = (R[1] >= PWM_Counter);
  Pin_R3 = (R[2] >= PWM_Counter);
  Pin_R4 = (R[3] >= PWM_Counter);
  Pin_G1 = (G[0] >= PWM_Counter);
  Pin_G2 = (G[1] >= PWM_Counter);
  Pin_G3 = (G[2] >= PWM_Counter);
  Pin_G4 = (G[3] >= PWM_Counter);
  Pin_B1 = (B[0] >= PWM_Counter);
  Pin_B2 = (B[1] >= PWM_Counter);
  Pin_B3 = (B[2] >= PWM_Counter);
  Pin_B4 = (B[3] >= PWM_Counter);
  }
Koden kan såklart skrivas på ett bättre sätt men för tydlighetens skull skriver jag den såhär.

Timerns interrupthastighet ska såklart vara antal PWM-steg * minsta totala hastighet för att undvika flimmer (60Hz) eller högre.

Main-loop kan sedan kolla:

Kod: Markera allt

if(Timer_Flag > [något lämpligt värde])
  {
  Timer_Flag = 0;
  [Gör det som ska göras, t.ex. rulla på färgerna]
  }
Skriv svar