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);
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.
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
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
"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
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
ok, also so meinst du das: PORT C Pin 0 <---- R1 ----- GND und dann zwischen Port C Pin0 und R1 die Versorgungsspannung ?
"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
hm solange ich die pullups nicht mit "PORTC = 0xff;" aktiviert habe sind sie doch aus? oder irre ich mich da?
Stichwort Bandgap Spannung: lies mal dein Datenblatt. bei der beschreibung der Ports des AD-Multiplexers gibt es als input auch "Bandgap Reference". Typischerweise das letzte in der Liste. Lesen hilft. Gruß Fabian
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.