Impossible to have MPLAB Xpress 16F15376 working with HW libraries

38 views
Skip to first unread message

Gilles BARTHELEMY

unread,
Aug 31, 2019, 7:37:59 AM8/31/19
to jallib
Hello,

Impossible to figure out why, I can't make it work with hardware libraries, either for serial or I2C.

With Serial (both UART 1 and 2): receive correctly but never transmit.
With I2C : program doesn't run at all !

BUT ! On the same pins, Software libraries work fine !

I tried all option I could find reading the datasheet, with no success...

I am not able to test on the chip alone (i.e without the developpement board) but I doubt this is the point.

Does this MC require the initialization of a special register ?

Thank you for your help!

Here is my code:

-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%                   %
-- % MPLAB xpress                                                                          %
-- % Langage JAL 2.4                                                           %
-- % GBA 08/2019                                                               %
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%


include
16f15376                     -- target PICmicro


pragma target clock
20_000_000      -- oscillator frequency
--
pragma target OSC      HS                        
-- crystal or resonator
pragma target RSTOSC   EXT1X                    
-- power-up clock select: OSC
pragma target CLKOUTEN DISABLED                  
-- no clock output
pragma target FCMEN    DISABLED                  
-- no clock monitoring
pragma target CSWEN    ENABLED                  
-- allow writing OSCCON1 NOSC and NDIV
pragma target WDT      DISABLED                  
-- watchdog
pragma target BROWNOUT DISABLED                  
-- no brownout reset
pragma target LVP      DISABLED                  
-- no low voltage programming
pragma target MCLR     EXTERNAL                  
-- external reset




include delay
include
print                          -- formatted output library


enable_digital_io
()


TRISD
= 0b00000000 -- RD0 => RD7 : sorties


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- % Déclaration du bus I2C
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- I2C io definition
alias i2c_scl is pin_c3
alias pin_scl_direction  is pin_c3_direction
alias i2c_scl_direction  is pin_c3_direction


alias i2c_sda is pin_c4
alias pin_sda_direction  is pin_c4_direction
alias i2c_sda_direction  is pin_c4_direction


-- i2c setup
const word _i2c_bus_speed = 1 ; * 100kHz
const bit _i2c_level = true   ; i2c levels (not SMB;  i2c_hw only)
include i2c_hardware
-- include i2c_software
i2c_initialize
()


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- % FIN Déclaration du bus I2C
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- % Traitement de l'affichage LCD
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
const byte LCD_ROWS     = 2            -- 2 lines
const byte LCD_CHARS    = 16           -- 16 chars per line
const byte LCD_ADDRESS  = 0x7E         -- LCD module I2C address
include lcd_hd44780_pcf8574            -- LCD lib with serial interface
lcd_init()                             -- initialize LCD
lcd_backlight(on)


procedure lcd_print_at(byte in line, byte in pos, byte in str1[]) is
   line = line - 1
   pos = pos - 1
   lcd_cursor_position(line, pos)
   print_string(lcd, str1)
end procedure


lcd_print_at(1, 1, "Bienvenue")


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- % FIN Traitement de l'
affichage LCD
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- % Traitement des ports RS232
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- -- Définition des valeurs du port série
alias pin_RX_direction  is pin_C7_direction  -- Pin 26 for 40 pin DIP
alias pin_RX1_direction  is pin_C7_direction
alias pin_TX_direction  is pin_C6_direction  -- Pin 25 for 40 pin DIP
alias pin_TX1_direction  is pin_C6_direction


alias Serial_SW_RX_Pin  is pin_C7  -- Pin 26 for 40 pin DIP
alias Serial_SW_TX_Pin  is pin_C6  -- Pin 25 for 40 pin DIP
pin_RX_direction
= INPUT
pin_TX_direction
= OUTPUT


const USART_HW_Serial     = TRUE
const Serial_HW_Baudrate  = 9600
include
Serial_Hardware
Serial_HW_Init


-- const USART_SW_Serial     = TRUE
-- const Serial_SW_Baudrate  = 9600
-- include Serial_Software
--
-- Serial_SW_Init


