Programmation en C et UART
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Programmation en C et UART



  1. #1
    inviteb2a95bac

    Programmation en C et UART


    ------

    Bonjour à tous, j'ai à mon avis une question un peu bête mais j'aimerais un peu d'aide.
    J'essaye de familiariser avec le C mais la je cale.
    voice le code qui renvoi ce qu'il reçoit, jusque là pas de souccis ce que je voudrais c'est qe ce code renvoit une partie de ce qu'il reçoit.
    Exemple: il reçoit, TEMPERATURE 20°C et j'aimerais qu'il renvoit uniquement 20°C.

    Code:
    char uart_rd;
    
    void main() {
      ANSEL  = 0;                     // Configure AN pins as digital
      ANSELH = 0;
      C1ON_bit = 0;                   // Disable comparators
      C2ON_bit = 0;
      
      UART1_Init(9600);               // Initialize UART module at 9600 bps
      Delay_ms(100);                  // Wait for UART module to stabilize
      
      UART1_Write_Text("Start");
      UART1_Write(10);
      UART1_Write(13);
      
      while (1) {                     // Endless loop
        if (UART1_Data_Ready()) {     // If data is received,
          uart_rd = UART1_Read();     // read the received data,
          UART1_Write(uart_rd);       // and send data via UART
        }
      }
    }
    Merci d'avance.

    -----

  2. #2
    invitedb9b1ced

    Re : Programmation en C et UART

    Hello,

    Si tu es sûr du nombre de caractères avant la valeur de ta température, tu les supprimes. Dans ton exemple, il faudrait que supprimes les 12premiers caractères reçus.

  3. #3
    inviteb2a95bac

    Re : Programmation en C et UART

    Oui je suis sur du nombre de caractères mais je ne sais pas comment les supprimer.

  4. #4
    invitedb9b1ced

    Re : Programmation en C et UART

    Au choix :

    Soit tu comptes le nombres de caractères reçues et commences à renvoyer qu'à partir du treizième.

    Soit tu attends un caractère particulier (ici très certainement un espace) avant de renvoyer ce qui suit.

  5. A voir en vidéo sur Futura
  6. #5
    inviteb2a95bac

    Re : Programmation en C et UART

    Oui c'est ce que je pense mais je ne sais comment l'écrire en C, je débute en C...
    Encore Merci

  7. #6
    invitedb9b1ced

    Re : Programmation en C et UART

    Déjà il faut que tu choisisses la manière de faire : par détection de caractère (mais il faut être sûr de ne pas avoir d'autres espaces dans ta chaîne) ou par contage de caractères ?

    Après tu peux proposer des essais de code (tu es arrivé à configurer l'USART, le lire et y écrire, ce n'est pas un peu de test de valeur qui va te faire peur ).

  8. #7
    inviteb2a95bac

    Re : Programmation en C et UART

    un peu quand même, la méthode que je vais utiliser est de trouver le ° et après...

  9. #8
    invitedb9b1ced

    Re : Programmation en C et UART

    Pourquoi le "°" ? Il se trouve après la valeur de ta température, non ?

  10. #9
    inviteb2a95bac

    Re : Programmation en C et UART

    Ben c'est une idée et en plus c'est un peu plus safe car si je reçois le ° j'ai dû recevoir la température... je sais qu'en VBA il existe la fct Left mais je cherche l'équivalence en C

  11. #10
    invitedb9b1ced

    Re : Programmation en C et UART

    Voilà ce que je ferrais pour la recherche d'un caractère (dans ce cas recherche de l'espace ) :
    Code:
    unsigned char FlagEmission = 0;
    
    ....
    
    
    while (1) 
    {                     
    	if (UART1_Data_Ready()) 
    	{
    		uart_rd = UART1_Read();
    		
    		if (FlagEmission)
    		{
    			UART1_Write(uart_rd);  
    		}
    		
    		if (uart_rd == 0x20)		// espace
    		{
    			FlagEmission = 1;
    		}
    		else if (uart_rd == 0x43)	// "C"
    		{
    			FlagEmission = 0;
    		}
    	}
    }

    Et ce que je ferrais pour le comptage de caractères (ici 13 car "TEMPERATURE " fait 12 caractères et test du "T" car c'est le début de ta trame) :
    Code:
    unsigned char FlagEmission = 0;
    unsigned char CharNumber = 0;
    
    ....
    
    
    while (1) 
    {                     
    	if (UART1_Data_Ready()) 
    	{
    		uart_rd = UART1_Read();
    		
    		CharNumber ++;
    		
    		if (uart_rd == 0x54)		// "T"
    		{
    			FlagEmission = 0;
    			CharNumber = 1;
    		}
    		else if (CharNumber >= 13)
    		{
    			FlagEmission = 1;
    		}
    		
    		if (FlagEmission)
    		{
    			UART1_Write(uart_rd);  
    		}
    	}
    }
    Par contre je n'ai testé ni l'un ni l'autre !

  12. #11
    inviteb2a95bac

    Re : Programmation en C et UART

    Merci pour cette réponse, je vais l'essayer ce soir.

  13. #12
    invitedb9b1ced

    Re : Programmation en C et UART

    Citation Envoyé par marvinl Voir le message
    Merci pour cette réponse, je vais l'essayer ce soir.
    Et tu comprends pourquoi j'ai fait ça au moins ? Car là j'ai juste l'impression de t'avoir mâché le taf' .

  14. #13
    xberger

    Re : Programmation en C et UART

    Normalement tu dois connaitre ce que ton programme dois recevoir en entrée tu dois bien avoir une spécifications du composant, du module ou du capteur dont tu reçois ta trame "TEMPERATURE xx°C"

    Dans cette spécification, le format exact de la trame doit être définie.
    ça ne sert à rien de vouloir faire de l'analyse compliquer de la trame si l'information reçue a toujours la même structure.

    si tu as toujour la chaine de caractère "TEMPERATURE " (avec un espace à la fin) au début de ta trame reçue, tu peux controller ces 12 octets.

    Après tu fais une copie de buffer (fonctio memcpy() en C) des 4 octets pour la temperature + "°C"

    Attention, tu nous as pas dis comment cette température était codée si elle était:
    - négative
    - décimale
    - sur 1 ou 3 digits (ex 9°C ou 100°C)

    Cordialement

    Xavier

Discussions similaires

  1. Connexion UART
    Par invite5725992d dans le forum Électronique
    Réponses: 2
    Dernier message: 16/09/2010, 13h53
  2. Uart PIC18F2520
    Par inviteea3c59b3 dans le forum Électronique
    Réponses: 1
    Dernier message: 08/05/2010, 21h19
  3. Pic/uart
    Par invitec35bc9ea dans le forum Électronique
    Réponses: 5
    Dernier message: 06/03/2008, 10h46
  4. Uart
    Par invitedba2660f dans le forum Électronique
    Réponses: 1
    Dernier message: 17/04/2007, 01h03
  5. Dspic30f6014 - Uart
    Par invite2707b2f0 dans le forum Électronique
    Réponses: 1
    Dernier message: 31/01/2007, 01h23
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...