Forum: Mikrocontroller und Digitale Elektronik ADC "Range" bei AT90S8535/4434


von Lars (Gast)


Lesenswert?

Hallo Zusammen,

ich stehe vor dem Problem das ich ein Analoges Signal im Bereich von ca. 
1.8Volt bis ca. 3.5Volt "messen" muss. Da der ADC offensichtlich im 
Bereich 0-5Volt arbeitet, verschenke ich fast die haelfte des 
Messbereiches und somit dringend benoetigte Messgenauigkeit.

Ist es irgendwie moeglich dem ADC zu sagen/vorzugeben in welchem 
Spannungsbereich er messen soll ?! Nach oben hin scheint das laut Doku 
ueber AREF zu gehen (indem ich dort z.B. nur 3.5Volt anlege). Stimmt das 
so ?

Aber wie kann ich die Untergrenze der Spannung veraendern ?

Fuer jeden Erfahrungsbericht/Loesungsvorschlag dankbar,
Lars.

von Holger Barske (Gast)


Lesenswert?

Hi Lars!
Um den gesamten zur Verfügung stehenden Spannungsbereich des ADC nutzen 
zu können, brauchst du ein Messsignal, das bei 0 V anfängt.
Um deinem Signal das beizubringen, empfiehlt sich eine 
Subtrahiererschaltung, die den Pegel des Messignals um 1,8 Volt 
verringert. Das ist eine recht schlichte Schaltung mit einem 
Operationsverstärker, wenn Bedarf besteht, suche ich mal genaueres raus.
Im Idealfalle hättest du dann 3,5V - 1,8V = 1,7 Volt Maximum am 
ADC-Eingang stehen, und da sollte idealerweise auch die Referenzspannung 
liegen.
Allerdings bleibt anzumerken, dass eine solche Gechichte nicht ganz 
unkritisch ist, wenn du die 10 Bit des Wandlers wirklich voll nutzen 
willst. Da spielen dann ganz schnell Offset und Drift des OPs eine 
entscheidende Rolle.
Grüße: Holger

von Lars (Gast)


Lesenswert?

Hi Holger,

tatsaechlich kommt das Signal schon aus einem OpAmp (LM741) heraus.
Da ich aber als Versorgungsspannung nur GND/+5V zur Verfuegung habe, 
kann der OpAmp die Spannung irgendwie nicht richtig "runterziehen" (so 
habe ich mir das zumindest mal ausgedacht, denn eigentlich sollte das 
trotzdem funktionieren dachte ich) [das gleiche gilt auch nach 
oben...ich habs nicht hinbekommen das er am Ausgang ueber 3.8Volt 
kommt]. Es waere deshalb die Frage ob das ueberhaupt moeglich ist da 
noch einen Subtrahierer Dahinterzuschalten bzw. koennte ich dann gleich 
die Beschaltung des bereits vorhandenen OpAmp aendern. Evtl. bin ich 
auch nur zu doof ne OpAmp-Schaltung zu berechnen/bauen, aber viel kann 
man da ja nich falsch machen hoffe ich ;)
Falls es wem hilft koennte ich nen Snapshot von der Schaltung hier 
reinstellen.

Lars.

von Holger Barske (Gast)


Lesenswert?

Hi Lars!
Das du mit 'nem guten alten 741 nicht weit kommst, ist völlig klar.
Was du brauchst, ist ein sogenannter "rail-to-rail"-OP.
Bei denen kann die Ausgangsspannung nämlich Werte bis an die 
Versorgungsspannungsgrenzen annehmen, und das geht mit einem 741 
garantiert nicht. 1,2 Volt unter der Betriebsspannungsgrenze sind ein 
völlig normaler Wert für einen 741.

von Lars (Gast)


Lesenswert?

hmm du hast mir nich zufaellig eine Modellnummer von sonem OP das ich 
mir da mal das Datenblatt ansehen kann ? :)
Sehr fein waere natuerlich ein 741-Pin-Kompatibler, dann muesste ich die 
Platine nicht neu machen.

