XMega128A4U ADCB?

  • 1
  • 2
  • 3
  • Seite 1 von 3
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

XMega128A4U ADCB?

 · 
Gepostet: 15.02.2020 - 10:09 Uhr  ·  #1
Hallo,

leider wieder ich: Wie kommt es zu dieser Fehlermeldung? Der XMega128A4U hat definitiv einen ADCB. Zwar nur mit 4 Kanälen, aber es gibt ihn.

Gruss
Harry
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
berndk
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Beiträge: 23
Dabei seit: 02 / 2006
Betreff:

Re: XMega128A4U

 · 
Gepostet: 15.02.2020 - 10:30 Uhr  ·  #2
Ich sehe in

Atmel-8387-8-and16-bit-AVR-Microcontroller-XMEGA-A4U_Datasheet.pdf

One twelve-channel, 12-bit, 2msps Analog to Digital Converter

Bernd
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: XMega128A4U

 · 
Gepostet: 15.02.2020 - 10:40 Uhr  ·  #3
Hallo Bernd,

ja ich auch und Kanal 8-11 (der 9. bis 12.) liegt auf PortB. Ich hab auch schon versucht mit ADCA diese Kanäle im Define anzugeben, aber das geht auch nicht.

Das schlimme daran ist, daß mein Layout und die Platine schon fertig sind.

Harry
golf
Benutzer
Avatar
Geschlecht:
Herkunft: Donauwörth
Alter: 72
Beiträge: 266
Dabei seit: 11 / 2009
Betreff:

Re: XMega128A4U ADCB?

 · 
Gepostet: 15.02.2020 - 10:56 Uhr  ·  #4
Hallo Harry,
möglicherweise ist das mit den 12 ADC-kanälen nicht implementiert. Ich würde ersatzweise erst mal den ADC selbst initialisieren und die gewünschten Kanäle selbst abholen.

golf
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: XMega128A4U ADCB?

 · 
Gepostet: 16.02.2020 - 10:49 Uhr  ·  #5
Hallo Golf,

da muß ich mich mal einlesen, wie das funktioniert.

Ein bisschen hab ich schon gelesen und, wenn ich das richtig deute, hat der A4U tatsächlich doch 2 ADCs und 2x8 Kanäle. Beim 2. sind 4 Kanäle intern verwendet für
- interner Temperatursensor
- DAC-Ausgang (zum Messen)
- AVcc div 10
- 1.1V bandgap voltage

Laut Datenblatt kann man auch 2 Messungen (je einer Kanal A und B) gleichzeitig durchführen.

Gruss
Harry
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: XMega128A4U ADCB?

 · 
Gepostet: 16.02.2020 - 20:04 Uhr  ·  #6
Hallo Harry,

ich hatte beim XMEGA 384 auch mit dem ADC und dem AVRco Treiber Probleme.

Wenn Du willst probier mal anhand meines Codes den ADC ohne Treiber zu nutzen.

vars
Code
// ADC Werte
  wADCBuffer       : word;
  adPort           : byte;
  xForADC          : byte;
  wADC0R           : integer;
  wADC1R           : integer;
  wADC2R           : integer;
  wADC3R           : integer;
  wADC0            : integer;
  wADC1            : integer;
  wADC2            : integer;
  wADC3            : integer;
  ADC0Filter        : AVfilter[0..15] of integer;
  ADC1Filter        : AVfilter[0..15] of integer;
  ADC2Filter        : AVfilter[0..15] of integer;
  ADC3Filter        : AVfilter[0..15] of integer;
  bCalLow           : byte;
  bCalHigh          : byte;


Init ADCs
Code
///////////////
//  INIT ADC
///////////////
  ADCACTRLB     := $00;   // Auflösung auf 12bit und rechtsbündig
  ADCAREFCTRL   := $10;   // INTVCC / 1.6
//  ADCAREFCTRL   := %00000100;   // INTVCC/2

  ADCAPRESCALER := %00000111;   // ADCAPRESCALER auf 512
  ADCACTRLA.0   := true;  // Enable ADCA
  ADCAEVCTRL    := %00000000;   // no events input

// INIT CH0
 // PIN0CTRLA:= %01011000;  // pullup und INVERT
  DDRA.0:= 0;  // 0=EINGANG  1=Ausgang
  DDRA.1:= 0;  // 0=EINGANG  1=Ausgang
  DDRA.2:= 0;  // 0=EINGANG  1=Ausgang
  DDRA.3:= 0;  // 0=EINGANG  1=Ausgang

