Hallo, ich wollte mal die "Gain"-Option beim Mega128 ausprobieren, habe aber noch einige Fragen dazu: 1.: Ich habe die MUX-Wahl 01001 getroffen und am ADC1 (Input Positive Differential) meine Mess-Spannung und am ADC0 (Input Negative Differential) GND angelegt. Anstatt eine 10fache Verstärkung bekomme ich aber nur eine ca. 5fache Verstärkung. Warum? 2.: Wie muß ich bei der MUX-Wahl 01000 meine Mess-Spannung anschließen? ADC0 ist hierbei sowohl Input Positive Differential als auch Input Negative Differential. 3.: Was bringt denn eine 1fache Verstärkung?!? Vielen Dank! Sebastian
> Anstatt eine 10fache Verstärkung bekomme ich aber nur eine > ca. 5fache Verstärkung. Warum? Wie hoch ist denn Deine Spannung? Ohne jetzt die Stelle im Datenblatt zu suchen, wenn Du nach der Verstärkung die maximal mögliche Eingangsspannung überschreitest, wird der Verstärker wohl sicher irgendwo begrenzen. Anderer Fall: stimmt denn Deine Referenz mit Deinen Erwartungen überein? > Wie muß ich bei der MUX-Wahl 01000 meine Mess-Spannung anschließen? Gar nicht. :-) Du mißt theoretisch 0 V, 10fach verstärkt. Diese Kombination wird einfach daraus resultieren, daß der Umschalter für den negativen Eingang halt so arbeitet, daß bei dieser Bitkonstellation sowohl positiver als auch negativer Eingang am gleichen Pin liegen. In der Praxis kann man diese Variante sicher benutzen, um eine Offset-Kalibrierung des Meßverstärkers vorzunehmen. > Was bringt denn eine 1fache Verstärkung? Genau das, was der ADC auch ohne Vorverstärker schon konnte: die volle Aussteuerbarkeit (GND bis Avref).
Hi Jörg, danke erstmal für die Antwort! :-) Ich verwende 0,35V (+/- 1mV) als ADC-Eingang. Zehnfache Verstärkung müßte also 3,5V bringen. Meine Betriebsspannung ist 3,7V also müßte doch so 230-240 als 8Bit-Wert rauskommen und nicht 120! Vielleicht erwartet der Atmel als Input Negative Differential eine negative Spannung und nicht GND?!? Du schreibst, daß die 1fache Verstärkung den "normalen" Zweck erfüllt. Die MUX-Wahl 0 - 7 ist doch aber dafür zuständig. Die 1fache Verstärkung (1x) wird im Datenblatt extra mehrfach später als MUX-Wahl angegeben. Schau' mal im Datenblatt (S.243/244) nach, vielleicht wirst Du da schlauer drauß als ich! Sebastian
Hallo, So Sachen hatte ich auch schon ... 1. Seite 326 Tabel 136 im Datenblatt beachtet ? Singel Ended Conversion 10 Bit Gain 1 or 20x 8 Bit Gain 200x 7 Bit was soll man noch mit 7Bit ? Hab´s es zwar schon verwendet aber der Echte Reißer ist es nicht 2. Das habe ich auch schon mal gefragt und nie eine antwort gefunden, für was das von Nöten ist . 3. 1 Fach ist halt der Differenzialunterschied mal 1 (aber nur noch 8 Bit !!) Gruss HansHans
Hi Hans, komisches Datenblatt... Oben steht eine Verstärkung von 10x und in Table 136 20x. Seltsam! Aber selbst wenn's nur 8 Bit sind. ADLAR ist 1, damit das ADC-Ergebis left shifted und das müstste doch trotzdem so 230-240 geben, oder?!? Für 3.: Das klingt logisch, danke! Sebastian
Eine typische Verwendung für die 200fache Verstärkung trotz nur 7 Bit Auflösung (der Rest wird einfach mal in den Störsignalen untergehen) dürfte ein Stromsensor sein. Wenn man irgendwo über einem Shunt den Spannungsabfall messen will, um einen Strom zu bestimmen (Stichwort: Batterieladegerät), dann hat man ohnehin schon mal wenig Spannungsdifferenz. Wenn man in der positiven Leitung mißt, teilt man dann beide Spannungen u. U. noch herunter, damit sie im Wertbereich des ADC liegen, damit teilt man also die Spannungsdifferenz noch weiter. Mit der 200fachen Verstärkung bekommt man dann wenigstens wieder was auswertbares daraus. 100 verschiedene Werte sind dabei sicher gut genug, meist geht es ja nur um eine qualitative Abschätzung, nicht um irgendeine Messung im Sinne von ,,Meßgerät''. Naja, und die 1fache ,,Verstärkung'' braucht man eben überall dort, wo man zwar differenziell, aber ohne wirkliche Verstärkung arbeiten muß, weil die Spannungsdifferenz eben den vollen Umfang annehmen kann. Du hast auch dran gedacht, daß die Differenzwandlung positive und negative Werte ergeben kann (also einen signed integer), während die single-ended conversion immer positive Werte (einen unsigned int) ergibt? Damit sind effektiv für den Betrag bei der Differenzmethode nur noch 9 bit übrig.
Hi Jörg, danke für die Erklärungen! Hm, wenn das ganze signed ist, würde ja alles passen! Meine gemessenen 120 x2 = 240, genau meine Vermutung! Aber kann das sein? Der ADC nimmt GND als - und meine 3,7V als +. Müßte dann 1,85V nicht 0 ergeben? 3,7V dann 127? Und GND vor allem 255? Wegen signed? Ich bekomme aber von 0V bis 0,35V einen Anstieg von 0 auf 120 und nicht von 255 auf 0 auf 127. Sebastian
> Müßte dann 1,85V nicht 0 ergeben?
Nein, 0 wäre ja 0 V Spannungsdifferenz. Da Du einen Eingang auf GND
hast, kannst Du nur den halben Wertebereich nutzen. 0 bekommst Du
dann, wenn der Meßeingang ebenfalls auf 0 liegt. Negative Werte
bekämst Du für negative Spannungen am Meßeingang, aber die sind
wahrscheinlich (Datenblatt habe ich jetzt nicht verglichen) elektrisch
verboten. Naja, -200 ... -100 mV gehen vielleicht gerade noch, weil
da zumindest die Schutzdioden nicht ansprechen, kann aber gut sein,
daß der Eingangsverstärker Spannungen negativer als GND einfach mal
nicht verarbeiten kann.
Hi Jörg, hm, Du hast recht, negative Spannungen mag er normal nicht. Was bringt dann aber signed?!? Naja, dann leb' ich halt damit, daß ich anstatt 10x nur 5x Verstärkung bekomme. Sebastian
<Zitat> hm, Du hast recht, negative Spannungen mag er normal nicht. Was bringt dann aber signed?!? </Zitat> Beim Strommessen z.B. Da ist es doch so: fliesst der Strom in eine Richtung, ist der Spannungsabfall über dem Messwiderstand ,sagen wir, positiv. Fliesst er in die andere Richtung, halt negativ. Leigt dein negativer Anschluß bereits am maximal negativ erlaubtem Potenzial (GND), dann ist klar, dass dann in negativer Richtung nichts mehr geht. aber schliess doch mal über einen Spannungsteiler den Pin an halbe Betriebsspannung, dann kommt beim messen der halben Betriebsspannung 0 heraus, darüber und darunter entsprechende Werte etweder bis 127 oder eben bis 255. signed, ich glaube, dafür ist das gedacht. Grüße ans Forum AxelR.
Hi Axel, aja, ich werd's mal testen, danke schön! Sebastian
Genau so ist es wie Axel es schreibt. Für eine Strommessung in beide Richtungen ist es zu gebrauchen . Das habe ich auch schon erfolgreich am laufen , habe mal die Handskizze beigefügt . Beachte R1bis R8 Ich Messe damit den Strom vom bzw in den Akku , und rechne im AVR mit, und weis somit wie viel noch im Akku steckt . Und habe gleichzeitig je nach Mux register Akkuspannung, Akkustrom mit + und Richtung, Solarmodulspannung, oder auch Modulstrom (aber ungenau da Gain nur 1) Es ist also schon ganz gut verwendbar wenn es nicht um extreme Genauigkeit geht . Gruss hanshans
Ich muss den Thread mal kurz aufrollen. Da gebe ich tolle Erkärungen ab und stehe jetzt selber da, wie Max in der Sonne! In der Tat ist es so, dass ich eine eigentlich funktionierende Batterieladeschaltung (MAX1811 an einer LiPo-Zelle) morgen (eigentlich schon heute) in der Klimakammer untersuchen soll. Es geht darum zu sehen, wie die Strom un Spanmnungslagen der Zelle unter 0°C aussehen uws. Ich habe zwar ein USB-Multimeter zum Mitloggen, aber eben nur mit einem Kanal. Iss ja alles kein Problem, hab' ich gesagt, und schnell mitm Atmel 3 ADC-Kanäle fertig gemacht (Dank FastAVR ging das auch sehr einfach). Die Akkuspannung stimmt sehr genau. Die Ladestrommessung hängt in der 5Volt-Leitung vor dem Ladeschaltkreis. Habe ich vor unf hinter dem Schunt 2 zu 1 geteilt, damit ich ischön in der Mitte meiner AVR-Betriebsspannung liege. Kanal2 nehm ich zum Spannung messen, Kanal 0 und 1 fürn Strom. Jetzt: Kann mir bitte einer mal die Interpretation der Messwerte aus dem Datenblatt erörtern (zwei,drei Sätze reichen)? muss ich da nun 512 abziehen? 0x200 sei maximaler negativer Ausschlag 0x1FF maximaler positver Ausschlag. Wie schiebe ich das in den beiden ADC Datenregistern hin und her? Leftjustfied oder nicht? Es funktioniert ja schon, Hardware steht soweit, sendet alle Sekunde auf dr seriellen Spannung und Strom. Strom aber irgentwie durch mich in nicht zuordbaren Größen. wenn ich beide kanäle zusammenschalten (drähte ab vom Shunt und zusammentüddeln) muss doch 0x00 angezeigt werden, oder? Wird aber nicht. Na, wie gesagt, kurze Erleuchtung wäre nett (und notwendig). Nabend und Danke AxelR.
Hallo, ich kann es jetzt auch nicht erklären wie ich es damals gemacht habe. Habe aber noch mal in mein Programm nach gesehen und demnach muß Bei I=0mA der Wert vom ADC (Mux9) auch 0 sein I = 1000mA (Laden ) liefert einen ADC Wert von 100 (dann noch x10 per Software) I = -1000mA (Endladen) liefert ADC 924 (-1024 x10 per Software) I = -1010mA liefert 923 (-1024 x10 per Software) demnach müßten ADC Werte über 512 also Negativer Strom sein Ich hoffe ich konnte dir etwas helfen, mehr kann ich heute nicht mehr nachsehen Gruß HansHans
@HansHans Ja danke erstmal. Genau wie ichs beobachtet hatte. gaanz kleine negative Werte lieferten mir Ergebnisse um 1020-1023, größere negative bis herunter zu 512 (0x200). Na ich rechne morgen früh als erstes nochaml durch. Mit dem 2er Komplement lag ich ja schon richtig - Kunststück, steht im Datenblatt. Aber die 512 machten mich stutzig. Ich habe nun mal keinen VariablenTyp 9bit signed. Muss ich mir einen machen. Ich werd' die ganze Leftjustified machen und dann das höchste Bit als Vorzeichen verwenden. Gibts denn 8Bit signed als Typ? NAja die geben ja auch ganz schön an im Datenblatt: auf der einen Seite sagen sie, dass 512 die Mitte darstellt, auf der anderen Seite setzen sie die Genauigkeit bei GAIN=200x so weit herunter... Da bin ich dann zum stehen gekommen. heisst ja, dass ich dann nur noch Messwerte bekomme, durch 2 oder nur noch durch 4 teilbar sind? Na mal sehen. Ich wills nachher nur fertig haben BEVOR meine Chef da ist. Danke erstmal, wem noch was einfällt (ich nehm ausnahmsweise auch mal einen Codeschnipsel), der kann mir mal beistehen. Gruß Axel PS. Ja, die AVR450 habe ich mir gerade angesehen, allerdingens nur den ASM-Teil für den Tiny15. Dort scheren sich die Herren garnicht ein bisschen über die Grenzen und Genauigkeiten. Hmm, hatte mich nur noch mehr verwirrt
Hallo, was hast du erreicht ? Ich habe mir damals beim Programmieren darüber keine Gedanken gemacht, da das gleich so funktioniert hat wie ich es gebraucht habe . Wenn ich aber jetzt noch mal ins Datenblatt schaue verstehe ich es eigentlich auch nicht . In dem Diagram Differential Measurement Range ist doch zu sehen das die Werte vom ADC für Positiv von 0 1FF Hex gehen und für negativ von 3FF- 200 Hex ....(9bit nach jeder Seite). Aber wenn der AVR doch bei 10 fach Gain nur 8 Bit hat wieso gehen die Werte nicht nur bis FF bzw. 300? Deine Vermutung das nur Messwerte bekomme die nur durch 2 oder 4 teilbar sind kann ich nicht bestätigen das geht bei mir schon Bit für Bit hoch bzw. runter . Was für Werte kommen bei Gain x200 das sollen ja dann nur 7 Bit sein oder? Wehre also schon schön wenn mal einer hierzu was schreiben könnte, das etwas Licht ins Dunkel kommt . Gruss HansHans
Genaues kann ich auch nicht dazu sagen - wenn Atmel aber von 6,7 oder 8bit spricht, heisst das nicht, dass der ADC nur eine entsprechende Zahl von Bits liefert, sondern nur, dass entsprechend der Angabe nur soundsoviel Bits effektiv nutzbar sind (das gleiche Spiel gibts auch bei der Abtastrate/ADC-Frequenz), trotzdem werden 12bit geliefert. Die Sachen mit gain-Option hatte ich mal kurz angetestet und gleich verworfen, kaum sinnvoll nutzbar, ebenso die interne Referenz, mit den Streuungen für Serienproduktion kaum verwendbar. Von Analogtechnik verstehen sie wohl nicht allzuviel (oder es lässt sich in dem Preissegment eben einfach nicht besser lösen, ein besserer nackter ADC oder auch nur eine Referenz kosten mehr, als ein Mega8).
Das heißt also dann bei Gain x10 (8bit) liefert der ADC trotzdem 9bit (+Vorzeichen = 10bit ). Verwenden darf man aber nur die 8 höchsten Bit (Bit 1-8) und das Bit 0 ist zu verwerfen ? Bit 0 kann, also einen gültigen Wert enthalten, muss das aber nicht, oder wird zumindest nicht garantiert ? Das wäre zumindest eine Erklärung.
So ich konnte am Nachmittag dann endlich glänzen. Läuft alles super. Nur mein Chef war schon garnicht mehr im Haus :-(( Mussten sich eben alle anderen Kollegen ansehen, was der Axel wieder gebastelt hatte. Ich habe einfach festgelegt, wenn der Messwert größer als 512 ist, dann sollen 1024 vom Messwert abgezogen werden, sonst alles so lassen. Die Werte springen um 3Bit! Ich habe dann gemittelt und gemacht. Habe mich sogar hinreissen lassen, die Offset Kalkulation mit einzubeziehen, was eigentlich ganz ordentlich funktioniert. Leftjustified (Bit5 im ADMUX) habe mir eben erst angesehen, habe jetzt aber keine Lust mehr, läuft ja nun so auch. Ich stell' mal den Quelltext am Montag in den Anhang(iss nicht viel, aber auf Arbeit) Danke nochmal, schönes WE AxelR.
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.