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

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » jeu. 17 déc. 2015 20:42

Bonsoir à tous,

Ce post fait suite à celui-ci. dans le premier nous étions un peu "limité" a cause du rebouclage.

Comme je ne possède pas de câble RS-232/USB , j'ai décidé de continuer mes investigations et mon apprentissage via le USB-UART, qui se je ne m'abuse est la même chose ou presque ?

Voici le schéma de la carte :
Image


J'utilise l’outil de mikroC qui simule la com voici en image, je pense que ca devrait bon.


Image

Voici mon premier petit programme qui fonctionne pas trop .

Code : Tout sélectionner

/*##################################################################################
Programme de test pour liaison UART-USB sur carte EasyPIC_V7 avec PC
Fait par Jérémy pour FantasPic.fr
- Version du "17-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
#################################################################################*/

#define BP PORTD.B0

// 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  ------------------------------------------
int Rx_buffer[16] ;
int i, Rx ;

// Fin des varaibles---------------------------------------------------------------

// Prototypes  --------------------------------------------------------------------
// FIN Prototypes

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

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

    TRISB = 0x00;              // PORTB en sortie
    TRISD = 0xFF;

    UART1_Init(4800);          // 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)
 {

    if ((BP==1) && (UART1_Tx_Idle() == 1))
       {
            UART1_Write_Text("Hello World !");
            UART1_Write(10);
            UART1_Write(13);
            while (BP==1);
       }

    if (UART1_Data_Ready())
       {
           UART_Read_Text(Rx_buffer, "OK", 10);
           Lcd_out (1, 1, Rx_buffer );
        }

  }
}


En fait l’émission fonctionne parfaitement , a chaque appui sur le BP ( Broche 0 du PORTD), le texte apparait dans la fenêtre "receive" . Je vois la led émission s'allumer nickel !

Coté réception la ça pique un peu plus . En fait j'ai l’impression que quand j'envoie 8 caractères ça fonctionne, mais au dessus ca bug complet . La led réception s'allume bien par contre, à chaque fois que j'appuie sur "send".

J'envoie par exemple: 01234567OK .

Le terme "OK" sert à définir la fin du dialogue il me semble. J' ai réglé le débit sur 4800 bauds.

Voyez-vous une coquille dans mon petit programme ? pourquoi au delà 8octets ca bug ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#2 Message par Claudius » jeu. 17 déc. 2015 22:15

Re Jérémy,

S'agissant de "Voyez-vous une coquille dans mon petit programme ? pourquoi au delà 8 octets ça bug ?"

Parce que, sauf erreur de ma part, 8 + 2 = 10, 10 étant défini dans UART_Read_Text(Rx_buffer, "OK", 10); et 2 étant la longueur du delimiter attendu; à savoir "OK".
cf. UART1_Read_Text.

Peut-être qu'avec UART_Read_Text(Rx_buffer, "OK", 255);, cela fonctionnera beaucoup mieux.

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » jeu. 17 déc. 2015 22:50

Rohhh Quel boulet ....... !!! je l'avais sous les yeux .... Je m'en veux d'avoir loupé ca....

Merci Claudius , c'est bien vu .
Après correction c'est impeccable.

Quand j'envoie trop vite des infos en cliquant sur avec la souris sur "send", j'ai parfois des bugs d'affichage est ce normal ? , peut être que je devrais augmenter le débit ?
Quand j'ai un bug d'affichage ( en fait le texte se décale d'une case sur la droite ( avec un symbol comme premier caractère)), je ne peut plus émettre en cliquant sur le bouton ? je suis obligé de reseter .

Après test, il s’avère que c'est la deuxième réception qui foire ! le première caractère qui s'affiche n'est pas dans la table ASCII ( 2 barres horizontales cote a à cote espacé d'un pixel).

Vous m'avez toujours dis pour l'INT , quand et sur quoi je dois la déclencher ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#4 Message par Claudius » ven. 18 déc. 2015 10:03

Bonjour,

Jérémy a écrit: Quand j'envoie trop vite des infos en cliquant sur avec la souris sur "send", j'ai parfois des bugs d'affichage est ce normal ?

C'est le PIC en réception qui n'est sans doute pas prêt et je te conseille de repasser en gestion caractère pas caractère. Toujours se méfier des fonctions de haut niveau comme UART1_Read_Text() et UART1_Write_Text() qui encapsulent je ne sais quoi...

