XMega128A4U ADCB?

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

Re: XMega128A4U ADCB?

 · 
Posted: 25.02.2020 - 19:11  ·  #17
Danke an alle - es funktioniert jetzt.

Code

Procedure InitADC;                                    // Init für  ADC 9-11
  Begin
    ASM;
      LDI       _ACCCLO, ADCACAL0
      CLR       _ACCCHI
      LDI       _ACCA, 2
      STS       NVMCMD, _ACCA
      LPM
      STS       ADCACALL, _ACCGLO
      LDI       _ACCA, 0
      STS       NVMCMD, _ACCA
      LDI       _ACCCLO, ADCACAL1
      CLR       _ACCCHI
      LDI       _ACCA, 2
      STS       NVMCMD, _ACCA
      LPM
      STS       ADCACALH, _ACCGLO
      LDI       _ACCA, 0
      STS       NVMCMD, _ACCA
      LDI       _ACCA, 8
      STS       ADCACTRLB, _ACCA
      LDI       _ACCA, 02h                            // Original 02h
      STS       ADCAREFCTRL, _ACCA
      LDI       _ACCA, 06h
      STS       ADCAPRESCALER, _ACCA
      LDI       _ACCA, 80h
      STS       ADCAEVCTRL, _ACCA
      LDI       _ACCB, 81h
      STS       ADCACH0CTRL, _ACCB
      STS       ADCACH1CTRL, _ACCB
      STS       ADCACH2CTRL, _ACCB
      LDI       _ACCA, 48h                            // Original $00 = 0 / ADC8=40h
      STS       ADCACH0MUXCTRL, _ACCA
      LDI       _ACCA, 50h                            // Original $08 = 1
      STS       ADCACH1MUXCTRL, _ACCA
      LDI       _ACCA, 58h                            // Original $18 = 2
      STS       ADCACH2MUXCTRL, _ACCA
      LDI       _ACCA, 1Dh
      STS       ADCACTRLA, _ACCA
    EndAsm;
  End InitADC;


Einfach 3 ADC_A definieren und danach obiges InitADC ausführen. Danach kann man Kanal 9-11 (von 0 an gezählt) mit GetADC(0)-GetADC(2) auslesen. Das Init ist für 12Bit, ADCPrescA=256 und ADCRefA=Ref100.

Gruss
Harry
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 27.02.2020 - 20:04  ·  #18
Hallo ..... leider ich nochmal,

ich hab jetzt versucht den obigen Code bzw. das Setzen der Register zu verstehen. Dazu hab ich jetzt 2 Tage lang immer wieder das Datenblatt und das Manual gelesen, aber ich versteh es teilweise nicht.
Es gibt wohl 4 ADCACHxMUXCTRL-Register und da ich 3 ADCs einlese werden diese auf $48, $50 und $58 gesetzt. Das versteh ich ja, aber was ist, wenn ich 6, 7, 8 oder alle ADCs benutze? Wie wird das da unter gebracht? Oder ist das so gement, daß ich maximal 4 auslesen kann und dann muß ich für die anderen 4 (bei 8 verwendeten) die Register ändern?

Und was genau bedeutet Free-Running-Mode? Bedeutet das, daß ich einmal konfiguriert, die ADCs immer und jederzeit lesen kann, ohne eine weitere Einstellung zu machen?

Vielleicht kann mir das einer erklären? Dann schon mal herzlichen Dank :)

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

Re: XMega128A4U ADCB?

 · 
Posted: 27.02.2020 - 23:55  ·  #19
Hallo Harry,

beim Free-Running-Mode wird ständig gewandelt. Bei dem Code von mir starte ich die Messung und warte auf das ende mit
Code
ADCACH0INTFLAG.0


Dann ziehe ich mir die Werte, stelle das MUX-CTRL auf den nächsten Wert ein und starte die Messung.
Beim Free-Running könnte es passieren das die Werte gelesen werden ohne das sie komplett gewandelt wurden.

Thorsten
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 28.02.2020 - 06:33  ·  #20
Hallo Harry,
der Compiler wird das auch nicht anders machen, der der holt sich wohl in Timerrinterrupts einen ADC-Wert und erhöht das MUX-register, dann wieder den nächsten usw. Die ADC-Werte werden dann wohl in internen Vars gespeichert, sodaß sie bei getADC(x) sofort zur Verfügung stehen.

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

Re: XMega128A4U ADCB?

 · 
Posted: 28.02.2020 - 08:35  ·  #21
Hallo Harry,

noch was, in meinen Code verwende ich nur einen ADWandler, der 384er hast nur einen, deswegen kann da nur immer eine Wandlung durchgeführt werden. Bei Deinem XMEGA sieht es fast danach aus, als ob er 4 ADWandler hat.

Thorsten
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: XMega128A4U ADCB?

 · 
Posted: 28.02.2020 - 16:40  ·  #22
Hallo ihr beiden,

danke für die Erklärungen.

@Thorsten: Der hat definitiv nur einen ADC und einen 16-fach Multiplexer. Ich vermute, daß bei freerun und 4 einstellbaren Kanäler er selber diese 4 zyklisch ausliest.

Gruss
Harry
  • 1
  • 2
  • 3
  • Page 3 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: 15 · Cache Hits: 14   108   122 · Page-Gen-Time: 0.038589s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI