Autor Tema: Problema I2c entre 2 PIC16F873 en CCS  (Leído 2297 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pabrocpe

  • PIC10
  • *
  • Mensajes: 10
Problema I2c entre 2 PIC16F873 en CCS
« en: 22 de Enero de 2004, 02:24:00 »
Hola a todos, intento dar mis primeros pasos en CCS y pretendo conseguir comunicar dos 16F873 mediante I2C. Lo simulo con proteus pero no consigo nada. No se que tipo de error estoy cometiendo o si es que voy muy perdido. Agradeceria cualquier comentario al respecto. No puede subir los ficheros que pretendía pero os escribo una meustra de lo que hago:

***************************
Master:
**************************

#include <16F873.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT, NOLVP, NOPROTECT
#use i2c(Master,slow,sda=PIN_C4,scl=PIN_C3)

#byte   puertaa = 0x05     /* Posici¢n de la puerta A */
#byte   puertab = 0x06      /* Posici¢n de la puerta B */
#byte   puertac = 0x07      /* Posici¢n de la puerta C */
#byte    adcon0=0x1F
#byte   adcon1=0x9F

#byte    option_reg=0x81
#byte    status=0x03
#byte    pcon=0x8E
#bit salida=puertac.1    
#bit pulsador =puertab.4  

void enviar_i2c();

byte  reg_general;
byte  dato;
#bit   marxa=reg_general.0

void main() {
   port_b_pullups(TRUE);
   set_tris_a(0xF0);
   set_tris_b(0xFF);
   set_tris_c(0xF8);
   reg_general=0x00;
   adcon1 = 0x06;
   option_reg=0x17;

    do{
    delay_ms(1000);
   if (pulsador==0){
        while(pulsador==0){};
         if (marxa==0){
            marxa=1;
            salida=1;
            dato=0x01;
            enviar_i2c();  //llamemos al slave a1
         }
         else{
            marxa=0;
            salida=0;
            dato=0x00;
            enviar_i2c();  //llamemos al slave a1
         }
      }
    }while(true);
}
void enviar_i2c(){
   i2c_start();
   i2c_write(0x02);
   i2c_write(dato);     //digamos que 1 es que encienda la salida 3 (rc1)
   i2c_stop();

}


****************************************************
eslave
******************************************

#include <16F873.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT, NOLVP
#use i2c(Slave,Slow,sda=PIN_C4,scl=PIN_C3,address=0x02, force_hw)
         
#byte   puertaa = 0x05     /* Posici¢n de la puerta A */
#byte   puertab = 0x06      /* Posici¢n de la puerta B */
#byte   puertac = 0x07      /* Posici¢n de la puerta C */
#byte    adcon0=0x1F
#byte      adcon1=0x9F
#byte      option_reg=0x81
#byte    status=0x03
#byte    pcon=0x8E

#bit led=puertaa.2
#bit salida=puertac.1    
#bit polsador =puertab.4  

byte  lectura1;

#int_SSP
void ssp_interupt() {
      led=1;
      lectura1=i2c_read();

   if (lectura1==1){          
            salida=1;
         }
         else{
            salida=0;
         }
}

void main() {

   port_b_pullups(TRUE);

   set_tris_a(0xF0);
   set_tris_b(0xFF);
   set_tris_c(0xF8);

   adcon1 = 0x06;
   option_reg=0x17;
   salida=0;
   led=0;

   delay_ms(1000);
   enable_interrupts(INT_SSP);
   enable_interrupts(global);

while(true){}

}


Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Problema I2c entre 2 PIC16F873 en CCS
« Respuesta #1 en: 23 de Enero de 2004, 22:45:00 »
Hola, bueno creo que te complicas mucho con tantas definiciones, je je a mi me pasaba algo parecido, lee el manual de CCS y tus programas van a ser mas sencillos, uno de los errores que hay es que usas set_tris, sin poner la directiva #use fast_io, claro que si no defines nada el CCS se encargara de hacerlo por ti, fijate como es el driver de la 24LC16 por ejemplo y veras que inclusive puedes usarlo para leer el esclavo, nunca he usado esta forma de trabajo me has despertado la curiosidad voy  ha realizar un experimento y te cuento que pasa, si no tienes el manual puede bajarlo de la pagina de CCS, puedes tambien ver el ejemplo ex_slave.c que esta en el directorio examples, bueno por lo menos yo lo tengo si lo quieres te lo paso por mail.

saludos

Ariel/ Pikman
saludos
PikMan

Desconectado pabrocpe

  • PIC10
  • *
  • Mensajes: 10
RE: Problema I2c entre 2 PIC16F873 en CCS
« Respuesta #2 en: 26 de Enero de 2004, 01:33:00 »
gracias, mirare los ejemplos y tendré en cuenta el consejo. Voy a probar a ver.


 

anything