Hola foro tengo un problema con el código de escritura en una memoria 24lc256
estoy usando las funciones de ejemplo que vienen en el tutorial del compañero Suky que son por i2c por hardware (los pines que ya trae destinado el microcontrolador para tal propósito) y no lo he podido echar a andar.... y pareciera que se queda hasta ciclado...
#include <p18f4610.h>
#include <delays.h> //Libreria para los retardos
#include <stdlib.h> //Libreria para conversiones a string
#include <stdio.h>
#include <sw_uart.h>
#include <string.h>
#include <math.h>
#include <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;
void ByteWriteI2C(unsigned char ByteControl,unsigned char HighDireccion,unsigned char LowDireccion,unsigned char DataI2C);
unsigned char ByteReadI2C(unsigned char ByteControl,unsigned char HighDireccion,unsigned char LowDireccion);
void main(void)
{
ADCON1=15;
ds1302_init(); //Inicializa el reloj ds1302 para su funcionamiento
OpenUART(); //Habilita los puerto de comunicación serial por software
OpenI2C(MASTER,SLEW_OFF);
SSPADD=49; //Fosc=20 MHz y Clock=100 KHz
// TRISCbits.TRISC3=1;
// TRISCbits.TRISC4=1;
Data=10;
Delay_ms(500);
WriteUART(0xFE);
WriteUART(0x01);
WriteLCD(" Prueba a Memoria",17);
ByteWriteI2C(0xA0,0x00,0x00,Data);
Delay1KTCYx(5);
//ByteReadI2C(0xA0,0x00,0x00);
Delay_ms(500);
WriteUART(0xFE);
WriteUART(0x01);
WriteLCD(" Prueba a Memoria 1",19);
}
void ByteWriteI2C(unsigned char ByteControl,unsigned char HighDireccion,unsigned char LowDireccion,unsigned char DataI2C)
{
IdleI2C();
StartI2C();
while(SSPCON2bits.SEN);
putcI2C(ByteControl);
putcI2C(HighDireccion);
putcI2C(LowDireccion);
putcI2C(DataI2C);
StopI2C();
while(SSPCON2bits.PEN);
while(EEAckPolling(ByteControl));
}
unsigned char ByteReadI2C(unsigned char ByteControl,unsigned char HighDireccion,unsigned char LowDireccion)
{
unsigned char Valor;
IdleI2C();
StartI2C();
while(SSPCON2bits.SEN);
WriteI2C(ByteControl);
WriteI2C(HighDireccion);
WriteI2C(LowDireccion);
RestartI2C();
while(SSPCON2bits.RSEN);
WriteI2C(ByteControl | 0x01);
Valor=ReadI2C();
NotAckI2C();
while(SSPCON2bits.ACKEN);
StopI2C();
while(SSPCON2bits.PEN);
return (Valor);
}