CAN du PIC 16F877
Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

CAN du PIC 16F877



  1. #1
    misselectro45

    CAN du PIC 16F877


    ------

    Slt tout le monde! pourquoi la sortie de mon convertisseur ne varie pas en fonction de l'entrée analogique ANO. J'utilise le PIC 16F877 et j'aimerai récupérer les résultats de ma conversion en sortie avec des leds. Quelqu'un peut m'aider svp?
    Voici le code:

    Code:
     #define p16_f877 ;
    #pragma p16F877.h
    
        // récupere le AN0
        unsigned int readAN0(void)
        {
        char cT=6; // ah ah :)
        unsigned int iValAD=0;
        ADON==1; // activation du convertisseur
        while(cT--); // tempo de 23µs
        GO_DONE==1; // démarrage conversion
        while(GO_DONE); // si ADGO passe à 0 fin de conversion
        iValAD=ADRESH;
        iValAD<<=8;
        iValAD|=ADRESL; // le résultat est contenu dans iValAD
        ADON==0; // convertisseur arrêté
        return iValAD;
        }
    
    
        void main (void){
        TRISA=0x01; //Port A en entrées
        TRISB=0x3F; //Port B en sortie (leds rouges)
        TRISD=0;
    
        //Init du convertisseur ana/numerique
        ADCS1==1; ADCS0==0; // Fosc 32
        CHS2==0; CHS1==0; CHS0==0; // sélection de l'entrée analogique RA0
        PCFG3==1; PCFG2==1; PCFG1==1; PCFG0==0;
        ADFM==1; // justification bit à droite registre de réception ADRESH ADRESL
    
        // boucle a la con
        while (1){
        PORTD=readAN0();  // Send lower 8 bits to PORTD
        PORTB=readAN0()>>2; // Send 2 most significant bits to RB7, RB6
        }
        }

    -----

  2. #2
    paulfjujo

    Re : CAN du PIC 16F877

    bonjour,

    Code:
    //Init du convertisseur ana/numerique
        ADCS1==1; ADCS0==0; // Fosc 32
        CHS2==0; CHS1==0; CHS0==0; // sélection de l'entrée analogique RA0
        PCFG3==1; PCFG2==1; PCFG1==1; PCFG0==0;
        ADFM==1; // justification bit à droite registre de réception ADRESH ADRESL
    ADCS1=1; == c'est pour les tests....

    PORTB is a byte, ReadAN0() is an Integer 16 bits.

    Code:
     PORTD=(unsigned char) readAN0() ;  // Send lower 8 bits to PORTD
    //try to change only RB7 & RB6
     PORTB =PORTB ((readAN0()  >>2) & 0xC0)| PORTB; // Send 2 most significant bits to RB7, RB6

  3. #3
    misselectro45

    Re : CAN du PIC 16F877

    reslt! merci de m'avoir répondu! tout d'abord les: "ADCS1==1" ne sont pas des tests mais j'aimerai mettre l'ADCS1 à 1 mais en faisant ADCS1=1, j'obtiens une erreur.
    Et ensuite en essayant le code que tu m'a fournie, j'obtiens des erreurs du genre: undeclared identifier PORTB in expression.

  4. #4
    paulfjujo

    Re : CAN du PIC 16F877

    Quel compilateur ? MikroC ?

    effectivement errare :
    Code:
     PORTB = ((readAN0()  >>2) & 0x00C0) | PORTB;
    si c'est MikroC
    rajoute _bit apres la variable qui designe 1 bit de registre..
    ADCS1_bit=1;

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

    Re : CAN du PIC 16F877

    Effectivement j'utilise le compilatuer microC.
    Et en suivant ce que tu m'as dit sur l'écriture ADCS1_bit=1. J'obtiens toujours les mêmes erreurs.
    Code:
     #define p16_f877 ;
    #pragma p16F877.h
    #pragma CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF;
    
        // récupere le AN0
        unsigned int readAN0(void)
        {
        char cT=6; // ah ah :)
        unsigned int iValAD=0;
        ADON_bit=1; // activation du convertisseur
        while(cT--); // tempo de 23µs
        GO_DONE_bit=1; // démarrage conversion
        while(GO_DONE); // si ADGO passe à 0 fin de conversion
        iValAD=ADRESH;
        iValAD<<=8;
        iValAD|=ADRESL; // le résultat est contenu dans iValAD
        ADON_bit=0; // convertisseur arrêté
        return iValAD;
        }
    
    
        void main (void){
        TRISA=0x01; //Port A en entrées
        TRISB=0x3F; //Port B en sortie (leds rouges)
        TRISD=0;
    
        //Init du convertisseur ana/numerique
        ADCS1_bit=1; ADCS0_bit=0; // Fosc 32
        CHS2_bit=0; CHS1_bit=0; CHS0_bit=0; // sélection de l'entrée analogique RA0
        PCFG3_bit=1; PCFG2_bit=1; PCFG1_bit=1; PCFG0_bit=0;
        ADFM_bit=1; // justification bit à droite registre de réception ADRESH ADRESL
    
        // boucle a la con
        while (1){
        PORTD=(unsigned char) readAN0() ;  // Send lower 8 bits to PORTD
        PORTB = ((readAN0()  >>2) & 0x00C0) | PORTB;
        }
        }

  7. #6
    paulfjujo

    Re : CAN du PIC 16F877

    bonjour,

    Au fait, la librairie ADC est bien cochéee ?

    Code:
    #pragma n'est pas reconnu par MikroC !
    .....ce serait plutot une syntaxe C18 ou CCS

    la config des bits de Config se fait par la fenetre
    Project
    Edit project
    Poster la fenetre de Messages (resultat de compilation)
    click droit .. Copy all as text
    et le coller dans le Post entre 2 balises QUOTE

    car la syntaxe ADCS1_bit=1; est bien correcte et ne genere pas d'erreur
    testé ton code ..(mais pas le resultat en RUN !) sans les #pragma ...OK

    0 1 mikroCPIC1618.exe -MSF -DBG -pP16F877 -DL -O11111015 -fo10 -N"C:\_MickroC\_MesProjets_Mick roC\_16F877_Platine\16F877_Pla tine.mcppi" -SP"C:\Program Files\Mikroelektronika\mikroC PRO for PIC\Defs\" -SP"C:\Program Files\Mikroelektronika\mikroC PRO for PIC\Uses\P16\" -SP"C:\_MickroC\_MesProjets_Mic kroC\_16F877_Platine\" "16F877_Test_ADC.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_CType.mcl" "__Lib_ADC_A_C.mcl"
    0 1139 Available RAM: 352 [bytes], Available ROM: 8192 [bytes]
    0 126 All files Preprocessed in 31 ms
    0 122 Compilation Started 16F877_Test_ADC.c
    38 123 Compiled Successfully 16F877_Test_ADC.c
    0 127 All files Compiled in 63 ms
    0 1144 Used RAM (bytes): 6 (2%) Free RAM (bytes): 346 (98%) Used RAM (bytes): 6 (2%) Free RAM (bytes): 346 (98%)
    0 1144 Used ROM (program words): 57 (1%) Free ROM (program words): 8135 (99%) Used ROM (program words): 57 (1%) Free ROM (program words): 8135 (99%)
    0 125 Project Linked Successfully 16F877_Platine.mcppi
    0 128 Linked in 62 ms
    0 129 Project '16F877_Platine.mcppi' completed: 219 ms
    0 103 Finished successfully: 17 mai 2014, 10:06:55 16F877_Platine.mcppi

  8. #7
    RISC

    Re : CAN du PIC 16F877

    Salut,

    Le fichier header ne s'ajoute pas par un #pragma mais par un #include :

    #pragma p16F877.h ===> #include <p16F877.h> // à vérifier avec ton compilateur le nom exact du fichier header

    a+

  9. #8
    misselectro45

    Re : CAN du PIC 16F877

    Slt Risc! oui effectivement ça doit être #include <16F877.h> mais en faisant cela, j'obtiens une erreur aussi du genre: can't not include file #include <16f877.h> ça veut dire koi? jn'y comprend rien!

  10. #9
    misselectro45

    Re : CAN du PIC 16F877

    slt! paulfjujo!
    Bon dans la partie config: Project>Edit Project, qu'est ce que je dois cochez exactement, moi j'ai coché que les options par défaut!
    Et concernant les résultat de la compilation, j'ai pas pu faire un clik droit sur le message, rien ne s'affiche mais voilà les résultats en pièce jointe!
    Images attachées Images attachées  

  11. #10
    paulfjujo

    Re : CAN du PIC 16F877

    il n'y a pas de header (sous la forme de fichier) sous MikroC, contrairement au C18 MPlab et autres compilos....
    c'est dans le projet qu'on definit le MCU, la FOSC et les bits de configuration..
    exemple:



    Le probleme n'est pas dans ton code !!! au moins au niveau de la reussite de compilation...
    Utilises-tu un quartz ou l'oscillateur interne ?
    Quelle valeur declarée pour FOSC

    Dans la fenetre "messages" ou s'affiche le resultat de compilation
    mettre le curseur souris dessus, click droit pour avoir le focus sur cette fenetre (Bandeau bleu!)
    apparait le choix copy all as text
    clicker dessus
    et ensuite coller dans le Post ( encadré par des balises QUOTE)
    Images attachées Images attachées  
    Dernière modification par paulfjujo ; 17/05/2014 à 16h15.

  12. #11
    misselectro45

    Re : CAN du PIC 16F877

    Tu le veut en pièce jointe ou bien? en tout cas, les pièces jointes ne fonctionnent pas avec les programmes je pense!

  13. #12
    misselectro45

    Re : CAN du PIC 16F877

    Tu peux m'envoyez ton email stp! je t'envoie le dossier au complet et t'essaye de compiler si ça marche ou pas!

  14. #13
    misselectro45

    Re : CAN du PIC 16F877

    J'utilise un quartz externe! et je vois effectuer le bandeau bleu! mais en faisant un clik droit! j'obtiens rien! c'est mon compilateur qui déconne ou quoi?

  15. #14
    paulfjujo

    Re : CAN du PIC 16F877

    Ton code se compile SANS ERREUR ... sur MA becane..
    voir post precedent
    0 103 Finished successfully: 17 mai 2014, 10:06:55 16F877_Platine.mcppi
    mais c'est avec MA CONFIG

    dans project
    edit project
    faire save schem dans un fichier bien defini
    et post ce fichier en changeant l'extension *.cfgsch par *.cfgsch.txt

    valeur du Quartz ?

  16. #15
    paulfjujo

    Re : CAN du PIC 16F877

    Citation Envoyé par misselectro45 Voir le message
    J'utilise un quartz externe! et je vois effectuer le bandeau bleu! mais en faisant un clik droit! j'obtiens rien! c'est mon compilateur qui déconne ou quoi?
    Le bandeau est bleu..donc tu as le focus sur la fenetre "messages"
    par contre il faut mettre le curseur de souris au milieu de la fenetre message pour faire le clcik droit...

    quelle version MikroC ?
    quell systeme d'exploitation XP,Win8 ou ?

  17. #16
    misselectro45

    Re : CAN du PIC 16F877

    Bonjour! j'utilise la version MicroC 5.0.0.3 et je suis sous windows7 ultimate. Toi tu utilises quelle version car mon Project>Edit Project ne ressemble pas au tien! Il faut absolument que je résous ce problème car mon projet ne s'arrête pas là! Pour le moment, j'ai pris le code de conversion qu'il y avait dans l'aide de MicroC et ça marche parfaitement mais qui sait quand ça va encore dégénérer? et je ne peux pas poursuivre sans en connaître d'avantage car c'est sûre que le reste ne se compilera pas correctement! Moi j'ai comme extension fichier.ppc! ça pose un problème?

  18. #17
    paulfjujo

    Re : CAN du PIC 16F877

    bonjour,

    mikroC pro version 6.0.1
    sous windows XP 32bits

  19. #18
    misselectro45

    Re : CAN du PIC 16F877

    je crois que c'est plutôt mon système qu'il n'aime pas trop! j'ai télécharger la version 6.0.0 et là, il ne veut pas s'ouvrir! ce serai gentil si tu veut bien me passer ta source de logiciel microC pour être sûr! Merci d'avance! et bonne journée!

  20. #19
    misselectro45

    Re : CAN du PIC 16F877

    Désolé de te déranger à chaque instant mais si tu veux bien regarder ma façon de compiler.
    Alors d'abord, je clique sur Projet> New Project ensuite voilà l'image de ce qui apparait ensuite.
    Et enfin j'y tape mon programme et je fini par Project>Build!
    C'est ça non?


    Et là les erreurs apparaissent!
    Images attachées Images attachées  

  21. #20
    paulfjujo

    Re : CAN du PIC 16F877

    fichier de test compilé avec MikroC Pro V 6.0.01


    Dans project
    Search Paths
    verifier que les chemins soient bien definis
    mon exempl e:
    C:\Program Files\Mikroelektronika\mikroC PRO for PIC\defs\
    C:\Program Files\Mikroelektronika\mikroC PRO for PIC\Uses\P16\
    C:\_MickroC\_MesProjets_Mickro C\_16F877_Platine\
    le 3em chemin est celui ou j'ai rangé MON PROJET
    il faudra mettre le tien à la place
    ainsi que le fichier source et scheme ci-joint.


    Dans l'editeur de projet
    Faire un load sheme du fichier de configuration
    qui comprend le type de PIC, la valeur de FOSC et les bits de configuration
    16F877.cfgsch.txt


    source C
    16F877_Test_ADC.c.txt


    Build
    Build

    et capturer la fenetre "Messages" qui est le resultat de compilation..



    *enlever les extension .txt !

  22. #21
    JPL
    Responsable des forums

    Re : CAN du PIC 16F877

    Pourquoi ne pas utiliser la balise Code pour mettre les sources dans le message ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  23. #22
    misselectro45

    Re : CAN du PIC 16F877

    Bonjour! Merci infiniment, infiniment pour ton aide! j'ai réussi à compiler mon code sans erreur après ce que tu m'as dit de faire dans ton dernier message! Mais ...
    Mais j'ai essayé de comparer les résultats de la conversion avec le code de conversion que j'ai pu trouver dans le QHelp du MicroC, sur le mot ADC_Read et j'obtiens des réponses différentes!
    Avec celui du QHelp, en insérant le code dans le PIC, à la sortie des ports, tous les leds s'allument avec une entrée analogique de 5V sur le portA, canal A0! Alors qu'avec le code que je t'ai envoyé, c'est à dire le code qui ne voulait pas compiler, j'obtiens une autre réponse sur les Leds. Ce que je voudrait savoir c'est quelle devrait être la réponse exacte d'une conversion de 5V en 10bits car j'avoue que je ne sais pas vraiment! je suis seulement qu'en 4 bits, normalement c'est 0101 et en 10bits, est ce que c'est 00000101 ?

    Voici le code du QHelp dont je t'ai parlé tout à l'heure!
    Code:
    /*
     * Project name:
         LED_Blinking (Simple 'Hello World' project)
     * Copyright:
         (c) Mikroelektronika, 2011.
     * Revision History:
         20110929:
           - initial release (FJ);
     * Description:
         This is a simple 'Hello World' project. It turns on/off LEDs connected to
         PORTA, PORTB, PORTC, PORTD and PORTE.
     * Test configuration:
         MCU:             PIC18F45K22
                          http://ww1.microchip.com/downloads/en/DeviceDoc/41412D.pdf
         Dev.Board:       EasyPIC7 - ac:LEDs
                          http://www.mikroe.com/eng/products/view/757/easypic-v7-development-system/
         Oscillator:      HS-PLL 32.0000 MHz, 8.0000 MHz Crystal
         Ext. Modules:    None.
         SW:              mikroC PRO for PIC
                          http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
     * NOTES:
         - Turn ON the PORT LEDs at SW3.
     */
    unsigned int temp_res;
    
    void main() {
      ADCON1 = 0x80;  // Configure analog inputs and Vref
      TRISA  = 0xFF;  // PORTA is input
      TRISB  = 0x3F;  // Pins RB7, RB6 are outputs
      TRISD  = 0;     // PORTD is output
    
    
    
        temp_res = Adc_Read(0); // Get results of AD conversion lecture des données du port A0
        PORTD = temp_res;       // Send lower 8 bits to PORTD
        PORTB = temp_res >> 2;  // Send 2 most significant bits to RB7, RB6
    
        portb = 0b1111111;       //Leds éteintes
        portd = 0b1111111;       //Leds éteintes
        Delay_ms(1000);    // 1 second delay
    
    
    
        temp_res = Adc_Read(1); // Get results of AD conversion lecture des données du port A0
        PORTD = temp_res;       // Send lower 8 bits to PORTD
        PORTB = temp_res >> 2;  // Send 2 most significant bits to RB7, RB6
    
    
        temp_res = Adc_Read(2); // Get results of AD conversion lecture des données du port A0
        PORTD = temp_res;       // Send lower 8 bits to PORTD
        PORTB = temp_res >> 2;  // Send 2 most significant bits to RB7, RB6
    
    
        temp_res = Adc_Read(3); // Get results of AD conversion lecture des données du port A0
        PORTD = temp_res;       // Send lower 8 bits to PORTD
        PORTB = temp_res >> 2;  // Send 2 most significant bits to RB7, RB6
    
    
    
    
    }
    Merci d'avance!!

  24. #23
    paulfjujo

    Re : CAN du PIC 16F877

    bonjour,



    Ce que je voudrait savoir c'est quelle devrait être la réponse exacte d'une conversion de 5V en 10bits
    car j'avoue que je ne sais pas vraiment! je suis seulement qu'en 4 bits, normalement c'est 0101 et en 10bits, est ce que c'est 00000101 ?
    Je pense qu'il va te falloir reviser un peu les bases.. voir cours de Maitre BIGONOFF :

    La difference de resultat pourrait s'expliquer avec le mode de lecture
    cadré à gauche ou cadré à doite ..
    (facon de ranger les 10 bits de l'ADC dans le resultat sur 16 bits)


    si la convertion se fait sur 10 bits !
    avec resultat aligné à droite !
    5V -> 1023 0000 0011 1111 1111 ou 0x03FF
    0V-> 0000

    si aligné à Gauche !
    5V -> 1023 1111 1111 1100 0000 ou 0xFFC0


    pour afficher le resultat sur des leds
    on peut recuperer les 8 bits les plus significatifs
    Code:
    ValeurAna=Adc_Read(0) ;
    PORTD=(unsigned char) (ValeurAna & 0x00FF);   // conserve les 8 bits de poids faible
    
    PORTB= (unsigned char)  (ValeurAna >>2);// attention affecte aussi B5,B4,B3,B2,B1 !  B0 ?
    
    
    il vaudrait mieux faire 
    if (ValeurAna & 0x200==0x200) PORTBbits.RB7=1; else  PORTBbits.RB7=0;
    if (ValeurAna & 0x100==0x100) PORTBbits.RB6=1; else  PORTBbits.RB6=0;
    n'affecte pas les autres bits

  25. #24
    misselectro45

    Re : CAN du PIC 16F877

    Bonjour! pour être j'ai relier les sorties numérique à un Convertisseur numérique analogique ce qui est justement la suite de mon projet! mais le problème c'est que pour les 0V et le 5V, ma conversio est correcte mais si 'injecte par exemple 1V à l'entrée du PIC, j'obtiens 1110110011 à la sortie et 4,6 à la sortie de mon CNA! j'utilise toujours le même code mais avec tes modifications bien sûr! peu tu m'éclairer encoer là-dessus stp! Merci

  26. #25
    misselectro45

    Re : CAN du PIC 16F877

    rebonjour! c'est toujours moi! juste pour te dire que j'ai réussi à afficher les résultats correctes à la sortie de mon CNA! en faite j'ai essayer de garder mon code en changeant les ports de sorties! sûrement une erreur de ma part! Je te remercie infiniment pour ton aide! je vais essayer maintenant de continuer mon projet! en essayons de créer une interface d'acquisition des données sur mon ordinateur et créer mes 4 entrées et 4 sorties! Merci encore!

Discussions similaires

  1. pic 16F877
    Par invitea68c250d dans le forum Électronique
    Réponses: 19
    Dernier message: 20/06/2012, 16h29
  2. pic 16f877 et ccs
    Par invitee8a0b493 dans le forum Électronique
    Réponses: 11
    Dernier message: 15/04/2012, 20h05
  3. PIC 16F877 en ASM
    Par invite814175e4 dans le forum Électronique
    Réponses: 0
    Dernier message: 07/12/2009, 17h04
  4. Pic 16f877
    Par invite8dac0c00 dans le forum Électronique
    Réponses: 3
    Dernier message: 13/01/2009, 14h19
  5. RA4 du 16F877
    Par invite28559ad9 dans le forum Électronique
    Réponses: 9
    Dernier message: 04/01/2009, 15h42
Découvrez nos comparatifs produits sur l'informatique et les technologies.