[Programmation] exercice Mikroc pic16f877a
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

exercice Mikroc pic16f877a



  1. #1
    didca7

    exercice Mikroc pic16f877a


    ------

    Bonjour tout le monde,

    je viens d'ecrire un code en c, le but est de lire RA0 du port A et envoyer cette valeur sur un lcd 2x16, ceci sans convertir en code ascii.
    Exemple si RA0 egale: 0010001000 , je dois lire 136 en decimal. Le probleme est que je n'arrive pas a afficher cette valeur, la communication entre pic et lcd fonnctionne.
    La valeur lue est afficher sur lcd comme indiquée dans le programme.
    Voici le code.
    merci d'avance si qqn peut me dépanner.

    Code:
    // LCD module connections
    sbit LCD_RS at RB0_bit;
    sbit LCD_EN at RB1_bit;
    sbit LCD_D4 at RB2_bit;
    sbit LCD_D5 at RB3_bit;
    sbit LCD_D6 at RB4_bit;
    sbit LCD_D7 at RB5_bit;
    sbit LCD_RS_Direction at TRISB0_bit;
    sbit LCD_EN_Direction at TRISB1_bit;
    sbit LCD_D4_Direction at TRISB2_bit;
    sbit LCD_D5_Direction at TRISB3_bit;
    sbit LCD_D6_Direction at TRISB4_bit;
    sbit LCD_D7_Direction at TRISB5_bit;
    // End LCD module connections
    
    unsigned char ch; //
    unsigned int adc_rd; // Declare variables
    char *text; //
    
    
    void main() {
     INTCON = 0;      // All interrupts disabled
    
     CMCON = 0X7;   // Disable comparators
    
    
     Lcd_Init(); // LCD display initialization
     Lcd_Cmd(_LCD_CURSOR_OFF); // LCD command (cursor off)
     Lcd_Cmd(_LCD_CLEAR); // LCD command (clear LCD)
    
     text = "valeur lue"; // Define the first message
     Lcd_Out(1,1,text);      // Write the first message in the first line
    
    
     ADCON1 = 0x82;  // A/D voltage reference is VCC
     TRISA = 0xFF;  // All port A pins are configured as inputs
     Delay_ms(2000);
    
    
    
     while (1) {
    
     adc_rd = ADC_Read(0); // A/D conversion. Pin RA0 is an input.
    
     Lcd_Out(2,1,adc_rd);    // Write result in the second line
    
    
    
     Delay_ms(10);
     }
    }

    -----
    Dernière modification par gienas ; 15/02/2017 à 14h31. Motif: Ajouté les balises de code obligatoires pour les programmes

  2. #2
    Jack
    Modérateur

    Re : exercice Mikroc pic16f877a

    Je ne connais pas grand chose à mikroC et aux pics, mais quand je vois ceci:
    Code:
     text = "valeur lue"; // Define the first message
     Lcd_Out(1,1,text);      // Write the first message in the first line
    je me dis qu'il faut envoyer une chaine de caractères au LCD.

    Puis tu écris ceci:
    Code:
     Lcd_Out(2,1,adc_rd);    // Write result in the second line
    où adc_rd est un entier.
    Normal que l'affichage ne donne rien. Il faut que tu convertisses adc_rd en une chaine de caractères à mon avis.

  3. #3
    didca7

    Re : exercice Mikroc pic16f877a

    Salut, merci pour la réponse,

    en fait quand j écris ceci :

    text = "valeur lue"; // Define the first message
    Lcd_Out(1,1,text); // Write the first message in the first line

    ca fonctionne bien, c-a-d 'valeur lue' est affichée sur le lcd...par contre la valeur lu sur RA0 du pic16f877 n'est pas envoyé sur lcd et la
    deuxieme ligne de lcd rest vide et rien ne se passe.

  4. #4
    gienas
    Modérateur

    Re : exercice Mikroc pic16f877a

    Bonjour à tous

    Citation Envoyé par didca7 Voir le message
    ... quand j écris ceci :

    text = "valeur lue"; // Define the first message
    Lcd_Out(1,1,text); // Write the first message in the first line

    ca fonctionne bien, c-a-d 'valeur lue' est affichée sur le lcd ...
    Nous n'avons pas le code de la fonction Lcd_Out, mais on peut supposer qu'elle affiche le teste ASCII contenu dans le buffer text jusqu’au premier caractère terminateur suivant.

    Citation Envoyé par didca7 Voir le message
    ... par contre la valeur lu sur RA0 du pic16f877 n'est pas envoyé sur lcd et la
    deuxieme ligne de lcd rest vide et rien ne se passe.
    Normal, comme le signale Jack, le "buffer" que tu donnes en argument à la fonction, contient une valeur binaire, non ASCII, dont l'affichage est imprévisible voire impossible.

    Il faut ou bien créer une autre fonction d'affichage, ou bien convertir le binaire lu en ASCII numérique et le placer en text ou donner une autre adresse contenant la valeur convertie.

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

    Re : exercice Mikroc pic16f877a

    Bonjour,
    "sans conversion en ascii"... Ton prof est un idiot, un incompétent ou les deux...

    Mais il veut peut-être que tu affiches la valeur lue en binaire, au quel cas il faudra bien envoyer des codes ascii à l'afficheur...
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  7. #6
    Fantas-Pic

    Re : exercice Mikroc pic16f877a

    Bonjour à tous,

    Jack à raison ! Tu dois convertir ton chiffre en une chaine de caractère pour que le LCD puisse l’interpréter.

    Pour ce faire, commence par déclarer une chaine de caractère pour "stocker" ton chiffre une fois convertit !

    Code:
    char Mon_chiffre[10];
    Puis ensuite on va convertir ton entier, en une chaine de caractère; Pour cela il faudra rajouter la librairie "conversions" dans library manager

    Code:
    IntToStr(adc_rd, chiffre); // Convertir le chiffre en une chaine
    Lcd_Out(2,1,chiffre);     // On affiche notre chaine
    delay_ms(500);     Petite pause entre deux rafraichissement

    Tu peux t'inspirer fortement de ce tuto : Lien vers tutoriel

  8. #7
    Jack
    Modérateur

    Re : exercice Mikroc pic16f877a

    Citation Envoyé par vincent66 Voir le message
    Bonjour,
    "sans conversion en ascii"... Ton prof est un idiot, un incompétent ou les deux...

    Mais il veut peut-être que tu affiches la valeur lue en binaire, au quel cas il faudra bien envoyer des codes ascii à l'afficheur...
    A quel moment ce pov' prof a-t-il demandé de ne pas convertir en ASCII?

    Pour compléter la réponse de Fantas-Pic, regarde si la fonction itoa n'existe pas dans mikroC par hazard.
    Dernière modification par Jack ; 15/02/2017 à 15h28.

  9. #8
    didca7

    Re : exercice Mikroc pic16f877a

    Merci pour toutes ces reponses,

    je vais essayer de faire ce que vous me dites... Juste, je ne suis pas étudiant et y a pas de prof, j'essaie d'apprendre a programmer le pic16f877a avec du Mikro c, donc
    je me forme avec ce que je trouve sur le web et forum, je débute..
    Dernière modification par didca7 ; 15/02/2017 à 15h34.

  10. #9
    Jack
    Modérateur

    Re : exercice Mikroc pic16f877a

    Il faut que tu apprennes à te servir de la doc: par exemple, pour Lcd_Out, regarde bien le type des arguments de la fonction ainsi que l'éventuelle valeur de retour. Il faut que le valeurs que tu passes à la fonction soient conformes.

Discussions similaires

  1. [Numérique] Pic16f877a
    Par elyacrania dans le forum Électronique
    Réponses: 1
    Dernier message: 01/05/2016, 07h27
  2. [Programmation] CPU à 97% du PIC16F877A ???
    Par ocean312 dans le forum Électronique
    Réponses: 5
    Dernier message: 22/01/2016, 18h12
  3. Problème programmation PIC16F877a - MikroC
    Par alzec002 dans le forum Électronique
    Réponses: 0
    Dernier message: 23/01/2015, 09h52
  4. Problème affichage ecran LCD JHD162A et PIC16f877a avec mikroC
    Par dragonfly56360 dans le forum Électronique
    Réponses: 3
    Dernier message: 15/04/2014, 14h35
  5. programmation avec MIKROC d'un PIC16F877A
    Par anouardz dans le forum Électronique
    Réponses: 6
    Dernier message: 24/03/2014, 21h58
Découvrez nos comparatifs produits sur l'informatique et les technologies.