ADC Treiber mit ATXMega 384C3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 1 of 6
Torsten
Benutzer
Avatar
Gender:
Location: Bad Doberan
Age: 59
Posts: 62
Registered: 11 / 2005
Subject:

ADC Treiber mit ATXMega 384C3

 · 
Posted: 26.09.2019 - 13:25  ·  #1
Hallo,
ich arbeite gerade mit einem ATXMega 384C3 und habe ein Problem mit dem ADC Treiber.
Vom Port A benutze ich drei Eingänge 0,1,2 für die Messung einer Spannung. Wenn ich die Konfiguration
für den Port auf diese drei Eingänge setzte, dann wird nur mit dem Befehl GetADCA(0) ein brauchbarer
Wert geliefert. Die Abfrage der anderen Eingänge zeigt im Ergebnis eine Null. Durch Änderung der Konfiguration auf die Eingänge von 0..7 werden auf allen Eingängen sinnvolle Werte angezeigt.
Ich denke das Beispiel spiegelt den Sachverhalt wider. Wird der Treiber in dem Beispiel richtig verwendet oder habe ich etwas übersehen.
Vielleicht hat ja jemand Erfahrungen auf dem Gebiet.

Vielen Dank!
Torsten
Attachments
program TEST2ADC384;

{$NOSHADOW}
{ $WG} {global Warnings off}

Device = xmega384C3, VCC=3.3;
{ $BOOTRST $30000} {Reset Jump to $30000}

Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits1 = [];
FuseBits2 = [];

Import SysTick,SerPortD0,ADC_A;

From System Import ;


Define
OSCtype = extXTAL = 8000000, { clock 48MHz }
PLLmul = 4,
prescB = 1,
prescB = 1, overdrive;

SysTick = 10; {msec}
StackSize = $0064, iData;
FrameSize = $0064, iData;


// serial Port TX
SerPortD0 = 115200, Stop1;
RXBufferD0 = 10, iData;
TXBufferD0 = 255, iData;



// ADC CH1 - CH3
// CH1 Port A 0 -> Bias ChA
// CH2 Port A 1 -> Bias ChB
// CH3 Port A 2 -> NTC
ADCrefA = REF100; // Uref VCC / 2
ADCprescA = 128,12; // prescaler
ADCchansA = [0..4]; // ADC PortA 0,1,2 ohne Fehler ok von [0..x] x= 4,5,6,7
// ADCchansA = [0..2]; // ADC PortA 0,1,2 geht nicht



Implementation

{$IDATA}

var
temp : word;
{--------------------------------------------------------------}
{ Type Declarations }



{--------------------------------------------------------------}
{ Const Declarations }

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}


{--------------------------------------------------------------}
{ functions }

procedure init;
begin
DDRA := %00000000;
end;

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
init;
EnableInts($87);
loop
temp := GetADCA(0);
writeln(SeroutD0,'ADC 0 '+ inttostr(temp));
temp := GetADCA(1);
writeln(SeroutD0,'ADC 1 '+ inttostr(temp));
temp := GetADCA(2);
writeln(SeroutD0,'ADC 2 '+ inttostr(temp));
mdelay(500);
endloop;
end TEST2ADC384.

Filename: main2.pas
Filesize: 2 KB
Title: Beispiel
Download counter: 123
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 26.09.2019 - 18:15  ·  #2
Hallo Torsten,

das kann ich bestätigen. Ich habe es gerade mal getestet, scheint ein BUG unter dem 384C3 zu sein.
Bei mir kann ich von meinen ADCA 0 bis 3 nur den 0er mit Werten lesen.

Thorsten
Torsten
Benutzer
Avatar
Gender:
Location: Bad Doberan
Age: 59
Posts: 62
Registered: 11 / 2005
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 26.09.2019 - 21:14  ·  #3
Hallo Thorsten,
vielen Dank für den Test, ich denke dann wird es bestimmt auch eine Lösung geben, mit dem nächsten Update
funktioniert es bestimmt.

Torsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 02.10.2019 - 11:36  ·  #4
Hallo rolf,

kann es sein das hier ein Fehler in der xmega384C3.dsc vorliegt?
Kann ich diese selbst kontrollieren? Irgendwie finde ich keine DOKU von ATMEL wo ich die Register abgleichen kann (nur von den Typen A, B und D nichts über die C-Typen).

Code
; ADCA Analog to Digital Converter on port A
ADCACTRLA=$0200
ADCACTRLB=$0201
ADCAREFCTRL=$0202
ADCAEVCTRL=$0203
ADCAPRESCALER=$0204
ADCAINTFLAGS=$0206
ADCATEMP=$0207
ADCACALL=$020C
ADCACALH=$020D
ADCACH0RESL=$0210
ADCACH0RESH=$0211
ADCACH1RESL=$0212
ADCACH1RESH=$0213
ADCACH2RESL=$0214
ADCACH2RESH=$0215
ADCACH3RESL=$0216
ADCACH3RESH=$0217
ADCACMPL=$0218
ADCACMPH=$0219

