ADC Treiber mit ATXMega 384C3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 2 of 6
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: 06.10.2019 - 23:09  ·  #9
Hallo Torsten,

ich habe den XMega-C ADC jetzt überarbeitet. Sollte jetzt tun.

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

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 07.10.2019 - 09:09  ·  #10
Guten Morgen Rolf,

ich habe gerade die Version 5.10.06 getestet. Ich denke es ist noch nicht ok!
Bei der Einstellung ADCchansA =[0..2] bekomme ich für den ADC0 als Wert 183, ADC1 und ADC2 sind null.
Mit der Einstellung ADCchansA =[0..4] ändert sich das Bild, nun sind ADC1 und ADC2 auch im Bereich um die 183.
Die Werte ändern sich auch um 1 bis 2 LSB, sieht damit ganz normal aus.
Der ADC hat ja wohl immer einen Offset, damit erscheint der Wert um die 180 bei VReg 1V auch okay.
In meiner Schaltung verwende ich nur die ersten drei Pins am PortA für die Messung einer Spannung, der Rest sind dig. Ausgänge.
Kann ich den ADC für Port 0-4 definieren und trotzdem Port A3 und 4 als dig. Ausgänge betreiben?

Viele Grüße,
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: 07.10.2019 - 11:58  ·  #11
Quote by rh

Hallo Torsten,

ich habe den XMega-C ADC jetzt überarbeitet. Sollte jetzt tun.

rolf


Hallo rolf,

leider hat die 5.10.06 nicht das Problem gelöst.

ADC0 funktioniert wie zuvor richtig.
ADC1 zeigt fehlerhaft 0, der Wert von Außen wird nicht übernommen
ADC2 zeigt fehlerhaft 0, der Wert von Außen wird nicht übernommen
ADC3 zeigt den gespiegelten Wert von 1 mit 1-2 +/- an.

Ändere ich die Spannung an ADC0 wird dieser ebenfalls auf ADC3 angezeigt auch wenn dort nichts angeschlossen ist.

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: 07.10.2019 - 17:23  ·  #12
Hallo Thorsten,

ich bin frustriert. Ich verstehe das nicht...
Im Vergleich mit XMega-A und XMega-C im ADC Teil kann ich nur
einen Unterschied feststellen.
Und diesen habe ich versucht zu berücksichtigen.
Versuche mal von Hand im ADC Treiber Änderungen vorzunehmen.

ps. Was gibt es neues bei dem Timeout Problem ???

rolf
Attachments
ADC Treiber mit ATXMega 384C3
Filename: XMega-A.png
Filesize: 5.96 KB
Title:
Download counter: 110
ADC Treiber mit ATXMega 384C3
Filename: XMega-C.png
Filesize: 4.54 KB
Title:
Download counter: 118
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 07.10.2019 - 21:31  ·  #13
Quote by rh

Hallo Thorsten,

ich bin frustriert. Ich verstehe das nicht...
Im Vergleich mit XMega-A und XMega-C im ADC Teil kann ich nur
einen Unterschied feststellen.
Und diesen habe ich versucht zu berücksichtigen.
Versuche mal von Hand im ADC Treiber Änderungen vorzunehmen.

Hallo rolf,
ok, werde ich mal testen. Ich muss mich auchmal etwas tiefer in das System vom ADC beim C reinlesen. Ich habe bis jetzt nur ATMEL ADC Dokus vom A, B und D Typen gefunden. Aber nichts zum C (Arbeitsweise), hast Du da was gutes an Atmel Doku? Die AVR1300 und AVR1324 sagen halt kein Wort zum Typ C.

Quote by rh

ps. Was gibt es neues bei dem Timeout Problem ???


Da bin ich auch noch drann, komme mit dem Init-Ablauf vom miparo beim ersten durchschauen der Schritte nicht so ganz klar. Ich muss das mal "Schritt für Schritt" mit dem Handbuch vom WizIO machen. Miparos Treiber ist auf dem ersten Blick deutlich komplexer, da er die ganzen anderen WizNet-Chips mit berücksichtig. Das muss ich gedanklich erstmal alles ausblenden, am besten ohne Telefon und Tagesgeschäft :-)

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: 07.10.2019 - 22:00  ·  #14
Hallo Thorsten,

nein, ich habe vom C-ADC auch keine weiteren Unterlagen.
Alles sehr mysteriös :aerger:

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: 08.10.2019 - 11:38  ·  #15
Hallo rolf,

ich bin gerade dabei mein ADC INIT per Hand zu machen, dabei bin ich über etwas gestolpert:

Quote
... der Prescaler muss an die verwendete Taktfrequenz angepasst werden, da der ADC nicht mehr als 2 MS/s schafft...


Ist dies evtl das Problem? Ich nutze 62MHz bei meinem XMEGA

Thorsten

Nachtrag:
Auch bei 32MHz und einem höheren Presc. kein Unterschied
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: ADC Treiber mit ATXMega 384C3

 · 
Posted: 08.10.2019 - 13:45  ·  #16
Hallo rolf,

ich habe es jetzt mal komplett zu Fuß gemacht. Der ADC0 gibt einen sauberen Wert raus, aber nach der Meldung das die Messung abgeschlossen ist, starte ich die Messung vom ADC1, aber diese Messung wird NIE abgeschlossen. Entweder habe ich einen INIT-Fehler gemacht oder es ist das selbe Fehlerbild wie bei Deinem Treiber. Wenn ich alle Messungen gleichzeitig starte bekommme ich nur das IF-Flag vom ADC0 und somit auch nur diesen Wert

Vielleicht fällt Dir noch was auf:
Mein INIT-Code
Code
{ Main Program }
{$IDATA}
begin

//  INIT ADC
  ADCACTRLB     := $00;   // Auflösung auf 12bit und rechtsbündig
  ADCAREFCTRL   := $10;   // INTVCC / 1.6
  ADCAPRESCALER := $04;   // ADCAPRESCALER auf 64
  ADCACTRLA.0   := true;  // Enable ADCA

// INIT CH0
  DDRA.0:= 0;  // 0=EINGANG  1=Ausgang
  ADCACH0CTRL    := $01; // singleended
  ADCACH0MUXCTRL := $0; // MUX CTRL
  ADCACH0CTRL    := ADCACH0CTRL OR $01; // singleended
  ADCACH0CTRL.7  := true;    // Starte Messung

// INIT CH1
  DDRA.1:= 0;  // 0=EINGANG  1=Ausgang
  ADCACH1CTRL    := $01; // singleended
  ADCACH1MUXCTRL := $0; // MUX CTRL
  ADCACH1CTRL    := ADCACH1CTRL OR $01; // singleended

// INIT CH2
  DDRA.2:= 0;  // 0=EINGANG  1=Ausgang
  ADCACH2CTRL    := $01; // singleended
  ADCACH2MUXCTRL := $0; // MUX CTRL
  ADCACH2CTRL    := ADCACH2CTRL OR $01; // singleended

// INIT CH2
  DDRA.3:= 0;  // 0=EINGANG  1=Ausgang
  ADCACH3CTRL    := $01; // singleended
  ADCACH3MUXCTRL := $0; // MUX CTRL
  ADCACH3CTRL    := ADCACH3CTRL OR $01; // singleended

  EnableInts($87);                             // mandory for USB_ControlJob
...


Im Main-LOOP
Quote
...
//Messung abgeschlossen?
if ADCACH0INTFLAG.0 then
ADCACH0INTFLAG.0:=false; // Flag reset
LO(ww0):= ADCACH0RESL; // Ziehe Werte
HI(ww0):= ADCACH0RESH;
ADCACH1CTRL.7 := true; // Starte neue Messung
endif;

if ADCACH1INTFLAG.0 then
ADCACH1INTFLAG.0:=false; // Flag reset
LO(ww1):= ADCACH1RESL; // Ziehe Werte
HI(ww1):= ADCACH1RESH;
ADCACH2CTRL.7 := true; // Starte neue Messung
endif;

if ADCACH2INTFLAG.0 then
ADCACH2INTFLAG.0:=false; // Flag reset
LO(ww2):= ADCACH2RESL; // Ziehe Werte
HI(ww2):= ADCACH2RESH;
ADCACH3CTRL.7 := true; // Starte neue Messung
endif;

if ADCACH3INTFLAG.0 then
ADCACH3INTFLAG.0:=false; // Flag reset
LO(ww3):= ADCACH3RESL; // Ziehe Werte
HI(ww3):= ADCACH3RESH;
ADCACH0CTRL.7 := true; // Starte neue Messung
endif;
...


Hast Du noch eine Idee? Haben wir bei dem MUXCTRL vielleicht einen Denkfehler? Beim MUX bin ich mir mit dem CONFIG nicht so sicher.

Thorsten
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 2 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: 16 · Cache Hits: 15   143   158 · Page-Gen-Time: 0.032879s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI