Forum: Mikrocontroller und Digitale Elektronik Xmega ADC immer wieder toll


von Tuffi (Gast)


Lesenswert?

Hallo ich habe beim Xmega ein Problem (was denke ich bekannt ist).

Der ADC. So gut die Xmega sind aber der ADC ist dermaßen bescheuert. Zum 
einen hat der einen Offset (nur interessenhalber, warum ist 0V nicht 0 
bei dem?) und zum anderen kann der nicht auf VCC messen. Das ist 
natürlich doof wenn ein Poti dran hängt.

Welche Möglichkeiten (einfache) für das Poti? Referenzspannung das Poti 
speisen? Ist halt auch wieder so lala. Oder gibt es was besseres?

So wie ich das verstanden habe macht selbst wenn man an RefA die VCC 
legt, der ADC nur eine Messung bis max. VCC/1,6 oder?

von Sean G. (atmega318)


Lesenswert?

Hab zwar keine Ahnung vom Xmega, und auf die Idee bist du wohl auch 
selbst schon gekommen, aber warum nicht einfach 1 oder 2 Widerstände 
(einen zw. Poti & Masse und einen zw. Poti und VCC)?
Damit kannst du ohne irgendwelche präzisen Spannungen den Arbeitsbereich 
des Potis so genau wie die Widerstände sind einstellen.

von PittyJ (Gast)


Lesenswert?

Dann nimm doch einen Chip eines anderen Herstellers.
Ich habe mehrere andere, die super funktionieren.

von Tuffi (Gast)


Lesenswert?

PittyJ schrieb:
> Dann nimm doch einen Chip eines anderen Herstellers.
> Ich habe mehrere andere, die super funktionieren.

Thema verfehlt

von Stefan (Gast)


Lesenswert?

Tuffi schrieb:

> Der ADC. So gut die Xmega sind aber der ADC ist dermaßen bescheuert.

Echt? der ADC ist der Bescheuerte?

> Zum einen hat der einen Offset (nur interessenhalber, warum ist 0V nicht 0
> bei dem?) und zum anderen kann der nicht auf VCC messen. Das ist
> natürlich doof wenn ein Poti dran hängt.

Interessenhalber? Bei Interesse lese ich Datenblätter!
Da stehen dann Sätze wie diese:

The offset enables the ADC to measure zero crossing in unsigned mode, 
and allows for calibration of any positive offset when the internal
ground in the device is higher than the external ground.

> Welche Möglichkeiten (einfache) für das Poti? Referenzspannung das Poti
> speisen? Ist halt auch wieder so lala. Oder gibt es was besseres?
>
> So wie ich das verstanden habe macht selbst wenn man an RefA die VCC
> legt, der ADC nur eine Messung bis max. VCC/1,6 oder?

Verstanden?  nein: 

The following voltages can be used as the reference voltage (VREF) for 
the ADC:
 Accurate internal 1.00V voltage generated from the bandgap
 Internal V CC /1.6V voltage
 External voltage applied to AREF pin on PORTA
 External voltage applied to AREF pin on PORTB

Stefan

von Tuffi (Gast)


Lesenswert?

Stefan schrieb:
> Tuffi schrieb:
>
>> Der ADC. So gut die Xmega sind aber der ADC ist dermaßen bescheuert.
>
> Echt? der ADC ist der Bescheuerte?
>
>> Zum einen hat der einen Offset (nur interessenhalber, warum ist 0V nicht 0
>> bei dem?) und zum anderen kann der nicht auf VCC messen. Das ist
>> natürlich doof wenn ein Poti dran hängt.
>
> Interessenhalber? Bei Interesse lese ich Datenblätter!
> Da stehen dann Sätze wie diese:
>
> The offset enables the ADC to measure zero crossing in unsigned mode,
> and allows for calibration of any positive offset when the internal
> ground in the device is higher than the external ground.

Das er das kann weiß ich, aber das man das nicht abschalten kann finde 
ich dennoch bescheuert. Zumal streut es extrem von Chip zu Chip, das ist 
viel mehr das Problem.

>> Welche Möglichkeiten (einfache) für das Poti? Referenzspannung das Poti
>> speisen? Ist halt auch wieder so lala. Oder gibt es was besseres?
>>
>> So wie ich das verstanden habe macht selbst wenn man an RefA die VCC
>> legt, der ADC nur eine Messung bis max. VCC/1,6 oder?
>
> Verstanden?  nein: 
>
> The following voltages can be used as the reference voltage (VREF) for
> the ADC:
>  Accurate internal 1.00V voltage generated from the bandgap
>  Internal V CC /1.6V voltage
>  External voltage applied to AREF pin on PORTA
>  External voltage applied to AREF pin on PORTB

