Gast
#112007
Hi .. Ich habe eine Schaltung hier, die viiiiele (36) PWM Signale braucht. Sinn des ganzen ist das Ansteuern und Dimmen von LEDs. Derzeit lasse ich einfach eine Schleife von 0 bis $Grenzwert laufen, und überprüfe jedesmal, ob sich einer der 36 Werte auf der Schwelle befindet, und wenn ja, geht der entsprechende Port auf High. Danach geht das ganze rückwärts auf Null und die Ports werden auf low gesetzt. Wenn nichts passiert, wird ein nop() ausgeführt um die Durchlaufzeiten konstant zu halten. Also so: for (;;) { for (pwmcounter=0; pwmcounter<32; pwmcounter++) { if (pixel[0].r == pwmcounter) { P6OUT &=~BIT7; } else { nop(); } if (pixel[0].g == pwmcounter) { P6OUT &=~BIT6; } else { nop(); } if (pixel[0].b == pwmcounter) { P6OUT &=~BIT5; } else { nop(); } if (pixel[0].w == pwmcounter) { P6OUT &=~BIT4; } else { nop(); } if (pixel[1].r == pwmcounter) { P6OUT &=~BIT3; } else { nop(); } if (pixel[1].g == pwmcounter) { P6OUT &=~BIT2; } else { nop(); } ....... und so weiter, und entsprechend wieder rückwärts. Jedoch komme ich dabei mit meinem MSP430-149 und den 8MHz recht schnell an die Grenze, ab der man es deutlich flimmern sieht, wenn ich mit der Detailierungsstufe (im Moment 32, also 32 Helligkeitsstufen) höher will. Ich würde aber noch gerne eine Linearisierung der Helligkeit mit einbauen, und dazu reichen 32 Helligkeitsstufen einfach nicht aus. Hat jemand eine Idee, wie ich die Überprüfung schneller machen könnte? Vielleicht gibt es ja eine einfache binäre Linearkombination, die man einfach drüberlegen könnte, die das schneller erledigt. Ich meine, wozu hab ich denn eine 16-Bit CPU ;) Thx, der Flo