Bonsoir, actuellement en bts se, je suis entrain de faire mon projet, la carte est tirée et tout marche, viens maintenant la partie la plus embarrassante car je n'ai jamais programmée en C. Ma carte se compose,d'un PIC18F26K22, Module RFID 125Khz, Module EASY_VR, Afficheur Nokia.
Le projet est une amélioration d'une box domotique.
J'ai commencé a programmer, le but est que lorsque la carte RFID passe devant l'antenne, notre afficheur nokia inscrive soit "Passez carte" soit le code en binaire de la carte. Un premier problème est que l'horloge ne se synchronise pas sur mon quartz 16Mhz mais sur mon PIC malgré que la commande soit écrite, le deuxième problème est que mon écran affiche un écran bleu qui ne s'enlève pas malgré les Putstring écrit.
CF: Code C écrit sur MPLAB ID v8.92
Code:#include <18F26K22.h> #fuses HSH,NOWDT,NOPROTECT,NOLVP #device ADC=10 /// CAN en 8 ou 10 bits #use delay(clock=16000000) /////////////// config interface RS232 pour module XBEE ///////////// #use rs232(baud=9600, bits=8, xmit=PIN_C6, rcv=PIN_C7,STREAM=RFID) #byte pb =0xF81 //port b #byte pa =0xF80 //port a #byte pc =0xF82 //port c //#byte PORTD =0xF83 #byte ADRESH =0xFC4 #byte ADRESL =0xFC3 #byte ADCON0 =0xFC2 #byte ADCON1 =0xFC1 #byte ADCON2 =0xFC0 #bit GO = ADCON0.1 //////////////// config afficheur nokia Ecran ///////////// #bit _RESET = pb.4 #bit _SDATA = pb.0 #bit _SCLK = pb.1 #bit _CS = pb.5 /////////////////////////////////////////// #include "DisplayFns.c" // Fonctions pour l'afficheur graphique #define LED_TEST PIN_A0 #define LED_ON output_high #define LED_OFF output_low ////////////// Variables Globales ////////////////// int elt_rfid=0; int detect_carte=0; char data_rfid[11]; char c; /////////////// sous-progs d'interruption /////////////////// #int_RDA // Chaque fois qu'un caractère arrive par la liaison RS232, cette interruption est générée void RDA_isr(void) { detect_carte=1; c=fgetc(RFID); // A chaque passage de la carte devant le module, 11 octets sont envoyés printf(PutString "c=%c",c); data_rfid[elt_rfid++]=c; if (elt_rfid ==10) elt_rfid=0; } //////////////////////////////////////////////////////////////////////////////// ////////////////////// Programme Principal //////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// void main(void) { /////////// déclarations des variables ////////////////// LED_ON (LED_TEST); /////////////////////// Init CAN ///////////////////// ADCON1=0xFC1 ;// RA0 en entrée analogique et tension de référence = VDD ADCON0=0xFC2;// Sélection Channel 0 et validation du CAN ADCON2=0xFC0;//horloge de conversion = Fosc/8 et temps d'acquisition = 8.TAD delay_us(5);//attente de positionnement du multiplexeur /////////////// Init PORTS /////////////////// set_tris_a(0x00); set_tris_b(0x00); /////////////////////Init LED //////////////////////////// LED_OFF(LED_TEST); //Eteindre la LED ////////////////////////////// BOUCLE /////////////////////////////////// while (TRUE) { gclcd_gotoxy(10,10);// Positionne le curseur if (detect_carte==0) {PutString("Passez Carte:");} else { PutString("Code Carte : "); gclcd_gotoxy(10,20); printf(PutString "%02X %02X %02X %02X %02X",data_rfid[3],data_rfid[4],data_rfid[5],data_rfid[6],data_rfid[7]); } // Comparaison avec le code de la carte RFID if ((data_rfid[3]==0x01)&&(data_rfid[4]==0x02)&&(data_rfid[5]==0x03)&&(data_rfid[6]==0x04)&&(data_rfid[7]==0x05)) LED_ON(LED_TEST); } //Eteindre la LED LED_OFF(LED_TEST); /////////////////////////////// Prog. PRINCIPAL /////////////////////////////////// while (TRUE) gclcd_gotoxy(10,10); // Positionne le curseur if (detect_carte==0) {PutString("Passez Carte:");} else { PutString("Code Carte : "); gclcd_gotoxy(10,20); fprintf(RFID, "%02X %02X %02X %02X %02X ",data_rfid[3],data_rfid[4],data_rfid[5],data_rfid[6],data_rfid[7]); } // Comparaison avec le code de la carte RFID if ((data_rfid[3]==0x01)&&(data_rfid[4]==0x02)&&(data_rfid[5]==0x03)&&(data_rfid[6]==0x04)&&(data_rfid[7]==0x05)) LED_ON(LED_TEST); }
-----