Mit externer Spannung an AREF kann ich dann acuh komplett bis 3,3V 
messen? So wie ich das nämlich verstanden habe aus dem Datenblatt kann 
er auch selbst mit AREF = 3,3V nicht bis 3,3V messen !?

von Stefan (Gast)


Lesenswert?

> Das er das kann weiß ich, aber das man das nicht abschalten kann finde
> ich dennoch bescheuert. Zumal streut es extrem von Chip zu Chip, das ist
> viel mehr das Problem.

ok. Du schriebst Das Du nicht verstehst warum das so ist.
it's not a bug … da hat man wirklich nachgedacht.

Für ADC/DAC sind Kalibrierungsdaten auf jedem Chip. Sollte man immer 
beim Start laden. Den genauen Offset kannst Du per Chip bestimmen indem 
Du einen möglichen ADC Eingangs-Pin fest (hardwaremäßig) auf GND legst 
und dann gegen diesen misst. Kostet einen Pin, funktioniert aber sehr 
gut.

> Mit externer Spannung an AREF kann ich dann acuh komplett bis 3,3V
> messen? So wie ich das nämlich verstanden habe aus dem Datenblatt kann
> er auch selbst mit AREF = 3,3V nicht bis 3,3V messen !?

IMHO etwas drunter. aber deutlich über VCC/1.6.
Habe jetzt keine Lust das Datenblatt zu lesen ;)

Stefan

von spess53 (Gast)


Lesenswert?

Hi

>Der ADC. So gut die Xmega sind aber der ADC ist dermaßen bescheuert. Zum
>einen hat der einen Offset (nur interessenhalber, warum ist 0V nicht 0
>bei dem?)

Du hast nur den falschen XMega. DIe ATxmega32E5/16E5/8E5 besitzen ADCs 
mit eingebauter Offset- und Gainkorrektur.

MfG Spess

von Tuffi (Gast)


Lesenswert?

Stefan schrieb:
>> Das er das kann weiß ich, aber das man das nicht abschalten kann
> finde
>> ich dennoch bescheuert. Zumal streut es extrem von Chip zu Chip, das ist
>> viel mehr das Problem.
>
> ok. Du schriebst Das Du nicht verstehst warum das so ist.
> it's not a bug … da hat man wirklich nachgedacht.
>
> Für ADC/DAC sind Kalibrierungsdaten auf jedem Chip. Sollte man immer
> beim Start laden. Den genauen Offset kannst Du per Chip bestimmen indem
> Du einen möglichen ADC Eingangs-Pin fest (hardwaremäßig) auf GND legst
> und dann gegen diesen misst. Kostet einen Pin, funktioniert aber sehr
> gut.
>
>> Mit externer Spannung an AREF kann ich dann acuh komplett bis 3,3V
>> messen? So wie ich das nämlich verstanden habe aus dem Datenblatt kann
>> er auch selbst mit AREF = 3,3V nicht bis 3,3V messen !?
>
> IMHO etwas drunter. aber deutlich über VCC/1.6.
> Habe jetzt keine Lust das Datenblatt zu lesen ;)
>
> Stefan

Interessant mit den Kalib Werten, wie liest man die aus?
ISt das vergleichbar mit den Kalib Werten von den DFLL?
Das klingt auf jeden Fall spannend, wenn man die hat, kann man das 
wirklich einfach korrigieren.

Leider habe ich keinerlei Pins mehr frei. Wie kann ich mein Problem mit 
dem POTI sinnvoll lösen?

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Tuffi schrieb:

> Der ADC. So gut die Xmega sind aber der ADC ist dermaßen bescheuert. Zum
> einen hat der einen Offset (nur interessenhalber, warum ist 0V nicht 0
> bei dem?)

