interfacer pic 16f877 et hyper terminal pour commander un systeme
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

interfacer pic 16f877 et hyper terminal pour commander un systeme



  1. #1
    HichamKabel

    interfacer pic 16f877 et hyper terminal pour commander un systeme


    ------

    bonjour à tous ;
    j'ai realisé une carte d'acquisition de controle et de commande d'un systeme à partir d'un module gsm, et maintenant je veux le tester par hyper terminal et pour cela il faut que je programme mon pic16f877. ma question c'est de comment le programmer pour une communication serie entre le pic et pc?
    la fonction que je veux realiser c'est de lui envoyer une commande at par hyper terminal contient le message ''OK'' et le pic va piloter le relais pour alumer une lampe ou un moteur et apres un delais de 2 minute le pic devrais éteindre le relais et envoyer un message au hyper terminal contient ''la lampe ou le moteur est eteind'' . si vous avez des idée de programmation , vous me le dire .
    et merci d'avance .

    -----

  2. #2
    futhier9178

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    Bonjour,

    Quel module GSM utilises-tu?

  3. #3
    HichamKabel

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    je vais utiliser le module gsm siemens MC45 (je pense que le type de module gsm ne pose aucune probleme ), mais pour le moment je vais le tester sans utiliser le module gsm par hyper terminal (il joue le meme role que le module gsm), si tu peut m'aider sur la programmation,je vais etre reconnaissants pour votre soutien

  4. #4
    futhier9178

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    Avant la programmation il faut relier le PIC au PC. Est-ce que tu sais faire ça?

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

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    Salut,
    Peux-tu montrer ton schéma ?
    a+

  7. #6
    HichamKabel

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    salut Futhier , j'ai tous realiser ( toute la partie electronique ) , je sais le le faire c'est avec un port serie que je vais relier ma carte avec mon pc ,le probleme que que j'ai c'est au nivau dla programmation je sais pas comment programmer pour qu'elle recoit les commandes qui seront envoyer par l hyperterminal.si tu sais comment le faire svp montre moi .

  8. #7
    futhier9178

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    Salut Hicham,

    Je ne sais pas faire ce que tu me demandes mais tu peux regarder des notes d'applications sur le site de microchip il y a surement des exemples.
    Dernière modification par futhier9178 ; 26/05/2014 à 14h31.

  9. #8
    paulfjujo

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    bonjour,



    quel compilateur utiilises-tu ?

    un exemple en MikroC..
    action suivant un caractere recu...
    c'est un debut... fonctionnement en pooling
    le mieux serait en mode interruption ...

    Code:
    // rev 31/10/2011  .. testé OK
    // sous MikroC Pro 1.65
    // usage de Pic Downloader 1.09  pour transfert via bootloader du 16F877
    
    #define p16_f877 ;
    #define LedRouge PORTE.F2
    #define CLS 12
    #define TAB 9
    
    void Write_String(void);
    void CRLF(void);
    void  Chenillard(void);
    
    char *txt=".......Reservations..................";
    unsigned int M;
    char outmode=0;
    char UnCar;
    
    
      unsigned int readAN0(void)
        {
        char cT=6; // ah ah :)
        unsigned int iValAD=0;
        ADON_bit=1; // activation du convertisseur
        while(cT--); // tempo de 23µs
        GO_DONE_bit=1; // démarrage conversion
        while(GO_DONE); // si ADGO passe à 0 fin de conversion
        iValAD=ADRESH;
        iValAD<<=8;
        iValAD|=ADRESL; // le résultat est contenu dans iValAD
        ADON_bit=0; // convertisseur arrêté
        return iValAD;
        }
    
    void main()
    {
    int i,j,k;
    
    
     PORTB = 0x00;           // set PORTB to FF
      TRISB = 0;           // designate portb pins as output
      PORTA = 0xFF;
      TRISA = 0xFF;          // PORTA is RA0,1,2,3,4,5=input
      TRISE=0;
      PORTE=0xFF;
      TRISD=0x00; // all outputs
      ADCON0 =1 ;
    
      // test----------------------------------
       TRISA=0x01; //Port A en entrées
        TRISB=0x3F; //Port B en sortie (leds rouges)
        TRISD=0;
    
        //Init du convertisseur ana/numerique
        ADCS1_bit=1; ADCS0_bit=0; // Fosc 32
        CHS2_bit=0; CHS1_bit=0; CHS0_bit=0; // sélection de l'entrée analogique RA0
        PCFG3_bit=1; PCFG2_bit=1; PCFG1_bit=1; PCFG0_bit=0;
        ADFM_bit=1; // justification bit à droite registre de réception ADRESH ADRESL
    
        // boucle a la con
        while (1){
        PORTD=(unsigned char) readAN0() ;  // Send lower 8 bits to PORTD
        PORTB = ((readAN0()  >>2) & 0x00C0) | PORTB;
        }
     //------ test ---------------------------------
    
    
    
    
     // portA A0 A1 analog AN2=-Vref=3,0V An3=+ref=4.096V   RA5,RE0,RE1,RE2 digitals,
      ADCON1 = 0x8D  ;    //B'10001101'
      PORTC = 0xFE;       // set PORTC to $FF
      TRISC = 0;          // designate PORTC pins as output
    
      UART1_Init(19200);   // RS232
      Delay_ms(1000);
      UART1_Write(CLS);
      Delay_ms(1000);
    
      txt= strcpy(txt,"Mikroc Pro 1.65 ");
      Write_String();
      CRLF();
      
      txt= strcpy(txt,"Platine 16F877 ");
      Write_String();
      CRLF();
      
      txt= strcpy(txt,"Attente saisie au clavier");
      Write_String();
      CRLF();
    
     while(1)
     {
    
      LedRouge=!LedRouge;
    
      if (UART1_Data_Ready()==1)
      {
       UnCar=UART1_Read();
       UART1_Write (UnCar);   UART1_Write (TAB);
       *(txt)=0;
       if (UnCar=='A')
       {
       txt= strcpy(txt,"Les LEDS sont OK ");
        Write_String();
       Chenillard();
       }
       if (UnCar=='X')
       {
     //  txt= strcpy(txt,"Le Moteur est OK ");
      //Write_String();  // <- ok
     //   UART1_Write_Text(txt);  <-- ok
         UART1_Write_Text("Le Moteur est OK 3");
       PORTC = 1;
       Delay_ms(1800);
       PORTC =0;
       }
        CRLF();
       }
        Delay_ms(500);
      } //while
     }
    
    
    void Write_String()
    {
    short int i1,j1,k;
     j1=strlen(txt);
       i1=0;
       do
       {
       k=txt[i1];
       UART1_Write(k);
       i1++;
       }while (i1<j1);
    }
     void CRLF()
     {
     UART1_Write(13);
     UART1_Write(10);
     }
     
     void Chenillard()
    {
     PORTD = 0;
        Delay_ms(150);
        PORTD = 1;
        Delay_ms(350);
        PORTD = 2;
        Delay_ms(350);
        PORTD = 3;
        Delay_ms(350);
        PORTD = 4;
        Delay_ms(350);
        PORTD = 5;
        Delay_ms(350);
        PORTD = 6;
        Delay_ms(350);
        PORTD = 5;
        Delay_ms(350);
        PORTD = 4;
        Delay_ms(350);
        PORTD = 3;
        Delay_ms(350);
       PORTD = 2;
        Delay_ms(350);
        PORTD = 1;
         Delay_ms(350);
        PORTD = 0;
     }
    
    /*
     ****** resultats ***********
    Mikroc Pro 1.65
    Platine 16F877
    Attente saisie au clavier
    q
    d
    A        Les LEDS sont OK
    k
    f
    X        Le Moteur est OK
    */

  10. #9
    HichamKabel

    Re : interfacer pic 16f877 et hyper terminal pour commander un systeme

    salut paulfjujo merci ,je vais l'essayer mais y'as des lignes que je n'ai pas compris
    Citation Envoyé par paulfjujo Voir le message
    bonjour,



    quel compilateur utiilises-tu ?

    un exemple en MikroC..
    action suivant un caractere recu...
    c'est un debut... fonctionnement en pooling
    le mieux serait en mode interruption ...

    Code:
    // rev 31/10/2011  .. testé OK
    // sous MikroC Pro 1.65
    // usage de Pic Downloader 1.09  pour transfert via bootloader du 16F877
    
    #define p16_f877 ;
    #define LedRouge PORTE.F2
    #define CLS 12
    #define TAB 9
    
    void Write_String(void);
    void CRLF(void);
    void  Chenillard(void);
    
    char *txt=".......Reservations..................";
    unsigned int M;
    char outmode=0;
    char UnCar;
    
    
      unsigned int readAN0(void)
        {
        char cT=6; // ah ah :)
        unsigned int iValAD=0;
        ADON_bit=1; // activation du convertisseur
        while(cT--); // tempo de 23µs
        GO_DONE_bit=1; // démarrage conversion
        while(GO_DONE); // si ADGO passe à 0 fin de conversion
        iValAD=ADRESH;
        iValAD<<=8;
        iValAD|=ADRESL; // le résultat est contenu dans iValAD
        ADON_bit=0; // convertisseur arrêté
        return iValAD;
        }
    
    void main()
    {
    int i,j,k;
    
    
     PORTB = 0x00;           // set PORTB to FF
      TRISB = 0;           // designate portb pins as output
      PORTA = 0xFF;
      TRISA = 0xFF;          // PORTA is RA0,1,2,3,4,5=input
      TRISE=0;
      PORTE=0xFF;
      TRISD=0x00; // all outputs
      ADCON0 =1 ;
    
      // test----------------------------------
       TRISA=0x01; //Port A en entrées
        TRISB=0x3F; //Port B en sortie (leds rouges)
        TRISD=0;
    
        //Init du convertisseur ana/numerique
        ADCS1_bit=1; ADCS0_bit=0; // Fosc 32
        CHS2_bit=0; CHS1_bit=0; CHS0_bit=0; // sélection de l'entrée analogique RA0
        PCFG3_bit=1; PCFG2_bit=1; PCFG1_bit=1; PCFG0_bit=0;
        ADFM_bit=1; // justification bit à droite registre de réception ADRESH ADRESL
    
        // boucle a la con
        while (1){
        PORTD=(unsigned char) readAN0() ;  // Send lower 8 bits to PORTD
        PORTB = ((readAN0()  >>2) & 0x00C0) | PORTB;
        }
     //------ test ---------------------------------
    
    
    
    
     // portA A0 A1 analog AN2=-Vref=3,0V An3=+ref=4.096V   RA5,RE0,RE1,RE2 digitals,
      ADCON1 = 0x8D  ;    //B'10001101'
      PORTC = 0xFE;       // set PORTC to $FF
      TRISC = 0;          // designate PORTC pins as output
    
      UART1_Init(19200);   // RS232
      Delay_ms(1000);
      UART1_Write(CLS);
      Delay_ms(1000);
    
      txt= strcpy(txt,"Mikroc Pro 1.65 ");
      Write_String();
      CRLF();
      
      txt= strcpy(txt,"Platine 16F877 ");
      Write_String();
      CRLF();
      
      txt= strcpy(txt,"Attente saisie au clavier");
      Write_String();
      CRLF();
    
     while(1)
     {
    
      LedRouge=!LedRouge;
    
      if (UART1_Data_Ready()==1)
      {
       UnCar=UART1_Read();
       UART1_Write (UnCar);   UART1_Write (TAB);
       *(txt)=0;
       if (UnCar=='A')
       {
       txt= strcpy(txt,"Les LEDS sont OK ");
        Write_String();
       Chenillard();
       }
       if (UnCar=='X')
       {
     //  txt= strcpy(txt,"Le Moteur est OK ");
      //Write_String();  // <- ok
     //   UART1_Write_Text(txt);  <-- ok
         UART1_Write_Text("Le Moteur est OK 3");
       PORTC = 1;
       Delay_ms(1800);
       PORTC =0;
       }
        CRLF();
       }
        Delay_ms(500);
      } //while
     }
    
    
    void Write_String()
    {
    short int i1,j1,k;
     j1=strlen(txt);
       i1=0;
       do
       {
       k=txt[i1];
       UART1_Write(k);
       i1++;
       }while (i1<j1);
    }
     void CRLF()
     {
     UART1_Write(13);
     UART1_Write(10);
     }
     
     void Chenillard()
    {
     PORTD = 0;
        Delay_ms(150);
        PORTD = 1;
        Delay_ms(350);
        PORTD = 2;
        Delay_ms(350);
        PORTD = 3;
        Delay_ms(350);
        PORTD = 4;
        Delay_ms(350);
        PORTD = 5;
        Delay_ms(350);
        PORTD = 6;
        Delay_ms(350);
        PORTD = 5;
        Delay_ms(350);
        PORTD = 4;
        Delay_ms(350);
        PORTD = 3;
        Delay_ms(350);
       PORTD = 2;
        Delay_ms(350);
        PORTD = 1;
         Delay_ms(350);
        PORTD = 0;
     }
    
    /*
     ****** resultats ***********
    Mikroc Pro 1.65
    Platine 16F877
    Attente saisie au clavier
    q
    d
    A        Les LEDS sont OK
    k
    f
    X        Le Moteur est OK
    */

Discussions similaires

  1. hyper terminal m'affiche des caractères inconnus
    Par ranouch dans le forum Électronique
    Réponses: 175
    Dernier message: 13/05/2012, 11h45
  2. lancer hyper terminal à partir de LabView
    Par nooore dans le forum Électronique
    Réponses: 2
    Dernier message: 07/03/2012, 17h15
  3. Problème liaison RS232 ou hyper terminal
    Par invite16cc5264 dans le forum Électronique
    Réponses: 12
    Dernier message: 28/06/2011, 08h51
  4. Réponses: 9
    Dernier message: 10/04/2009, 07h15
  5. Hyper terminal
    Par invitea53eb34b dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 12/12/2007, 18h13
Découvrez nos comparatifs produits sur l'informatique et les technologies.