Que tal amigos! saludos nuevamente!! Estoy aqui con nuevas dudas.... ahora con comunicación la i2c.
En fin, ahora estoy intentando realizar la comunicación entre 2 pics, un master 16f877a y un slave 16f88. La idea de primer prueba es mandar 1 dato desde el master al slave.. cosa que ya he logrado realizar GRACIAS a un código que me encontré aqui mismo en TodoPic. PERO dicha comunicación solo puedo realizarla cada 1 segundo. Sé que estoy haciendo muchas cosas mal... y solo necesito que guien mis pasos... q alguno me diga q estoy haciendo mal?? Porque repito... si hace la comunición, simplemente que no puedo realizarla más rapida!!...
El propósito del siguiente programa es q el master envie datos cambiantes cada 1 segundo (tiempo que quiero reducir), y el slave debe de mostrar por el puerto A... pero si cambio el tiempo del master, es decir, cambio de "1000" a "500", los datos no son recibidos correctamente.. y no sé porq??
MASTER::
#include <16F877a.h>
#fuses xt,nowdt
#use delay (clock=4M)
#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7)
#use i2c(master, sda=pin_c4, scl=pin_c3, fast)
void main()
{
int8 i;
while (true)
{
for (i=0;i<=20;i++)
{
delay_ms(1000); // valor a CAMBIAR ... si es menor a 1000, el slave no responde correctamente
printf("Outputting: %x\n\r", i);
i2c_start();
i2c_write(0xa0);
i2c_write(i);
i2c_stop();
}
}
}
SLAVE::
#include <16F88.h>
#fuses xt,nowdt
#use delay (clock=4M)
#use rs232(baud=9600, xmit=pin_b5,rcv=pin_b2)
#use i2c(slave, sda=pin_b1, scl=pin_b4, address=0xa0, fast, force_hw)
#byte TrisA=0x85
#byte TrisB=0x86
#byte PortA=0x05
#byte PortB=0x06
byte datoA=0,datoB=0;
#INT_SSP
void ssp_interupt ()
{
datoA = i2c_read();
datoB = i2c_read();
printf("Read byte 2: %x\n\r\n\r", datoB);
}
void main()
{
TrisA=0x00;
PortA=0;
delay_ms(1000);
printf("Running");
enable_interrupts(global);
enable_interrupts(int_ssp);
while (true)
{
PortA=datoB;
}
}
El código tal cual como está funciona!!.. Sin embargo... me gustaría saber .. qeu debo de hacer para q pueda recibir los datos más rapido...Por cierto el RS232, lo utilizo unicamente para monitoriar q reciba los datos!!
PD:: Y si no puedo disipar mis dudas.. espero que a alguien les sirva mis avances!! Saludos y gracias!!