Naja, es gibt durchaus Anwendungen, wo es nützlich ist, bis auf Gnd 
(bzw. noch ein paar mV darunter) zuverlässig messen zu können. Aber ich 
gebe Dir recht, die Beschreibung im Datenblatt ist grottig... :-(

> und zum anderen kann der nicht auf VCC messen. Das ist
> natürlich doof wenn ein Poti dran hängt.
>
> Welche Möglichkeiten (einfache) für das Poti? Referenzspannung das Poti
> speisen? Ist halt auch wieder so lala. Oder gibt es was besseres?

Lege über einen Spannungsteiler Vref auf die Hälfte von AVcc. Nutze 
dafür PA0 bzw. ADC0 und spendiere ihm auch noch einen Stützkondensator.

Schalte Dein Poti ebenfalls zwischen AVcc und AGnd. Den Schleifer legst 
Du auf PA1 bzw. ADC1.

Den ADC konfigurierst Du als "differential inputs without gain", also im 
vorzeichenbehafteten Modus, wobei ADC1 der positive und ADC0 der 
negative Eingang des MUX ist. Als Referenzspannung wird RefA, also PA0 
bzw. ADC0 eingestellt.

Falls Dir die Darstellung der Potistellung als vorzeichenbehafteter Wert 
nicht gefällt, einfach den Offset addieren.

Grüßle,
Volker

P.S.: Nicht motzen, sodern Gehirn benutzen :-)

: Bearbeitet durch User
von PittyJ (Gast)


Lesenswert?

Tuffi schrieb:

> Das er das kann weiß ich, aber das man das nicht abschalten kann finde
> ich dennoch bescheuert. Zumal streut es extrem von Chip zu Chip, das ist
> viel mehr das Problem.
>

Nochmal meine Ansage: wenn ein Chip technisch für dich nicht passt, 
warum verwendest du ihn weiter? Andere Hersteller habe auch wunderschöne 
ADCs.

Nimm die richtigen Werkzeuge, wenn du ein gutes Ergebnis brauchst.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tuffi schrieb:
> Interessant mit den Kalib Werten, wie liest man die aus?
So mache ichs auf dem alten XMega192A4:
1
#include "nvm.h"
2
/**
3
 * \brief Get calibration data
4
 */
5
ADC.CALL = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t, ADCACAL0) );
6
ADC.CALH = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t, ADCACAL1) );

von Tuffi (Gast)


Lesenswert?

Matthias S. schrieb:
> Tuffi schrieb:
>> Interessant mit den Kalib Werten, wie liest man die aus?
> So mache ichs auf dem alten XMega192A4:#include "nvm.h"
> /**
>  * \brief Get calibration data
>  */
> ADC.CALL = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t,
> ADCACAL0) );
> ADC.CALH = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t,
> ADCACAL1) );

Danke, teste ich aus.

von Tuffi (Gast)


Lesenswert?

Volker B. schrieb:

Nicht so einfach möglich. Die HW ist "fertig", der Chip hat KEINE freien 
Ausgänge mehr. Keine AREF frei und nur 1 Input für den ADC.

Ich muss anders jetzt das Poti auf den Messbereich schieben. Natürlich 
wäre eine Idee eine Referenzspannung zu nehmen womit das Poti versorgt 
wird. Gibt es noch andere Möglichkeiten die aber auch recht genau sind? 
Möchte ungern noch einen Chip drauf haben den man sonst nicht gebrauchen 
kann.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Tuffi schrieb:

> Nicht so einfach möglich. Die HW ist "fertig", der Chip hat KEINE freien
> Ausgänge mehr. Keine AREF frei und nur 1 Input für den ADC.

...ein ADC-*Ein*gang würde genügen :-)

Wer macht so etwas? Nach dem "Prinzip Hoffnung" Hardware basteln und 
erst zum Schluss die Firmware erstellen, ohne zuvor wengistens die 
grundlegenden Funktionen verifiziert zu haben. Sorry, aber mein Mitleid 
hält sich in Grenzen. :-/

(...)

> Gibt es noch andere Möglichkeiten die aber auch recht genau sind?
> Möchte ungern noch einen Chip drauf haben den man sonst nicht gebrauchen
> kann.

Da mir Deine Hardware leider unbekannt ist, kann ich Dir keine Tipps 
geben -- oder bist Du des Hellsehens mächtig? Wenn ja, verrat' mir wie 
Du das machst, denn ich schaff' das um's Verrecken nicht...

von Tuffi (Gast)


Lesenswert?

Volker B. schrieb:
> Tuffi schrieb:
>
>> Nicht so einfach möglich. Die HW ist "fertig", der Chip hat KEINE freien
>> Ausgänge mehr. Keine AREF frei und nur 1 Input für den ADC.
>
> ...ein ADC-*Ein*gang würde genügen :-)
>
> Wer macht so etwas? Nach dem "Prinzip Hoffnung" Hardware basteln und
> erst zum Schluss die Firmware erstellen, ohne zuvor wengistens die
> grundlegenden Funktionen verifiziert zu haben. Sorry, aber mein Mitleid
> hält sich in Grenzen. :-/
>
> (...)
>
>> Gibt es noch andere Möglichkeiten die aber auch recht genau sind?
>> Möchte ungern noch einen Chip drauf haben den man sonst nicht gebrauchen
>> kann.
>
> Da mir Deine Hardware leider unbekannt ist, kann ich Dir keine Tipps
> geben -- oder bist Du des Hellsehens mächtig? Wenn ja, verrat' mir wie
> Du das machst, denn ich schaff' das um's Verrecken nicht...

