Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Idée pour s'entrainer sur l'UART ?
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 262
Âge : 70
Enregistré en : septembre 2015
Contact :

#11 Message par Claudius » mar. 15 déc. 2015 18:58

Bonsoir,
Jérémy a écrit: Alors je souhaite juste faire un petit programme qui me familiarise avec l'UART d'un PIC , genre changer le débit , initialiser ceci ou cela , verifier mes infos que j'envoie ou que je reçois . vraiment la base !..

C'est effectivement la bonne démarche.

Au vu de la photo de la carte, il y a une jolie prise DB9 qui véhicule le protocole UART. Avec les informations données, je ne peux pas dire si c'est du vrai RS232 (cad niveaux électriques entre +/- 12 Volts) ou du 0-5 Volts mais qu'importe...

L’intérêt de cette prise c'est que tu peux réaliser un rebouclage entre Tx et Rx par un simple fil et donc tout ce qui sera émis sera reçu (c'est le Hello World ! du protocole UART ;-)).

Maintenant, il suffit d'écrire un petit programme qui initialise l'UART, envoi un ou plusieurs caractères qui devront être reçus tels quels dans un cas de bon fonctionnement.

NB: Attention, ce rebouclage n'est pas possible en utilisant le port USB.

Idée pour s'entrainer sur l'UART ?
patou149
Débutant
Débutant
Messages : 35
Enregistré en : octobre 2015

#12 Message par patou149 » mar. 15 déc. 2015 19:03

Erreur , en effet UART2 est sur les pins RD6 et 7, j'ai regardé le brochage d'un 28 pins.
merci paulfjujo de ta remarque.

bonsoir

Idée pour s'entrainer sur l'UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#13 Message par Jérémy » mar. 15 déc. 2015 19:24

L’intérêt de cette prise c'est que tu peux réaliser un rebouclage entre Tx et Rx par un simple fil et donc tout ce qui sera émis sera reçu (c'est le Hello World ! du protocole UART ;-)).

Si je comprends bien l'idée, j'envoie avec mon PIC des données sur la broche Tx avec l'UART et je reçois ces même données sur la broche RX grâce au rebouclage . Je fais un monologue en quelque sorte :lol:

Ça me semble parfait cela ! je vais chercher ou se trouve les broches en questions pour faire le pont sur la DB9
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Idée pour s'entrainer sur l'UART ?
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 262
Âge : 70
Enregistré en : septembre 2015
Contact :

#14 Message par Claudius » mar. 15 déc. 2015 19:39

C'est effectivement cela après avoir bien positionner les 2 switchs J3 et J4 respectivement sur RX-232 et TX-232.
A priori ce sont les broches 2 et 3 de la prise DB9 (cf. RS-232 (Mécanique)).

Restera peut-être à régler le sort de CTS / RTS (broches 4 et 5) and Co, mais on fera le point plus tard... Dans la plupart des cas, cela fonctionne en rebouclant simplement Tx et Rx ;-).

NB: Cette opération s'appelle "réaliser un Null Modem local".

Idée pour s'entrainer sur l'UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#15 Message par Jérémy » mar. 15 déc. 2015 21:21

Si j'ai bien compris le MAX3232 présent sur la carte sert à ajuster les niveaux logiques entre différents devices . Mais comme j'utilise un seul et même PIC dans mon monologue ne pourrais-je pas plutôt relié RC7 et RC6 ensemble directement sur le PIC ? sans passer par le MAX3232 ?

En attendant une confirmation avant de branché , je vais regarder les librairies dont je vais avoir besoin .

Merci !

Voici le schéma de ma carte pour cette partie :

Image
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Idée pour s'entrainer sur l'UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#16 Message par Jérémy » mar. 15 déc. 2015 22:22

Voila un projet JET, que j'ai fais en lisant les librairies disponibles . J'attends votre confirmation sur le HARD avant de tester .


Code : Tout sélectionner

/*##################################################################################
Programme de test pour liaison UART sur carte EasyPIC_V7
Fait par Jérémy pour FantasPic.fr
- Version du "15-12-2015"
- MikroC version 6.6.2
- PIC 18F46K22 FOSC à 8MHZ, Quartz extrene de 8Mhz, PLL désactivée
- Data-Shit du PIC : http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
- manuel et schéma de la carte : http://www.mikroe.com/downloads/get/1711/easypic_v7_manual_v104c.pdf
#################################################################################*/

// Connections de l'écran LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Fin connections LCD

// Déclaration des  variables utilisées  ------------------------------------------
unsigned int Rx;
char Rx_buffer[16];
// Fin des varaibles---------------------------------------------------------------

//##################################################################################
//#########################      PROGRAMME PRINCIPAL       #########################
//##################################################################################
void main() {

    ANSELB = 0x00;                // Configure le PORTB en digital pour le LCD
    ANSELC 0x00;
    TRISB = 0x00;              // PORTB en sortie

    UART1_Init(9600);          // Initialisation de l'UART
    delay_ms(100);             // Petite pause

    Lcd_Init();                // Initialisation du LCD
    Lcd_Cmd (_LCD_CLEAR);      // On efface l'écran
    Lcd_Cmd (_LCD_CURSOR_OFF); // On arrete le clignotement du curseur
    delay_ms(100);             // Petite pause

//#######################    BOUCLE INFINIE     ####################################
 while (1){

   UART1_Write(45);                 // J'envoie le chiffre 45 sur l'UART
   delay_ms(100);                   // Petite pause

   if (UART1_Data_Ready() == 1) {   // Si une donnée est prete à etre lue
      Rx = UART1_Read();            // On lie et on la stcoke dans une variable
    }

    IntToStr ( Rx, Rx_buffer);      // Convertit un Int en String pour affichage LCD
    Lcd_Out (1,1, Rx_buffer ) ;     // Affichage la valeur présente dans le buffer
    delay_ms(500);                  // Petite pause

 }
}
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Idée pour s'entrainer sur l'UART ?
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 262
Âge : 70
Enregistré en : septembre 2015
Contact :

#17 Message par Claudius » mer. 16 déc. 2015 09:28

Bonjour,
Jérémy a écrit: Mais comme j'utilise un seul et même PIC dans mon monologue ne pourrais-je pas plutôt relié RC7 et RC6 ensemble directement sur le PIC ? sans passer par le MAX3232 ?

Il est plus pertinent de faire le rebouclage en bout de chaine (cad Tx@MAX3232 <=> Rx@MAX3232) car d'une part le test est fait de bout en bout et d'autre part j'imagine qu'après tu relieras un vrai périphérique piloté par Tx@MAX3232 et répondant sur Rx@MAX3232...

Ce rebouclage ne servant que temporairement pour valider la communication UART (programme et matériel).

Idée pour s'entrainer sur l'UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#18 Message par Jérémy » mer. 16 déc. 2015 10:40

Bonjour,

Il est plus pertinent de faire le rebouclage en bout de chaine (cad Tx@MAX3232 <=> Rx@MAX3232) car d'une part le test est fait de bout en bout et d'autre part j'imagine qu'après tu relieras un vrai périphérique piloté par Tx@MAX3232 et répondant sur Rx@MAX3232...


très bien, c'est effectivement plus pertinent et réaliste.
je viens de d’exécuter le petit programme du dessus et j'obtiens 45 sur mon LCD +1

Je suis content car j'ai fais le programme tout seul et quand je vois que ça fonctionne du premier coup, ca fait plaisir . D'ailleurs je crois que c'est la premiere fois que je fais un truc qui fonctionne du premier coup humour!!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Idée pour s'entrainer sur l'UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#19 Message par Jérémy » mer. 16 déc. 2015 10:53

Voici un petit compteur qui parcours la table ASCII :

Code : Tout sélectionner

//#######################    BOUCLE INFINIE     ####################################
 
while (1){

   
UART1_Write(compteur);          // J'envoie le chiffre de mon compteur

   
if (UART1_Data_Ready() == 1) {  // Si une donnée est prete à etre lue
      
Rx UART1_Read();           // On lie et on la stocke dans une variable
      
Lcd_Chr(2,1,Rx);             // On l'affiche
      
compteur += ;              // On parcours la table ASCII
      
delay_ms(100);               // Petite pause
    
}
 }


Par contre impossible d'envoyer une phrase genre "Hello World !!!" :evil:
Avec la fonction UART1_Write_Text, je cherche , je cherche !!!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Idée pour s'entrainer sur l'UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#20 Message par Jérémy » mer. 16 déc. 2015 13:12

Bon ben .... aprés avoir reussis du premier coup a afficher un charactere, je comprends pas vraiment l'exemple de fonctionnement de la fonction UART1_Write_Text .

Je n'arrive pas a afficher une suite de caractères . comme je ne peux envoyer qu'un seul caractère ( 1 octet), a chaque fois , je dois bien reboucler tant que j'ai des caractères pour l'envoi ?

Voici l'exemple de la librairie UART1_Write_Text de MikroC :

Code : Tout sélectionner

while (1) {
  if (
UART1_Data_Ready() == 1) {          // if data is received 
    
UART1_Read_Text(output"OK"10);    // reads text until 'OK' is found
    
UART1_Write_Text(output);             // sends back text 
 
}
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 4 invités