alias pin_RX2_direction is pin_B7_direction  -- Pin 40 for 40 pin DIP
alias pin_TX2_direction is pin_B6_direction  -- Pin 39 for 40 pin DIP
pin_RX2_direction
= INPUT
pin_TX2_direction
= OUTPUT


const USART_HW2_Serial    = TRUE
const serial_hw2_baudrate = 9600
include serial_hardware2


serial_hw2_init


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
-- % FIN Traitement des ports RS232
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%


Alias LED_CLK is Pin_d4
pin_D4_direction
= output -- clock
Alias LED_STB is Pin_d5
pin_D5_direction
= output -- strobe
Alias LED_DAT is Pin_d6
pin_D6_direction
= output -- data


-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Procedure Led_Send(Byte*2 In Num) Is
-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%


   
Var Byte*2 Renum = Num
   
Var Bit d0 at Renum:0


    LED_STB
= LOW


   
For 16 Loop
        delay_2us
        LED_CLK
= 0
        delay_1us
        LED_DAT
= d0
        delay_1us
        LED_CLK
= 1
        delay_1us
       
Renum = Renum >> 1
   
End Loop


    LED_STB
= HIGH
        delay_1us
    LED_STB
= LOW


End Procedure


for 4 loop
   
Led_Send(0b1111111111111111)
    delay_1ms
(100)
   
Led_Send(0b0000000000000000)
    delay_1ms
(100)
end loop


var byte strb[1]
var Byte Data_Msg = 0


Forever Loop


   
Led_Send(0b1000000000000000)
    delay_1ms
(500)
   
Led_Send(0b0000000000000000)
    delay_1ms
(500)
    strb
[0] = 65
    print_string
(serial_hw_data, strb)
--    print_string(serial_sw_data, strb)
    delay_1ms
(10)


end loop







Rob

unread,
Aug 31, 2019, 7:48:42 AM8/31/19
to jallib
Hi Gilles,

I assume you already saw the answer of Rob Hamerling. I also had problems that the serial interface would not work for different PICs. For some reason you always have to assign the pins to the right pin even if that is the default.

I had the same problem for a 16F19176 and the solution was to explicitly assign the pins to their default, example below.

-- Assign the pins. Note: This must always be done to let it work even for
-- the default assignment.
include pps
pps_control_lock(FALSE)
RC6PPS = PPS_TX1  -- TX1 re-assigned to C6  (default)
RX1PPS = PPS_RC7  -- C7 re-assigned to RX1  (default)
pps_control_lock(TRUE)


Kind regards,

Rob
Message has been deleted

Gilles BARTHELEMY

unread,
Sep 2, 2019, 8:59:40 AM9/2/19
to jallib
Hello,

I added this lines to my code:


include pps
pps_control_lock
(FALSE)


-- UART
RC6PPS
= PPS_TX1    -- TX1 re-assigned to C6  (default)
RX1DTPPS
= PPS_RC7  -- C7 re-assigned to RX1  (default)
RB6PPS
= PPS_TX2    -- TX2 re-assigned to B6  (default)
RX2DTPPS
= PPS_RB7  -- B7 re-assigned to RX2  (default)


-- I2C
RC3PPS
= PPS_SCL1    -- pin_C3 is SCL1 output
SSP1CLKPPS
= PPS_RC3 -- SCL1 input at pin_C3
RC4PPS
= PPS_SDA1    -- pin_C4 is SDA1 output
SSP1DATPPS
= PPS_RC4 -- SDA1 input at pin_C4


pps_control_lock
(TRUE)

and all started to work like a charm!

Thank you for this HUGE help.

Robson M.S

unread,
Nov 14, 2019, 3:19:08 PM11/14/19
to jallib
Hello, could you make the program available, please?

I tried everything to get the i2c1 module plugged in, but to no avail. 
My code is attached.

Thanks for your help.
eusart.X.rar

RobJ

unread,
Nov 14, 2019, 3:36:19 PM11/14/19
to jallib
Hi Robson,

This is a C file. This forum is about the JAL programming language.

Kind regards,

Rob

Robson M.S

unread,
Nov 14, 2019, 3:43:49 PM11/14/19
to jallib
I'm Sorry.
Reply all
Reply to author
Forward
0 new messages