signal rectangulaire avec un PIC16f876a
Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

signal rectangulaire avec un PIC16f876a



  1. #1
    invite638ca161

    signal rectangulaire avec un PIC16f876a


    ------

    Bonsoir a tous,dans le cadre d'un project,je dois absolument utiliser le pic 16f876a pour qu'il me fournisse un signal rectangulaire au l'alentour de 40KHz,(j'aurai preferé l'utilisation d'un astable ce qui m'aurait semblé plus simple,mais mon professeur me l'a imposé ),
    Et j'ai un deuxieme soucis.
    je communique entre 2 pic (16f876a) par voie hertzienne en utilisant un emetteur rt4-433 et un recepteur,et suivant ce qu'envoie le premier pic(la lettre 'A' ou 'B'),le second pic ecrit sur le LCD(hd44780).Donc le probleme est qu'il ne marche pas,je l'ai pourtant testé avec hyper terminal et IAR Embedded et cela fonctionne tres bien. Cela provient t'il peut etre de la connexion du lcd au PIC?
    Je vous laisse le 1er programme(celui du premier pic):
    ///////////////////////////////////////////////////////////////////
    #include<io16f876a.h> // Prototype

    #pragma vector=0x04 //set a Interrupt vector

    void serial_intial_trans(void);
    void serial_intial_rec(void);
    void serial_putchar(unsigned char cD);
    void Small_Delay(void);
    unsigned char words[]={"AB"};
    int i,j,cD,m;


    void main(void)
    {
    serial_intial_trans(); //Initialisation of transmission
    serial_intial_rec(); // Iniatilisation of reception
    TRISB=0xC0;
    PORTB=0x00;


    while(1)
    {
    if(RB7)
    {
    Small_Delay(); // eviter les anti-rebounds
    while(RB7);
    serial_putchar(0x41); // A en hexa
    }

    if(RB6)
    {
    Small_Delay();
    while(RB6);
    serial_putchar(words[1]);// B en hexa
    }
    }
    }

    //Config for the Transmission TXSTA and RXSTA //
    void serial_intial_trans(void)
    {
    SYNC=0;
    BRGH=1;
    SPEN=1; //serial port enabled
    SPBRG=20; //9600 baud
    TXIE=0; //Disable interruption
    TX9=0; //8-bit transmission
    TXEN=1; //set baud rate to high BRGH=1 and TXEN=1
    }

    void serial_putchar(unsigned char cD)
    {
    while(TXIF!=1); // If 1,emission register is empty,so we go out the loop
    TXREG=cD; //We place the character cD to send in the TXREG register
    RCIE=1; //Enabling Reciever interrupt
    the data cD
    TXIF=0; // Disabling Transmission flag
    }



    void serial_intial_rec(void)
    {
    SYNC=0;
    RX9=0;
    SPEN=1;
    BRGH=1;
    SPBRG=20;
    RCIE=1; //Enable interupt.
    CREN=1; //continuous recieve enable bit.

    }

    void Small_Delay(void)
    {
    unsigned int j;
    for(j=0;j<32000;j=j+1); // do it until J reach 32000
    return;
    }
    //////////////////////////////////////////////////////////////////
    Voici le programme du second PICreception et ecriture sur LCD)

    #include<io16f876a.h> // Prototype
    #include"LCDdrive.h"
    void delay(unsigned char t);
    unsigned char mymodule[]={"In Living Room"};
    unsigned char mymodule1[]={"You'Re Outside"};
    unsigned char mymodule2[]={"Be careful!"};
    int m,cst,i,t,j;

    void main(void)
    {
    OPTION=0x07; /*set prescaler to 256*/

    TRISA=0x00;
    TRISB=0x00;
    PORTA=0;
    PORTB=0;
    TRISC=0x80;
    SPBRG=20;
    TXSTA=0x04;
    RCSTA=0x90;
    LCD_initialise();

    for(;
    {
    if(RCIF==1) // when the octet is sent RCIF goes to 1,PORTB take the value of RCREG
    {
    PORTA=RCREG;

    if(RCREG==0x41) // = A
    {
    LCD_clear();
    LCD_cursor(i,0); /*move the cursor to the 1st line*/
    LCD_puts(mymodule);
    }
    if(RCREG==0x42) // = B
    {
    LCD_clear();
    LCD_cursor(i,0); /*move the cursor to the 1st line*/
    LCD_puts(mymodule1);
    delay(5);
    LCD_clear();
    LCD_cursor(i,0); /*move the cursor to the 1st line*/
    LCD_puts(mymodule2);
    for (j=0;j<5;j++) // une DEL s'allume pour l'alerte
    {
    PORTA=0x01;
    delay(1);
    PORTA=0x00;
    delay(1);
    }
    }
    }
    RCIF=0;
    }
    }


    void delay(unsigned char t) /*delay function*/
    {
    int a,b;
    for(a=0;a<t;a++)
    {
    for(b=0;b<8;b++)
    {
    TMR0=0; //clear TMRO
    while(TMR0-200); //wait for a while
    }
    }
    }



    Es ce que quelqu'un pourrait m'aider svp?

    -----

  2. #2
    inoskyh

    Re : signal rectangulaire avec un PIC16f876a

    Bonjour common,

    Dans le principe, la solution semble simple : tu peux générer "manuellement" une telle fréquence sur ton pic grâce à une pin dédiée et un des timer en mode interruption (par exemple le timer2)

    Tu souhaites obtenir un fréquence de 40kHz, ce qui nous donne une période de 25us. Suivant la fréquence de ton PIC, il te suffit de donner les bonnes valeurs au post et prédiviseur de de ton timer2 (Je te guide alors vers cours sur les PIC de Bigonoff qui sont très bien faits)
    Lorsque le timer2 arrive à zéro, il se recharge et génère une interruption, à toi de gérer ta ligne en conséquence en imposant un 1 ou 0 en fonction de son état passé (un simple test devrait faire l'affaire !)

    A propos de ton LCD, comment est-il branché ? L'as tu déjà testé avant d'implanter la communication entre les deux pics ?

    Nicolas

  3. #3
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    tt d'abord merci de m'avoir repondu,j'irai y jeter un oeil....
    En ce qui concerne le LCD,il directement relie au PIC
    c'est a dire:
    pin 1 du lcd==>ground
    pin 2 du lcd==>vcc
    pin 3 du lcd==>ground
    pin 4 du lcd==> pin 25 du pic
    pin 5 du lcd==> ground
    pin 6 du lcd==> pin 26 du pic
    pin 11 du lcd==> pin 21 du pic
    pin 12 du lcd==> pin 22
    pin 13 du lcd==> pin 23
    pin 14 du lcd==> pin 24
    j'utilise un crystal de 3.2MHz

  4. #4
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    Ah oui et le LCD marche tres bien tt seul(PIC et LUI tt seul)

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

    Re : signal rectangulaire avec un PIC16f876a

    Jetes donc un oeil sur la partie 2 des cours de Bigonoff, le fonctionnement du timer 2, et des 3 timers en général, y sont totalement décrits.

    Au sujet de ton LCD, si ce dernier fonctionne bien avec le premier PIC isolé du second, le problème ne peut que venir de la transmission entre les deux (et/ou de tes routines de gestion de transmission)
    Par contre, désolé mais je programme mes PIC uniquement en assembleur, le C reste pour moi assez vague !

    Nicolas

  7. #6
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    c'est bon g reussi a creer mon signal rectangulaire de 40 khz ,merci bigonoff!!!
    et j'me debrouillerai pour le reste,merci pour ton aide

  8. #7
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    me revoila,j'ai passé tte l'apres-midi dessus,et rien n y faire,la transmission fonctionne parfaitement,c'st au niveau de la reception,
    j'ai meme testé un programme simple,si il recoit une certaine data,le pic allume une DEL,mais cela ne marche pas.....
    Cela serait t'il causé par l'interruption?

  9. #8
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Bonjour.
    Citation Envoyé par common Voir le message
    Cela serait t'il causé par l'interruption?
    Ça marche sans l'interruption ?

  10. #9
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    je n'ai pas testé(on nous a viré du labo,parce qu'ils fermaient)
    mais avec ou sans interruption,mon progrmme marche avec hyper-terminal(on a une carte pour tester nos programme associé a un LCD),un fois sur plaque labdec,ca ne fonctionne plus,(a part la transmission)

  11. #10
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Le plus simple pour trouver le problème c'est de désactiver les interruptions et d'écrire sur le LCD tous les caractères que tu reçois.

  12. #11
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    Le programme du 2eme pic pourrait t'il s'ecrire autrement?(Quand une data arrive,elle affiche un message

  13. #12
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Ce programme affiche la valeur de RCREG (1 octet) :
    Code:
    if (RCIF==1) {
      char chaine[4];
      LCD_clear();
      LCD_cursor(...)
      chaine[0] = RCREG/100 + '0';
      chaine[1] = (RCREG%100)/10 + '0';
      chaine[2] = (RCREG%10) + '0';
      chaine[3] = '\0';
      LCD_puts(chaine);
      RCIF = 0;
    }
    Dernière modification par sdec25 ; 31/07/2009 à 19h23.

  14. #13
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    je ne dois pas d'abord autoriser les interruptions globales etc....je ne me sers pas de GIE,PEIE etc....

  15. #14
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Citation Envoyé par common Voir le message
    je ne dois pas d'abord autoriser les interruptions globales etc....je ne me sers pas de GIE,PEIE etc....
    Tu utilises les interruptions pour quoi ?
    Il faudrait expliquer comment fonctionne ton programme. Et le mettre entre les balises CODE serait pas mal, il serait plus lisible.

  16. #15
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    je ne veux pas forcement utiliser les interruptions,mais jpensais qu'a partir du moment ou on utilisais RCIF,on se devait d'utiliser les interruptions,mais si jveux peux ecrire sur le LCD apres avoir recu une donnée sans interrution,jsuis pour...

  17. #16
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    tourt ce que jveux,c'est que quand le pic recoit le lettre A(envoyé par le 1er pic)il ecrit un phrase sur le LCD,et de meme pour B....

  18. #17
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Citation Envoyé par common Voir le message
    je ne veux pas forcement utiliser les interruptions,mais jpensais qu'a partir du moment ou on utilisais RCIF,on se devait d'utiliser les interruptions
    On n'utilise pas les interruptions, d'ailleurs il n'y a aucune routine d'interruption dans le programme.

    mais si jveux peux ecrire sur le LCD apres avoir recu une donnée sans interrution,jsuis pour...
    C'est ce que fait le programme que je t'ai donné avant.

    tourt ce que jveux,c'est que quand le pic recoit le lettre A(envoyé par le 1er pic)il ecrit un phrase sur le LCD,et de meme pour B....
    Reste plus qu'à trouver l'origine du problème.

  19. #18
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    justement,je ne vois pas ou est le probleme....

  20. #19
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Citation Envoyé par common Voir le message
    justement,je ne vois pas ou est le probleme....
    Fais une liste de ce qui est sûr de marcher (qui a été testé). Le problème est ailleurs.

  21. #20
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    j'essaierai ca dès lundi matin...jvous tiendrez au courant

  22. #21
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    c'est bon,le programme marche parfaitement....
    Merci pour tout

  23. #22
    sdec25

    Re : signal rectangulaire avec un PIC16f876a

    Citation Envoyé par common Voir le message
    c'est bon,le programme marche parfaitement....
    Qu'est-ce qui n'allait pas ?

  24. #23
    invite638ca161

    Re : signal rectangulaire avec un PIC16f876a

    j'etais tt simplement sur la mauvaise pin (Rx) du second pic,le project marche parfaitement,mais j'aimerai si c'est possible y apporter une alimentation a disatance.
    J 'ai un capteur a ultra-sons alimenté en 12v et mes 2 pic aimentés en 5v,serait il possible de creer un alim pour l'un des 2?

Discussions similaires

  1. Signal pwm langage C PIC16F876A
    Par Tyller dans le forum Électronique
    Réponses: 51
    Dernier message: 06/04/2010, 17h31
  2. Réponses: 2
    Dernier message: 04/06/2009, 18h45
  3. filtrer un signal rectangulaire
    Par invitecaa29957 dans le forum Électronique
    Réponses: 18
    Dernier message: 27/04/2008, 15h17
  4. Générer un signal rectangulaire
    Par invite596525fb dans le forum Électronique
    Réponses: 5
    Dernier message: 30/01/2007, 14h42
  5. signal rectangulaire (codification de manchester)
    Par invite4325d177 dans le forum Électronique
    Réponses: 19
    Dernier message: 09/03/2006, 02h24
Découvrez nos comparatifs produits sur l'informatique et les technologies.