von Lars (Gast)


Lesenswert?

hab mir mal einen LTC1152 besorgt....der ist mit ca. 15DM dann doch 
leicht teurer als ein 741 ;) Mal sehen ob ich mit dem das Problem 
geloest bekomme.

von Holger Barske (Gast)


Lesenswert?

Hab' gerade mal bei LT nachgeschaut. Gute Wahl.
Viel Glück!
Holger

von Lars (Gast)


Lesenswert?

Hmm irgendwie funktioniert der doch etwas anders als der LM741 ;)

was ich will ist einen Widerstandswert R_M der im Bereich von ca. R_min 
= 900 Ohm bis R_max = 1400 Ohm liegt auf den Spannungsbereich 0 V bis +5 
V abzubilden (kann auch invertiert sein, ist egal).
Zur Verfuegung steht ein LTC1152 und GND/+5V Versorgungsspannung.
Falls sich jemand gut mit OpAmps auskennt waere ich fuer eine 
Berechnung/Formel/Hinweise/Alle infos dazu dankbar :)
Bisher habe ich dass so, das am nichtinvertierenden Eingang ueber einen 
Spannungsteiler (1,5k gegen Masse, R_M gegen VCC) der R_M eingeht. Am 
invertierenden Eingang habe ich ebenfalls ueber einen Spannungsteiler 
eine "geeignete" Spannung angelegt und der Ausgang des Amps ist ueber 
einen Widerstand R_R ebenfalls auf den invertierenden Eingang 
rueckgekoppelt.

Na ich such nochma das Kapitel ueber OpAmps raus, mal sehen ob ich das 
nich selber loesen kann ;)

Lars.

von Günter König (Gast)


Lesenswert?

Hi Lars,
versuche doch mal folgendes:
invertierender Eingang des OP`s vorspannen (z.B. 1,8V),
die Messpannung an den nichtinvertierenden Eingang. Den OP so 
beschalten, das du eine Verstärkung erhältst die eben bei 3,5V am 
Eingang die 5V am Ausgang ergibt.
Evt. noch eine Begrenzung vor dem ADC vorsehen.

Und einen anständigen OP benutzen, der LTC ist sehr gut geeignet.
Musst du den OP eigentlich mit 5V betreiben? Wenn nicht, kannst du auch 
einen LM358 nehmen, sind gleich zwei in einem Gehäuse.

Gruß,
Günter

von David Borschel (Gast)


Lesenswert?

hi...

mal ne frage und zwar: habe mit winavr einen quellcode erzeugt der ca
600 zeilen umfaßt. jetzt ist beim kompilieren mit winavr folgendes
problem aufgetreten.

--------------------------------
avrdude: Device signature = 0x01911e
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: ERROR: address 0x0810 out of range at line 129 of main.hex
----------------------------------
entscheidend LETZTE zeile !!!

kann der speicher evtl. schon voll sein. beim kompilieren allerdings
wird angezeigt, dass erst ca. 33,4% (2,7kB) belegt sind. was ist da
also los??? Benutzt wird der uC "Attiny26" von atmel

danke schonmal

David

von Ernst (Gast)


Lesenswert?

Der ATTiny26 hat 2KB Flash, das ist 0x800 als hex.

avrdude hat also recht, das passt da nicht mehr rein.

(Hat ja auch dein Programm beim Kompilieren schon angezeigt, 2.7 kB)

kann man dem evtl den vorhandenen Speicher irgendwo konfigurieren,
damit auch die Prozentanzeige stimmt?

/Ernst

von David Borschel (Gast)


Lesenswert?

hi...

@ernst: erstmal danke soweit.

heisst das jetzt im klartext das ich das programm abspecken kann auf
2kB? oder gibts da evtl noch nen kleinen trick....??

das mit dem speicher ist echt zu dumm. normalerweise stellt man den
controller typen im makefile von winavr ein. das "sollte" eigentlich
funktionieren.

David

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.