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 :

#21 Message par Claudius » mer. 16 déc. 2015 13:16

Re Jérémy,

Bravo. S'agissant de "Par contre impossible d'envoyer une phrase genre "Hello World !!!", attention tu rentres dans le cas d'émission / réception de trames dont le traitement est par définition du protocole UART fait caractère par caractère...

La suite logique est l'écriture d'un programme de traitement sous interruption et c'est là que cela devient intéressant (en assembleur, en BASIC ou en Langage C ;-)) avec une gestion d'un buffer de type FIFO en réception voire en émission.

Désolé, cela devient peut-être technique mais c'est un passage obligé si l'on veut maîtriser les communications entre µC et périphériques sans faire de boucles d'attentes pendant lesquelles le µC peut largement faire autre chose ou même dormir 95% du temps ;-).

NB: Il doit y avoir plein d'exemples sur la toile avec notamment les gestions des erreurs Underflow et Overflow...
Modifié en dernier par Claudius le mer. 16 déc. 2015 13:24, modifié 2 fois.

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 :

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

merci Claudius,

Oui je souhaite m'initier a la communication car je vais de toute les manières en avoir besoin .... vu le nombre de capteur que j'ai a mettre un œuvre sur mon projet.

Pour le coté technique, pas de probléme j'adore mais il me faut bucher sur les termes FIFO, buffer.... . buffer est une espece de mémoire tampon si je ne m'abuse , mais FIFO , je vais googler !.

Oui l'UART c'est caractère par caractère de ce que j'ai cru comprendre lors de mes lectures . Donc je dois décomposer ma phrase lettre par lettre, puis l'envoyer , puis l'enregistrer aussi lettre par lettre et ensuite la recomposée et enfin l'affichée ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Idée pour s'entrainer sur l'UART ?
mazertoc
Passionné
Passionné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#23 Message par mazertoc » mer. 16 déc. 2015 14:57

Jérémy a écrit :Pour le coté technique, pas de probléme j'adore mais il me faut bucher sur les termes FIFO, buffer.... . buffer est une espece de mémoire tampon si je ne m'abuse , mais FIFO , je vais googler !.

Oui l'UART c'est caractère par caractère de ce que j'ai cru comprendre lors de mes lectures . Donc je dois décomposer ma phrase lettre par lettre, puis l'envoyer , puis l'enregistrer aussi lettre par lettre et ensuite la recomposée et enfin l'affichée ?

Les modules UART des PIC possèdent des mémoires tampon.
Il faut envoyer les données octet par octet, mais on peut envoyer une tripotée d'octets d'un coup.

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 :

#24 Message par Jérémy » mer. 16 déc. 2015 15:00

Il faut envoyer les données octet par octet, mais on peut envoyer une tripotée d'octets d'un coup.

Oui dans une boucle ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#25 Message par patou149 » mer. 16 déc. 2015 15:31

Bonjour,

tu peux regarder la fonction UARTx_write_text ou UART_read_text, il y a une autre fonction qui semble particulièrement intéressante,
c'est la fonction PrintOut car elle permet de choisir la destination et d'effectuer une mise en forme de la chaîne de caractères.
Elle est le pendant de la fonction printf.

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 :

#26 Message par Jérémy » mer. 16 déc. 2015 15:36

hello patou,

promis je regarderais aprés mais pour le moment j'aimerais reussir avec la methode prevu a cet effet ! C'est mon côté sado qui ressort, des fois j'aime en chié, mais je suis trop content quand ca focntionne ;
Je buche je buche ... j'avance un peu j'arrive a ecrire deux lettre a la suite et la troisieme bizarrement ca deviens ma dernier lettre :oops:

voici ou j'en suis.

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, compteur=, i ;
char Rx_buffer[16];
char Tx_buffer[] = "Hello World !!!";
// 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
    i=0;
    UART1_Write_Text("azerty");
    
//#######################    BOUCLE INFINIE     ####################################
 while (1){

    if (UART1_Data_Ready() == 1) {

        UART1_Read_Text(Rx_buffer, 13, 15);
        //WordToStr (Rx, Tx_buffer);
        Lcd_Out (1,i+=1,Rx_buffer);
        delay_ms(1000);
  }

 }
}


Le texte qui s'affiche : azy

Je cherche, les exemples simples ne sont pas si nombreux que ça sur la toile
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#27 Message par patou149 » mer. 16 déc. 2015 16:02

Tu peux ajouter cette ligne : UART1_Write(13); après la ligne "UART1_Write_text("azerty")
pour tester.

A+

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 :

#28 Message par Jérémy » mer. 16 déc. 2015 16:08

J'obtiens : az||

deux barres verticales
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#29 Message par patou149 » mer. 16 déc. 2015 16:17

Jérémy a écrit :Source du message UART1_Read_Text(Rx_buffer, 13, 15);

changer dans cette ligne le "13" par "y".

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 :

#30 Message par Jérémy » mer. 16 déc. 2015 16:21

J'obtiens : az

J'avais déjà essayé :D
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