PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD ADC Ausgabe Problem



runner02
10.03.2012, 20:11
Hallo,

Ich versuche, mit einem Atmega8 seine eigene Versorgungsspannung viac LCD auszugeben.

Dazu habe ich folgenden Code geschrieben


$regfile = "m8def.dat" ' specify the used micro
$crystal = 1000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 150 ' default use 32 for the hardware stack
$swstack = 150 ' default use 10 for the SW stack
$framesize = 60 ' default use 40 for the frame space



'note : tested in PIN mode with 4-bit

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6


Dim A As Byte
Dim Druck As Byte
Dim Var As Byte
Dim Uv As Byte
Dim X As Byte
Dim Y As Byte
Config Lcd = 16 * 2
'configure lcd screen

'other options are 16 * 4 and 20 * 4, 20 * 2 , 16 * 1a
'When you dont include this option 16 * 2 is assumed
'16 * 1a is intended for 16 character displays with split addresses over 2 lines




Config Timer1 = Timer , Prescale = 1024
Enable Timer1



Ddrd = &B00000000 'input D
Var = 35
Druck = 150



Enable Interrupts



Cursor Off Noblink

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

Start Adc

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

Dim W As Word , Channel As Byte

'now read A/D value from channel 0




' ------------------------------------ hier liegt der Hund im Graben

Do

W = Getadc(4)
Uv = W * 25
Uv = Uv / 10

Lcd "Vers.Spannung:"
Locate 2 , 0
Lcd Uv ; " mV " ; "-" ; W

Waitms 1800
Cls

' --------------------------------

Loop
End




Rauskommen tut dann immer 16 mV -16
Gemessen sinds 2,55V - 2,54V (1 kOhm + 1 kOhm)

Wieso der ADC Minuswerte angibt, ist mir ein Rätsel. Habe den Spannungsteiler auch umgepolt (wie zu erwarten kein Effekt)

Mit dem Beispielprogramm hat es geklappt, der hat alle Channels (ADC 0-7) durchgeswitched. 546 , 433 usw kam immer raus also realistische Werte. Wieso er jetzt negative Werte ausgibt?

Habt ihr eine Idee???



EDIT: Auch wenn ich 0-W oder -1*W rechne, gibt er nachher Minuswerte aus!!

Mfg

runner02
10.03.2012, 20:31
Danke, hat schon geklappt.


Ich hatte "-" statt " " geschrieben ;) ...... Und statt Byte benutze ich jetzt Long. Und dann gehts :D

Kampi
10.03.2012, 20:31
Der ADC kann schonmal keine negativen Spannungen messen. Zumindest nicht wenn du nur eine positive Versorgungsspannung hast.
Deswegen vermute ich einen Softwarefehler.
Warum rechnest du sowas?

W = Getadc(4)
Uv = W*25
Uv = Uv/10

Der ADC hat eine Auflösung von 10 Bit. Das heißt 1 Bit entspricht 5V/1024 = 0,0048V. Du sagst du hast einen Spannungsteiler mit 2x 1kOhm. Das heißt bei 5V liegen 2,5V am ADC an, also immer die Hälfte der Spannung am gesamten Spannungsteiler.
Du rechnest nun so:

W = Getadc(4)
W = W * 0,0048 (damit rechnest du den Digitalwert in eine Spannung um, z.B. hast du bei einer Spannung von 2,5V einen Wert von 512 und 512 x 0,0048 = 2,45...)
W = W * 2 (damit "kompensierst" du den Spannungsteiler)

Locate 1, 1
LCD "Vers. Spannung:"
Locate 2, 1
LCD W ; "V"

So sollte er dir das richtige anzeigen :)

Edit: Nagut wenn es so einfach war ^.^