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 ---
SRF02
Modérateur : Jérémy
- Subzero64170
- Débutant

- Messages : 51
- Enregistré en : octobre 2015
- Localisation : PAU
SRF02
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
“L'imagination est plus importante que le savoir.” A.Einstein
SRF02
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
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.
Aide toi, le ciel ou FantasPic t'aidera
- Subzero64170
- Débutant

- Messages : 51
- Enregistré en : octobre 2015
- Localisation : PAU
SRF02
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 ;-)
“L'imagination est plus importante que le savoir.” A.Einstein
- Subzero64170
- Débutant

- Messages : 51
- Enregistré en : octobre 2015
- Localisation : PAU
SRF02
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;
} “L'imagination est plus importante que le savoir.” A.Einstein
SRF02
une adresse I2C est (la plupart du temps) sur 7bits cadrés à gauche
soit E0h à laquelle on rajoute le lsb bit R/W (à droite)
0 si ecriture, 1 si lecture
revoir la norme I2C Philips pour explicage plus concis.
soit E0h à laquelle on rajoute le lsb bit R/W (à droite)
0 si ecriture, 1 si lecture
revoir la norme I2C Philips pour explicage plus concis.
Aide toi, le ciel ou FantasPic t'aidera
- Subzero64170
- Débutant

- Messages : 51
- Enregistré en : octobre 2015
- Localisation : PAU
SRF02
Ok merci paulfjujo, je suis parvenu à utiliser le module pour faire des mesures!!!Je vais revoir la norme i2c tout de meme ;-)
“L'imagination est plus importante que le savoir.” A.Einstein
Qui est en ligne
Utilisateurs parcourant ce forum : paulfjujo et 5 invités

