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
I2C MCC XC8
bonjour, je tente de faire fonctionner un pic 18f26K22 en I2C avec les fonctions proposées par MCC et XC8 en C.
un picserial est en esclave et le Pic en master.
Si j'utilise la commande I2C_Write1ByteRegister(0x40, 0x00, 0x01) ça fonctionne, je reçois bien les valeurs : AD 80 RX 01 RX 02 sur l'esclave
mais lorsque j'utilise I2C_WriteNBytes(0x40, *buffer, 0x03) les mots reçu le serial sont AD 80 RX FD RX FD RX 00
Je précise que j'utilise des 'int' qui sont convertis en "string" voici mes lignes :
integer_value_1 = 31;
integer_value_2 = 32;
integer_value_3 = 33;
sprintf(buffer [0], "%d", integer_value_1);
sprintf(buffer [1], "%d", integer_value_2);
sprintf(buffer [2], "%d", integer_value_3);
I2C_WriteNBytes(0x40, *buffer, 0x03)
Si vous avez une idée, je prends Merci
un picserial est en esclave et le Pic en master.
Si j'utilise la commande I2C_Write1ByteRegister(0x40, 0x00, 0x01) ça fonctionne, je reçois bien les valeurs : AD 80 RX 01 RX 02 sur l'esclave
mais lorsque j'utilise I2C_WriteNBytes(0x40, *buffer, 0x03) les mots reçu le serial sont AD 80 RX FD RX FD RX 00
Je précise que j'utilise des 'int' qui sont convertis en "string" voici mes lignes :
integer_value_1 = 31;
integer_value_2 = 32;
integer_value_3 = 33;
sprintf(buffer [0], "%d", integer_value_1);
sprintf(buffer [1], "%d", integer_value_2);
sprintf(buffer [2], "%d", integer_value_3);
I2C_WriteNBytes(0x40, *buffer, 0x03)
Si vous avez une idée, je prends Merci
I2C MCC XC8
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
- Comment est définie la variable buffer ?
- Le code:
ne me parait pas adapté pour envoyer 3 octets qui doivent se suivre en mémoire (sauf erreur de ma part, gros problème de Langage C)
- Comment est définie la variable buffer ?
- Le code:
Code : Tout sélectionner
integer_value_1 = 31;
integer_value_2 = 32;
integer_value_3 = 33;
sprintf(buffer [0], "%d", integer_value_1);
sprintf(buffer [1], "%d", integer_value_2);
sprintf(buffer [2], "%d", integer_value_3);
I2C_WriteNBytes(0x40, *buffer, 0x03)
ne me parait pas adapté pour envoyer 3 octets qui doivent se suivre en mémoire (sauf erreur de ma part, gros problème de Langage C)
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
I2C MCC XC8
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
sur le bus I2C ne transitent des datas qu'au format byte (octet)
il faut donc eviter les entier int 16bits
pourquoi utiliser sprintf ?
Non testé !
Remarques :
I2C_WriteNBytes n'existe pas sous MikroC
sprintf (MikroC) ne fonctionne pas avec des bytes !, uniquement avec des int
sur le bus I2C ne transitent des datas qu'au format byte (octet)
il faut donc eviter les entier int 16bits
pourquoi utiliser sprintf ?
Code : Tout sélectionner
#define Byte unsigned char
char buffer[20];
Byte value_1 = 31;
Byte value_2 = 32;
Byte value_3 = 33;
*(buffer)=value_1;
*(buffer+1)=value_2;
*(buffer+2)=value_3;
I2C_WriteNBytes(0x40, buffer, 0x03);
ou plus simplement
buffer[0]=value_1;
buffer[1]=value_2;
buffer[2]=value_3;
I2C_WriteNBytes(0x40, buffer, 0x03);
Non testé !
Remarques :
I2C_WriteNBytes n'existe pas sous MikroC
sprintf (MikroC) ne fonctionne pas avec des bytes !, uniquement avec des int
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités