Ik ben bezig met het bouwen van een "power managent systeem". Hiermee kan ik de spanning en stroom (max4070) van een batterijpack meten. Ook kan ik hiermee de batterijen opladen (MAX713) en de temperatuur (DS1620) van de batterijen in de gaten houden. Alles werkt behalve de 4e temperatuursensor. Onderstaande code gemaakt in Mecanique Microcode Studio Plus. Heeft iemand een idee?
' PIC16F88
INCLUDE "MODEDEFS.BAS"
DEFINE OSC 20
ADCON0 = 2 ' PINS TO ANALOG INPUT, Vref = GP1
ADCON1 = %00100000 ' Vref+
RST var PORTB.0 ' Reset pin
CLK var PORTB.1 ' Clock pin
B0 Var byte
temp var word ' Storage for temperature
RESULT VAR byte
J VAR BYTE ' A/D CHANNEL NUMBER BYTE VARIABLE
Low RST ' Reset the device
MAIN:
LOW PORTA.4
pause 100
HIGH PORTA.4
FOR J = 0 TO 1 ' 2-CHANNEL COUNTER LOOP
ADCON0 = 65 + (J*8) ' SET A/D Fosc/8 + A/D = ON
PAUSE 10 ' PAUSE 10mS FOR CHANNEL SETUP
ADCON0.2 = 1 ' SET GO/DONE-BIT + START CONVERSION
PAUSE 10 ' PAUSE 10mS FOR CONVERSION
RESULT[J] = ADRES
NEXT
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[1]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[RESULT[0]]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[2]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[RESULT[1]]
PAUSE 50 ' PAUSE 250mS
' -- Read First DS1620
RST = 1 ' Enable device
Shiftout PORTB.2, CLK, LSBFIRST, [$ee] ' Start conversion
RST = 0
Pause 250 ' Wait 1 second for conversion to complete
RST = 1
Shiftout PORTB.2, CLK, LSBFIRST, [$aa] ' Send read command
Shiftin PORTB.2, CLK, LSBPRE, [temp\9] ' Read 9 bit temperature
RST = 0
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[3]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[temp]
PAUSE 50 ' PAUSE 250mS
' -- Read Second DS1620
RST = 1 ' Enable device
Shiftout PORTB.3, CLK, LSBFIRST, [$ee] ' Start conversion
RST = 0
Pause 250 ' Wait 1 second for conversion to complete
RST = 1
Shiftout PORTB.3, CLK, LSBFIRST, [$aa] ' Send read command
Shiftin PORTB.3, CLK, LSBPRE, [temp\9] ' Read 9 bit temperature
RST = 0
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[4]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[temp]
PAUSE 50 ' PAUSE 250mS
' -- Read third DS1620
RST = 1 ' Enable device
Shiftout PORTB.4, CLK, LSBFIRST, [$ee] ' Start conversion
RST = 0
Pause 250 ' Wait 1 second for conversion to complete
RST = 1
Shiftout PORTB.4, CLK, LSBFIRST, [$aa] ' Send read command
Shiftin PORTB.4, CLK, LSBPRE, [temp\9] ' Read 9 bit temperature
RST = 0
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[5]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[temp]
PAUSE 50 ' PAUSE 250mS
' -- Read Forth DS1620
input PORTB.6
RST = 1 ' Enable device
Shiftout PORTB.6, CLK, LSBFIRST, [$ee] ' Start conversion
RST = 0
Pause 250 ' Wait 1 second for conversion to complete
RST = 1
Shiftout PORTB.6, CLK, LSBFIRST, [$aa] ' Send read command
Shiftin PORTB.6, CLK, LSBPRE, [temp\9] ' Read 9 bit temperature
RST = 0
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[6]
PAUSE 50 ' PAUSE 250mS
SEROUT PORTB.5,T2400,[temp]
PAUSE 50 ' PAUSE 250mS
' --------------------------
goto MAIN
END ' END PROGRAM