Jérémy a écrit: Vous m'avez toujours dis pour l'INT , quand et sur quoi je dois la déclencher ?

cf. mikroc interrupt example avec la datasheet du PIC sous les yeux car même si c'est du Langage C, tu vas devoir attaquer les registres comme en Assembleur et découvrir toute la puissance des PICs et des microcontrôleurs en général.

Là encore pour se familiariser avec les interruptions, je me permets de te conseiller de commencer "simple" comme par exemple "allumage d'une LED sur appui bouton avec RB0 (1 IT)" suivi de "clignotement d'une LED avec un Timer sur appui bouton avec RB0 (2 ITs)" pour te conduire à réécrire UART1_Read_Text() et UART1_Write_Text() ... sous ITs ;-)

L’intérêt de cette démarche est de pouvoir compléter pas à pas un programme dans lequel le PIC "dormira" 95% de son temps car il ne sera sollicité que lorsque l'évènement matériel sera à traiter et en général plus besoin des attentes passives du genre delay(xxx mS) taillées au doigt mouillé.

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » ven. 18 déc. 2015 10:43

Hello ,

Merci pour tes posts de toujours grandes qualités.

je reviens sur les points :
C'est le PIC en réception qui n'est sans doute pas prêt

Oui car ce n'est pas la rapidité qui le fais bugger! , c'est le deuxième envoie qui foire a tous les coups, même si j'attends entre 2 ( une dizaine de secondes). Je vais essayer de trouver ce qui se cache derrière cette librairie

Concernant les INT
Là encore pour se familiariser avec les interruptions,

Je suis déjà familiarisée avec , j'ai fais un petit tuto la dessus. elles ont certainement encore plein de secrets à me dévoiler, mais disons que je sais m'en servir.
Ma question tournait plutôt dans le sens, sur quoi je dois la déclencher . Sur la réception ? ou quand je demande une émission sur le bus ? ou les deux ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » ven. 18 déc. 2015 15:41

Apres un reset je peux envoyer du texte a foison. par contre si je recois un seul texte mais une lettre il m'est impossible d'envoyer d'autre comande par la suite .

Je me dis que c'est à cause de UART1_Tx_Idle() == 1) , mais je n'arrive pas à trouver ce qui cloche
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » ven. 18 déc. 2015 16:11

Quelques minutes plus tard .......

En décochant la case "Append new line" , tout rentre dans l'ordre ???

tout fonctionne nickel. Mais alors que signifie "Append new line", la traduction me dit "annexer nouvelle ligne" ce qui ne m'aide pas trop à comprendre.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
patou149
Débutant
Débutant
Messages : 35
Enregistré en : octobre 2015

#8 Message par patou149 » ven. 18 déc. 2015 17:51

Bonsoir,

Append ----> ajouter il me semble.

Pour info mais tu connais sûrement : Book
le chapitre 3 semble le plus intéressant.
Le plus souvent on déclenche l'IT sur la réception de data.
Voir RC1IF, PEIE et GIE et le flag RC1IE

A+

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » ven. 18 déc. 2015 18:04

Code : Tout sélectionner

Append ----> ajouter il me semble

Ca peut coller, en fait le PIC restait en réception à attendre la nouvelle ligne . c'est pour ca qu'a la deuxième boucle je ne pouvait plus émettre . Il restait sur attente certainement !!

Pour info mais tu connais sûrement : Book

Non je ne connaissais pas ..... En anglais ..... Pourquoi ne suis je pas bilingue ??? pourquoi je faisais le Con en cours d'anglais ...... Oh My God !!!. Merci car ça à l'air vraiment bien fait .
A Nöel j'aurais de la elcture aussi : livre

Le plus souvent on déclenche l'IT sur la réception de data.
Voir RC1IF, PEIE et GIE et le flag RC1IE

Ok , je fais ça ce soir . je dois donc lire les Données seulement sur une INT , ainsi je libère mon programme principale !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
patou149
Débutant
Débutant
Messages : 35
Enregistré en : octobre 2015

#10 Message par patou149 » ven. 18 déc. 2015 18:35

Papa noël est vraiment sympa.
Si je n'ai rien oublié il suffit de mettre les trois premiers à 1 et dans la routine d'IT de tester le flag.
La discussion sur la "RS232" était vraiment sympathique, merci à tous les intervenants chacun a pu profiter des différentes interventions..
Bonne soirée


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités