Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
SRF02
- Subzero64170

Débutant- Messages : 51
- Âge : 39
- Enregistré en : octobre 2015
- Localisation : PAU
Bonsoir,
Est ce que quelqu'un a deja programé un srf02 avec un pic en i2C?
Je sais qu'il faut faire une lecture des deux registres haut et bas contenant la mesure mais je donc je procède comme suit :
1)Init i2c
1)Envoie d'un start i2c.
2) Envoie de l'adresse 0xEO du module srf02
3)En voie de l'adresse 0x00 (registre de commande)
4)Envoie de 0x51 (demande une mesure en cm au srf02)
5)Stop sequence
Pause
1)Init i2c
2)Envoie d'un start i2c.
3) Envoie de l'adresse E0 du module srf02
4)En voie de l'adresse 0x02 (registre du byte Haut)
5)i2c repeat start (refait un start aucapteur E0, permet de ne pas refaire toutes les etapes pour interoger le capteur)
6)I2C_Wr(0xE1) ?????je ne sais pas pourquoi on met E1...il parait que c'est pour mettre un bit d'ecriture à 1 mais la commande I2c_wr a deja ce role?
7)PORTB=I2C_Rd(1); // je lit la valeur du byte haut et la stoque dans portB
8)PORTC=I2C_Rd(0); // je lit la valeur du byte bas et la stoque dans portC
9)Stop sequence
Est ce que cela peut marcher??Je ne vois pas qu'il faut mettre un bit de lecture( 0xE1) dans la doc.Dans plusieurs prog j'ai vu que pour avoir la mesure il faut :
Resultat = MSBx256 + LSB ( http://wiki.cybedroid.com/index.php?title=SRF02)
Pouvez vous m'eclaircir sur ces quelques points?
Bonne soirée
Merci
Est ce que quelqu'un a deja programé un srf02 avec un pic en i2C?
Je sais qu'il faut faire une lecture des deux registres haut et bas contenant la mesure mais je donc je procède comme suit :
1)Init i2c
1)Envoie d'un start i2c.
2) Envoie de l'adresse 0xEO du module srf02
3)En voie de l'adresse 0x00 (registre de commande)
4)Envoie de 0x51 (demande une mesure en cm au srf02)
5)Stop sequence
Pause
1)Init i2c
2)Envoie d'un start i2c.
3) Envoie de l'adresse E0 du module srf02
4)En voie de l'adresse 0x02 (registre du byte Haut)
5)i2c repeat start (refait un start aucapteur E0, permet de ne pas refaire toutes les etapes pour interoger le capteur)
6)I2C_Wr(0xE1) ?????je ne sais pas pourquoi on met E1...il parait que c'est pour mettre un bit d'ecriture à 1 mais la commande I2c_wr a deja ce role?
7)PORTB=I2C_Rd(1); // je lit la valeur du byte haut et la stoque dans portB
8)PORTC=I2C_Rd(0); // je lit la valeur du byte bas et la stoque dans portC
9)Stop sequence
Est ce que cela peut marcher??Je ne vois pas qu'il faut mettre un bit de lecture( 0xE1) dans la doc.Dans plusieurs prog j'ai vu que pour avoir la mesure il faut :
Resultat = MSBx256 + LSB ( http://wiki.cybedroid.com/index.php?title=SRF02)
Pouvez vous m'eclaircir sur ces quelques points?
Bonne soirée
Merci
SRF02
- sylvain54

Amateur- Messages : 194
- Âge : 53
- Enregistré en : août 2015
- Localisation : Dans l'est de la France
Bonjour,
je n'ai jamais joué avec ce module.
Mais,
Cette opération est normale, elle permet de décaler les bits de poids forts, elle est équivalente à ''<< 8'' (mais je pense que le décalage "<<8" est plus performant qu'une multiplication par 256 en terme d’exécution
)
Sinon sur libstock, tu as un exemple d'utilisation http://libstock.mikroe.com/projects/vie ... h-easypic7
A + Sylvain
je n'ai jamais joué avec ce module.
Mais,
Subzero64170 a écrit :Resultat = MSBx256 + LSB ( http://wiki.cybedroid.com/index.php?title=SRF02)
Cette opération est normale, elle permet de décaler les bits de poids forts, elle est équivalente à ''<< 8'' (mais je pense que le décalage "<<8" est plus performant qu'une multiplication par 256 en terme d’exécution
Sinon sur libstock, tu as un exemple d'utilisation http://libstock.mikroe.com/projects/vie ... h-easypic7
A + Sylvain
SRF02
- paulfjujo

Maître- Messages : 3261
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
attention à la taille des operandes lors du calcul Result
MSB doit etre un integer pour pouvoir contenir x fois 256
ou alors specifier un casting
Result=((unsigned int)MSB <<8 )+LSB;
l'adresse I2C est-elle bien 0xE0 ?
y-à- t'il des straps de config adresse ?
il faut bien rajouter 1 à l'adresse pour faire une lecture.
attention à la taille des operandes lors du calcul Result
MSB doit etre un integer pour pouvoir contenir x fois 256
ou alors specifier un casting
Result=((unsigned int)MSB <<8 )+LSB;
l'adresse I2C est-elle bien 0xE0 ?
y-à- t'il des straps de config adresse ?
il faut bien rajouter 1 à l'adresse pour faire une lecture.
SRF02
- Subzero64170

Débutant- Messages : 51
- Âge : 39
- Enregistré en : octobre 2015
- Localisation : PAU
Bonjour,
Oui l'adresse est bien 0xE0.Je peux la changer, il y a une liste d'adresses possibles.Par defaut c'est 0xE0.Il faut changer cette adresse si on met plusieurs srf02 autrement il risque d'y avoir des conflits. Pas de strap il faut envoyer une sequence de valeurs hexa pour reprogrammer le module.Merci Sylvain54 pour le len ;-)
Oui l'adresse est bien 0xE0.Je peux la changer, il y a une liste d'adresses possibles.Par defaut c'est 0xE0.Il faut changer cette adresse si on met plusieurs srf02 autrement il risque d'y avoir des conflits. Pas de strap il faut envoyer une sequence de valeurs hexa pour reprogrammer le module.Merci Sylvain54 pour le len ;-)
SRF02
- Subzero64170

Débutant- Messages : 51
- Âge : 39
- Enregistré en : octobre 2015
- Localisation : PAU
Au faite, quelqu'un peut m'expliquer l'histoire du E1?Je vois bien qu'il y a 6 registre mais je ne comprend pas pourquoi de l'adresse E0 on passe à E1...
Code : Tout sélectionner
int main(){
TRISB = 0x00; //Port B is output
TRISD = 0x00; //Port D is output
//Get the range
while(1)
{
I2C_Init(2000000);
I2C_Start(void); // send start sequence
I2C_Wr(0xE0); // SRF02 I2C address with R/W bit clear
I2C_Wr(0x00); // SRF02 command register address
I2C_Wr(0x81); // command to start ranging in cm
I2C_Stop(void); // send stop sequence
delay_ms(70); //delay for 70ms.
I2C_Start(void); // send start sequence
I2C_Wr(0xE0); // SRF02 I2C address with R/W bit clear
I2C_Wr(0x02); // send internal adress of high byte.
I2C_Repeated_Start(void); // send a restart sequence
I2C_Wr(0xE1); // SRF02 I2C address with R/W bit set
PORTB=I2C_Rd(1); // get the high byte of the range and send acknowledge.
PORTC=I2C_Rd(0); // get low byte of the range - note we don't acknowledge the last byte.
I2C_Stop(void); // send stop sequence
}
return 0;
} SRF02
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités
