Problem bei Messen der Spannungsversorgung

Gast #423464
Lesenswert?

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 #423497
Lesenswert?

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
Gast #423514
Lesenswert?

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
Lesenswert?

"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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren