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

Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD



  1. #1
    ILSFLAG

    Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Je veux écrire des caractères à l'écran en utilisant le PIC d'un éjà de programme écrit et transmise à la PIC voila le programme(Il est écrit avec MikroC) :
    Code:
    char i ;
    
    void main() {
      Lcd_Config(&PORTB, 0, 2, 1, 6, 5, 4, 3); // Lcd_Init_EP5, see Autocomplete
      USART_init(9600);                     // initialize USART module
      LCD_Cmd(LCD_CLEAR);       // Clear display
      LCD_Cmd(LCD_CURSOR_OFF);  // Turn cursor off
       while (1) {
         if (USART_Data_Ready()) {            // if data is received
           i = USART_Read();
           if (i==13) {                         // if recieve CR
               LCD_Cmd(LCD_CLEAR);              //clear LCD
               LCD_Cmd(LCD_RETURN_HOME);        //Return Home
                      }
            else {
          LCD_Chr_Cp(i);                  //write data to lcd
                  }
           }
                 }
                 }
    Donc, allez-vous m'aider s'il vous plaît parce que la simulation ne fonctionne pas vraiment.
    En plus voila le schéma:

    Schema.png

    -----


  2. Publicité
  3. #2
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Voici le fichier de simulation si vous avez ISIS Proteus:

  4. #3
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    désolé le voilà:
    Fichiers attachés Fichiers attachés

  5. #4
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Est ce qu'il ya quelqu'un qui peut m'aider s'il vous plaît

  6. #5
    paulfjujo

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    bonjour,

    J'ai pas encore vu ton code ... pas dans le zip !

    mais c'est une tres mauvaise idee de mettre le quartet de data LCD à cheval..au milieu du byte.
    B3,B4,B5,B6

    mieux vaut utiliser B4,B5,B6,B7 !!!

    et avant d'initialiser le LCD
    Au niveau hardware, il faut initailiser les E/S du PIC correctement...que la config par defaut ou sur reset.
    Dernière modification par paulfjujo ; 24/02/2014 à 09h35.

  7. A voir en vidéo sur Futura
  8. #6
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Ok merci pour votre aide, je vais essayer ce que vous avez dit et je vais voir si cela fonctionne ou pas

  9. Publicité
  10. #7
    paulfjujo

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    bonjour,

    essaie d'ecrire du texte sur ton LCD avant d'entrer
    dand la boucle while..
    afin de separer les possibles problemes
    LCD ou UART



    diviser pour mieux regner..
    .

  11. #8
    freepicbasic

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Lcd_Init
    http://electrosome.com/lcd-pic-interfacing/


    Code:
    void main()
    {
     Lcd_Init(); // Initialize LCD
     Lcd_Cmd(_LCD_CLEAR); // Clear display
     Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
     Lcd_Out(1,1,"Hello World");//Write text'Hello World' in first row
    }
    A+, pat

  12. #9
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Merci pour tout le monde qui m'a aidé ou essayé de

  13. #10
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Salut tout le monde,
    Tout ce que j'ai essayé n'a pas vraiment fonctionné, je suis désespérée en ce moment, les gars vous n'avez aucune idée de la façon dont ce projet fou me conduit.
    Voici l'affaire:
    Je veux envoyer des caractères à l'écran en utilisant cette application LabVIEW via le port série. Je reliant deux ports série (COM1 et COM2) virtuellement (COM1 est utilisé par LabVIEW) et (COM2 est utilisé par ISIS Proteus).
    voici l'application LabVIEW, je l'ai déjà testé à l'aide d'un terminal série pour voir les caractères qu'il envoie, et pour le bouton clear, il envoie de les les caractères "CR", que je vais utiliser pour effacer l'LCD.
    labVIEW app.png
    Et maintenant, voici le Proteus ISIS schématique j'ai fait quelques changements de la précédente.
    ISIS schematic.png
    Enfin, le programme PIC:
    Code:
    // LCD module connections
    sbit LCD_RS at RB0_bit;
    sbit LCD_EN at RB2_bit;
    sbit LCD_D4 at RB3_bit;
    sbit LCD_D5 at RB4_bit;
    sbit LCD_D6 at RB5_bit;
    sbit LCD_D7 at RB6_bit;
    
    
    sbit LCD_RS_Direction at TRISB0_bit;
    sbit LCD_EN_Direction at TRISB2_bit;
    sbit LCD_D4_Direction at TRISB3_bit;
    sbit LCD_D5_Direction at TRISB4_bit;
    sbit LCD_D6_Direction at TRISB5_bit;
    sbit LCD_D7_Direction at TRISB6_bit;
    
    // End LCD module connections
    
    char *i;
    main() {
             i="Nothing is recived";
    
      UART1_Init(9600);    // initialize USART module
      Delay_ms(100);        // Wait for UART module to stabilize
      LCD_Init();           // initialize the LCD
      LCD_Cmd(_LCD_CLEAR);       // Clear display
      LCD_Cmd(_LCD_CURSOR_OFF);  // Turn cursor off
    
           while(1)
          {
                                 if(UART1_Data_Ready()==1)        // Check if data is received
                                  i=UART1_Read();
                                  
    
                                  if((int)i==13)
                                  {   LCD_Cmd(_LCD_CLEAR);       // Clear display
                                      LCD_Cmd(_LCD_RETURN_HOME);  // Turn cursor to the initial position
                                  }
                                  Lcd_out(1,2,i);
    }
    
      }
    le problème est que la variable "i" reste à sa valeur initiale "stays at its initial value" même si j'envoie autres choses.

  14. #11
    freepicbasic

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    tu l'as déclarer comme pointeur
    enlève l "*" ça devrait fonctionner mieux
    A+, pat

  15. #12
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Je ne pense pas que ce soit le problème bceause j'ai essayé sans le "*" et cela n'a pas fonctionné avec la fonction "LCD_OUT", mais si j'utilise une autre fonction comme "LCD_chr" il fonctionne avec sans "*".
    Ecrire des caractères à l'écran LCD n'est pas le problème, je peux écrire tous ce que je veux, le problème est que la valeur de la variable "i" ne change jamais ce qui signifie que je ne suis pas recevoir quoi que ce soit sur le module USART.

  16. Publicité
  17. #13
    freepicbasic

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    un pointeur ça s'initialise !!!!!!
    avec malloc()

    regarde le prototype de UART1_Read();
    il attend quoi en retour ?

    Lcd_out(1,2,i);
    prototype i c est quoi ?
    Dernière modification par freepicbasic ; 26/03/2014 à 18h45.
    A+, pat

  18. #14
    freepicbasic

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    UART1_Read();

    Cette fonction est bloquante ou pas ?
    parce que s'il sort aussitôt il lit rien du tout
    A+, pat

  19. #15
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    D'abord j'ai pas initialiser l'adresse du pointeur j'ai initialiser sa valeur

  20. #16
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    La fonction UART1_Read() renvoie l'octet reçu à traver l'USART module

  21. #17
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    Voila les arguments de la fonction LCD_out: void Lcd_Out(char row, char column, char *text);

  22. #18
    freepicbasic

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    char *i;

    i = malloc(1):
    *i=65; /* "A" */
    Lcd_out(1,2,*i);


    y a des chances pour que le read soit pareil " *i "
    Dernière modification par freepicbasic ; 26/03/2014 à 19h02.
    A+, pat

  23. Publicité
  24. #19
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    hmmm, semble logique

  25. #20
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    mais il ne fonctionne toujours pas

  26. #21
    ILSFLAG

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    voici ce que j'ai fait:
    Code:
    char *i;
    main() {
             i="Nothing is recived";
      UART1_Init(9600);    // initialize USART module
      Delay_ms(100);        // Wait for UART module to stabilize
      LCD_Init();           // initialize the LCD
      LCD_Cmd(_LCD_CLEAR);       // Clear display
      LCD_Cmd(_LCD_CURSOR_OFF);  // Turn cursor off
    
           while(1)
          {
                                 if(UART1_Data_Ready()==1)        // Check if data is received
                                  *i=UART1_Read();
    
    
                                  if((int)i==13)
                                  {   LCD_Cmd(_LCD_CLEAR);       // Clear display
                                      LCD_Cmd(_LCD_RETURN_HOME);  // Turn cursor to the initial position
                                  }
                                  Lcd_out(1,2,*i);
    }
    
      }

  27. #22
    paulfjujo

    Re : Voulez-vous s'il vous plaît m'aider avec ce circuit:PIC16F877+LCD

    bonsoir,

    le pointer doit en principe pointer sur une table de caractere
    et on initialise ledit pointer avec l'adresse du premier element de la table.....

    Code:
    char Texte[17];
    char *p;
    int i,j;
    
    
    
    main()
    {
    
    p=&Texte[0];
    UART1_Init(9600);    // initialize USART module
      Delay_ms(100);        // Wait for UART module to stabilize
      LCD_Init();           // initialize the LCD
      LCD_Cmd(_LCD_CLEAR);       // Clear display
      LCD_Cmd(_LCD_CURSOR_OFF);  // Turn cursor off
      i=0;
      j=1;  // si 1 = 1ere ligne du LCD
           while(1)
          {
                                 if(UART1_Data_Ready()==1)        // Check if data is received
                                  {
    		          *p=UART1_Read();
    		           if(*p==13)
    	                              {   
                	                      LCD_Cmd(_LCD_RETURN_HOME);  // Turn cursor to the initial position
                            	      }
                                       Lcd_out(1,j ,*p);
    			p++;
    			i++;
    			if (i>15) 
    			{
    				j++;
    				Texte[i]=0;
    				i=0;
    				p=&Texte[0];	
    			}
                                 }
    	if(j>2)
    	{
    	 LCD_Cmd(LCD_CLEAR);              //clear LCD
             LCD_Cmd(LCD_RETURN_HOME);        //Return Home
    	j=1;
                i=0;
    	}
      }
    en supposant un LCD de 2 lignes de 16 cars:
    Texte de taille 17 ... 0 à 15 = 16 caractere + le 17em = 0 terminateur de string
    si tu efface le LCD sur reception du caractere CR=13 ..tu ne verras rien !
    a toi de voir comment gerer le depassement > 16 caracteres
    changement de ligne sur LCD ou ???

Sur le même thème :

Discussions similaires

  1. Pouvez vous m'aider à identifier cet insecte s'il vous plaît?
    Par money55 dans le forum Identification des espèces animales ou végétales
    Réponses: 6
    Dernier message: 24/07/2013, 17h01
  2. Devoir de maths spé pouvez-vous m'aider s'il vous plait ?
    Par ssry dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 02/01/2012, 11h00
  3. Pourriez-vous m'aider s'il vous plaît ? :(
    Par abcdefg1234567 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 17/10/2009, 19h01
  4. Je satuuuure.. ouvrez, si vous voulez m'aider!!
    Par saskia57 dans le forum Physique
    Réponses: 3
    Dernier message: 10/12/2008, 19h55