Passage de Pic18f2520 vers Aduc842 - sharp gp2d120
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Passage de Pic18f2520 vers Aduc842 - sharp gp2d120



  1. #1
    inviteeb1cae5c

    Passage de Pic18f2520 vers Aduc842 - sharp gp2d120


    ------

    Bonjour, c'est mon premier message, soyez indulgent, merci.

    Alors pour commencer, il m'a été donné comme travail d'effectué une mesure de distance à l'aide du sharp gp2d120 (télémètre infrarouge) sur deux µC différents. Sur le pic et l'aduc. Côté pic, tout fonctionne. Mon problème se situe au niveau de la programmation de l'aduc 842. En effet, je ne sais pas si mon programme est fait correctement afin de faire fonctionner le CAN, car lors de l'envoi des données sur le port série sur Terminal.exe, le terminal affiche toujours 12 cm peut importe la distance.

    Pour information, le pic est programmé sur Mplab IDE v8.20 et l'aduc sur Keil uVision4

    Si vous avez une solution

    merci

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    inviteeb1cae5c

    Re : Passage de Pic18f2520 vers Aduc842 - sharp gp2d120

    pour ceux qui n'ont pas envie de telecharger

    code:

    #include <aduc842.h>
    #include <stdio.h>
    #include <math.h>




    /*--------------- Fonctions ---------------*/
    void init_UART(void)
    {
    T3CON = 0x83; //baude rate a 9600 pour 32Khz, 82 pour 19200
    T3FD = 0x2D; //génère le baude rate
    SCON = 0x52; //réglage com UART
    }

    void init_ADC(char channel) //initialisation du ADC
    {
    ADCCON1 = 0x90;
    ADCCON2 = channel; //connection sur la pin
    }

    int mesureAD()
    { // récupère la valeur de l'ADC
    int ADC;

    SCONV = 1;
    while(!ADCI); // attente fin conversion
    ADCI = 0;
    ADC = ADCDATAH & 0x0F;
    return((ADC*256)+ADCDATAL);
    }

    double calcul_dist(int ADC) // calcul la tenpérature en °C
    {
    double U,result;

    U=ADC*(2.5/4096.0);//ADC vers volts

    result=pow(U,-1.111);
    result=12,346*result;

    return result;

    }
    void del_ms(int ms)
    {
    // 16-bit timer
    TMOD &= 0xF0;
    TMOD |= 0x01;
    ET0 = 0; //pas d'interruption
    while (ms!=0){
    TH0 = ((65536-1000) / 256);
    TL0 = ((65536-1000) % 256);
    TF0 = 0; // drapeaux à 0
    TR0 = 1; // début timer
    while (!TF0);
    ms--;
    }
    }

    /* ------------------ programme principal ------------------*/

    void main() {

    double dist=0;


    init_UART();
    init_ADC(3);

    while(1)
    {
    printf("distance: ");
    dist = calcul_dist(mesureAD());

    printf("%f cm\n",dist);
    del_ms(1048);//1 seconde affichage + attente mesure sharp
    }
    }

  3. #3
    inviteeb1cae5c

    Re : Passage de Pic18f2520 vers Aduc842 - sharp gp2d120

    re, j'up mon sujet car je n'ai toujours pas trouvé ma bêtise.

  4. #4
    umfred

    Re : Passage de Pic18f2520 vers Aduc842 - sharp gp2d120

    Je vois dans la doc de l'aduc, que le réglage CK1-CK0 = b01 (bits 4 et 5 de ADCCON1) ne doit pas être utilisé quand les bits CD sont à 0. Ces bits sont dans le registre PLLCON. Essaie de voir si tu n'est pas dans ce cas là

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

    Re : Passage de Pic18f2520 vers Aduc842 - sharp gp2d120

    Tout d'abord, merci de ta réponse.
    Mais j'ai oublié de préciser que l'aduc842 était alimenté en 0-5V. les bits CD ne doivent pas être à 0 si alimenté en 0-3V.
    Donc c'est pas ça
    je continue à chercher, je vais bien finir par trouver
    merci quand même

  7. #6
    umfred

    Re : Passage de Pic18f2520 vers Aduc842 - sharp gp2d120

    j'ai remarqué un truc dans le code: pour tes valeurs décimales, tu utilises le point "." sauf à un endroit où tu as mis une virgule (le dernier calcul sur result dans calcul_dist) c'est peut-être ça le hic ?

  8. #7
    inviteeb1cae5c

    Re : Passage de Pic18f2520 vers Aduc842 - sharp gp2d120

    c'était ça.
    Un de mes collègues ( oui j'harcèle tout le monde) et moi l'avons remarqué un peu avant de retourner ici

    Sauf qu'après j'ai eu un autre problème. (résolu)
    C'est que lorsque j'enregistrais la trame sur picoscope®, lorsque le sharp envoie sa tension de sortie, le courant consommé passait de 17.63 à 18.26 mA.Ce qui faussait les résultats ( différents de 12cm avec un point). Pour pallier au problème j'ai ajouté une capa de 220µF comme réservoir sur les bornes même de l'alimentation du sharp et maintenant son courant se stabilise ( pas encore tout à fait) entre 17.71 et 17.82 mA ce qui est pas mal.

    Je n'avais jamais fais l'erreur de la virgule avant(il faut bien une première fois ), je me souviens de mon prof qui disait "ne dites jamais jamais"
    En tout cas merci encore pour ton aide et ta patience

Discussions similaires

  1. [Néolithique] Passage vers l'agriculture
    Par invite0e4ceef6 dans le forum Archéologie
    Réponses: 56
    Dernier message: 15/08/2015, 20h56
  2. Passage de Simulink vers VHDL
    Par invitec4af4119 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/10/2013, 14h26
  3. Expérience : passage d'APN vers CCD
    Par invitef8b60474 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 0
    Dernier message: 04/01/2011, 15h03
  4. Capteur Distance Sharp gp2d120
    Par invitedf141a13 dans le forum Électronique
    Réponses: 7
    Dernier message: 26/10/2006, 16h07
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...