Sida 4 av 5

Re: PWM-Kanaler AVR

Postat: 9 augusti 2009, 23:20:10
av bearing
Ni jämför *BAM-lösningar där alla lysdioder ändras varje period, mot en "vanlig PWM"-lösning där lysdioderna ändras var 16:e period. Om PWM-lösningen istället görs så att alla lysdioder ändras varje period blir flimmret ungefär lika vid samma frekvens. Skillnaden är att *BAM flimmrar lite mindre vid högre intensiteter. Vid låga intensiteter flimmrar det lika mycket som vanlig PWM.

Re: PWM-Kanaler AVR

Postat: 9 augusti 2009, 23:27:44
av sodjan
> Jag är inte säker på att det behövs så mycket som 14 bitar, men jag vill inte att man ska se stegen när man gör långsamma förändringar vid låga värden.

Hm... Hur som helst...
Du har nog underlag nu för att räkna på det och se vad som fungerar eller inte fungerar.
Har du kollat på de LED-drivers som t.ex Maxim har ? Där man alltså bara skickar över en
ljusstyrka för varje LEd och så sköter kretsen resten ?

> ...men vad skulle problemet med att köra BAM eller MIBAM vara?

Inte en susning. Jag vet inte vad det är (och är inte så där väldigt intresserad :-) ).

Re: PWM-Kanaler AVR

Postat: 9 augusti 2009, 23:45:53
av victor_passe
Jag skulle satsa på MIBAM för det kräver mycket mindre cpu-tid, är lika lätt att koda och flimrar i snitt mindre än PWM.
När man ska reglera ljus ser jag ingen fördel med PWM. Ska man reglera andra saker som tex motorer är PWM bättre.


Om du sätter dina led i en 4*8 matris och parallell kopplar alla anoder i X-led och alla katoder i Yled(Jag antar att dina led är GemensamKatod) så har du 4*3 pinnar till anoder och 8st katoder som du måste styra.
Jag hade valt att koppla alla katoder via tex en uln2803 som dy styr med din AVR.


Du aktiverar en kolumn av katoder och sedan ger du en cykel med MIBAM på alla anoder.
Du aktiverar sedan nästa kolumn av katoder och ger en cykel med MIBAM på alla anoder osv.

Om du inte förstår kopplingen så läs på om multiplexing och fattar du fortfarande inte så kan jag måla ett simpelt schema.

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 00:16:00
av Gildebrand
Finns det några nackdelar med multiplexing?

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 00:21:43
av victor_passe
Du kan inte få maximal intensitet på lysdioderna om du inte kör ganska hög ström genom dem.
Du kommer bara kunna köra din led 1/8 av tiden om du kopplar som jag sa, jag antar att AVR kan sourca ca 20mA vilket är ungefär vad en led ska ha normalt sätt så du kommer inte få maximal intensitet på leden.

Om du kopplar 4+8*3 istället så kan varje led vara på 1/4 av tiden.

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 00:57:48
av Gildebrand
Ja det verkar ju rimligt.

Jag har inte i dagsläget någon färdig matris utan har bara labbat lite med en atmega128, TLC5921, och 16 ledar. Skulle gärna vilja få detta att funka med MIBAM innan jag ger mig på att göra "stora" matrisen.

victor_passe, det verkar som att du hade väldigt bra koll på MIBAM och har använt dig utav det, du råkar inte ha någon kod där du använder dig utav det som jag skulle kunna kolla på? Google gav inte så mycket :(

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 01:07:31
av bearing
När jag kollade runt förut hittade jag den här. Förklaringar och färdig AVR-kod för BAM (Bit Angle Modulation).
http://www.batsocks.co.uk/readme/art_bcm_3.htm

MIBAM verkar ju vara samma sak fast sekvensen körs baklänges varannan gång. Varför det skulle ha fördelar vid LED-drivning förstår jag inte?

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 10:12:55
av victor_passe
Om du driver en led med 8-bitars BAM och just nu har du 127 i intensitet, du går sedan upp 1 nivå till 128.
Det gör att du får 255 under 1 cykel.
Det får LED:en att blinka till ganska mycket vid den omvandlingen och omvandlingar rent allmänt blir väldigt dåliga.

Har man MIBAM istället så slipper man det.

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 11:47:07
av Gildebrand
MIBAM är väl egentligen BAM fast andra halvan är cykeln är en spegling utav första halvan?

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 12:01:29
av victor_passe
Ja, helt rätt.

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 15:55:24
av Gildebrand
Då borde det alltså vara ganska enkelt att göra om BAMkod så att det blir MIBAM istället. Om någon sitter på "färdig" kod för detta så får denne gärna dela med sig utav den :)

Själva koden som pratar med skiftregistret borde väl bli densamma med MIBAM?

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 18:27:02
av bearing
I koden från sidan länkad ovan behöver nog endast interruptrutinen ändras så att sekvensen går baklänges varannat varv, dvs att

Kod: Markera allt

g_bitpos ++ ;
byts till

Kod: Markera allt

g_bitpos -- ;
samt motsvarande ändringar på övriga variabler och startvärden.

Kod: Markera allt

// Timer interrupt handler - called once per bit position.
ISR( TIMER2_COMP_vect )
{
	g_bitpos ++ ;
	g_bitpos &= 7;
	PORTD = g_timeslice[ g_bitpos ] ;
	// now set the delay...
	TCNT2 = 0;
	OCR2 <<= 1 ;
	if (g_bitpos == 0) OCR2 = 1 ; // reset the compare match value.
	if (g_bitpos == 7) g_tick = 1 ; // give the main loop a kick.
}


Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 19:28:03
av Gildebrand
Nu skulle man haft en sån där logikanalysator

Det är ju så otroligt smart BAM, och ändå så enkelt. Binärt och fint :)
Att det skulle dröja så innan det kom, för visst är det en helt nytt?

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 20:24:06
av bearing
I MPLAB finns logikanalysator i simulatorn. Finns motsvarande funktion i någon simulator/debugger för AVR?

Re: PWM-Kanaler AVR

Postat: 10 augusti 2009, 21:36:38
av Gildebrand
Ja det vore ju nåt, en AVR simulator