i2c comunicación con pic 18f452

0

Soy nuevo en la codificación de imágenes. Estoy tratando de girar el motor de acuerdo con el cambio del acelerómetro en la dirección x. Estoy usando Pic18f452 y adxl345. Pero no pude averiguar cómo comunicarme con adxl345 usando i2c.

Aquí está mi código de foto:

int outputs[6];
int x,y,zz;
int px,py,pzz;
int diffx,diffy,diffz;


void motor(int v) {

 PWM1_INIT(2000);
 PWM1_Start();
 if(v>0){
 PORTC.F0=1;          //c0 and c1 is for rotation direction
 PORTC.F1=0;
 }else{
 PORTC.F0=0;
 PORTC.F1=1;
 }

 PWM1_Set_Duty(120);


}

void stopmotor(){
 PWM1_Stop();
}

int i;
 void Read_Data() {


  I2C1_Start();              // issue I2C start signal




  for (i=0;i<6;i++){
  I2C1_Wr(0x32+i);       //read 0x32 to 0x37
  outputs[i] = I2C1_Rd(0);
  I2C1_Stop();
}
}

getDegrees(){
x=(signed) outputs[1]<<8|outputs[0];
y=(signed) outputs[3]<<8|outputs[2];
zz=(signed) outputs[5]<<8|outputs[4];

}

void main() {

 // PORTC.F6 = 0;
//  TRISC.F6 = 0;                 // Configure PORTB as output

PORTB.F0=0;
TRISB.F0=0;
TRISC.F0=0;
TRISC.F1=0;
TRISC.F2=0;



  I2C1_Init(100000);         // initialize I2C communication
  I2C1_Start();              // issue I2C start signal
  I2C1_Wr(0xD2);             // send byte via I2C  (device address + W)
  I2C1_Wr(8);              // for initializing acceloremeter
  I2C1_Stop();               // issue I2C stop signal


  while(1){
  if(x!=0|y!=0|zz!=0){
   px=x;
   py=y;
   pzz=zz;
  }

  Read_Data();
  getDegrees();

if(px!=0|py!=0|pzz!=0){
   diffx=x-px;
   diffy=y-py;
   diffz=zz-pzz;

  }

  if(diffx>0){
      motor(x);


  } else{

  stopmotor();
  }



  delay_ms(500);
  }

}

Sé que no es un código perfecto, pero solo quiero saber si me estoy comunicando con el acelerómetro de forma real o no. Si bien no tengo pantalla led, no puedo ver la salida de datos. Así que no tengo opciones de depuración paso a paso.

¿Cómo debo modificar el código para obtener una salida de 0x32-0x37 bits de acelerómetro usando i2c?

    
pregunta user3160302

1 respuesta

1

¿Has intentado usar UART? Si tiene un adaptador USB-TTL, puede conectarlo tanto a su PIC como a su PC. Alternativamente, el PICKit que probablemente esté usando también ofrece comunicaciones UART entre su PC y el PIC. No conozco el compilador (o las bibliotecas) que estás usando, aunque se parece a Mikro-C, que nunca he usado. Consulte los manuales de su compilador sobre cómo hacer lo siguiente. Deberá incluir los archivos de encabezado necesarios para las comunicaciones de UART, inicializarlos con una velocidad de transmisión y otras configuraciones, y luego podrá escribir una pequeña función que básicamente acepte una cadena y la imprima en el puerto de UART, carácter por carácter, Las funciones de la biblioteca UART que habrá importado. En su PC, puede usar masilla, o la interfaz PICKit, o incluso el monitor serial Arduino para ver lo que obtiene del PIC. De esta manera, puede obtener los mensajes de depuración que necesita en cada paso. O simplemente puede usar una pantalla LCD, por supuesto;).

    
respondido por el TisteAndii

Lea otras preguntas en las etiquetas