uControl
Mayo 30, 2017, 04:26:24 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: i2c (CCS + Proteus)  (Leído 205 veces)
0 Usuarios y 1 Visitante están viendo este tema.
joseluislo12
PIC10F
*
Desconectado Desconectado

Mensajes: 2


« : Marzo 31, 2017, 06:59:42 »

Buenos días

Tengo una inquietud con la implementación del protocolo i2c en proteus.

Tengo el siguiente código para el PIC master:

Código:
#include <16F1827.h>
#fuses XT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOWDT
#use delay(clock = 32M)
#use i2c(MASTER, FAST, SDA = PIN_B1, SCL = PIN_B4, NOFORCE_SW)

int a,i = 0;

void envio_I2C(){
   if(input(PIN_A6)){a = 0xA0;}
   else{a = 0xB0;}
   
   i2c_start();
   i2c_write(a);
   i2c_write(i);
   i2c_stop();
   
}

void main(){
   output_LOW(PIN_B5);
   
   while(true){
      if(!input(PIN_A0)){
         while(!input(PIN_A0)){;}
         i = 1;
         envio_I2C();
         output_toggle(PIN_B5);
      }
      if(!input(PIN_A1)){
         while(!input(PIN_A1)){;}
         i = 2;
         envio_I2C();
         output_toggle(PIN_B5);
      }
      if(!input(PIN_A2)){
         while(!input(PIN_A2)){;}
         i = 3;
         envio_I2C();
         output_toggle(PIN_B5);
      }
   }
}

Y para los PIC esclavos el siguiente:

Código:
#include <16F1827.h>
#fuses XT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOWDT
#use delay(clock = 32M)

#INT_SSP
void ssp_interupt(){   
   unsigned int8 incoming, state;

   state = i2c_isr_state();
   
   if(state != 0x80){
      incoming = i2c_read();
      if(state == 1){
         switch(incoming){
            case 1:
               output_HIGH(PIN_A0);
            break;
            case 2:
               output_LOW(PIN_A0);
            break;
            case 3:
               output_TOGGLE(PIN_A0);
            break;
         }
      }
   }
}

void main(){
   enable_interrupts(INT_SSP);
   enable_interrupts(GLOBAL);
   
   while(true){
   }
}

Para el esclavo uno tengo

Código:
#use i2c(SLAVE, FAST, SDA = PIN_B1, SCL = PIN_B4, NOFORCE_SW, [b]ADDRESS = 0xA0[/b])

y para el esclavo dos tengo

Código:
#use i2c(SLAVE, FAST, SDA = PIN_B1, SCL = PIN_B4, NOFORCE_SW, [b]ADDRESS = 0xB0[/b])

En proteus tengo la siguiente simulación:



El problema que tengo es que funciona correctamente solo cuando conecto el I2C DEBUGGER de proteus al bus. Si no lo tengo conectado no funciona.
Quisiera saber por qué puede estar sucediendo esto.
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.071 segundos con 25 consultas. (Pretty URLs adds 0.043s, 2q)
loggkey