Hola jeremy.
Esta es la 2ª vez que escribo este mensaje, dita sea, la 1ª se ha quedado en el limbo.
Te lo he corregido y ahora sí que funcionan los 2 dispositivos a diferentes velocidades.
#INCLUDE <18F2550.h>
#FUSES XTPLL //Cristal mayor de 4Mhz y usando el PLL interno del pic para modificar aumentarlo/disminuirlo.
#FUSES NOWDT
#FUSES NOPROTECT //No proteger el PIC contra lectura.
#FUSES PUT //El Power Up Timer(PUT) espera unos nilisegundos antes de iniciarse el PIC.
#FUSES NOBROWNOUT //No uso reset automatico cuando se encuentra alguna baja tension especificada.
#FUSES NOLVP //No usare programacion en bajo voltaje.
#FUSES PLL1 //Se divide entre 1 el oscilador(4Mhz) a la entrada del divisor porque el sistema necesita estos 4Mhz para generar 48Mhz para el usb.
#FUSES CPUDIV1 //Esto es para la velocidad conque el PIC trabajara. Esta dividido entre 1, entonces trabajara tambien a 48Mhz.
#USE Delay (Clock = 48 000 000)
//#USE RS232 (Baud = 115200, xmit = Pin_C6, rcv = Pin_C7)
#USE RS232 (Baud = 9600, xmit = Pin_C6, rcv = Pin_C7) //Pongo esta porque el PROTEUS no tiene 115200 baud
//#USE I2C (Master, SDA = Pin_B0, SCL = Pin_B1, Slow, Stream = RTC)
//#USE I2C (Master, SDA = Pin_B0, SCL = Pin_B1, Slow, Stream = ExtEEprom)
#USE I2C (Master, Force_HW, Slow, SDA = Pin_B0, SCL = Pin_B1, Stream = RTC)
#include "ds1307_modificado.c" //Funciones para el uso del Real Time Clock del integrado DS1307.
#USE I2C (Master, Force_HW, Fast = 400000, SDA = Pin_B0, SCL = Pin_B1, Stream = ExtEEprom)
#include "24512_modificado.c" //Funciones para el uso de la memoria volatil serial eeprom externa 24LC256.
void main(void)
{
/*
unsigned int8 DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA, DS1307HoraA, DS1307MinutoA, DS1307SegundoA;
unsigned int8 Buffer[256];
unsigned int16 cont, i;
*/
int8 DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA, DS1307HoraA, DS1307MinutoA, DS1307SegundoA;
int8 Buffer[256];
int16 cont, i;
//delay_ms(1500);
//printf("\r\n\n\n-----------jeremy-----------\r\n\n\n");
#USE I2C (Master, Force_HW, Fast = 400000, SDA = Pin_B0, SCL = Pin_B1, Stream = ExtEEprom)
init_ext_eeprom(); //Inicializo la EEprom externa.
#USE I2C (Master, Force_HW, Slow, SDA = Pin_B0, SCL = Pin_B1, Stream = RTC)
ds1307_init(); //inicializamos el RTC (DS1307).
ds1307_set_date_time(11, 6, 8, 3, 13, 32, 0); //día-més-año-día semana-horas-minutos-segundos
cont = 0;
delay_ms(300);
while (TRUE)
{
delay_ms(50);
/////////////////////////////
#USE I2C (Master, Force_HW, Slow, SDA = Pin_B0, SCL = Pin_B1, Stream = RTC)
ds1307_get_date(DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA);
ds1307_get_time(DS1307HoraA, DS1307MinutoA, DS1307SegundoA);
printf("\n\r%02u/%02u/%02u %u\n\r%02u:%02u:%02u", DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA, DS1307HoraA, DS1307MinutoA, DS1307SegundoA);
delay_ms(1000);
#USE I2C (Master, Force_HW, Fast = 400000, SDA = Pin_B0, SCL = Pin_B1, Stream = ExtEEprom)
printf(" Direcion[%Lu] -> %03u", cont, read_ext_eeprom(cont));
putc('\r');
cont++;
//////////////////////////////////
/*
printf("\r\n\nEmpezando lectura secuencial de 24LC512...");
//#USE I2C (Master, Force_HW, Fast = 400000, SDA = Pin_B0, SCL = Pin_B1, Stream = ExtEEprom)
read_ext_eeprom_seq(Buffer, 0, 255);
//delay_ms(1000);
printf(" Terminada:\r\n");
for (i = 0; i <= 255; i++)
{
printf("%03u ", Buffer[i]);
}
////////////////////////////////////
*/
for (i = 0; i <= 255; i++)
{
Buffer[i]=read_ext_eeprom(i);
printf("%03u ", Buffer[i]);
}
}
}
El fallo principal estaba en la función read_ext_eeprom_seq(Buffer, 0, 255); Con esta función solo sacaba el primer elemento de la memoria.
He usado la otra: read_ext_eeprom(i) y con esta si que funcionan los 2 dispositivos bien.
Si lo pruebas físicamente me gustaria que me dijeras si te ha funcionado.
Un saludo