PIC16F88 y acelerómetro MMA7660

Ahí tienes la librería para el MMA7660 en el post #19
El programa para el cual la quieras usar, ya corre por tu cuenta.
 
Muchas gracias. Funciona perfecto.
El problema que tenía, era que tenía el acelerómetro mal soldado.
Me di cuenta cuando desde el PIC, intenté buscar el dispositivo i2C y no respondía.

Os dejo este código que es muy útil para detectar los dispositivos conectados al bus I2C.
Lo he probado y también funciona perfectamente.
Te devuelve los dispositivos conectados y la dirección de cada uno de ellos.

Aquí está el código:
PHP:
#include <16F887.h> 
#fuses INTRC_IO,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT 
#use delay(clock=4M) 
#use i2c(Master, sda=PIN_C4, scl=PIN_C3) 
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS) 

// This function writes the slave address to the i2c bus. 
// If a slave chip is at that address, it should respond to 
// this with an "ACK".   This function returns TRUE if an 
// ACK was found.  Otherwise it returns FALSE. 
int8 get_ack_status(int8 address) 
{ 
int8 status; 

i2c_start(); 
status = i2c_write(address);  // Status = 0 if got an ACK 
i2c_stop(); 

if(status == 0) 
   return(TRUE); 
else 
   return(FALSE); 
} 


//================================= 
void main() 
{ 
int8 i; 
int8 status; 
int8 count = 0; 

printf("\n\rStart:\n\r"); 

delay_ms(1000); 

// Try all slave addresses from 0x10 to 0xEF. 
// See if we get a response from any slaves 
// that may be on the i2c bus. 
for(i=0x10; i < 0xF0; i+=2) 
   { 
    status = get_ack_status(i); 
    if(status == TRUE) 
      {  
       printf("ACK addr: %X\n\r", i); 
       count++; 
       delay_ms(2000); 
      } 
   } 

if(count == 0) 
   printf("\n\rNothing Found"); 
else 
   printf("\n\rNumber of i2c chips found: %u", count); 

while(1); 
}
 
Última edición por un moderador:
Atrás
Arriba