Pic 18F4550, CAN et transmission bluetooth [langage C]
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Pic 18F4550, CAN et transmission bluetooth [langage C]



  1. #1
    invitebd56af21

    Pic 18F4550, CAN et transmission bluetooth [langage C]


    ------

    Bonjour à tous,

    Dans le cadre de mes études (4ème année d'école d'ingénieur), je dois réaliser un projet consistant à mesurer la conductivité électro-dermale (résistance de la peau) une fois par seconde grace à un capteur situé au niveau du poignet. Cette valeur devra ensuite être envoyé par bluetooth à un Android.

    Mon rôle dans le projet est de réaliser le programme à appliquer au microcontrôleur Pic 18f4550 présent sur la carte électronique au côté du capteur. On peut donc décomposer le programme que je dois réaliser en trois étapes:

    - Acquisition via le CAN d'une valeur de tension (entre 0 et 3.3V)
    - Une fois par seconde extraire cette valeur, lui appliquer une opération arithmétique simple (Conductivité=(valeur_mesurée-0,2778)/0,074)
    - Envoyer cette nouvelle valeur via bluetooth sur un android

    La conservation de l'ensemble de ces valeurs n'est pas nécessaire dans le microcontrôleur.

    Je travaille dans l'environnement suivant: Windows 7, MPLAB, Pic 18f4550, liaison bluetooth Pic-Android, programmation en C (possibilité en Assembleur).

    Je n'ai pas choisi ce projet, encore moins d'hériter de la partie programmation. C'est totalement hors de mon domaine de compétence (j'étudie la physique). La deadline approche et en cette période de partiel je stagne totalement.
    J'en appelle donc à votre aide, amis passionnés ou simple âme charitable !

    A coup sur vous allez me donner le lien de certains sites où je pourrai trouver mes bonheur. Ces sites j'en ai consulté un paquet. J'ai travaillé dur pour ce programme mais je n'arrive pas à avancer (pas du tout même).

    Si vous pouviez me montrer un exemple complet et détaillé, ou même réaliser tout ou partie de mon programme (notamment la partie Acquisition) je vous serais extrêmement reconnaissant. Je sais qu'un programme trivial tel que celui que je dois réaliser peut être fait en moins de 10 minutes par des mains expertes.

    Je vous saurai gré de ne pas considérer cette demande comme celle d'un fainéant ou d'un arriviste, je suis juste désespéré.

    Merci d'avance

    -----

  2. #2
    Jack
    Modérateur

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Je vous saurai gré de ne pas considérer cette demande comme celle d'un fainéant ou d'un arriviste, je suis juste désespéré.
    On aurait quand même aimé voir un minimum de travail, une ébauche de programme comme rappelé ici: http://forums.futura-sciences.com/pr...ces-forum.html

    De plus, ce n'est pas à priori le bon forum comme rappelé ici: http://forums.futura-sciences.com/pr...ves-forum.html

    En conséquence de quoi je transfère dans le forum électronique.
    Dernière modification par Jack ; 10/01/2015 à 18h40. Motif: il manquait un mot

  3. #3
    RISC

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Salut,

    C'est hallucinant d'avoir un projet de ce niveau sans (apparemment) avoir aucune base.
    tu aurais du "négocier" ou faire comprendre à ton tuteur que tu n'avais pas les compétences requises (peut-être d'ailleurs que ta formation ne prévois pas de les avoir).

    Même si ton partiel est dans 2 mois, cela relève d'une mission impossible...

    a+

  4. #4
    invitebd56af21

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Voici l'état actuel de mon programme, il y'a surement une erreur dès la première ligne mais bon !
    Code:
    // Header files
    
    #include <p18f4550.h>
    #include <CAN.h>
    
    
    // Définition (pas sur du tout pour les define...)
    
    #define mLoadTrm0()	TMR0H=TMR0_OFFSET_H;	TMR0L=TMR0_OFFSET_L; 
    #define TMR0_OFFSET_H	0xFF			
    #define TMR0_OFFSET_L	0xD1		
    
    
    //Programme
    
    unsigned short acquisition (unsigned char Y);
    void affiche(unsigned short *tampon);	
    
    
    //Fonction d'acquisition des données analogiques
    
    unsigned short acquisition (unsigned char Y)   	// Y correspond au port de l'acquisition
    {
    	unsigned short tampon=0;
    	
    	ADCON0=Y;				
    	ADCON0bits.GO_DONE=1;			// On lance la conversion
    	while(ADCON0bits.GO_DONE);		// Tant que l'acquisition n'est pas finie, on continu
    	
    	tampon=ADRESH;				// On entre les 8 bits de poids fort sur tampon
    	tampon<<=8;				// On décale tampon de 8 bits sur la gauche afin de pouvoir ajouter les 8 bits de poids faible
    	tampon+=ADRESL;
    
    	return tampon;				// On renvoi la donnée d'acquisition sous 16 bits
    }
    
    
    //Fonction de conversion et temporisation
    
    float affiche(unsigned short *tampon)
    {
        int i;
        float conductivite;
    	for (i = 0 ; 0 =! 1 ; i++)
        {
    		conductivite=(*tampon-0.2778)/0.074;
    		_sleep(1000);
    		
    		return conductivite;
    
        }
    }
    Merci de penser à mettre les balises code tout seul la prochaine fois
    Dernière modification par Jack ; 10/01/2015 à 18h42. Motif: Balises code

  5. A voir en vidéo sur Futura
  6. #5
    paulfjujo

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    bonsoir,

    ne pas confondre CAN (bus CAN) et ADC (CAN en francais)..
    Où est le main programme ?
    Comment est affiché le resultat ?

  7. #6
    invitebd56af21

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Désolé pour les balises code, je suis nouveau sur le forum, j'y penserai la prochaine fois

    Merci paulfjujo pour ta remarque, j'étais tombé dans le piège.

    Le main programme ? Il ne suffit pas de faire appelle aux fonctions ?
    Pour l'instant je n'ai réussi à faire que cela. Le résultat n'est pas affiché puisqu'à terme il doit être envoyer via bluetooth (cette partie me semble la plus compliquée) sur android et affiché sur ce dernier.

    J'apprécie fortement vos réponses en tout cas !

  8. #7
    invite3c199cf9

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Citation Envoyé par Zargoman Voir le message
    - Acquisition via le CAN d'une valeur de tension (entre 0 et 3.3V)
    - Une fois par seconde extraire cette valeur, lui appliquer une opération arithmétique simple (Conductivité=(valeur_mesurée-0,2778)/0,074)
    - Envoyer cette nouvelle valeur via bluetooth sur un android
    Tu passes sous silence l'étape du programme Androïd pour la réception des données. Comment comptes-tu faire ?

  9. #8
    invite5637435c

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Bnjour,

    Avant d'en arriver au programme Androïd je pense qu'il y a bien d'autres étapes à franchir...

    Où sont les déclarations d'initialisation des registres du PIC (pour l'ADC par exemple), des ports etc?
    Quel est le module Bluetooth utilisé?
    Quel compilateur C?

    4eme année? Et ben ça promet, c'est vraiment mettre la charrue avant les boeufs ce projet.
    Je vous conseille d'aller en salle de documentation dans vote école et de faire ce que l'on doit normalement vous apprendre en sciences Physique: apprendre, comprendre et appliquer, l'ordre logique d'apprentissage contrairement à demander, attendre et pomper sur un quelconque site.

  10. #9
    invitebd56af21

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    La partie Android incombe à un de mes camarades qui est tout autant dépassé que moi, je ne m'en occupe donc pas..

    Hulk je suis tout à fait d'accord avec toi. C'est simplement scandaleux (d'autant plus que le professeur à l'initiative de ce projet n'a aucune connaissance en programmation non plus..). C'est du délire... Bref je n'y peux rien et je ne suis pas sur que cet argument me vaille une bonne note !

    On va mettre entre parenthèse la partie Bluetooth pour le moment. Je pense que c'est une cause perdue. Il faudrait au moins que j'arrive à réaliser l'acquisition..

    Pour les déclarations d’initialisations. Pour l'ADC j'ai simplement utilisé les trois lignes de la partie "Définition" du programme, je suppose qu'il en manque ?
    Pour l'initialisation du port, cela n'a pas encore été fait car je ne suis pas sur de quel port je vais utiliser.

    Pour le compilateur je suis sous MPLAB C18 C compiler.

    Cordialement

  11. #10
    paulfjujo

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    bonsoir,

    Code:
    Le main programme ? Il ne suffit pas de faire appelle aux fonctions ?
    C'est quand meme les bases du langage C.
    Le main(), ou boucle principale est justement là pour organiser ton programme
    faire les differentes initialisations et les appels aux fonctions necessaires..
    tu devrais d'ailleur faire d'abord un ordinogramme de ce que tu envisages de faire..

    et il faut d"ore et déja te pencher sur la gestion d'un timer ..pour gerer le timing d'acquisition (toutes 1sec)
    et la gestion d'un UART qui sera l'interface pour gerer un module Bluetooth
    necessaire pour l'envoi des infos à l'Android .

    Coté Appli Android
    voir AppInventor probablement le plus simple..
    voir RFO-basic
    voir ..etc ...

  12. #11
    invitebd56af21

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    J'ai beaucoup bossé ces derniers jours au niveau des datasheet etc en essayent d'apprendre les bases.
    J'ai changé totalement de programme. Je viens d'en réaliser un beaucoup plus simple il me semble. Le debug et le running fonctionnent (j'utilise Pickit 3 et une carte de démo PICDEM FSUSB Demo board Pic18f4550) afin de réaliser mes tests.

    Néanmoins, il y'a toujours un problème, lorsque j'observe la variable result et conductivite, il est écrit "Out of scope" dans la valeur. Je n'arrive pas à trouver de solutions à ce problème.
    Je ne peux donc pas observer les résultats de la CAN.
    Code:

    Code:
    #include <p18cxxx.h> 
     #include <adc.h> 
    
     #pragma config FOSC=HS			// HS oscillator, HS used by USB
     #pragma config PWRT=ON			// Power on timer
     #pragma config BOR=OFF			// Brown out off
     #pragma config WDT=OFF			// Watch dog off
     #pragma config PBADEN=OFF		// Port B en digital IO
     #pragma config LVP=OFF			// Pas de prog single supply
     #pragma config ICPRT=OFF		// Port de debug off
     #pragma config DEBUG=OFF		// Debug off
     
    
    void main(void) 
     { 
         float result; 
         double conductivite; 
         int a, b; 
     
     
         TRISA = 0x00; 
         TRISAbits.TRISA0=1; 
         TRISB = 0x00; 
          
         OpenADC(ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD,ADC_CH0 & ADC_INT_OFF, 0); 
          
         while(1) 
         { 
             ConvertADC(); // Start conversion 
             while(BusyADC()); // Wait for completion 
             result = ReadADC(); // Read result 
            conductivite=(result*0.2778)/0.074; 
         } 
     }

  13. #12
    invite5637435c

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Bonjour,

    évite de parler de CAN qui n'a rien à voir ici et parle plutôt d'ADC pour éviter tout confusion et notamment pour ceux qui feront une reherche avec comme mot clé "CAN".
    Ton problème vient que la fonction ADC retourne un entier or tu déclares un float, puis que tu utilises un double au lieux d'un float.
    D'où probablement ton "out of scope" si le compilateur optimise ou pas.
    Il faut éviter les divisions sur du PIC18, c'est très rarement nécessaire, utilise plutôt des décalages c'est plus rapide et moins gourmand en terme de ressources.
    Essaye ça:

    Code:
    conductivite = ((double)result*0.2778)/0.074;
    Ca devrait résoudre ton problème (ça s'appelle le casting) et suit mon conseil pour les décalages, je te laisse un peu chercher.


    @+

  14. #13
    paulfjujo

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    hello,



    i think the problem is because your variables are declared into the main...
    declare them outside, so becomes globales variables

    or no result in ReadAdc ... i tested with integer M as measure simulation

    Code:
    int M;
    float result; 
    double conductivite;
    
    
    void main()
    {
      ADCON1=0x01;
     TRISA=0b0111101;    // test sur led RA1  RA0=analog
     TRISB=0x00;
    
      OpenADC(ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD,ADC_CH0 & ADC_INT_OFF, 0); 
    
       while(1) 
         { 
           //  ConvertADC(); // Start conversion 
           //  while(BusyADC()); // Wait for completion 
              M=512; // integer measure  simulation
              result = M; // implicite float convertion by C compiler 
              conductivite=(result*0.2778)/0.074; // => 1922.076
            // so , lines below could be correct
             result = ReadADC(); // Read result 
             conductivite=(result*0.2778)/0.074; 
    //or 
            conductivite=result*3.754; // less computation
         }
    Dernière modification par paulfjujo ; 14/01/2015 à 14h52.

  15. #14
    invitebd56af21

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Merci HULK pour ces infos, j'ai commencé de regardé ça et je l'utiliserai dorénavant.

    En revanche mon problème n'est pas résolu.

    J'ai insérer un int auquel j'ai assigné simplement la valeur 10.
    Lorsque mon programme est en running, ou que je le stop, même cette variable est noté comme "out of scope".

    En revanche lorsque je place un BP juste après la ligne où j'assigne cette valeur à mon int, il n'y'a plus de "out of scope" mais bel et bien des valeurs en Hexa que ce soit pour cette nouvelle valeur ou même pour result et conductivite. J'obtiens donc en bidouillant les bons résultats.

    En revanche j'obtiens une valeur qui varie entre 0 et 1023 pour le result. A quoi correspond concrètement cette valeur et comment la relier à la tension réelle mesurée ?

  16. #15
    invitebd56af21

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Thanks Paulfjujo,
    That was it !
    It works when i declare my variables as global.
    My last question remaining is how i convert the result i get (0 to 1023 with my demo board) into the real voltage ?
    Moreover, can i get a float as result instead an int ?

  17. #16
    paulfjujo

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Par defaut les reference +Vref et - Vref sont respectivement +VCC et Gnd
    donc si tu alimentes ton PIC en 3,3V
    tu as la relation Volts = readADC()* 3.3/1024.0;

    Oui, le resultat ADC peut etre mis dans un float, le compilateur fait le boulot...
    mais comme l'indique HULK28, il est preferable de prendre de bonne habitudes
    en utilisant un casting et en ecrivant

    Code:
    result=(float) ReadADC() * 3.3 /1024.0;
    ou mieux
    result=(float) ReadADC() * 0,00322265;

  18. #17
    Jack
    Modérateur

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    je rappelle que tout le monde doit s'exprimer en Français.

  19. #18
    paulfjujo

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    Oups, j'etais auparavant sur edaboard ..et dans la foulée j'ai oublié de zapper....

    D'un autre coté , tout en parlant Français, on se retouve bien embété
    avec les sigles tel que CAN pour ADC ...
    etc..
    sans parler de tous les anglicismes des langage de programmation.
    Mais la règle est la règle .. OK

  20. #19
    Jack
    Modérateur

    Re : Pic 18F4550, CAN et transmission bluetooth [langage C]

    On peut utiliser l' anglais pour les termes technique sans problème. ADC est bien préférable à CAN à mon avis par exemple car aucune ambiguïté n'est possible.
    Dernière modification par Jack ; 14/01/2015 à 16h59.

Discussions similaires

  1. Projets Bluetooth (capteur mémoire/bluetooth senseo)
    Par inviteb15d2cb2 dans le forum Électronique
    Réponses: 4
    Dernier message: 07/04/2014, 12h59
  2. Réponses: 14
    Dernier message: 22/03/2014, 15h11
  3. Capteur piézo-électrique avec transmission bluetooth
    Par invitec99b664b dans le forum Électronique
    Réponses: 0
    Dernier message: 16/02/2012, 17h37
  4. usb bluetooth vers hdmi bluetooth
    Par invite843fc5a2 dans le forum Électronique
    Réponses: 4
    Dernier message: 12/12/2011, 12h51
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...