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

Programation pic 16F877 en C avec Aff LCD



  1. #1
    kevinomont

    Exclamation Programation pic 16F877 en C avec Aff LCD


    ------

    Bonjour!
    Je vous explique mon problème.
    J'ai actuellement un projet a réaliser dont une partie comporte un pic 16F877 et un afficheur LCD 16 pattes.
    Mon problème se situe dans la partie programmation du pic.
    J'ai parcouru votre site à la recherche de réponses mais je n'y ai pas trouvé mon bonheur.
    Pourriez vous m'expliquer comment programmer le pic afin qu'il affiche (sur le lcd) un texte écrit dans le programme?
    Ceci est surement simple mais je ne comprend pas les exemples trouvés sur le net.
    Au final mon programme doit pouvoir afficher la tension (variable) qu'on fourni au pic et mémoriser la tension maximale.
    J'éspère avoir été clair...
    En attendant une réponse de votre part.
    Kevin

    -----

  2. Publicité
  3. #2
    invite03481543

    Re : Programation pic 16F877 en C avec Aff LCD

    Bonsoir,

    tu utilises quel compilateur C?

    Ton LCD "16 pattes"() c'est un 2x16 caractères je suppose?

    @+

  4. #3
    kevinomont

    Re : Programation pic 16F877 en C avec Aff LCD

    J'utilise MPLAB version 8.10 avec le plugin CCS qui me permet de programmer en C dessus.
    En effet c'est bien un 2x16 caractères ^^

  5. #4
    kevinomont

    Re : Programation pic 16F877 en C avec Aff LCD

    Bonjour!
    Désolé de ne pas avoir répondu plus tot mais j'ai été pas mal chargé avec les exams et c'est pourquoi j'ai pas posté de nouvelles infos.
    Cependant j'ai avancé le programme mais cela ne fonctionne toujours pas...
    Si quelqu'un pouvait y jeter un oeil se serait simpa!
    Merci d'avance!

    Voici mon programme:

    ///////////////////////////////////////////////////////////////////////////
    //// Prog PIC pour le panneau solaire ////
    ///////////////////////////////////////////////////////////////////////////


    #include <16F877.h>
    #device ADC=16
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #include <lcd.c>


    long current_volt, max_volt;

    void reset_volt(void)
    {
    max_volt=current_volt;
    }

    void mouvement(void)
    {
    output_high(PIN_A1);
    delay_ms(3000);
    output_low(PIN_A1);
    }

    void lecture_affichage(void)
    {
    if(current_volt > max_volt)
    {
    max_volt=current_volt;
    }
    lcd_init();
    printf(lcd_putc,"\fVolt: %2X \n Max: %2X", current_volt, max_volt);
    }

    void attendre (void)
    {
    if (current_volt < max_volt-3)
    {
    delay_ms(20000); /* on attend 20 sec pour confirmer que la valeur est bien en dessous du seuil */
    if (current_volt < max_volt-3)
    reset_volt();
    }
    }

    void scan (void)
    {
    int i;

    for ( i = 0 ; i < 50 ; i++ )
    {
    lecture_affichage();
    mouvement();
    }
    }

    void positionnement (void)
    {
    int i;

    for( i = 0 ; i < 50 ; i++ )
    {
    mouvement();
    lecture_affichage();

    if( current_volt >= max_volt - 1 ) /* 1 est une marge d'erreur */
    i = 50;
    }
    }



    void main()
    {
    setup_port_a( ALL_ANALOG );
    setup_adc( ADC_CLOCK_INTERNAL );
    set_adc_channel( 0 );
    delay_ms(100);

    lcd_init();
    printf(lcd_putc,"\fReady...\n" );
    delay_ms(2000);

    while(1)
    {
    current_volt = 0xFFFF;
    max_volt = 0xFFFF;
    scan(); /* trouve le Volt maximum */
    positionnement(); /* Oriente la plaque là ou le voltage est maximum */
    attendre(); /* attendre qu'on ai toujours un voltage correct */
    }
    }

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    invite9865321

    Re : Programation pic 16F877 en C avec Aff LCD

    L'idée est simple
    tu met la première valeur dans une variable Umax
    Puis tu boucle en entant les donnée dans ta boucle:
    si U est plus grand que U max alors Umax=U
    et tu affiche Umax
    et tu rcommence

    voila, c'est de l'affichage de la plus grande valeur
    Maintennat si tu dois la mémorisé, met cette valeur dans L'EEPROM.

  9. #6
    kevinomont

    Re : Programation pic 16F877 en C avec Aff LCD

    Salut moustique3!
    Merci pour la réponse mais je ne comprend pas très bien l'idée de ta première boucle... De laquelle parles tu?
    J'ai refait le programme car ça m'as énervé et je suis reparti sur ça:
    (Je garde les fonctions mais j'ai modifié le main, la fonction attendre et la fonction positionnement).




    ///////////////////////////////////////////////////////////////////////////
    //// Prog PIC pour le panneau solaire ////
    ///////////////////////////////////////////////////////////////////////////


    #include <16F877.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
    #include <lcd.c>

    #define NB_POS_DIFFERENTES 50 // Nombre de positions différents pour que le panno fasse un tour complet

    void afficheVolt(void);
    void scan (void);
    void lireVoltageActuel(void);
    void positionnement(void);
    void mouvement(void);


    long volt_actuel, volt_max;


    int main(void)
    {
    lcd_init(); // On initialise l'écran LCD


    printf(lcd_putc,"\fReady...\n" ); // On affiche que l'écran est opé : sa sert surtout à débug (voir si l'écran fonctionne (ou pas))
    delay_ms(2000);


    setup_port_a( ALL_ANALOG ); // On assigne la patte A0 du pic : C'est elle qui nous donnera la tension actuelle
    setup_adc( ADC_CLOCK_INTERNAL );
    set_adc_channel( 0 );


    while(1)
    {
    volt_max = 0; // On initialise Volt_max
    scan(); /* trouve le Volt maximum */
    positionnement(); /* Oriente la plaque là ou le voltage est maximum */
    attendre(); /* attendre qu'on ai toujours un voltage correct */
    }

    return 0;
    }

    void afficheVolt(void)
    {
    long min = 0xffff;

    min = volt_actuel;

    printf(LCD_PUTC, "\f");
    printf(LCD_PUTC,"\n\rV: min%4LX ",min);
    }

    void scan(void)
    {
    int i;

    for ( i = 0 ; i < NB_POS_DIFFERENTES ; i++ )
    {
    lireVoltageActuel();
    mouvement();
    }
    }

    void lireVoltageActuel(void)
    {
    volt_actuel = Read_ADC();

    if( volt_actuel > volt_max )
    volt_max = volt_actuel;

    afficheVolt();
    }

    void positionnement(void)
    {
    int i;

    for( i = 0 ; i < NB_POS_DIFFERENTES ; i++ )
    {
    mouvement();
    lireVoltageActuel();

    if( volt_actuel >= volt_max - 1 ) /* 1 est une marge d'erreur */
    i = NB_POS_DIFFERENTES;
    }
    }

    void mouvement(void)
    {
    output_high(PIN_A1);
    delay_ms(3000);
    output_low(PIN_A1);
    }

    void attendre (void)
    {
    int ok = 1;

    while(ok)
    {

    lireVoltageActuel(); // On met à jour la valeur de volt_actuel

    if ( volt_actuel < volt_max - 3 ) /* 3 est une marge d'erreur */
    {
    delay_ms(20000); /* on attend 20 sec pour confirmer que la valeur est bien en dessous du seuil */

    if ( volt_actuel < volt_max - 3 )
    ok = 0;
    }

    delay_ms(1000); /* toutes les secondes on actualise la valeur de volt_actuel */

    }
    }

  10. Publicité
  11. #7
    mich35

    Re : Programation pic 16F877 en C avec Aff LCD

    J'ai pas tres bien compris comment tu affiches? (ta methode marche si on a fait un redirection de la sortie standart je crois mais ca ne se fait pas comme ca automagiquement).
    Essaye d'abord d'ecrire quelque chose sur le LCD au demarrage, juste pour voir si cette partie fonctionne.
    C'est quoi les references des exemples trouvés sur le net? Est-ce que tu es sur que ces exemples sont compatibles avec ton PIC et ton LCD?

  12. #8
    kevinomont

    Re : Programation pic 16F877 en C avec Aff LCD

    Pour afficher j'utilise la fonction "afficheVolt".
    J'utilise
    printf(lcd_putc,"\fReady...\n" ); // On affiche que l'écran est opé : sa sert surtout à débug (voir si l'écran fonctionne (ou pas))
    delay_ms(2000);
    pour voir si cela fonctionne.
    Et mon message est affiché a l'écran.
    Les exemples proviennent de maplab et de "ccs-manual", pdf fourni par mon professeur.

  13. #9
    kevinomont

    Re : Programation pic 16F877 en C avec Aff LCD

    C'est bon!
    Mon problème est résolu!
    En fait cela venait de la partie "électrique" de mon installation...
    Merci pour votre aide!

Discussions similaires

  1. programmer un afficheur lcd avec pic 16f877
    Par zamanu dans le forum Électronique
    Réponses: 5
    Dernier message: 08/05/2011, 19h49
  2. coseils programation pic 16F877
    Par mondir dans le forum Électronique
    Réponses: 4
    Dernier message: 28/02/2008, 06h54
  3. Driver LCD 2*16 avec PIC 16F877
    Par misstik dans le forum Électronique
    Réponses: 2
    Dernier message: 20/07/2007, 22h54
  4. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  5. Pic 16f877 + Lcd (m6222 + Lc7930 )
    Par Toufinet dans le forum Électronique
    Réponses: 1
    Dernier message: 23/05/2006, 01h27
Découvrez nos comparatifs produits sur l'informatique et les technologies.