Hallo Zusammen
ich versuche schon seit mehreren Abenden erfolglos eine AVCC versus
Bandgap-messung mit einem Attiny 26 durchzuführen. Ziel: wie schon 1000
mal Versorgungsspannungsüberwachung...
gemäss Attiny26 Manual muss ich MUX1-4 auf 1 Setzen und logischerweise
die REFS0 & REFS1 auf 0 Setzen
also sieht mein Basic Code wie folgt aus:
blabla= Getadc(&B00011110)
Denke eigentlich soweit richtig.....nur als Wert bekomme ich durchs Band
weg einen Wert von 470 egal welche Spannung anliegt...
einige Zeilen vorher frage ich mit der Internen Referenz meine ADCs
ab...funktioniert einwandfrei
blublu= Getadc(&B11000100)
kann es sein, dass ich nicht im gleichen Atemzug eine interne Referenz
und und eine AVCC als Referenz verwenden kann??? wie müsste ich das dann
ändern??
Gruss Luki
PS AREF mit 100nf an GND
Man kann die Bandgap als Eingangsspannung mit VCC als Referenz messen.
Bloß gibts da einen Trick, die Bandgap ist sehr hochohmig, daher sind
die ersten Messungen ungültig.
Ich mache erstmal 16 Dummy-Messungen der Bandgap, dann gehts.
Peter
Danke Peter für das Feedback
verstehe ich das richtig dass ich Pro Messung 16 dummy Messungen machen
soll? . Es genügt nicht z.b über eine Minute im 1 Sek. Takt zu messen
weil da ändert sich rein gar nichts......
Gruss Luki
Hm...Danke für euere Antworten.
Scheint, dass ich etwas auf dem Schlauch stehe.
Wenn ich erst einen AD abgefragt habe mit interner Referenz
blublu= Getadc(&B11000100)
und als nächstes ein
Waitus 150
und dann
blabla= Getadc(&B00011110)
aufrufe, bringt das nichts, oder?? weil die Referenzumschaltung wird ja
erst im Aufruf
blabla= Getadc(&B00011110) gemacht
Gruss Luki
Benedikt K. schrieb:
> Man muss nicht 16x messen, es reicht nach dem Einschalten/Umschalten der> Referenz ein paar 100µs zu warten.
Mit der Referenz hat das nichts zu tun.
Es ist die Zeit vom Umschalten des ADC-MUX bis die Sample&Hold-Stufe
umgeladen ist.
Wurde vorher 5V gemessen, sieht man die Meßwerte absinken.
Wurde vorher 0V gemessen, sieht man die Werte ansteigen.
Man könnte auch nur den MUX umschalten und dann warten, bis man die
Messung startet, sollte funktionieren.
Peter
Peter Dannegger schrieb:
> Es ist die Zeit vom Umschalten des ADC-MUX bis die Sample&Hold-Stufe> umgeladen ist.> Wurde vorher 5V gemessen, sieht man die Meßwerte absinken.> Wurde vorher 0V gemessen, sieht man die Werte ansteigen.
D.h. nach dem Umschalten der ADMUX Bits muss man die ersten paar
Messungen verwerfen?
Kannst du diese Aussage belegen? Ich habe da nämlich andere Erfahrungen
gemacht (ich lasse den ADC meist kontinuierlich laufen und schalte im
Interrupt nacheinander alle benötigten Kanäle durch. Demnach müssten
sich die Eingänge deiner Aussage nach gegenseitig beeinflussen, oder?)
Es dauert einige Zeit bis eine frisch eingeschaltete Referenz sauber
funktioniert und das steht auch im Datasheet drin. Vielleicht wird die
Referenz nur eingeschaltet, wenn ADC oder AC sie wirklich brauchen.
Benedikt K. schrieb:
> D.h. nach dem Umschalten der ADMUX Bits muss man die ersten paar> Messungen verwerfen?
Nur bei der Bandgap, weil die hochohmig ist (mehrere Megaohm).
Externe niederohmige Quellen (<100k) liefern sofort ne gültige Messung.
Peter
P.S.:
Die Bandgap ist bei mir immer eingeschaltet, weil ich Brownout brauche,
damits mir nicht den EEPROM zerschießt.
Oh, das ist heftig. Ich hätte nicht gedacht, dass die Werte derart
falsch sind. Gut zu wissen wenn ich das mal verwende. Sowas könnte Atmel
auch mal im Datenblatt erwähnen...
luki schrieb:
> aufrufe, bringt das nichts, oder?? weil die Referenzumschaltung wird ja> erst im Aufruf> blabla= Getadc(&B00011110) gemacht
so wie ich die Hilfe zu Getadc verstehe, ändert das die Referenz doch
gar nicht? meines Erachtens ist es schnuppe, ob du (&B00011110) oder
(&B11011110) schreibst, die Funktion wertet nur die MUX-Bits aus...
Damit ist nicht die Umschaltung der ADC-Referenz gemeint, sondern die
Umschaltung des Muxers auf die Bandgap-Referenz als zu messenden
Analogwert. Eben um VCC zu messen: mit AVCC als Referenz die Bandgap
messen und umrechnen.
A. K. schrieb:
> Damit ist nicht die Umschaltung der ADC-Referenz gemeint, sondern die> Umschaltung des Muxers auf die Bandgap-Referenz als zu messenden> Analogwert. Eben um VCC zu messen: mit AVCC als Referenz die Bandgap> messen und umrechnen.
schon klar, aber so wie ich seinen Code verstehe, will der doch
gleichzeitig mit dem Channelwechsel auch die Referenz ändern...und ich
kann aus der Bascom-Hilfe nicht ersehen, dass dies gehen sollte. Dazu
müsste man kurz mal in den Assembler-Code schauen, wie dort das Register
gesetzt wird...
Über seinen Code kann ich nichts sagen, weil der mir nicht bekannt ist.
Die Schnipsel oben sind dafür nicht aussagekräftig genug und meine
Glaskugel streikt.
A. K. schrieb:
> Über seinen Code kann ich nichts sagen, weil der mir nicht bekannt ist.> Die Schnipsel oben sind dafür nicht aussagekräftig genug und meine> Glaskugel streikt.
schon klar...aber er schreibt eben:
> die REFS0 & REFS1 auf 0 Setzen>> blabla= Getadc(&B00011110)
und
> Internen Referenz meine ADCs>> blublu= Getadc(&B11000100)
als ob der Channelwert einfach ins ADMUX geschrieben wird..kann aber
eigentlich nicht sein, da es ja auch AVRs gibt, bei denen es noch MUX5
und REFS2 gibt...
Hallo zusammen
Danke vielmal für eure wertvollen Beiträge!
Justus Skorps schrieb:
>schon klar, aber so wie ich seinen Code verstehe, will der doch>gleichzeitig mit dem Channelwechsel auch die Referenz ändern
Absolut Richtig...das will ich!
Wie oder was muss ich dann ändern
A. K. schrieb:
>Über seinen Code kann ich nichts sagen, weil der mir nicht bekannt ist.>Die Schnipsel oben sind dafür nicht aussagekräftig genug und meine>Glaskugel streikt
Sorry das war nicht mein Ziel. Ich bin einfach absolut ein Neuling in
dem Bereich... Der Code sieht wirklich nicht anders aus...
1
2
Config ADC =Single , Prescaler =Auto
3
'(vielleicht ist hier der Fehler ...muss der ADC = FREE sein)
4
Start ADC
5
On ADC _ADC Nosave
6
7
.
8
.
9
.
10
11
ersterWert=Getadc(&B1100001)
12
ZweiterWert=Getadc(&B11000010)
13
BandGapWert=Getadc(&B00011110)' Achtung REFS1&REFS0 für AVCC
luki schrieb:
> Absolut Richtig...das will ich!> Wie oder was muss ich dann ändern
Wie gesagt, ich benutze kein Bascom und kann dir nicht sicher sagen,
dass deine Methode nicht funktioniert oder das sie deinen Fehler
produziert. Aber eigentlich übergibt man Getadc() nur den Channel, also
eine Zahl zwischen 0 und 15(?). Die Referenz stellt man über Config ADC
ein, siehe http://avrhelp.mcselec.com/index.html?config_adc.htm
Danke Justus
Langsam gehen mir die Augen auf!
>so wie ich die Hilfe zu Getadc verstehe, ändert das die Referenz doch>gar nicht? meines Erachtens ist es schnuppe, ob du (&B00011110) oder>(&B11011110) schreibst, die Funktion wertet nur die MUX-Bits aus...
was heisst denn "wertet nur die MUX-Bits" aus? Was KÖNNTE ich damit dann
anfangen??
Gruss Luki
luki schrieb:
> was heisst denn "wertet nur die MUX-Bits" aus? Was KÖNNTE ich damit dann> anfangen??
eben den Kanal/Pin einstellen, welcher geADCt werden soll
Du hast mich falsch verstanden.
Die Frage was mir die REFS Bit bringen, der Rest ist klar?
Aber zurück zum Topic:
Also muss ich den ADC eigentlich erst Stoppen und neu starten mit der
neuen Config
Config ADC =Single , Prescaler =Auto , Reference = AVCC
und dann die BANDGAP Messung machen und danach den ADC wieder stoppen
und wieder mit Internal Reference starten...
Poahh ob das gut geht? Muss ich warscheinlich erst testen
Gruss Luki
luki schrieb:
> Die Frage was mir die REFS Bit bringen, der Rest ist klar?
Die stellen schon die Referenz ein. Allerdings ist das imo der
Getadc()-Funktion egal, die nimmt nur die untersten Bits von dem Wert,
den sie bekommt, und stellt damit den Channel ein. kA ob man in Bascom
auch Register direkt beschrieben kann, dann könnte man Channel &
Referenz gleichzeitig einstellen...könnte dann aber wahrscheinlich den
Rest der Getadc-Funktion nicht benutzen...