// ADC Kalibrierung
// bCalLow:= ReadProductionRow(word(ADCACAL0));
//  bCalHigh:= ReadProductionRow(word(ADCACAL1));
//   DebugOut('low:  '+ByteToHex(bCalLow));
//    DebugOut('High: '+ByteToHex(bCalHigh));


// InitADCCH0
  ADCACH0CTRL    := $01; // singleended
  ADCACH0MUXCTRL := $0; // MUX CTRL MAXPOS ADC0
  ADCACH0CTRL    := ADCACH0CTRL OR $01; // singleended
  ADCACH0INTCTRL := %00000000;
  ADCACH0CTRL.7  := true;    // Starte neue Messung


Read einzeln ADC
Code
// READADC
if adPort >=4 then adPort:=0;endif; // ADC Zähler auf 0 stellen

//Messung abgeschlossen?
if ADCACH0INTFLAG.0 then
    ADCACH0INTFLAG.0:=false;  // Flag reset

    // PORTPIN ADC0
     if    adPort = 0  then
       LO(wADCBuffer):= ADCACH0RESL;    // Ziehe Werte
        HI(wADCBuffer):= ADCACH0RESH;
         AddAVfilter(ADC0Filter,integer(wADCBuffer) );
        inc(xForADC);
         if xForADC >=20 then
            ADCACTRLA.1   := true;  // flush
             inc(adPort);
              ADCACH0MUXCTRL := %00001000; // MUX CTRL MAXPOS ADC1 nächster Port
               xForADC:=0;
               wADC0:= GetAVfilter(ADC0Filter);
         endif;

    // PORTPIN ADC1
     elsif adPort = 1  then
       LO(wADCBuffer):= ADCACH0RESL;    // Ziehe Werte
        HI(wADCBuffer):= ADCACH0RESH;
         AddAVfilter(ADC1Filter,integer(wADCBuffer) );
        inc(xForADC);
         if xForADC >=20 then
            ADCACTRLA.1   := true;  // flush
             inc(adPort);
              ADCACH0MUXCTRL := %00010000; // MUX CTRL MAXPOS ADC2 nächster Port
               xForADC:=0;
                wADC1:= GetAVfilter(ADC1Filter);
         endif;

    // PORTPIN ADC2
     elsif adPort = 2  then
       LO(wADCBuffer):= ADCACH0RESL;    // Ziehe Werte
        HI(wADCBuffer):= ADCACH0RESH;
         AddAVfilter(ADC2Filter,integer(wADCBuffer) );
        inc(xForADC);
         if xForADC >=20 then
            ADCACTRLA.1   := true;  // flush
             inc(adPort);
              ADCACH0MUXCTRL := %00011000; // MUX CTRL MAXPOS ADC3 nächster Port
               xForADC:=0;
                wADC2:= GetAVfilter(ADC2Filter);
         endif;

    // PORTPIN ADC3
     elsif adPort >= 3  then
       LO(wADCBuffer):= ADCACH0RESL;    // Ziehe Werte
        HI(wADCBuffer):= ADCACH0RESH;
         AddAVfilter(ADC3Filter,integer(wADCBuffer) );
        inc(xForADC);
         if xForADC >=20 then
            ADCACTRLA.1   := true;  // flush
             inc(adPort);
              ADCACH0MUXCTRL := %00000000; // MUX CTRL MAXPOS ADC0 nächster Port
               xForADC:=0;
                wADC3:= GetAVfilter(ADC3Filter);
         endif;

     endif;
          ADCACH0CTRL.7  := true;    // Starte neue Messung

endif;  // Endif Flag ADC Messung fertig



Du musst es halt für Deine Anwendung / CPU anpassen.

Thorsten
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: XMega128A4U ADCB?

 · 
Gepostet: 17.02.2020 - 09:59 Uhr  ·  #7
Hallo Thorsten,

herzlichen Dank, werde ich machen ..... wenn ich die µCs hab ;).
Momentan schreib ich Programme ohne vorhandene Hardware. Ist auch mal ganz spaßig.

Gruss
Harry
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Lieferung ist da :-)

 · 
Gepostet: 20.02.2020 - 14:27 Uhr  ·  #8
Lieferung ist da :-)
  • 1
  • 2
  • 3
  • Seite 1 von 3
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.04118s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI