AVR PWM 8-kanal, 1 PWM kanal?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

AVR PWM 8-kanal, 1 PWM kanal?

Inlägg av toffie »

Hej på er,

Det här är ju något som antingen är så självklart för alla att det behövs inte pratas om eller ens delas med av kod eftersom det är så otroligt lätt så, om man inte förstår det är man totalt dum i huvudet. Lite så känns det faktiskt.

Alternativ två är att de som lyckas komma på lösningen tystas ner för att det finns något superföretag som försöker hålla på hemligheten om hur man kör ut PWM på flera pinnar från typ 1 PWM kanal.


Så.. varsågoda att förklara hur det ligger till!


Nej, men skämt åsido.. Jag har sökt, säkert under två-tre års tid och jag har försökt att läsa datablad, jag har läst app notes om low-jitter PWM osv osv. Jag kan inte förstå hur de filmer där man kan styra allt från 3 till 48 pinnar från vad till synes är endast en PWM kanal. Youtube är ju fyllt med sådana videos, vill ni att jag länkar någon så kan jag givetvis göra det men det är säkert ett par av er här på forumet som ligger bakom de hemliga videosarna och vägrar dela med er av era kunskaper!! :evil:

Måste vara en konspiration!


Vad vill jag göra då?
Jo, jag vill styra för mitt alldeles egna projekt, 8st lysdioder och det i sig är väl ingen svårighet. De ska tändas och släckas efter varann, 1 till 8. Inga problem!

Men, jag vill även ha dimning inblandad. Detta ska då på något sätt fungera som en "svans" till den lydiod som är "aktiv". Alltså, vi börjar med att varje lysdiod i ordning ska tändas och släckas, en och en. Sen lägger vi till att lysdioden (lysdiod 0) får en svans där 1 lysdiod innan lyser med kanske 30-50% ljusstyrka och lysdiod 2 lyser med 10-25% ljusstyrka eller liknande. Varje lysdiod ska ha sin egna pinne på min AVR.

Förstår ni vad jag vill ha för funktion?


Lösningen?
Ja.. hur kan den se ut. En tanke som jag inte provat men gärna får respons på innan jag försöker är att man kör en PWM timer med interrupt, och i denna interrupt dimmar man upp aktuell lysdiod, dimmar ner den föregående lysdioden, räknar upp en int med vilken lysdiod man "ligger på"/aktuell lysdiod och sen avslutar interupten för att sen börja om.

Men det känns som det räcker med en "for loop" för det egentligen?


Jag har verkligen ingen aning om vart jag ska börja, PWM kan jag få att fungera men sen då..? Jag är lost!
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AVR PWM 8-kanal, 1 PWM kanal?

Inlägg av Icecap »

Fear not, help is coming!

För att fada LED behöver man en viss minimum frekvens så att man inte ser att den egentligen blinker. 70Hz eller mer är bra.

Säg att du har 8 st utgångar du vill styra LED på. Vi utgår ifrån att du har lämplig drivning osv. och fokuserar på mjukvaran.

Nu ska du besluta hur många intensitetsnivåer du vill ha - i detta exempel tar jag 16 st.

Då måste du starta en timer-interrupt med 70Hz * 16 = 1120Hz.
Du måste även allokera 8 st variabler i minnet, det är där du skriver in intensiteten. Vi kallar dom Intensity[8];

Sedan i Timer-ISR har du en kod:

Kod: Markera allt

static unsigned char Count, Pattern;
unsigned char Counter;
PORTx = Pattern;
if(++Count >= 16) Count = 0;
for(Counter = 0; Counter < 8; Counter++)
  {
  if(Intensity[Counter] > Count) Pattern |= 0x01;
  Pattern <<= 1;
  }
Då så, då kommer varje utgång att kunde slås på som mest 16 tidsdelar av 16. EDIT: ändrade lite här.

I main-loopen ser du sedan till att ställa rätt värde för de olika utgångar, du kan "rulla" med dom osv.
Senast redigerad av Icecap 19 september 2014, 16:59:42, redigerad totalt 1 gång.
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Re: AVR PWM 8-kanal, 1 PWM kanal?

Inlägg av toffie »

Tack Icecap! Jag känner mig lite säkrare på det jag ska göra helt klart! Att frekvensen måste vara tillräckligt hög för att slippa flimmer det är jag med på, det är ju precis som med TV och jag har ju upplevt det med lysdioder i fråga också förstås. Så det är jag med på.

Hårdvaran är jag helt hemma med, så det är bara mjukvara, det stämmer bra :)

Hah, alltså det du skriver förstår jag, helt underbart känns det :D Sen om jag kan få det att fungera är ju en annan femma ;) hehe, men det här känns som en väldigt bra grund att bygga på!


Jag ska skriva ihop ett program imorgon enligt din information så ska vi se om jag lyckas få till det :) Oavsett om det går bra eller dåligt så lägger jag upp kod i tråden både för referens i framtiden men även för andra att kanske lära sig något, för de som sitter i min sits :P

Nu är det dags att göra kvällens uppgifter så man orkar upp imorrn också ;)

Tack för hjälpen så här långt! :)
Skriv svar