Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pic 16f628A en UART

    16 janvier 2019 à 0:51:15

    Salut à tous je voudrais utiliser l'UART sur mes 2 pic 16f628A pour les faire communiquer entre eux avec des texte par exemple mais quand je passe à la pratique sur ma platine d'essaie le code du receveur n'a pas l'air de très bien pourtant j'ai vérifier il y a de la tension entre les deux bornes vcc et vss et  tx et rx de chaque µc pouvez-vous m'aidez.

    Les codes:

    void main() {
        TRISB = 1;
        TRISA = 0;
        UART1_Init(9600);
        while(1){
        RA0_bit = 1;
        UART1_Write_Text("h");
        Delay_ms(1000);
        RA0_bit = 0;
        Delay_ms(100);
    
        }
    }
    

    Receveur:

     signed char s;
    void main() {
        TRISB = 1;
        TRISA = 0;
        UART1_Init(9600);
        while(1){
        if(UART1_Data_Ready()){
                s = UART1_Read();
        if(s == 'h'){
            RA0_bit = 1;
            Delay_ms(1000);
            RA0_bit = 0;
        } else {
         RA0_bit = 0;
        }
        s = '\0';
         Delay_ms(100);
        }
    }

    Je code sous mickro C pro avec un programmateur K150 qui marche très bien.


    • Partager sur Facebook
    • Partager sur Twitter
      Staff 16 janvier 2019 à 12:01:46

      J'ai un gros doute sur tes valeurs de TRIS ;)

      Pour rappel, TRIS est un registre qui commande la direction en bit à bit :

      - le bit 0 commande la pin 0

      - le bit 1 commande la pin 1

      - le bit 2 commande la pin 2

      ...

      Mettre un 0 mets la pin en OUTPUT tandis que 1 la met en INPUT.

      Dans ton cas, tu mets la valeur 1 dans TRISB, ce qui revient à mettre 00000001 en binaire.

      Du coup, on aurait B0 en INPUT et B1 à B7 en OUTPUT, ce qui n'est pas bon du tout pour ton application.

      ***

      Pour ton application seules A0 et B2 (TX) doivent être OUTPUT tandis que B1 (RX) et toutes les autres pins doivent être en INPUT.

      Donc on aurait plutôt :

      TRISA = 0b1111110;
      TRISB = 0b1111011;


         

      -
      Edité par lorrio 16 janvier 2019 à 12:02:49

      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2019 à 17:08:25

        Sa ne marche toujours pas : '(

        -
        Edité par Herisson-San 17 janvier 2019 à 0:25:06

        • Partager sur Facebook
        • Partager sur Twitter
          Staff 20 janvier 2019 à 20:01:04

          As tu bien penser à croiser TX/RX ? (le TX du premier va sur le RX de l'autre et vice versa).
          • Partager sur Facebook
          • Partager sur Twitter
            Staff 29 janvier 2019 à 10:15:37

            J'ai bien peur que tu doives te débrouiller seul ou trouver de l'aide sur un autre forum car il y a très peu de monde qui utilise des PIC ici (le forum est plutôt orienté Arduino).

            Voici quand même quelques pistes à tester :

            - avec une LED sur A0 de l'émetteur, as tu bien un clignotement toutes les secondes ?

            Si ce n'est pas le cas, cela signifie que le code ne s'exécute pas ou bien que l'horloge est mal calibré par rapport à tes delay.

            - as tu essayé de mettre un oscilloscope sur la pin B2 (TX) de l'émetteur pour voir si il y avait des alternances ?

            - as tu bien relié le VSS du premier micro au VSS du second micro ?

            • Partager sur Facebook
            • Partager sur Twitter
              29 janvier 2019 à 21:23:13

              Je n'ai pas dosciloscope mais je vais essayer merci a oui le ra0 de l'emeteur fonctionne

              -
              Edité par Herisson-San 29 janvier 2019 à 23:29:57

              • Partager sur Facebook
              • Partager sur Twitter

              Pic 16f628A en UART

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown