PWM-Kanaler AVR

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

PWM-Kanaler AVR

Inlägg av Gildebrand »

Hejsan!

Jag har en liten fundering. Jag har ett shiftregister på 16-bitar, på var och en utav bitarna så har jag en LED inkopplad. Shiftregistret styrs från en ATMEGA168. Skulle det då gå att PWM:a de olika bitarna hos shiftregistret, så att en LED lyser på 75%, en på 50% och en på fullt, fast alla 16 bitarna på en gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PWM-Kanaler AVR

Inlägg av sodjan »

Du har alltså ett externt shiftregister ?
Tja, det är ju bara att räkna på det. Hinner
du med att PWM'a shiftregistret så är det OK.
Kan gå. Om du vill ha 100 Hz grundkrekvens och
10 nivåer så ska shiftregistret laddas om 1000
gånger per sekund. Är det ett shift/latch register ?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: PWM-Kanaler AVR

Inlägg av vfr »

En viktig faktor är ju hur du uppdaterar skiftregistret. Mjukvara/hårdvara. Ett SPI-interface t.ex kan du ju köra bra mycket fortare än en mjukvarurutin. Och med mindre belastning på processorn. Men allt det innefattas egentligen av Sodjans svar. Räkna på hur fort du kan uppdatera med den metod som du använder, och kolla sen om det räcker till.
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: PWM-Kanaler AVR

Inlägg av Gildebrand »

Shiftregistret klarar det, Och den har ingen latch som tur är. Det är en TLC5921 som det gäller.

Min fundering var huruvida AVRen klarade att PWMa 16 olika bitar samtidigt på en pinne, och klara av att hantera att de olika bitarna ska PWMas olika beroende på hur mycket jag vill hur en LED ska lysa.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: PWM-Kanaler AVR

Inlägg av E85 »

Jag tycker mig se en latch i databladet. Men det är väl inte dåligt?
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: PWM-Kanaler AVR

Inlägg av Gildebrand »

Det har du rätt i, jag som mindes fel.

Blir det inte svårt att PWM:a de olika bitarna hos ett shiftregister om man har en latch? Fast, det borde ju faktiskt gå att koppla bort den ganska enkelt, eller så att den är öppen hela tiden, det borde väl bara koppla den till VCC?

Jag skulle väldigt gärna se ett exempel på hur det kan se ut om man ska PWMa de olika bitarna.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: PWM-Kanaler AVR

Inlägg av E85 »

Om du exempelvis kör 1MHz klockning till kretsen, 10-bit PWM och 16 dioder borde det bli såhär:

1MHz / (16 * 2^10) = 61Hz blinkfrekvens
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: PWM-Kanaler AVR

Inlägg av victor_passe »

Om du exempelvis kör 10KHz klockning till kretsen, 10-bit BAM och 16 dioder borde det bli såhär:

10KHz / (16 * 10) = 62Hz blinkfrekvens



Så faktor 100 gånger bättre med BAM än PWM.
Kanske värt att prova?
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: PWM-Kanaler AVR

Inlägg av E85 »

Det måste jag prova.. Verkar smart.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: PWM-Kanaler AVR

Inlägg av victor_passe »

Fast ska man "scanna" intensiteten så är MIBAM bättre.
Användarvisningsbild
Gildebrand
Inlägg: 1108
Blev medlem: 8 maj 2009, 21:40:49
Ort: Falun

Re: PWM-Kanaler AVR

Inlägg av Gildebrand »

Jag skulle väldigt gärna se ett kodexempel på hur det kan se ut om man ska PWMa de olika bitarna.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: PWM-Kanaler AVR

Inlägg av E85 »

Nåt sånt här skulle kanske kunna fungera om jag inte tänkt helt galet. Har inte testat själv men kanske går att utgå ifrån.

Kod: Markera allt


unsigned char pwm_values[] = {1, 23, 45, 67, 89 ....... }; //Nivåerna på 16 LEDs
unsigned char pwm_counter; //8-bitars PWM-räknare

while (1)
{
	unsigned char i; //Räknare

	for (i = 0; i < 16; i++)
	{
		DATA = (pwm_values[i] < pwm_counter) ? 1 : 0;
		CLK = 1;
		CLK = 0;
	}
	LATCH = 1;
	LATCH = 0;
	pwm_counter++; //Öka PWM-räknaren ett snäpp. Efter 255 börjar den om på 0 igen.
}
EDIT: ändrade och kommenterade koden.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PWM-Kanaler AVR

Inlägg av sodjan »

> Och den har ingen latch som tur är.

Jag har väldigt svårt att se hur du ska få snygga utsignaler om
det *inte* är ett shiftregister med latchar. I så fall så "shiftar"
ju alla utgångar hela tiden medans du "laddar om" så att såga.

Det måste definitvt vara *med* latch om det ska fungera vettigt.

Notera, för fasta LEDs, så kan det fungera utan latch, du kommer inte
att se data när det shiftas in i alla fall, sedan är det ju statiskt. Men
i detta fall så kommer data att shiftas in hela tiden...
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: PWM-Kanaler AVR

Inlägg av Swech »

Det är inga som helst problem att fixa det där
jag kör 3 st 8 bitars skiftregister på min RGB ledmatris.
Varje skiftregister styr varsin färg.
Varje färg har 8x8 lysdioder, Huvudloopen scannar alltså 8 gånger för
att styra ut en grupp på 8 lysdioder.
Varje diod har 16 nivåer. I princip 4 bitars pwm.

Kör på en ATTiny med intern osc, 8Mhz
http://www.swechtrading.se/zencart/images/sw8x8rgb.MPG

Swech

Skall snygga till koden och lägga up iallafall en principstruktur... men nu är det läggdax :D
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PWM-Kanaler AVR

Inlägg av sodjan »

> Det är inga som helst problem att fixa det där

Problemet är att det inte finns tillräckligt med info i
frågan i första inklägget för att svara korrekt. Jag är
också helt säker på att det inte är några problem som
i ditt fall med *4* olika PWM nivåer. Man om man ska ha 100
eller 256 nivåer så blir det ett helt annan läge...
Skriv svar