Bonjour,
Actuellement étudiant en électronique, je souhaite comprendre comment fonctionne le programme ci-dessous, qui interagit avec un PIC16F876 et une boussole HMC6352 grâce au bus I2C et des datasheet du PIC16F876 et du HMC6352 :
lien de datasheet : PIC16F876: http://ww1.microchip.com/downloads/e...doc/30292c.pdf
HMC6352: http://www.sparkfun.com/datasheets/C...ts/HMC6352.pdf
Programme de teste de la boussole HMC6352:
// test de la boussole
#include <16F876a.h>
#device icd=true
#device adc=10 // A/D sur 10 bits
#FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use i2c(Master,Slow,sda=PIN_C4,scl =PIN_C3)
void main()
{
int8 ack=100;
unsigned int8 data1, data2;
unsigned int16 direction;
setup_timer_2(T2_DIV_BY_1, 255, 1); // timer 2 pour la frequence MLI
setup_ccp2(CCP_PWM); //ccp1 en pwm
// on réveille le capteur
i2c_start();
ack=i2c_write(0x42); // adresse boussole écriture
ack=i2c_write(0x57); // commande W : WAKE
i2c_stop();
delay_us(200); //attente apres WAKE
// ecriture dans l'octet Operational Mode Control
i2c_start();
ack=i2c_write(0x42);
ack=i2c_write('G');
ack=i2c_write(0x74);
ack=i2c_write(0x52); // Rate:10hz, Set/Reset=on, Continuous Mode
i2c_stop();
delay_us(140);
// ecriture dans l'octet Output Data Mode
i2c_start();
ack=i2c_write(0x42);
ack=i2c_write('G');
ack=i2c_write(0x4e);
ack=i2c_write(0x00); // heading mode
i2c_stop();
delay_us(140);
// une commande A : peut être pas nécessaire car Continous Mode
i2c_start();
ack=i2c_write(0x42);
ack=i2c_write('A');
i2c_stop();
delay_ms(1000); // tempo nécessaire au capteur (surement trop long)
do
{
// lecture de la boussole (pas besoin de cde 'A' car Continuous Mode)
i2c_start();
ack=i2c_write(0x43);
data1=i2c_read();
data2=i2c_read(0); // il faut un NACK et pas un ACK!
i2c_stop();
direction =((int16)data2 | ((int16)data1 << 8)); // de 0 à 3599
direction=(direction/4)+50; // de 50 à 949
set_pwm2_duty(direction); // rapport cyclique sur 10 bits
delay_ms(100);
}while(1);
}
MERCI d'avance d'avoir prêter attention a mon message, en attendant vos réponses.
-----