ADC Xmega32A4U

  • 1
  • 2
  • Page 1 of 2
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

ADC Xmega32A4U

 · 
Posted: 20.10.2016 - 18:58  ·  #1
Hallo,

warum kann ich beim Xmega32A4U den PortB Pin1-Pin3 nicht als ADC benutzen ?
(PortB Pin0= Ref)
PortA 0..7 läuft super unter AVRco
Lese ich den falsch ein ?

Code

Import SysTick, ADC_A, ADC_B;

Define
  ADCrefA         =  REFextB;
  ADCprescA       =  256;
  ADCchansA       =  7;        //test PortA.7

  ADCrefB         =  REFextB;
  ADCprescB       =  256;
  ADCchansB       =  2;         //PortB.2 
..
..
  wA:= GetADCA(0);  //ok

  wB:= GetADCB(0);    //kein wert


Ich habe viele sachen getestet, aber ich bekomme einfach keinen Wert. Nur 00

wB:= GetADCB(0); //kein wert
wB:= GetADCB(1); //kein wert
wB:= GetADCB(2); //kein wert
wB:= GetADCB(10); //kein wert


In der Beschreibung steht das der Xmega32A4U 12 ADC Eingänge hat.


Gruß Frank
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: ADC Xmega32A4U

 · 
Posted: 22.10.2016 - 15:56  ·  #2
Ich frage mich die ganze Zeit, wenn der Xmega32A4U nur 1 ADC besitzt,
aber 12 Input channels per ADC hat, wie stelle ich dann unter AVRco diesen
PortB.2, also Channel 10 ein ?

AVRco läßt nur ein wert von 0-7 zu, also ADCchansA = [0..7];
[8..11] wird nicht genommen.

Also müsste ich unter AVRco ADCchansB einstellen ?! aber einen B gibts doch gar nicht
im 32A4U.



Gruß Frank
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: ADC Xmega32A4U

 · 
Posted: 22.10.2016 - 17:43  ·  #3
@Rolf,

bitte schaue dir diese Sache mal in AVRco an, ich weiß nicht warum ich unter AVRco den
PortB.2 nicht einlesen kann.

Nun habe ich mir selber ein asm Test-Code geschrieben und siehe da, der PortB.2 wird
eingelesen.

Code

Interrupt ADCA_INTCH0;
Begin
  lo(ww):= ADCACH0RESL;
  hi(ww):= ADCACH0RESH;
end;

Procedure Init_ADC;
Begin
  ADCACTRLA       := $05;      // 0000 0101 aktivieren
  ADCACTRLB       := $08;      // 0000 1000 Bit3 Free Running Mode  12Bit
  ADCAREFCTRL     := $30;      // 0011 0000 External reference from AREF pin on PORT B
  ADCAPRESCALER   := $06;      // 0000 0110 Prescaler auf 256
  ADCAEVCTRL      := $00;
  ADCACH0CTRL     := $81;      // 1000 0001 Bit 7 START Conversion on Channel
  ADCACH0MUXCTRL  := $50;      // 0101 0000 1010  ADC10 --> PortB.2
  ADCACH0INTCTRL  := $03;      // 0000 0011 INTlvl
end;



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

Re: ADC Xmega32A4U

 · 
Posted: 23.10.2016 - 15:02  ·  #4
Hallo Frank,

ohne ein kleines aber komplettes Testprogramm geht halt nix.
Siehe hier im Forum (Portal) ganz oben!

rolf
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: ADC Xmega32A4U

 · 
Posted: 23.10.2016 - 16:09  ·  #5
Hallo Rolf, mache ich dir sofort fertig.


Gruß Frank
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: ADC Xmega32A4U

 · 
Posted: 23.10.2016 - 16:27  ·  #6
Hallo Rolf, hier habe ich dir mal den Test-Code erstellt.
Ich denke das problem liegt hier drin
ADCchansA = [0..7]; // erwartet ein Byte von 0 bis 7 ansonsten Error

