Forum: Mikrocontroller und Digitale Elektronik ATtiny15 ADC differential


von Sven (Gast)


Lesenswert?

Ich möchte am ATtiny15 den Differenzeingang des ADC verwenden.
Funktioniert soweit auch, aber es gibt da ein paar Unklarheiten, über
die sich das Datenblatt und div. App-Notes bisher ausschweigen.

Im Datenblatt steht, dass bei Verwendung als Diffenz-ADC die Auflösung
nur 8bit (normal 10bit) ist. Wie sind dann aber die Werte in den beiden
Registern (ADCL und ADCH) gespeichert? Wird dann nur ADCL verwendet?

Was passiert, wenn die Differenz bei der Messung negativ wird? Kommt
dann Null heraus, wird ein signed-Wert ausgegeben?

Hat da schon mal jemand was mit gemacht?

Sven

von Michael L. (Gast)


Lesenswert?

Da bin ich auch drüber gestolpert. Wenn du dir ADCH und ADCL ausgibst,
dann wirst du feststellen, dass der Differenz-ADC doch 10 Bit kann. Mir
haben 8 Bit gereicht, deshalb hab ich links justiert und nur ADCH
ausgewertet. Seither glaub ich nicht mehr alles was im Datenblatt steht
:-(

Wies mit dem Vorzeichen aussieht weis ich nicht, schätze aber dass Null
bei negatver Differenz raus kommt (wegen den internen Clamp-Dioden).
signed geht schlecht bei 8 Bit Auflösung. Sind ja sonst nur noch 7.

Grüß,
Michael

von Hannes L. (hannes)


Lesenswert?

Also ich interpretiere das Datenblatt so:

Bei negativer Differenz sollten negative Zahlen heraus kommen.
Das Ergebnis ist als Zweierkomplement zu interpretieren.
Da der Wertebereich -128...+127 beträgt, sind es doch 8 Bit und nicht
nur (wie vermutet) 7 Bit.

Die beiden zu vergleichenden Spannungen müssen sich im Bereich zwischen
2V und Vcc-0,2V befinden, also weit weg von GND.

...

von Sven (Gast)


Lesenswert?

@Hannes

Wo steht das? Habe bis jetzt nur das Datenblatt Rev 1 gehabt, mir jetzt
Rev F geholt.

Man kann halt in den Tiny15 so schlecht reinschauen, aber wenn ich mir
die AD-Werte seriell rausschiebe und auf den Oszi ausgebe, sieht es so
aus, als wäre es ein unsigned 10bit-Wert, wo alles Negative zu Null
wird.

Ich hab hier Ärger, weil der Wandler manchmal nach Einschalten oder
Reset völlig unsinnige Werte bringt, und ich weiss noch nicht, worans
liegt. (Interne Referenz, Differenzeingang mit Gain 20x) Ist sowas bei
euch schonmal aufgetreten?

Sven

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Siehe Appnote AVR120 Seite 4 oberer Absatz...

Wenn, wie beim Tiny15, die nutzbare Auflösung auf 8 Bit reduziert
wurde, dann gilt natürlich -128...+127 als nutzbarer Wertebereich.

...

von Michael L. (Gast)


Lesenswert?

"Note that some devices cannot measure negative differences, e.g.
ATiny26" und wohl auch der Tiny15.

Im Datenblatt steht 0...2,56V Differential Input Range
und nicht -2,56V...0...+2,56V. Meine Messung hat aber gezeigt, dass es
von 0...5V funktioniert. 0...2,56V wären 8Bit, 0...5V sind dann 10
Bit.

Zu dem Thema: Was ist denn das für eine Auflösung "16 LSB"?? Bedeutet
das, dass ich die letzten 4 Bit vergessen kann? Das kann ja fast nicht
sein, oder?

Wegen den unsinnigen Werten; hast du eine Dummywandlung zum
initialisieren eingebaut? Die erste Wandlung nach einem Kanalumschalten
ist Schrott und muss verworfen werden!

Michael

von Hannes L. (hannes)


Lesenswert?

Mit einer negativen Differenz meinte ich nicht, dass eine der beiden
Spannungen negativ gegenüber GND ist, sondern dass die Differenz der
beiden Spannungen negativ ist. Also dass V+ negativer ist als V-, beide
aber positiver als GND.
Die angelegten Spannungen müssen schon innerhalb des
Betriebsspannungsbereiches liegen.

An die Eingänge eines OPV legt man ja auch keine Spannungen außerhalb
des Betriebsspannungsbereiches an.

...

von Michael L. (Gast)


Lesenswert?

Ah so, hab ich falsch verstanden, sorry!

von Sven (Gast)


Lesenswert?

>>Wegen den unsinnigen Werten

Nee, war mal wieder was ganz anderes: Das Programm begann mit einem
RJMP über den Interrupt-Vector-Bereich, dann die Eingänge enablen und
OSCCAL setzen.

Bei einigen Starts wurden (trotz Brown-Out und Slow-Start mit
Verzögerung 65ms) die Eingänge falsch gesetzt. Wenn ein ADC-Eingang nun
als Ausgang oder mit Pull-Up gesetzt wird, ist klar, dass dann Mist
rauskommt.

Hab ich es rumgedreht: Erst OSCCAL, dann Eingänge setzen. Funktioniert,
aber jetzt wird OSCCAL nicht immer richtig gesetzt.

Hab ich den RJMP weggelassen und gleich am Anfang OSCCAL gesetzt, dann
die Eingänge. Interrupt-Vectoren brauch ich (vorerst) nicht. Jetzt
funktionierts. Frag nich warum...

>>Mit einer negativen Differenz

Also, bei mir bringt der ADC im Differenz-Modus für negative Differenz
Null, 2.56V Differenz sind 10bit (mit interner Ref) (ADCH,ADCL
rausgeschoben und auf Oszi angesehen). Laut des Schematic im Datenblatt
kann er eigentlich auch nur positive Differenzen messen. Frag mich nur,
wie dann der Nullabgleich (beide Diff-Eingänge gleicher Kanal, um
Offset rauszurechnen) funktionieren soll, wenn der Offset zufällig
negativ ist...

Komische Sache das!

Sven

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.