[Programmation] Communication UART mikroC pour une entrée analogique
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Communication UART mikroC pour une entrée analogique



  1. #1
    yasmineyas

    Communication UART mikroC pour une entrée analogique


    ------

    Bonjour, je veux faire une communication entre pic 16f877a et matlab en utilisant la transmission uart pour la programmation du pic j'utilise le compilateur MikroC en faisant des recherche j'ai trouvé un programme [1] pour m'aider mais ce dernier est compilé sous un autre compilateur j'ai essayé de faire un équivalent mais j'ai trouvé des erreurs je vous attache le programme ainsi que le circuit sous proteus.
    Le circuit sous proteus (28 messages d'erreurs )
    1.png
    Les messages d'erreurs
    4.jpg
    Voici mon programme
    Code:
    char adc_rd,adc_rd1;
    unsigned int a,b,vol;
    void main() {
     ADCON0=0x05;
     ADC_Init();
     CMCON= 0x07; //Disable comprators
     TRISA= 0x3F;
     UART1_Init(9600);  // Initalize USART (9600 baud rate, 1 stop bit, ...
     delay_ms(100);
    while(1) {
       vol= ADC_read(0); // récupère les 10 bits de conversion
       a= vol;
       b= vol >> 8;
       IntToStr(a, adc_rd);
       IntToStr(b, adc_rd1);
       UART1_write(adc_rd);
       UART1_write(adc_rd1);
       delay_ms(500);
             }
                }
    [1]: https://exploreembedded.com/wiki/ADC...5IN05KFClJx4uw

    -----

  2. #2
    paulfjujo

    Re : Communication UART mikroC pour une entrée analogique

    bonjour,

    erreures:

    la conversion IntToStr necessite une table d'au moins 7 bytes pour transformer le int an ascii
    -32767 6 bytes
    + un zero terminateur de string => 7 bytes
    donc avec initialisation de :

    char adc_rd[7];
    char adc_rd1[7];

    d'autre part :
    UART1_write -> ecrit 1 seul caractere
    il faut utiliser UART1_Write_Text pour ecrire une chaine de caractere ( toujours terminée par un zero)



    l'ADC ne mesure que du positif, on peut donc utiliser des
    unsigned int à la place
    00000 à 65535 et des tables de 6 bytes ( 5 digits + zero)

    tu peux aussi lire l'ADC en 1 seule fois

    Code:
    char adc_rd[6];  // <- table pour le resultat de la conversion en ascii ( 5 digits + zero)
    unsigned int vol;  // entier 16 bits non signé pour mesure ADC
    
    
    void main()
     {
     TRISA= 0x3F;
     CMCON= 0x07; //Disable comprators
     ADCON0=0x05;  // <-- à verifier sur quelle entree !
     ADC_Init();
     UART1_Init(9600);  // Initalize USART (9600 baud rate, 1 stop bit, ...
     delay_ms(100);
     while(1)
       {
       vol= ADC_read(0); // récupère les 10 bits de conversion  EN 1 seule fois!
       WordToStr(vol, adc_rd);     // intToStr c'est pour un entier signé
       UART1_write_text(adc_rd);
        delay_ms(500);
        }
     }

  3. #3
    yasmineyas

    Re : Communication UART mikroC pour une entrée analogique

    Merci pour votre réponse je vais l'essayer, svp une question pour le réglage du registre ADCON0 si je veux utiliser plus d'une chaîne par exemple 4 pour la conversion comment régler ce registre?

  4. #4
    paulfjujo

    Re : Communication UART mikroC pour une entrée analogique

    Citation Envoyé par yasmineyas Voir le message
    Merci pour votre réponse je vais l'essayer, svp une question pour le réglage du registre ADCON0 si je veux utiliser plus d'une chaîne par exemple 4 pour la conversion comment régler ce registre?

    une chaine ? ou voie ADC

    bit 5-3 CHS2:CHS0: Analog Channel Select bits
    000 = Channel 0 (AN0)
    001 = Channel 1 (AN1)
    010 = Channel 2 (AN2)
    011 = Channel 3 (AN3)
    100 = Channel 4 (AN4)
    101 = Channel 5 (AN5)
    110 = Channel 6 (AN6)
    111 = Channel 7 (AN7)

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

    Re : Communication UART mikroC pour une entrée analogique

    oui voilà une voie. Je voudrai travailler avec plusieurs voies AN0/AN1/AN2/AN3 comment devrai-je faire ?

  7. #6
    paulfjujo

    Re : Communication UART mikroC pour une entrée analogique

    bonjour,


    dans un premier temps, lire, etudier la datasheet du PIC

    paragraphe 11.0 ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE
    REGISTER 11-1: ADCON0 REGISTER (ADDRESS 1Fh)
    ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON

    modifier la selection de voie
    bit 5-3 CHS2:CHS0: Analog Channel Select bits
    avec ces 3 bits pour le choix AN0 à AN7

    activer toutes les voies analogiques
    REGISTER 11-2: ADCON1 REGISTER (ADDRESS 9Fh)
    R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
    ADFM ADCS2 — — PCFG3 PCFG2 PCFG1 PCFG0

    voir A/D BLOCK DIAGRAM figure 11-1
    pour connaitre les pins concernées par les voies analogiques.

    relire aussi les explication mikroC
    HELP librairie ADC


    le langage C simplie les choses avec la fonction ADC_read(x)
    ou x est le numero de voie à lire

    Code:
    char adc_rd[6];  // <- table pour le resultat de la conversion en ascii ( 5 digits + zero)
    unsigned int vol;  // entier 16 bits non signé pour mesure ADC
    int j;
    
    TRISA=0xFF;
    TRISE=0xFF;
     CMCON= 0x07; //Disable comparators
    ADCON1=0;  //  all analogue
    ADCON1.ADFM=1;  // cadrage à droite
    ADCON1.ADCS2=1; // FOSC /16  parametre important surtout si FOSC est elevée
    ADCON0.ADCS1=0;
    ADCON0.ADCS0=1;
    
    while(1)
    {
       for (j=0;j<7;j++)
       { 
         vol= ADC_read(j); // lecture  EN 1 seule fois! 0000 à 1023 pour 0 à 5V
         WordToStr(vol, adc_rd);     
         UART1_write_text(adc_rd);
         delay_ms(50);
       }
        // saut de ligne entre chaque serie
       UART1_Write(13); // CR 
       UART1Write(10);  // LF
       delay_ms(500);
    }
    nota :

    meme sous mikroC , tu peux essayer de lire les valeurs analogiques
    en te servant des registres liés à l'ADC
    ce serait un bon exercice formateur !

    " Aides-toi , le ciel t'aidera"
    Dernière modification par paulfjujo ; 17/08/2020 à 10h31.

  8. #7
    yasmineyas

    Re : Communication UART mikroC pour une entrée analogique

    Merci beaucoup pour la réponse et pour le conseil. dorénavant je ferai plus attention à ce qui est noté dans la documentation. Bien cordialement.

Discussions similaires

  1. programme UART sur mikroC
    Par invite9a8ad343 dans le forum Électronique
    Réponses: 8
    Dernier message: 26/04/2015, 23h28
  2. Régulateur de tension, de courant pour entrée analogique:
    Par invite200ed97f dans le forum Électronique
    Réponses: 7
    Dernier message: 16/03/2013, 20h23
  3. MikroC et communication
    Par invite659e17ac dans le forum Électronique
    Réponses: 3
    Dernier message: 01/05/2010, 09h36
  4. communication UART
    Par invitea302684b dans le forum Électronique
    Réponses: 0
    Dernier message: 07/01/2010, 09h53
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...