Hallo,
Ich versuche, mit einem Atmega8 seine eigene Versorgungsspannung viac LCD auszugeben.
Dazu habe ich folgenden Code geschrieben
Code:
$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
Lesezeichen