Problem bei Messen der Spannungsversorgung

Gast #423464
Hallo, ich möchte die Spannungsversorgung meines Atmega's in Prozent 
auslesen,
dazu habe ich eine Leitung vom Plus Pol an den AD-Wandler angeschlossen, 
funktioniert auch, wenn ich nämlich die Leitung angeschlossen habe zeigt 
er mir 100 % Spannung an, was ich aber nicht verstehe ist das wenn ich 
die Leitung
abklemme er mir immernoch einen Wert zwischen 30 und 45 % ausliest wie 
kann das sein?

int adcwert = read_adc(0);
int spannung = adcwert / 10.23;
uart_puts("\r\nSpannungsversorgung: ");
PrintInt(spannung);
uart_puts(" %\r\n");
waitsek(1);
Gast #423492
mach mal vom ADC PIN nen Widerstand gegen Masse (10 oder 20k Ohm), denke 
das da ne gewisse Kapazität da ist und diese hält die Spannung aufrecht.
Gast #423497
Hallo,

was ich jetzt garnicht verstehe:
was nimmst Du als Referenz?
Wenn Du Vcc als Referenz nimmst, wirst Du immer 100% bekommen.

Wenn Du die interne Referenzspannung nimmst, brauchst Du sowieso einen 
Spannungsteiler zwischen Vcc und GND, der Vcc auf die interne 
Referenzspannung (ca. 2,56V z,B, beim ATMega8) herunterteilt, damit Du 
zu Deinen 100% kommst.

Damit wäre der Abschluß gegen GND dann ja gewährleistet.
Oder benutzt Du eine externe (dann stabile und von Vcc unabhängige 
Spannung) Referenzspannung?

Ansonsten: AVcc Drossel drin, 100n Cs zwischen Vcc bzw. AVcc gegen GND?
100n ARef gegen GND?

Interner PullUp an entsprechenden Pin des ADC aus?

Gruß aus Berlin
Michael
#423508
Du kannst die Betriebsspannung auch gut ohne externe beschaltung 
messen... nimm einfach VCC als Referenz und miss dann die Interne 
Bandgap spannung. Der AD-Wert steigt dann mit fallender Betriebsspannung

gruß
fabian
Gast #423511
"nimm einfach VCC als Referenz und miss dann die Interne
Bandgap spannung. Der AD-Wert steigt dann mit fallender Betriebsspannung
klingt gut, aber "Bandgap spannung" sagt mir nix
Gast #423514
ja die Einwände sind berechtigt, du brauchst einen Referenz. Da könntest 
du z.b. was mit einem Widerstand und einer 3V Z-Diode aufbauen die 
Versorgungsspannung gibst du dann über nen Spannungsteiler an den ADC 
Pin, damit die Spannung im Bereich der Referenz bleibt.

Ich meine einen Widerstand da rein wo du auch deine 5V draufgibst, wenn 
du jetzt die 5V abklemmst wird der ADC-Pin über den Widerstand gegen 
Masse gezogen(und ggf. entladen) so das es dir dann 0% statt 40% 
anzeigt.

Den internen Pullup schaltest du dadurch aus, indem du mit eine 1 an den 
entsprechenden Portpin ausgibst oder halt alle mittels
ldi temp, 0b11111111
out portX, temp

oder das 2te bit im SFIOR-Register setzen, dann sind generell alle 
Pullups deaktiviert

ldi temp, 0b00000010
out SFIOR, temp
Gast #423527
"Den internen Pullup schaltest du dadurch aus, indem du mit eine 1 an 
den
entsprechenden Portpin ausgibst oder halt alle mittels
ldi temp, 0b11111111
out portX, temp"

Das stimmt natürlich nicht - es ist genau umgekehrt: 0 auf den Portpin = 
Pullup aus.

Gruß, Marcus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.