Direkt Channel 10 kann man nicht einstellen. Also bleibt mir nur noch die Möglichkeit
ADCchansA = 1 // 1 Channel benutzen
Aber mit GetADC_A(10) bekomme ich keinen wert.

PS.
Ich weiß das im Xmega32A4U nur einen ADC mit 12 Channel gibt.
Aber ich habe alles mit ADC_A, und auch mit ADC_B; getestet.
Obwohl nur ADC_A eingetragen werden müsste, weil B gibts ja nicht



Code

program Xmega_ADC;

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

Device = xmega32A4U, VCC=3.3;
{ $BOOTRST $04000}         {Reset Jump to $04000}

Define_Fuses
//  Override_Fuses;
  NoteBook   = A;
  COMport    = USB;
  LockBits0  = [];
  FuseBits0  = [];
  FuseBits1  = [];
  FuseBits2  = [];
  ProgMode   = PDI;
Import SysTick, ADC_A, ADC_B;
From System Import ;
Define
  OSCtype        = int2MHz,
                   PLLmul  = 16,
                   prescB  = 1,
                   prescB  = 1, overdrive;
  SysTick        = 10;             {msec}
  StackSize      = $0064, iData;
  FrameSize      = $0064, iData;
  
  
  ADCrefA        = REFextB;
  ADCprescA      = 64;        // prescaler 64
  ADCchansA      = [0..7];    // erwartet ein Byte von 0 bis 7 ansonsten Error
  
  ADCrefB        = REFextB;
  ADCprescB      = 64;
// ich möchte Channel 10 PortB.2 einlesen
// es gibt keine Möglichkeit einen wert 10 einzugeben
// getestet mit 2 or [2] or [1..3] or 1,2,3
// selbe gilt auch für >> ADCchansA <<
  ADCchansB      = 2; //

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }

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

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
Var ww   :  word;

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

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  EnableInts($87);
  loop
    ww:= GetADCA(10); //kein wert nur 0
    ww:= GetADCB(10); //kein wert nur 0
    ww:= GetADCB(2);  //kein wert nur 0


    // Hier im Code nicht vorhanden
    // In mein Hauptprogramm ist das drin
    // OledStringAusgabe(ww);
  endloop;
end Xmega_ADC.




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

Re: ADC Xmega32A4U

 · 
Posted: 23.10.2016 - 17:32  ·  #7
Hallo Frank,

auch hier hilft das Manual weiter.
Es gibr zwar 12 (oder mehr) ADC Kanäle, aber die sind auf zwei vollkommen
getrennte ADCs verteilt, wobei jeder ADC max. 8 Kanäle verarbeiten kann.
Mit
Define ADCchansB = [2]; //
wird nur der Pin angegeben. Dieser hat jedoch keinen direkten Bezug zur
Kanalnummer. Die Kanalnummern werden aus der Reihenfolge der hier angegeben
Pins gebildet, startend mit "0".
GetADCx(10)
geht daher natürlich garnicht.
Wenn dem ADCB z.B. nur ein Kanal/Pin zugeordnet ist, dann gibt es auch nur
GetADCB(0)
Mal im Standard Treiber Manual Seite 151/152 genau nachlesen...

rolf
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: ADC Xmega32A4U

 · 
Posted: 23.10.2016 - 17:57  ·  #8
Ja das ist mir schon klar das man dies machen muss, man will ja den 2ten Kanal
von PortB.2 haben, das hatte ich so auch getestet.
Define ADCchansB = [2]; //

Und ich könnte meine Finger heben das ich das auch gemacht habe. :3some:
GetADCB(0)


ok ok, ich teste das noma so wie du es angegeben hast. :angel3:


Gruß Frank
  • 1
  • 2
  • Page 1 of 2
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: 15 · Cache Hits: 14   141   155 · Page-Gen-Time: 0.051179s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI