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-SanGrand 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-SanGrand 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