Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Programmation en C et UART



  1. #1
    marvinl

    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. Publicité
  3. #2
    amoniaque

    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.

  4. #3
    marvinl

    Re : Programmation en C et UART

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

  5. #4
    amoniaque

    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.

  6. #5
    marvinl

    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. A voir en vidéo sur Futura
  8. #6
    amoniaque

    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 ).

  9. Publicité
  10. #7
    marvinl

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

  11. #8
    amoniaque

    Re : Programmation en C et UART

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

  12. #9
    marvinl

    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

  13. #10
    amoniaque

    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 !

  14. #11
    marvinl

    Re : Programmation en C et UART

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

  15. #12
    amoniaque

    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' .

  16. Publicité
  17. #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

Sur le même thème :

Discussions similaires

  1. Connexion UART
    Par pseudoguyanais dans le forum Électronique
    Réponses: 2
    Dernier message: 16/09/2010, 12h53
  2. Uart PIC18F2520
    Par angelkiller dans le forum Électronique
    Réponses: 1
    Dernier message: 08/05/2010, 20h19
  3. Pic/uart
    Par ABN84 dans le forum Électronique
    Réponses: 5
    Dernier message: 06/03/2008, 09h46
  4. Uart
    Par souma29 dans le forum Électronique
    Réponses: 1
    Dernier message: 17/04/2007, 00h03
  5. Dspic30f6014 - Uart
    Par fab04 dans le forum Électronique
    Réponses: 1
    Dernier message: 31/01/2007, 00h23