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?
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.
Dann nimm doch einen Chip eines anderen Herstellers. Ich habe mehrere andere, die super funktionieren.
PittyJ schrieb: > Dann nimm doch einen Chip eines anderen Herstellers. > Ich habe mehrere andere, die super funktionieren. Thema verfehlt
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
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 !?
> 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
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
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?
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
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.
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) ); |
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.
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.
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...
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.
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).
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.
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.
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?
Tuffi schrieb: > Kannst du die NVM noch hochladen doer mir sagen woher ich die bekomme? Ist ein Teil vom NVM Paket. ZIP anbei.
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
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?
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
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
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 | }
|
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.