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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Cast des variables ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » lun. 1 janv. 2018 21:04

Bonsoir à tous ,

Je me pose la question des "cast" des types de variables .

J'aimerais récupérer la valeur d'une lecture anagogique qui se fait sur 10-bits, par une valeur sur une seule byte . Dans le but d'envoyer ça à mon module radio.

Voici une partie du code :

une variable tempen unsigned int pour stocker ma valeur en 10-bit
Ensuite je déclare donc en Charmes variables de joysticks à envoyer

j'ai l'impression que c'est pas top !


Code : Tout sélectionner


 char Joystick_D_HB
, Joystick_D_DG, Joystick_G_HB, Joystick_G_DG;
 unsigned int temp ;
 ---
 ---
 ---
  ADPCH = ADC_RD7;                  // On change de broche pour lire la suivante icic RD7
    delay_ms(1);
    ADCON0.ADGO = 1;                     // lancement de la conversion
    while (ADCON0.ADGO);                 // On attend la fin de la conversion
    temp = (ADRESH<<8) + ADRESL;   // On enregistre le résultat
    Joystick_G_DG = temp >> 2 ;
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Cast des varaibles ?
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » lun. 1 janv. 2018 22:18

Bonjour Jérémy,


écrit par Jérémy

par une valeur sur une seule bit


ça veut dire 0 ou 1 si j'ai bien compris la question :sifflotte:
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Cast des variables ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » lun. 1 janv. 2018 22:52

Temps-x a écrit :Source du message ça veut dire 0 ou 1 si j'ai bien compris la question :sifflotte:

Oups , une seule byte ! lol

Correction effectuée dans le premier post
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Cast des variables ?
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#4 Message par satinas » lun. 1 janv. 2018 23:21

Et pourquoi tu envoies pas directement les octets ADRESH et ADRESL ?

Sinon,
unsigned char tempH = temp >> 8;
unsigned char tempL = temp & 0x0f;

Le cast n'est pas forcément nécessaire, il faudrait savoir quel est son but.
SendChar(temp>>8);
SendChar(temp);
On peut avoir la doc du module radio, depuis le temps que t'en parles :)

Cast des variables ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » lun. 1 janv. 2018 23:31

Bonsoir satinas,

satinas a écrit :Source du message Et pourquoi tu envoies pas directement les octets ADRESH et ADRESL ?

Pour limiter le nombre de BYTES à envoyer !

Car je galère a faire un truc propre! Je mélange tout .

J'ai 4 lectures analogiques à faire avant chaque envoie et deux trois autres bricoles.

Voici la notice de mon module radio ( un peu d'aide ne serait pas de refus aussi .. ) . La notice n'est pas en ligne il faut la demander après avoir acheter un module.
AMB8626_MA_3_8.pdf
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Cast des variables ?
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#6 Message par satinas » lun. 1 janv. 2018 23:44

Pour envoyer une valeur 16 bits temp de type unsigned int (et pas unsigned char comme tu as mis plus haut !)
On envoie l'octet de poids fort, ensuite l'octet de poids faible, et la fonction SendByte() acceptera cela :

void SendByte(unsigned char data);
SendByte(temp>>8);
SendChar(temp);

Même si le compilateur considère que les char sont unsigned par défaut, je trouve plus propre de le spécifier quand on manipule des octets non signés.

Cast des variables ?
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » mar. 2 janv. 2018 00:43

Bonsoir,


==> ==> 4 lectures analogiques

Tu veux dire : 4 lectures numériques :sifflotte:


Dans ta configuration tu prends une Justification à gauche, comme ça tu utilises juste ADRESH

ADRESH = 512, 256, 128, 64, 32, 16, 8, 4
Total de ADRESH = 1020

ADRESL = 2, 1
Total de ADRESL = 3

Comme tu peux le voir ADRESL est insignifiant, et sa sert à rien de le compter

__________________________________________________________________________________________________________________

Sinon l'autre méthode consiste à faire une division par 4 pour avoir un octet

Si la somme de ADRESH et de ADRESL font 1023 tu le divises par 4, ça te fera un octet :wink:

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Cast des variables ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » mar. 2 janv. 2018 00:56

Temps-x a écrit :Source du message Sinon l'autre méthode consiste à faire une division par 4 pour avoir un octet

Si la somme de ADRESH et de ADRESL font 1023 tu le divise par 4, ça te fera un octet :wink:

A+



Oui ca c'est celle que j'utilise. je divise par 4 avec mon >>2 .

Mais ta méthode d'alignement à gauche , est simplement très maligne !!! parfaite, rapide et simple ... fallait y penser . :bravo:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Cast des variables ?
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » mar. 2 janv. 2018 01:01

Re

Bonne soirée Jérémy

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Cast des variables ?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#10 Message par Gérard » mar. 2 janv. 2018 20:30

Hello,
En alignant à gauche, on a ADRESH qui représente les 8 bit de poids fort. On peut négliger les 2 bit de poids faible et on a plus que 1 seul octet pour le traitement ultérieur.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 31 invités