Page 1 of 1

Any reason this simple code works on Pic24 and not pic18

PostPosted: Sun Jul 15, 2018 9:00 pm
by Timbo
Hi

This is some old code below that I'm testing now runs fine on the Pic24 Firewing board but not on the 18 series.

The shield is a simple power and 2 pullups for the SLC and SDA lines on _D2 and _D3

On the Pic24 series I get back sensible data on the Pic18 I get back 0x7FFF which is all bits set

Code: Select all
'
// tested On Firewing For PIC24 board R2, compiler Firewing 16
// configure Then import module...
#option I2C_SCL = _D2   ' 5v tolerent on PIC24, PIC32
#option I2C_SDA = _D3   ' 5v tolerent on PIC24, PIC32
#option I2C_DELAY_US = 3
imports I2c             


// Device constants...
private const START_CYC_RAM As Byte = &H02
private const CFG_SIF_TO_I2C As Byte = &H52
private const START_NOM As Byte = &H71
private const I2C_DEVICE_ADDRESS As Byte = &H78 << 1

// program entry point...
Sub Main()

    Dim Tally As Ulong = 0
    Dim Index As Byte = 0
    Dim TallyAverage As Ushort
    Dim Barg As Ushort   
         
   // Loop forever...
   While true           
   
      // read data - High Byte, Low Byte
      // The pressure is transferred As 15 Bit value (Bit 0 – 14). From the 15
      // Bit measured values, approx. 12 Bit are used As resolution, the three
      // least significant bits can be ignored.
      Dim Result As ushort
      I2C.Start()                 
      I2C.WriteByte(I2C_DEVICE_ADDRESS + 1)                                     ' Address the device and tell it you want to do a read by setting the LSB to 1
      Result.Byte1 = I2C.ReadByte()                                             ' Read in the MSB
      I2C.Acknowledge(IsAcknowledge)                                            ' Send an ACK
      Result.Byte0 = I2C.ReadByte()                                             ' Read in the LSB
      I2C.Stop()                                                                ' Send the stop
      Result = Result >> 1                                                      ' Were interested in only 14 bits
       
    Console.Write("value = ", CStr(Result),13,10)

    DelayMS(1000)
   End While
                       
 End Sub