PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Handy Akku spannung messen



Luppi
08.04.2006, 12:39
hallo

Ich wollte über nen Atmega8 die Spannung (3,6V)eines Handy Akkus an einem Display anzeigen lassen.

Ich habe diese folgendermaßen angeschloßen

Akku GND Akku VCC
| |
100nf |
\ /
\ /
\ /
| |
10k Poti
|
|
Atmega8 Pin PC0(ADC0)

und hier mal das Prog in Bascom was ich geschrieben habe


'================================================= =====
'System-Einstellungen
'================================================= =====
'Definition für Mega 8
$regfile "m8def.dat"

'Angabe der Taktfrequenz (1Mhz)
$crystal = 4000000

'Pin Config
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0

'================================================= =====
'Konfigurationen
'================================================= =====
'Angabe der Display-Größe
$hwstack = 32
$swstack = 40
$framesize = 32

Config Lcdmode = Port
Config Lcdbus = 4 '4 bit mode
Config Lcd = 20 * 4
Initlcd

Config Adc = Single , Prescaler = Auto

'Now give power to the chip

Start Adc



'With STOP ADC, you can remove the power from the chip

'Stop Adc



Dim W As Word , Channel As Byte

' LCD initialisieren und löschen und kurz melden
Cls
Cursor Off Noblink ' Cursor aus
Lcd "Jetzt gehts los " ' kurze Meldung auf Display
Wait 1 ' ne Sekunde warten
Cls
Channel = 0

'now read A/D value from channel 0

Do
W = Getadc(0)
W = W / 284
Locate 1 , 1
Lcd "Batterie " ; Channel ;
Locate 2 , 1
Lcd "Volt " ; W ;
Waitms 100


Loop

End

Nur hab ich ein paar probs.
1 Wird ja nur eine stelle angezeigt sind auch irgendwie kommastellen möglich? Und die anzeige springt nur rum 1-2-3-3-2-1 usw alles durcheinander.

Hab ich irgendwas falsch gemacht?

Wäre nett wenn mir einer helfen könnte. Google und die suche quäle ich schon seit stunden.Danke

Ratber
08.04.2006, 13:16
Ja,die Forensoft löscht angeblich überflüssige Leerzeichen einfach raus.

Deswegen der Tip an die Ascii-Zeichnungen in form eines Codes zu machen.

Also in deinem Beispiel:




Akku GND Akku VCC
| |
100nf |
\ /
\ /
\ /
| |
10k Poti
|
|
Atmega8 Pin PC0(ADC0)


so ,sieht man mehr und auch gleich den kleinen Fehler.

Der Kondensator (100nF) ist falsch.
Der mach dort keinen Sinn es sei denn du willst nur den Wechselspannungsanteil (Spannungsschwankungen) messen.

Besser aufgehoben ist er am Eingang des AD-Wandlers.

Ich mach mal eben ne Zeichnung........Please hold the Line

Edit:

So,hier.

http://img114.imageshack.us/img114/3820/akkuteiler2jg.th.jpg (http://img114.imageshack.us/my.php?image=akkuteiler2jg.jpg)

Damit kannst du dann arbeiten obwohl ich dich mal fragen muß mit welcher Spannung der AVR denn Arbeitet wenn du nen Spannungsteiler verwenden willst ?



Zur Soft:

Wo ist deine Referenz ?
Die würde ich auch noch Angeben denn so vermeidet man Irrtümer und Fehler.

Luppi
08.04.2006, 19:02
Hallo

erstmaldanke für den Tip

im datenbaltt steht folgendes.

• Operating Voltages
– 4.5 - 5.5V (ATmega8)
Power Consumption at 4 Mhz, 3V, 25°C

also denke ich dasd er bis 5,5V vertragen kann.

Sorry bin aber noch nicht so weit mit bascom habe mir viel über die Hilfe angeeignet. Wo muss den die Referenz hin ?

Ist das auch der grund warum meine anzeige immer hin und her springt ?

Ratber
08.04.2006, 20:15
Wegen der Spannung hab ich gefragt weil der ADC nicht mehr Messen und vertragen kann wie die eigene Verorgungsspannung.(Is Technishc hier so gegeben)

Wenn er also zb. mit 2V betrieben wird (Meist die L-Typen die zb. von 1.8-5.5V gehen) dann kann der AD-Wandler auch nur bis 2V messen und würde darüber hinaus schaden nehmen.

Solange also die akkuspannung innerhalb des Versorgungsspannungsbereiches des AVR liegt kannste dir das Poti zum runterteilen und den Kondensator schenken.
Die Auflösung reicht da locker aus.
Allerdings ist es von Vorteil einen Festen Reihenwiderstand und dann den Kondensator (Kann ruhig größer sein) vor den AD-Wandler zu schalten um Kurzfrisitge Spannungseinbrüche auszufiltern die bei der Messung nur stören.

Wenn du aber den AVR genau mit diesem Akku betreiben willst dann ist der Teiler wieder erforderlich denn dann brauichst du eine Feste Referenzspannung die niedriger als Vcc ist und natürlich auch den Teiler damit die Akkuspannung nicht über der Referenz liegt.

