Estoy probando la librería del de I2C por software y tengo algunas dudas, no se si alguien de por aqui ya la habrá probado y le le haya funcionado al 100....
Tengo mi siguiente código simplemente para probar la escritura y según yo no se me esta habilitando la comunicación entre la memoria 24lc256 y el microcontrolador PIC18F4610.
El codigo de prueba es el siguiente:
#include <p18f4610.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <sw_uart.h>
#include <delays.h>
#include <sw_i2c.h>
#include "./Include/lcd_serial.h"
//#include "./Include/LCD_CRYSTAL.h"
//#include "./Include/Teclado.h"
//#include "./Include/ds1302.h"
#pragma config OSC=HS,FCMEN=OFF,IESO=OFF
#pragma config PWRT=ON,BOREN=OFF,BORV=0,WDT=OFF,WDTPS=32768
#pragma config MCLRE=ON,LPT1OSC=OFF,PBADEN=OFF,CCP2MX=PORTBE
#pragma config STVREN=OFF,LVP=OFF,XINST=OFF,DEBUG=OFF
#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF,CPB=OFF
#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF,WRTB=OFF,WRTC=OFF
#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF
unsigned char Data,Var;
void byte_write(void);
void main(void)
{
ADCON1=15;
OpenUART(); //Habilita los puerto de comunicación serial por software
Delay_ms(500);
WriteUART(0xFE);
WriteUART(0x01);
WriteLCD(" Prueba a Memoria",17);
byte_write();
Delay1KTCYx(5);
Delay_ms(500);
WriteUART(0xFE);
WriteUART(0x01);
WriteLCD(" Prueba a Memoria 1",19);
}
void byte_write(void)
{
SWStartI2C();
SWWriteI2C(0xA0);
SWAckI2C();
SWWriteI2C(0x00);
SWAckI2C();
SWWriteI2C(0x00);
SWAckI2C();
SWWriteI2C(0x66);
SWAckI2C();
SWStopI2C();
}
De la librería sw_i2c.h modifique los pines que venian por default y puse los siguientes:
#if defined(SW_I2C_IO_V1)
#define DATA_LOW TRISEbits.TRISE2 = 0; // define macro for data pin output
#define DATA_HI TRISEbits.TRISE2 = 1; // define macro for data pin input
#define DATA_LAT LATEbits.LATE2 // define macro for data pin latch
#define DATA_PIN PORTEbits.RE2 // define macro for data pin
#define CLOCK_LOW TRISEbits.TRISE1 = 0; // define macro for clock pin output
#define CLOCK_HI TRISEbits.TRISE1 = 1; // define macro for clock pin input
#define SCLK_LAT LATEbits.LATE1 // define macro for clock pin latch
#define SCLK_PIN PORTEbits.RE1 // define macro for clock pin
No se porque no me funciona esto....