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
ich hab jetzt keine Ahnung von Bascom, aber wenn ich die Hilfe richtig verstehe, wertet GetADC doch nur die Channelnummer aus, nicht die Ref-Bits...
Man muss nicht 16x messen, es reicht nach dem Einschalten/Umschalten der Referenz ein paar 100µs zu warten.
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
Dann messen, Ergebnis wegwerfen, 150µs warten, nochmal messen.
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.
Ok, das könnte natürlich eine Erklärung sein. Hast du zufällig eine Zahl wie stark die erste Messung vom richtigen Wert abweicht?
Benedikt K. schrieb: > Ok, das könnte natürlich eine Erklärung sein. Hast du zufällig eine Zahl > wie stark die erste Messung vom richtigen Wert abweicht? Gemessen mit ATtiny25: 228 228 228 228 Channel: 1 (external signal near VCC) 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 1014 Channel: 12 (internal Bandgap) 774 350 264 229 229 229 229 228 228 228 228 228 228 228 228 228 Peter
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 |
Gruss Luki
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...
Hurra! Endlich funktioniert mal ein erster Versuch und zwar habe ich es wie oben erwähnt hingekriegt:
1 | Config ADC =Single , Prescaler =Auto '(keine Reference = Internal) |
2 | Start ADC |
3 | |
4 | . |
5 | . |
6 | . |
7 | |
8 | ersterWert=Getadc(&B1100001) |
9 | ZweiterWert=Getadc(&B11000010) |
10 | |
11 | STOP ADC |
12 | Config ADC =Single , Prescaler =Auto , Reference=AVCC |
13 | Start ADC |
14 | waitus 200 |
15 | |
16 | BandGapWert=Getadc(&B00011110)' Achtung REFS1&REFS0 für AVCC |
17 | |
18 | Stop ADC |
19 | Config ADC =Single , Prescaler =Auto '(keine Reference = Internal) |
20 | Start ADC |
21 | waitus 200 |
nur schwingen nun die "normalen Eingänge" durch das ein und ausschalten des ADCs wie die Sau Siehe angehängtes Bild
Uups die Aussage mit dem Schwingen war falsch! Lag nur daran dass sie nicht terminiert waren!! Gruss Luki
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.