Ja manchmal passiert das das man was übersieht, so wie das Poti in 
diesem Fall.

HW ist nichts zu zeigen. Xmega an 3,3V und Poti zwischen VCC und GND und 
den Schelifer an den ADC. Kann halt nur bis 75% vom Poti drehen dann ist 
FF (mache 8 Bit Auflösung die reicht mir).

Poti an 2,6V anschließen dann wäre das Problem behoben. Möchte aber 
vermeiden noch einen Chip zusätzlich zu haben. Was passives wäre mir 
lieber. Ich weiß auch gar nicht ob es 2,6V Ref Spannungsquellen gibt.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Tuffi schrieb:

> HW ist nichts zu zeigen.

Doch! Es wäre durchaus hilfreich zu wissen welche MCU nun wirklich 
verwendet ist und welcher ADC-Pin beschaltet ist. Ggf. könnte man mit 
dem Komparator arbeiten, wenn man wüsste, ob der verwendete Pin geeignet 
ist. Bei einer MCU mit DAC könnte man auch dessen Ausgang intern 
verwenden. Aber wenn Du nicht magst...

> Xmega an 3,3V und Poti zwischen VCC und GND und
> den Schelifer an den ADC. Kann halt nur bis 75% vom Poti drehen dann ist
> FF (mache 8 Bit Auflösung die reicht mir).

> Poti an 2,6V anschließen dann wäre das Problem behoben. Möchte aber
> vermeiden noch einen Chip zusätzlich zu haben. Was passives wäre mir
> lieber. Ich weiß auch gar nicht ob es 2,6V Ref Spannungsquellen gibt.

Gerüchteweise wurden bereits Spannungsteiler erfunden. Aber, ohne dass 
Du Deine Schaltung hier zeigst, sage ich nichts mehr. Seh' das als 
kleine Gegenleistung für meine Mühen an, denn ich bin sehr neugierig und 
lerne immer gerne gerne von anderen Schaltungen (auch wenn's dann nur 
ein Beispiel dafür ist, wie man's nicht machen sollte).

von Udo S. (urschmitt)


Lesenswert?

Tuffi schrieb:
> Möchte aber
> vermeiden noch einen Chip zusätzlich zu haben. Was passives wäre mir
> lieber.

Dann häng halt einen Widerstand in Reihe zum Poti.

Nur weil jemand sich keine Mühe gibt beim Hardwaredesign sein Verstand 
einzuschalten dann hier rumzuproleten:

Tuffi schrieb:
> aber der ADC ist dermaßen bescheuert

ist ja völlig daneben.

Der Fehler sitzt mal wieder vor der Tastatur.

von Tuffi (Gast)


Lesenswert?

Volker B. schrieb:
> Tuffi schrieb:
>
>> HW ist nichts zu zeigen.
>
> Doch! Es wäre durchaus hilfreich zu wissen welche MCU nun wirklich
> verwendet ist und welcher ADC-Pin beschaltet ist. Ggf. könnte man mit
> dem Komparator arbeiten, wenn man wüsste, ob der verwendete Pin geeignet
> ist. Bei einer MCU mit DAC könnte man auch dessen Ausgang intern
> verwenden. Aber wenn Du nicht magst...

> Gerüchteweise wurden bereits Spannungsteiler erfunden. Aber, ohne dass
> Du Deine Schaltung hier zeigst, sage ich nichts mehr. Seh' das als
> kleine Gegenleistung für meine Mühen an, denn ich bin sehr neugierig und
> lerne immer gerne gerne von anderen Schaltungen (auch wenn's dann nur
> ein Beispiel dafür ist, wie man's nicht machen sollte).

Erzähl mir mehr von den interessanten Widerständen die es gibt :D

Nein Spaß beiseite. Klar, kann man in Reihe 2k7 schalten (ich nutze 4k7 
Poti). Aber das finde ich in sofern nicht optimal, wenn ich ein anderen 
Poti Wert nutze muss ich den Vorwiderstand auch anpassen.

von Tuffi (Gast)


Lesenswert?

Udo S. schrieb:
> Der Fehler sitzt mal wieder vor der Tastatur.

Das tut er immer.

von Tuffi (Gast)


Lesenswert?

Matthias S. schrieb:
> Tuffi schrieb:
>> Interessant mit den Kalib Werten, wie liest man die aus?
> So mache ichs auf dem alten XMega192A4:#include "nvm.h"
> /**
>  * \brief Get calibration data
>  */
> ADC.CALL = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t,
> ADCACAL0) );
> ADC.CALH = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t,
> ADCACAL1) );

