Bueno, he hecho pruebas y POR FIN RULA EN LA PLACA jaja.
No se si lo que he hechoserán chapuzas pero ahí lo que me funciona:
MASTER
#include <16F73.h>
#fuses HS, NOWDT, NOPROTECT, PUT, NOBROWNOUT
#byte puerto_b=06
#use standard_io(c)
#use fast_io(B)
#use delay(clock=16000000)
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3,FAST,FORCE_SW)
void main(void)
{
int dato;
delay_ms(2000); //retardo, por si acaso no da tiempo al esclavo a "inicializarse" para
//poder esperar a la informacion que le puede enviar el master
set_tris_c( 0xFF ); //port c como salidas porque lo pone en el data sheet
set_tris_b(0b00001111);
while(1)
{
dato=puerto_b; //dato coge el valor que haya en portB
i2c_start(); //condicion de inicio
i2c_write(0x08); //direccion del esclavo con el que haremos la comunicacion
i2c_write(dato); //enviamos un dato
i2c_stop(); //finalizacion de la comunicacion
delay_ms(5000); //introducimos retardo para que no este constantemte escribiendo
}
}
SLAVE
#include <16f73.h>
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT
#use standard_io(B)
#byte puerto_b=06
#use delay(clock=16000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0X08, FAST , FORCE_SW)
void main(void)
{
int dato;
puerto_b = 0b00000000;
set_tris_b( 0x00 );// todo salidas
while(1)
{
dato=i2c_read();
puerto_b=dato;
}
}
Pues eso, no se si habrá alguna burrada, pero como funciona de momento no lo toco jeje. Por cierto, según el datasheet el 16f73 soporta ssp para poder utilizar i2c_poll pero utilizando esa instrucción no funciona. El montaje digo yo que está bien porque funciona perfectamente por software.
Bueno pues muchas gracias a todos y si me surgen nuevas dudas ya os pregunto (muchas gracias de nuevo).
ta logo