XMega128A4U ADCB?

  • 1
  • 2
  • 3
  • Page 1 of 3
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

XMega128A4U ADCB?

 · 
Posted: 15.02.2020 - 10:09  ·  #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
Attachments
XMega128A4U ADCB?
Filename: XMega128A4U.png
Filesize: 29.02 KB
Title:
Download counter: 211
berndk
Benutzer
Avatar
Gender: n/a
Location: Leipzig
Posts: 23
Registered: 02 / 2006
Subject:

Re: XMega128A4U

 · 
Posted: 15.02.2020 - 10:30  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: XMega128A4U

 · 
Posted: 15.02.2020 - 10:40  ·  #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
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 15.02.2020 - 10:56  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 16.02.2020 - 10:49  ·  #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
Attachments
XMega128A4U ADCB?
Filename: XMegaA4U-ADC.jpg
Filesize: 181.77 KB
Title:
Download counter: 174
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 16.02.2020 - 20:04  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 17.02.2020 - 09:59  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Lieferung ist da :-)

 · 
Posted: 20.02.2020 - 14:27  ·  #8
Lieferung ist da :-)
  • 1
  • 2
  • 3
  • Page 1 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 17 · Cache Hits: 15   140   155 · Page-Gen-Time: 0.042863s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI