mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik xmega und HW-PWM


Autor: Andreas B. (Firma: none) (suicide0)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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=296...)
... Entwickelst du die Software mit WinAVR - bzw kann man den Compiler 
verwenden?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Türlich kann der das!
Port C und Port D haben jeweils 6 PWM Ausgänge.

Autor: Andreas B. (Firma: none) (suicide0)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Marco L. (lehmi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Andreas B. (Firma: none) (suicide0)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marco L. (lehmi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Andreas B. (Firma: none) (suicide0)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder am besten einen Wiki Arktikel schreiben ;-)

Autor: Andreas B. (Firma: none) (suicide0)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stromflo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.