Kannst du die NVM noch hochladen doer mir sagen woher ich die bekomme?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Tuffi schrieb:
> Kannst du die NVM noch hochladen doer mir sagen woher ich die bekomme?
Ist ein Teil vom NVM Paket. ZIP anbei.

von Tuffi (Gast)


Lesenswert?

Matthias S. schrieb:
> Tuffi schrieb:
>> Kannst du die NVM noch hochladen doer mir sagen woher ich die bekomme?
> Ist ein Teil vom NVM Paket. ZIP anbei.

Danke

von Tuffi (Gast)


Lesenswert?

Matthias S. schrieb:
> Tuffi schrieb:
>> Kannst du die NVM noch hochladen doer mir sagen woher ich die bekomme?
> Ist ein Teil vom NVM Paket. ZIP anbei.

Kommando zurück

ReadCalibrationByte is undefiniert. Fehlt da noch was?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Tuffi schrieb:
> Fehlt da noch was?

Nicht, das ich wüsste. Ich hab das aber damals mit ASF geklöppelt und 
hab nicht im Kopf, was ich entkommentiert hatte. Kann sein, das 
'avr_compiler.h' wichtig war.
Ich hatte dann von den XMega die Schnauze voll mit den vielen Errata.

: Bearbeitet durch User
von Tuffi (Gast)


Lesenswert?

Matthias S. schrieb:
> Tuffi schrieb:
>> Fehlt da noch was?
>
> Nicht, das ich wüsste. Ich hab das aber damals mit ASF geklöppelt und
> hab nicht im Kopf, was ich entkommentiert hatte. Kann sein, das
> 'avr_compiler.h' wichtig war.
> Ich hatte dann von den XMega die Schnauze voll mit den vielen Errata.

Ne die ist es leider nicht, Das Problem mit dem ASF kenne ich deswegen 
meide ich das komplett und schriebe die selber. nur dem NVM blicke ich 
noch nicht ganz, das muss ich mir sonst noch einmal angucken. Vemrutlich 
war das wieder so 20x verschachtelt wie bei USB wo keiner durchblickt 
und ein Overhead ohne Ende drin ist

von Euro (Gast)


Lesenswert?

Tuffi schrieb:
> ReadCalibrationByte is undefiniert. Fehlt da noch was?
Irgendwo aus den Tiefen des Netzes hab ich das damals so übernommen 
(frag mich nicht, wo es herstammt):
1
//Konsts
2
#define ADCACAL0_offset 0x20  // siehe DB "Product signature row"
3
#define ADCACAL1_offset 0x21  // dito
4
5
//Aufruf
6
    ADCA.CALL=read_calibration_byte(PROD_SIGNATURES_START+ADCACAL0_offset);
7
    ADCA.CALH=read_calibration_byte(PROD_SIGNATURES_START+ADCACAL1_offset);
8
9
//Funktion
10
uint8_t read_calibration_byte( uint8_t index )
11
{
12
    uint8_t result;
13
    /* Load the NVM Command register to read the calibration row. */
14
    NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;
15
    result = pgm_read_byte(index);
16
    /* Clean up NVM Command register. */
17
    NVM_CMD = NVM_CMD_NO_OPERATION_gc;
18
    return result;
19
}

von Stefan (Gast)


Lesenswert?

> Interessant mit den Kalib Werten, wie liest man die aus?
> ISt das vergleichbar mit den Kalib Werten von den DFLL?
> Das klingt auf jeden Fall spannend, wenn man die hat, kann man das
> wirklich einfach korrigieren.

Die Kalibrierung löst nicht das Problem mit dem Offset!

> Leider habe ich keinerlei Pins mehr frei. Wie kann ich mein Problem mit
> dem POTI sinnvoll lösen?

Schau Dir Deine geheime Schaltung und die Möglichkeiten des Chips 
nochmal genau an. Ich wette da ist mindestens noch ein Eingang frei wenn 
man will.

Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.