[Programmation] PIC16F877A - ADC - Bluetooth UART [Résolu]
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

PIC16F877A - ADC - Bluetooth UART [Résolu]



  1. #1
    invite47370946

    PIC16F877A - ADC - Bluetooth UART [Résolu]


    ------

    Mesdames et Messieurs les spécialistes du codage de microcontrôleur ce message s'adresse à vous je remercie à l'avance celui ou celle qui prendra de son temps pour me mettre sur la bonne voie

    Je comprends pas pourquoi j'obtiens jamais la même valeur alors que ma tension d'entrée ne change pas ?
    Assurément mon truc et pas au point,

    Code:
    #include <xc.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <htc.h>
    
    #define _XTAL_FREQ 20000000 
    
    #pragma config FOSC = HS       
    #pragma config WDTE = OFF      
    #pragma config PWRTE = ON      
    #pragma config BOREN = ON       
    #pragma config LVP = OFF       
    #pragma config CPD = OFF       
    #pragma config WRT = OFF      
    #pragma config CP = OFF      
    
    
    void putch(char data)
    {
    while(!TXIF);
    TXREG = data;
    }
    
    unsigned int read_input(unsigned char channel){
        ADCON0=0b00000000;
        CHS0=0;                  
        ADON = 1;
        GO_DONE = 1;
    
        while (GO_DONE);
        ADON = 0;
        return ((ADRESH >> 2) + ADRESL);     
    }
        
    void main(void)
    {
     
        while(1)
        {  
          TRISA = 1;
          ADCON1 = 0b10000000;
          unsigned int x = read_input(0);
          char buffer[10];
          itoa(buffer,x,10);  
          printf("ADC%s\n",buffer); // pour test
          // Bluetooth UART \\
        }
         
    }

    -----

  2. #2
    adipie

    Re : PIC16F877A - ADC - Bluetooth UART

    Bonjour,
    Vous avez oublié de joindre le schéma.

  3. #3
    invite03481543

    Re : PIC16F877A - ADC - Bluetooth UART

    Bonjour,

    avec ADFM=1 vous avez choisi la justification à droite (ADCON1 = 0b10000000; )
    Donc votre décalage à droite de 2 pas est à enlever, il suffit juste de concaténer dans un registre 16 bits (entier non signé) et de traiter.

  4. #4
    F15

    Re : PIC16F877A - ADC - Bluetooth UART

    T'est sur de ta function itoa?
    avec un recherche sur internet je trouve ca comme prototype:

    char * itoa(int val, char * s, int radix)

    https://www.microchip.com/webdoc/AVR...ca4bd2f00.html


    itoa(x, buffer,10);
    Dernière modification par F15 ; 17/11/2019 à 14h22.

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

    Re : PIC16F877A - ADC - Bluetooth UART

    Citation Envoyé par HULK28 Voir le message
    avec ADFM=1 vous avez choisi la justification à droite (ADCON1 = 0b10000000; )
    Donc votre décalage à droite de 2 pas est à enlever, il suffit juste de concaténer dans un registre 16 bits (entier non signé) et de traiter.
    Vous pouvez faire ainsi:
    Code:
    unsigned int ADC_result;
    
    ADC_result=ADRESL;
    ADC_result+=(ADRESH << 8);
    return(ADC_result);
    Ensuite il vous faut convertir le résultat (0 à 1023) en valeur de tension par exemple.
    Code:
    float convert_ADC;
    
    convert_adc = (ADC_result * 5.0)/1024.0; // si AVDD=5V par exemple
    Vous obtenez un flotant comme résultat (par exemple 3.5601.....) qui vous donne directement la valeur en volt.
    Il vous faut une conversion float to string pour transférer chaque décimale de cette tension à travers l'UART.
    Sinon vous utilisez une conversion int to string pour transférer le résultat de l'ADC, ce qui me semble moins pratique à interpréter.

  7. #6
    invite47370946

    Re : PIC16F877A - ADC - Bluetooth UART

    Super vraiment !!! Merci à tous pour votre aide, ci après mon code, je ne suis pas certain que la construction respecte les règles de codages mais ça fonctionne ces le principal maintenant je suis à l'écoute bien entendu de vos remarques.

    Code:
    #include <xc.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #pragma config FOSC = HS        
    #pragma config WDTE = OFF      
    #pragma config PWRTE = ON       
    #pragma config BOREN = ON      
    #pragma config LVP = OFF       
    #pragma config CPD = OFF       
    #pragma config WRT = OFF        
    #pragma config CP = OFF         
    
    unsigned int ADC_result;
    unsigned int convert_ADC;
    
    void putch(char data)
    {
    while(!TXIF);
    TXREG = data;
    }
    
    unsigned int read_input(unsigned char channel){ 
        ADCON0=0b00000000;
        CHS0=0;                  
        ADON = 1;
        GO_DONE = 1;
    
        while (GO_DONE);
        ADON = 0;
        __delay_ms(500);
        ADC_result=ADRESL;
        ADC_result+=(ADRESH << 8);
        return(ADC_result); 
    }
        
    void main(void)
    {
    
        while(1) 
        {     
          __delay_ms(10);
          TRISA = 1;
          unsigned int x = read_input(0);
          float convert_ADC = (ADC_result * 5.0)/1024.0;  // si AVDD=5V par exemple
    
          char buffer[10];
          itoa(buffer,convert_ADC,10);   // here 2 means binary
          __delay_ms(500);
          printf("ADC%s\n",buffer);
        }
    
    }
    Nom : Screenshot_2019-11-18-00-19-14.jpg
Affichages : 86
Taille : 21,8 Ko

Discussions similaires

  1. connexion windev mobile & microncontroleur via port série UART sur bluetooth
    Par Lagaan31 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 24/10/2017, 22h36
  2. Envoi de données via l'uart d'un PIC16F877A
    Par Creezys dans le forum Électronique
    Réponses: 7
    Dernier message: 05/06/2014, 14h46
  3. Syntaxe UART pour envoi String sur bluetooth profile SPP ?
    Par vinowan dans le forum Électronique
    Réponses: 4
    Dernier message: 16/04/2014, 15h49
  4. commande d'une LED et supervision d'un LM35 via UART pic16f877A
    Par st.diyae dans le forum Électronique
    Réponses: 2
    Dernier message: 09/05/2013, 11h00
  5. Bluetooth et UART
    Par invite3f22feff dans le forum Électronique
    Réponses: 0
    Dernier message: 07/04/2010, 09h35
Découvrez nos comparatifs produits sur l'informatique et les technologies.