Kannste folgen ?



Sorry bin aber noch nicht so weit mit bascom habe mir viel über die Hilfe angeeignet. Wo muss den die Referenz hin ?

Das ist einfach.

Die Option Reference kommt hintendran am Config-Befehl für den AD-Wandler.

Steht auch in der Hilfe.

zb.




Config Adc = Single , Prescaler = Auto , Reference = OFF , AREF , AVCC oder INTERNAL

Luppi
08.04.2006, 23:17
hi

noch nekurze frage.

Ich habe es jetzt so gemacht

Config Adc = Single , Prescaler = Auto , Reference = AVCC

Den Minus Pol des Akkus hab ich auf PC0 gelegt und den Plus Pol auf AVCC.

Kommt dasso hin ?

Ratber
08.04.2006, 23:24
Ähh,was machst du ?

Gib mal ne info was du mit der Schaltung machen willst bzw. welches Problem du jetzt lösen willst.
Das du die Spannung vom Akku messen willst ist mir schon klar.

Woher soll der Controller seinen saft bekommen ?

Luppi
08.04.2006, 23:47
also der avr bekommt seinen saft inmoment über eine Stabilisierte 5V-Spannungsversorgung( Später über nen 9 V Block ). Ich möchte die spannung meines akkus auslesen und auf dem Display als Volt Ausgeben. Also wieviel Volt der akku noch hat.

Ratber
08.04.2006, 23:54
Ok dann legst du die 5V vom Regler auf Vcc "und" Avcc
Beide GND werden auch belegt.
Desweiteren wird der "minus" vom Akku mit Gnd verbunden damit ein gemeinsames Bezugspotentiial vorhanden ist.

Den Rest machste wie in der Schaltung die ich oben gepostet habe.

Die Bascomzeile bleibt so wie se ist (Reference = Avcc)

So sollteat du brauchbare Werte bekommen.

Luppi
09.04.2006, 00:49
jo danke scheint zu funktionieren. habe den Poti soweit runtergedreht das nur noch 2 Volt ankommen mein display zeigt jetzt nen Wert von 615. Jetzt muß ich mir nur noch den wert umrechnen das da dann 3,6V steht.

Danke für dein supi Hilfe TOP

Luppi
10.04.2006, 13:37
Hi

Vielleicht kannst du mir ja nochmal kurz helfen

Ich versuche gerade den Wert auf meinem LCD mit Komma stellen anzuzeigen. Hab mich dabei an die BAscom Hilfe gehalten.

Hier mal einen auszug aus meinem Code.




Dim W As Word
Dim X As Word
Dim Y As Word
Dim Z1 As String * 10
.......
'Wert anzeige berechnen
W = Akku_rc
X = W * 5
Y = X / 1023
Z1 = Format(y , "0.0")

Ich bekomm aber immer die Fehlermeldung

" Source Variable does not match the Target variable [6]" Bezieht sich darauf "Z1 = Format(y , "0.0")"

Vielleicht hast du ja nen Tip für mich

Ratber
10.04.2006, 13:51
Ja,ist einfach.

Y ist kein String und deswegen nimmt er es nicht.

Du mußt erst Y in einen String wandeln und dann formatieren.

Luppi
10.04.2006, 15:42
Hi

Danke das hat geholfen habs zwar mit dem Format nicht hinbekommen aber mit Fusing. Erstmal Danke für deine Super Hilfe.
Hier mal der Code wie ich es jetzt habe vielleicht schaust dir den mal an.


Do
'Analogwerte von Port C.0 lesen
Akku_rc = Getadc(0)
Y = 5.0
'Wert anzeige berechnen
X = Akku_rc * 5
X = X / 1023
Z1 = Fusing(x , "#.##")
'Display wird nur aktualisiert, wenn der Wert sich
'geändert hat:
If Y <> X Then
X = Y
'Wert Anzeige
Locate 4 , 1
Lcd "Volt " ; Z1 ;

End If

Loop

Ratber
10.04.2006, 16:00
Ja,jetzt sehe ich das du nur auf 2 Stellen hinterm komma kappen wolltest.

Ja,dann mit Fusing.



Zum code:

Es wäre Zeitsparend wenn du erst auf einen Unterschied im Wert vergleichst und dann ggf. den Ausgabestring berechnest.
so sparst du bei konstantem Wert die dann überflüssigen Rechnungen.


Also x und Y direkt mit altem und neuem ADC-Wert belegen und nur im falle einer differenz den String berechnen.

Nur so als Vorschlag.

Luppi
10.04.2006, 16:35
hmm genau das hatte ich ja versucht damit. Aber scheint nach deiner aussage ja nicht so zu gehen. Hmm.

X wird ja mit nem adc wert belegt mit dem aktuellen. Nur womit muß ich denn dann Y belegen?

Ratber
10.04.2006, 16:52
Neee,das geht schon soweit.

Ich würde die Abfrage noch vor dem Fusing setzen.

So hast du jede Änderung bis auf die 2. Stelle im Blick.

Luppi
10.04.2006, 17:35
Jo das habe ich direkt mal umgesezt. Danke