RS232 + pic + RFID
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

RS232 + pic + RFID



  1. #1
    invitec86ed256

    RS232 + pic + RFID


    ------

    Bonjour à tous

    Je me décide enfin à poster ce problème au quel je ne trouve pas de solution depuis plusieurs mois. (Je n'aime pas demander quelque chose sans avoir au préalable cherché la solution par moi même mais là, ça commence à devenir urgent !!!)
    Je doit réaliser un module permettant la réception de données RFID et le traitement (simple) de ces données (je dois simplement pouvoir déterminer quelle carte à été présentée). Pour ce, J'utilise le module H1M-005P avec lequel je doit communiquer en RS232. Le pic est un 16F877A.

    J'ai déjà réalisé ce code cependant, il ne reçois pas les données correctement. Toutes les cases du tableau sont remplie avec la même valeur, la première donnée reçue. Qu'ai-je bien pu oublier???

    Code en C sous SourceBoost IDE:

    #include <system.h>
    #pragma DATA _CONFIG, _PWRTE_OFF & _BODEN_OFF & _WDT_OFF & _LVP_ON & _CPD_OFF & _DEBUG_OFF & _HS_OSC & _CP_OFF
    #pragma CLOCK_FREQ 20000000
    #define FOSC 20000000
    #define spBAUD 9600
    #define fSPBCLK (FOSC)
    #define SPBRG_VAL ((fSPBCLK / (spBAUD * 16L)) - 1L)
    #define VALEURBRG (20000000/16/spBAUD)-1
    #define bit_time 520


    int i=0, tab[10];


    /******************/
    /*Prototype de fonction*/
    /******************/

    void rs232_ini();


    /*****************/
    /*Fonction interruption*/
    /*****************/

    void interrupt( void )
    {
    if (pir1.RCIF)
    {
    tab[i]=rcreg; //mise en mémoir de la donnée présente sur le port RS232
    i++;
    clear_bit (pir1,RCIF);
    }
    }


    void main()
    {
    adcon1 = 0x06; //port A en numérique
    intcon = 0b11000000; //activation des interruptions
    trise = porte = 0x00;
    trisa = 0xFF;
    rs232_ini(); //initialisation du pic en mode émmission RS232

    while(1)
    {

    for(i=0; i<11; i++)
    {
    tab[i]=0; // initialisation du tableau
    }

    /****************************** *********/
    /*Envoi de la demmande de lecture du transpondeur*/
    /****************************** *********/

    while(!TXIF); // Attente que le port RS232 soit libre
    txreg=0xFF; // on envoie l'adresse du transpondeur sur le port série (FF sinifie que tous les transpondeurs peuvent répondre)
    delay_ms(1); // Synchronise le pic et le module RFID

    while(!TXIF); // Attente que le port RS232 soit libre
    txreg=0x05; // on envoie la taille totale de la trame sur le port série
    delay_ms(1); // Synchronise le pic et le module RFID

    while(!TXIF); // Attente que le port RS232 soit libre
    txreg=0xA2; // on envoie le code de lecture du transpondeur sur le port série
    delay_ms(1); // Synchronise le pic et le module RFID

    while(!TXIF); // Attente que le port RS232 soit libre
    txreg=0xA5; // on envoie la premiere partie du checksum sur le port série
    delay_ms(1); // Synchronise le pic et le module RFID

    while(!TXIF); // Attente que le port RS232 soit libre
    txreg=0x3E; // on envoie la deuxieme partie du checksum sur le port série

    delay_ms(500); //Attente que toutes les données soit reçue


    /**********************/
    /*Teste des paramètres reçu*/
    /**********************/

    switch(tab[3])
    {
    case 0xFE : porte=0x01;break;
    case 0xC9 : porte=0x02;break;
    default : porte=0x04;
    }

    }
    }



    /****************************** */
    /*Fonction initialisation du PIC en RS232*/
    /****************************** */

    void rs232_ini()
    {
    set_bit (pie1,RCIE); // Activer la récéption RS232
    clear_bit( txsta, SYNC ); //mode asynchrone
    set_bit( rcsta, SPEN ); //port série valide
    clear_bit( rcsta, RX9 ); // 8 bits en réception
    clear_bit( txsta, TX9 ); // 8 bits en emission
    set_bit( rcsta, CREN ); //valide reception continue
    set_bit( txsta, TXEN ); // valide emission
    set_bit( txsta, BRGH ); //Bits/s=Fosc/(16(X+1)
    spbrg=VALEURBRG; //9600 bits/s (X=71)
    }


    J'ai au maximum commenté le code afin qu'il soit le plus facile possible à comprendre cependant, si il y a quoi que ce soit que vous ne comprenez pas, Je suis à votre entière disposition.

    Merci d'avance pour tous les renseignements que vous pourrez me donner

    -----

  2. #2
    invite25df009a

    Re : RS232 + pic + RFID

    salut !!

    D'après ce que je vois de ton code, tu oubli d'initialiser ton i après avoir mis tout à 0 dans ton tableau. Donc c'est logique que tu n'ai pas les valeurs souhaitées !!

    Sinon au niveau de ta communication au lieu de mettre des Delay, j'aurai utilisé une variable pour faire du polling bloquant !!
    Par exemple lorsque tu vas dans l'interuption de reception de l'UART, tu fais passer une variable à 1. ça t'évite ainsi d'attendre 1 ms !!!

    Poiur finir ta pas la possiblilité d'utiliser un ecran LCD ou visualiser carrement toute une valeur du tableau avec des leds pour faire tes tests ??

    a+

  3. #3
    invitec86ed256

    Re : RS232 + pic + RFID

    Merci pour ta réponse rapide !

    Je vais modifier ce que tu me propose mais je ne pourais malheureusement pas tester avant dimanche soir car je n'ai pas le matériel de programation sous la main.
    J'avais utilisé des delay par simplicité.
    La carte de développement que j'ai ne dispose que de 3 LED, c'est pour ça que j'ai utilisé la méthode du switch. Par la suite, sur la carte finale, il n'y aura pas d'affichage mais une communication par I²C avec une carte mère.
    A+

Discussions similaires

  1. PIC interruption RS232
    Par inviteb229ed52 dans le forum Électronique
    Réponses: 2
    Dernier message: 14/05/2009, 16h34
  2. Programmateur pic rs232
    Par invitec318f01d dans le forum Électronique
    Réponses: 20
    Dernier message: 13/09/2008, 14h51
  3. RS232 et PIC
    Par poche49 dans le forum Électronique
    Réponses: 1
    Dernier message: 26/08/2008, 10h34
  4. communication pic rs232
    Par alainav1 dans le forum Électronique
    Réponses: 14
    Dernier message: 24/03/2008, 15h03
  5. RS232 avec PIC
    Par invitedce53369 dans le forum Électronique
    Réponses: 0
    Dernier message: 27/01/2008, 16h29
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...