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