ADCACH0CTRL=$0220
ADCACH0MUXCTRL=$0221
ADCACH0INTCTRL=$0222
ADCACH0INTFLAG=$0223
ADCARESLCH0=$0224
ADCARESHCH0=$0225
ADCAMUXCH0=$0226

ADCACH1CTRL=$0228
ADCACH1MUXCTRL=$0229
ADCACH1INTCTRL=$022A
ADCACH1INTFLAG=$022B
ADCARESLCH1=$022C
ADCARESHCH1=$022D

ADCACH2CTRL=$0230
ADCACH2MUXCTRL=$0231
ADCACH2INTCTRL=$0232
ADCACH2INTFLAG=$0233
ADCARESLCH2=$0234
ADCARESHCH2=$0235

ADCACH3CTRL=$0238
ADCACH3MUXCTRL=$0239
ADCACH3INTCTRL=$023A
ADCACH3INTFLAG=$023B
ADCARESLCH3=$023C
ADCARESHCH3=$023D

; ACA Analog Comparator pair on port A
ACAAC0CTRL=$0380
ACAAC1CTRL=$0381
ACAAC0MUXCTR=$0382
ACAAC1MUXCTR=$0383
ACACTRLA=$0384
ACACTRLB=$0385
ACAWINCTRL=$0386
ACASTATUS=$0387



Thorsten
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 02.10.2019 - 15:21  ·  #5
Torsten
Ja, es gibt für die xmegas nur ein gemeinsames Datenblatt weil offiziell die Peripherie immer identisch ist.
Es gibt eigentlich keinen Grund für das problem.
Ein DSC File kann immer geändert werden.
rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 02.10.2019 - 17:50  ·  #6
Hallo rolf,

eigentlich scheint alles zu passen. Der Unterschied zwischen dem 256A3BU und dem 384C3 ist die Anzahl der ADCs. Der 256 hat 2 und der 384 nur einen und dieser ist über Port A und B verteilt.

Soll ich Dir noch mal eine Steuerung mit einem 384C3 zum testen zusenden?

Thorsten
Attachments
Adressen
Filename: 02-10-_2019_17-29-06.jpg
Filesize: 691.27 KB
Title: Adressen
Information: Adressen
Download counter: 156
Portfunktionen C 384er
Filename: 02-10-_2019_17-42-59.jpg
Filesize: 314.32 KB
Title: Portfunktionen C 384er
Information: Portfunktionen C 384er
Download counter: 165
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 02.10.2019 - 18:30  ·  #7
Hallo rolf,

ich habe es gerade nochmal mit dem PDi-Debugger etwas getestet, mein Code:

Code
Define
..
..
  ADCrefA        = REFintVCC;
  ADCprescA      = 64;                        // prescaler 64
  ADCchansA      = [0..3];
..
..
    ww:= GetADCA(0);
    st:= 'B0: '+IntToStr(ww:6);
    DebugOut( st);

    ww:= GetADCA(1);
    st:= 'B1: '+IntToStr(ww:6);
    DebugOut( st);

    ww:= GetADCA(2);
    st:= 'B2: '+IntToStr(ww:6);
    DebugOut( st);

    ww:= GetADCA(3);
    st:= 'B3: '+IntToStr(ww:6);
    DebugOut( st);  // Hier habe ich den Break gemacht



Schau mal bitte auf das Register im Anhang, da scheinen gar keine Einstellungen für die anderen beiden Ports gemacht zu werden. Oder habe ich da einen Denkfehler und der Treiber löscht alle Flags bis auf den aktuell gelesenen Channel ?

Vielleicht ist das Problem ja ein anderer Treiber in Verbindung mit dem 384er

Thorsten
Attachments
Register ADCA
Filename: 02-10-_2019_18-12-07.jpg
Filesize: 271.17 KB
Title: Register ADCA
Information: Register ADCA
Download counter: 180
Torsten
Benutzer
Avatar
Gender:
Location: Bad Doberan
Age: 59
Posts: 62
Registered: 11 / 2005
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 03.10.2019 - 09:52  ·  #8
Hallo,
ich habe den ADC Testcode einmal für einen ATXMega128A1 und einem ATXMega384C3 erstellet. In dem *.lst File sahen die ADC init Routinen recht
gleich aus. Wenn ich dann in dem Datenblatt der A und der C Serien lesen, dann sind die ADC dort unterschiedlich beschrieben.
Wenn ich es richtig verstanden habe, dann wird der free running mode benutzt (ADCchansA[0..3]). In diesem Punkt weichen die beiden Typen laut
Datenblatt voneinander aber ab.
Falls meine Erfahrungen stimmen, ist es vielleicht an Ansatzpunkt für die Lösung.

Torsten
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 1 of 6
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   147   162 · Page-Gen-Time: 0.041219s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI