Hallo, ich "spiele" gerade mit nem XMega32a4 herum. Das Teil schreit auf Grund seiner features geradezu danach als Ambilight zu arbeiten. PWM habe ich auf 6 Kanälen mit 16 Bit am laufen (funzt ganz gut) ist über ISRs realisiert. Jetzt stellt sich mir eine Frage: Kann der XMega32A4 das auch komplett hardwaremäßig abbilden? Was ich meine ist, kann der Timer selbstständig Pins an und ausschalten? Wenn ja, wie viele Kanäle mit 16Bit und evtl hat jemand einen Codeschnipsel. Danke Gruß Andreas
Wenn ich mal Fragen darf... ... Womit Programmierst du den? Mit einem AVR Programming Tool AT AVR ISP2 mit USB (so wie dieses: http://www.reichelt.de/?;ACTION=3;LA=2;GROUPID=2969;ARTICLE=45040;SID=28FJVob6wQARwAAEnfKXs40dd83f4e320264b7b04770a73a890cd) ... Entwickelst du die Software mit WinAVR - bzw kann man den Compiler verwenden?
@sabler Jo, genau den nehme ich dafür (AVR ISP Mk2). Der kann, wenn Du das aktuelle AVR-Studio benutzt, nach Firmware update PDI! Als Software nehme ich AVR-Studio+WinAVR. Klappt alles ganz prima! Habe mir in Eagle ein (minimalistisches) Breakoutboard gemacht damit ich auf dem Breadboard experimentieren kann (falls jemand Interesse hat, würde ich das Layout posten). Klappt alles super! @Simon, nach dem ich das Datenblatt nun fast auswendig kann ;-) ... habe ich das auch herausgefunden (trotzdem Danke). Für alle die in die Materie Xmega einsteigen hänge einfach mal 2 codefragmente an für HW-PWM und 3 channel ADC. TIMER für HW PWM configurieren: // Setup Timer D0 to HW-PWM PORTD.DIR = 0xFF; PORTD.OUT = 0x00; TCD0.CTRLA = 0x03; // divide clock by 4 TCD0.PER = 0xFFFF; // set resolution to 16Bit TCD0.CCA = 0x4FA0; // Dutycycle A TCD0.CCB = 7000; // B TCD0.CCC = 8000; // C TCD0.CCD = 40000; // D TCD0.CTRLB = 0xF3; // enable frequency generation for all 4 Channels ADC mit ADC0 ADC1 und ADC2: // Setup ADC ADCA.CTRLA = 0x01; // enable ADCA.CTRLB = 0x0C; // unsigned mode 8Bit and freerun ADCA.REFCTRL = 0x10; // internal reference to VCC/1.6 ADCA.EVCTRL = 0xC0; // sweepmode for channel 0,1 and 2 ADCA.PRESCALER = 0x02; // prescaler to 16 = 2MHz@32Mhz Systemclock // Channel 0 ADCA.CH0.CTRL = 0x01; // input mode single-ended-positive ADCA.CH0.MUXCTRL = 0x04;// muxctrl to ADC0Pin // Channel 1 ADCA.CH1.CTRL = 0x01; //input mode single-ended-positive ADCA.CH1.MUXCTRL = 0x08;// muxctrl to ADC1Pin // Channel 2 ADCA.CH2.CTRL = 0x01; //input mode single-ended-positive ADCA.CH2.MUXCTRL = 0x10;//muxctrl to ADC2Pin // Enable IRQs@all Levels (High, Middle und Low) PMIC.CTRL=0x07; asm("sei"); jetzt kann man den ADC pollen: while ((ADCA.INTFLAGS & 0x07) != 0x07) { asm("nop"); } // wait for ADCA to be ready b3=ADCA.CH0RESL; // read 8Bit value ADCA.INTFLAGS |= 0x07; // restart conversion
Hab auch mal gerade nach dem PWMs geschaut, der hat ja noch den Port E mit 4 PWM Kanäle. Das wären dann 3x4+2x2 und damit sollte man doch schon ein nettes Ambilight a 4 x RGBW / RGBY zusammenbauen können. Halt eine Farbe für jede Ecke :). Da könnt ich ja fast schwach werden und meine 1xRGBY Platine überarbeiten (wenn wieder Zeit ist).
Ich sag ja, der schreit förmlich danach ;-) Habe noch keinen controller gesehen, der besser passen würde. Bei dem Preis des 32A4 kommt man auf Gesamtkosten der Schaltung von etwa 10-15 EU. Da die ADCs ja jetzt auch ralativ schnell sind, müßte da was echt brauchbares bei rauskommen. Ich habe mal ein Ambilight mit nem Mega88 gebaut und selbst das Ding hat ganz gut funktioniert (es waren aber definitv zu wenig Messungen möglich). Gruß Andreas
Andreas B. schrieb: > Ich habe mal ein Ambilight mit nem Mega88 gebaut und selbst das > Ding hat ganz gut funktioniert (es waren aber definitv zu wenig > Messungen möglich). Hast du das mal irgendwo dokumentiert? Schaltplan o.ä.? Ich hab zwar keinen Fernseher, aber eine Verwendung finde ich bestimmt ;)
Leider nein, hatte das Ding auf Lochraster aufgebaut. Dein Eingangsteil hatte ich abgekupftert vom Aurrolight oder so hieß das Ding glaube ich. Ich bin aber gerade dabei die Platine für die Version mit dem XMega zu layouten. Wenn du noch etwas wartest kann ich Dir die schicken. Gruß Andreas
Werde ich gern machen, wenn es jemanden interessiert. bin aber kein Profi sondern mache das nur hobbymäßig. will damit sagen, dass höchstwahrscheinlich Fehler in Soft und HW sein weden. Aber funktionieren wird es trotzdem ;-) Gruß Andreas
Hi, das ist so nicht ganz richtig: ADCA.EVCTRL = 0x80; // sweepmode for channel 0,1 and 2 ADCA.EVCTRL = 0xC0; // sweepmode for channel 0,1,2 and 3 Gruß Flo
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.