Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,



  1. #1
    invite489d7312

    Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,


    ------

    Bonjour tout le monde.

    Mon problème est que je dois afficher l'heure et la date sur un afficheur LCD.



    Je fais plusieurs recherches sur le net et je tombe sur:

    http://digital-diy.com/mplab-c18/60....comment_id=196

    Quand je compile avec C18, je trouve une erreur à la fois, car le compilo n'est pas le même, donc c'est pour savoir si ya pas moyen de convertir un programme mikroC en C18.

    Et aussi si vous voulez voir mon autre programme, dites le moi.
    Merci

    -----

  2. #2
    invite6ebdb2cf

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Bonsoir,

    tu peut telecharger le compilateur PICC de la societé CCS, il est accommpagné par plusieurs drivers, l'important pour toi est le driver d'afficheur lcd et le driver du calendrier DS1302 :

    #include<lcd.c>
    #include<ds1302.c>

    Tu peut trouver tous les fonctions des deux drivers dans les fichiers lui meme.

  3. #3
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Citation Envoyé par badrbo Voir le message
    Bonsoir,

    tu peut telecharger le compilateur PICC de la societé CCS, il est accommpagné par plusieurs drivers, l'important pour toi est le driver d'afficheur lcd et le driver du calendrier DS1302 :

    #include<lcd.c>
    #include<ds1302.c>

    Tu peut trouver tous les fonctions des deux drivers dans les fichiers lui meme.
    Merci pour ta réponse mais j'ai déjà un compilateur où j'ai lcd.h et ds1307.h

  4. #4
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Salut les mecs, ma compilation a réussis, il n'affiche aucune erreurs mais y a rien qui s'affiche sur le LCD. Si vous pouviez m'aider, ce serait gentille.





    #include <p18f452.h>
    #include <delays.h>
    #include <stdio.h>
    #include <i2c.h>
    #include <xlcd.h>



    #pragma config WDT =OFF

    int octetrecu1;
    int octetrecu2;
    int octetrecu3;
    int octetrecu4;
    int octetrecu5;
    int octetrecu6;
    int octetrecu7;
    int octetrecu8;













    /////////////////////////////////////////////////////////////
    // PROTOTYPE //
    /////////////////////////////////////////////////////////////

    void ack(void);
    void init_I2C(void);
    void read_trameI2C(int *octet1, int *octet2, int *octet3, int *octet4,int *octet5, int *octet6, int *octet7, int *octet8);
    void tempo(unsigned int count);
    unsigned int SWReadI2C( void );
    void SetPosition(unsigned char x, unsigned char y);
    void SetDDRamAddr(PARAM_SCLASS unsigned char);














    /////////////////////////////////////////////////////////////
    // read_tram_i2c(); //
    /////////////////////////////////////////////////////////////

    void read_trameI2C(int *octet1, int *octet2, int *octet3, int *octet4,int *octet5, int *octet6, int *octet7, int *octet8)
    {
    *octet1 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet2 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet3 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet4 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet5 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet6 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet7 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet8 = ReadI2C();
    }















    ////////////////////////////////////////////////////////////////////////
    // TEST ACK //
    ////////////////////////////////////////////////////////////////////////

    void ack(void)
    {
    IdleI2C();
    while (SSPCON2bits.ACKSTAT);
    }

















    ////////////////////////////////////////////////////////////////////////
    // TEMPO //
    ////////////////////////////////////////////////////////////////////////

    void tempo(unsigned int compte)
    {
    while (compte--);
    }













    /////////////////////////////////////////////////////////////
    // INITIALISATION I2C //
    /////////////////////////////////////////////////////////////

    void init_I2C(void)
    {
    DDRCbits.RC3=1;
    DDRCbits.RC4=1;
    SSPCON1=0x28;

    SSPSTATbits.SMP=1;

    SSPADD=9;
    }
















    /////////////////////////////////////////////////////////////
    // Fonction Principale //
    /////////////////////////////////////////////////////////////

    void main(void)
    {

    int Valeur = 1;
    //InitLCD();
    stdout = _H_USER;

    init_I2C();
    IdleI2C();

    StartI2C();
    while (SSPCON2bits.RSEN);

    WriteI2C(0xD0);
    ack();

    WriteI2C(0x00);
    ack();

    WriteI2C(0x00);
    ack();

    WriteI2C(0x01);
    ack();

    WriteI2C(0x00);
    ack();

    WriteI2C(0x02);
    ack();

    WriteI2C(0x51);
    ack();

    WriteI2C(0x03);
    ack();

    WriteI2C(0x03);
    ack();

    WriteI2C(0x04);
    ack();

    WriteI2C(0x11);
    ack();

    WriteI2C(0x05);
    ack();

    WriteI2C(0x03);
    ack();

    WriteI2C(0x06);
    ack();

    WriteI2C(0x09);
    ack();

    WriteI2C(0x07);
    ack();

    WriteI2C(0x03);
    ack();

    StopI2C();

    while (SSPCON2bits.PEN);

    tempo(60000);

    IdleI2C();

    StartI2C();

    while (SSPCON2bits.RSEN);

    WriteI2C(0xD1);
    ack();

















    ////////////////////////////////////////////////////////////////////////
    // lecture de la trame I2C //
    ////////////////////////////////////////////////////////////////////////

    read_trameI2C(&octetrecu1, &octetrecu2, &octetrecu3, &octetrecu4, &octetrecu5, &octetrecu6, &octetrecu7, &octetrecu8);



















    ////////////////////////////////////////////////////////////////////////
    // CLOTURATION I2C //
    ////////////////////////////////////////////////////////////////////////

    NotAckI2C(); // transmet l'acquittement du maître
    while (SSPCON2bits.ACKEN); // attend fin de l'acquittement

    StopI2C(); // initialise une stop-condition

    while (SSPCON2bits.PEN); // attend fin de stop-condition
    printf("=%X", octetrecu1);
    printf("=%X", octetrecu2);
    printf("=%X", octetrecu3);
    printf("=%X", octetrecu4);
    printf("=%X", octetrecu5);

    SetPosition(0,1);

    printf("=%X", octetrecu6);
    printf("=%X", octetrecu7);
    printf("=%X", octetrecu8);
    while(1); // boucle infinie
    }

    void SetPosition(unsigned char x, unsigned char y)
    {
    if (y) SetDDRamAddr(0x40+x);
    else SetDDRamAddr(x);
    }

    void DelayFor18TCY(void)
    {
    Delay10TCYx(2);
    }
    void DelayPORXLCD(void)
    {
    Delay1KTCYx(15); //Delai de 15 ms
    }
    void DelayXLCD(void)
    {
    Delay1KTCYx(20); //Delai de 20 ms
    }

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

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Bonjour,

    essay tout d'abord d'afficher quelque chose de constant sur ton afficheur LCD (comme etant t'a pas un circuit calendrier) et ensuite ajoute ton calendrier

    je voi que tu commente la fonction d'initialisation d'afficheur LCD, normallement l'afficheur ne peut pas fonctionner comme ça !

    int Valeur = 1;
    //InitLCD();
    stdout = _H_USER;

  7. #6
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Citation Envoyé par badrbo Voir le message
    Bonjour,

    essay tout d'abord d'afficher quelque chose de constant sur ton afficheur LCD (comme etant t'a pas un circuit calendrier) et ensuite ajoute ton calendrier

    je voi que tu commente la fonction d'initialisation d'afficheur LCD, normallement l'afficheur ne peut pas fonctionner comme ça !
    Je sais mais si je ne le mets pas en commentaire, j'ai une erreur selon mon compilateur.

    Mais j'ai ça aussi:

    #include <xlcd.h>
    int _user_putc (char c)
    {
    putcXLCD(c);

    }
    que j'ai ajouté dans un autre fichier.

  8. #7
    invite6ebdb2cf

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    regarde, pour les afficheur a base du hd44780, et tout autre types d'afficheurs a controlleur intégré, tu doit respecter les chrono et les trames des donnée/commande sinon il va pas marcher ok,

    tu est sure que ton modif a résolu le probleme pour l'affichage, t'a déja afficher quelque chose avec ton code ??

  9. #8
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    mon compilateur me dit aucune erreur, même en enlevant les "//" devant "InitLCD();" car j'ai oublié de mettre une variable.

    Mais même ça ne s'affiche pas.

  10. #9
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    je me suis trompé:

    j'ai ajouté:


    void main(void)
    {

    int Valeur = 1;
    //InitLCD();
    stdout = _H_USER;
    OpenXLCD(FOUR_BIT & LINES_5X7); //la librairie XLCD du C

    init_I2C();
    IdleI2C();

  11. #10
    invite7a49d0d5

    Cool Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Citation Envoyé par nasserarien Voir le message
    mon compilateur me dit aucune erreur, même en enlevant les "//" devant "InitLCD();" car j'ai oublié de mettre une variable.

    Mais même ça ne s'affiche pas.
    Bonjour,

    donc il FAUT commencer par afficher "Bonjour Nasserien" sur le LCD...
    et supprimer tout le reste du code (IIC...) avant de tenter d'aller plus loin...

    vede
    ;O]

  12. #11
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Salut vede, j'ai déjà réussis à afficher bonjour et là j'avance.

  13. #12
    invite6ebdb2cf

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Bonjour,

    tu doit maintenant afficher un message stocké dans une variable, car ton calendrier va te donner quelque chose de variable, et puis tu peut afficher les données qui vients de ton calendrier

  14. #13
    invite489d7312

    Re : Programme à convertir de ... à C18, ds1307, 18f6627 or 18f452,

    Voici mon dernier programme modifié mais rien s'affiche, je suppose que j'ai mal alimenté le lcd:

    #include <p18f452.h>
    #include <delays.h>
    #include <stdio.h>
    #include <i2c.h>
    #include <xlcd.h>




    #pragma config WDT =OFF

    int octetrecu1;
    int octetrecu2;
    int octetrecu3;
    int octetrecu4;
    int octetrecu5;
    int octetrecu6;
    int octetrecu7;
    int octetrecu8;














    /////////////////////////////////////////////////////////////
    // PROTOTYPE //
    /////////////////////////////////////////////////////////////

    void ack(void);
    void init_I2C(void);
    void read_trameI2C(int *octet1, int *octet2, int *octet3, int *octet4,int *octet5, int *octet6, int *octet7, int *octet8);
    void tempo(unsigned int count);
    unsigned int SWReadI2C( void );
    void SetPosition(unsigned char x, unsigned char y);
    void SetDDRamAddr(PARAM_SCLASS unsigned char);














    /////////////////////////////////////////////////////////////
    // read_tram_i2c(); //
    /////////////////////////////////////////////////////////////

    void read_trameI2C(int *octet1, int *octet2, int *octet3, int *octet4,int *octet5, int *octet6, int *octet7, int *octet8)
    {
    *octet1 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet2 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet3 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet4 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet5 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet6 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet7 = ReadI2C();
    SSPCON2bits.ACKEN = 1;
    ack();
    *octet8 = ReadI2C();
    }















    ////////////////////////////////////////////////////////////////////////
    // TEST ACK //
    ////////////////////////////////////////////////////////////////////////

    void ack(void)
    {
    IdleI2C();
    while (SSPCON2bits.ACKSTAT);
    }

















    ////////////////////////////////////////////////////////////////////////
    // TEMPO //
    ////////////////////////////////////////////////////////////////////////

    void tempo(unsigned int compte)
    {
    while (compte--);
    }













    /////////////////////////////////////////////////////////////
    // INITIALISATION I2C //
    /////////////////////////////////////////////////////////////

    void init_I2C(void)
    {
    DDRCbits.RC3=1;
    DDRCbits.RC4=1;
    SSPCON1=0x28;

    SSPSTATbits.SMP=1;

    SSPADD=9;
    }
















    /////////////////////////////////////////////////////////////
    // Fonction Principale //
    /////////////////////////////////////////////////////////////

    void main(void)
    {




    int Valeur = 1;
    //InitLCD();
    stdout = _H_USER;
    OpenXLCD(FOUR_BIT & LINES_5X7); //la librairie XLCD du C

    init_I2C();
    IdleI2C();

    StartI2C();
    while (SSPCON2bits.RSEN);

    WriteI2C(0xD0);
    ack();

    WriteI2C(0x00);
    ack();

    WriteI2C(0x00);
    ack();

    WriteI2C(0x01);
    ack();

    WriteI2C(0x00);
    ack();

    WriteI2C(0x02);
    ack();

    WriteI2C(0x51);
    ack();

    WriteI2C(0x03);
    ack();

    WriteI2C(0x03);
    ack();

    WriteI2C(0x04);
    ack();

    WriteI2C(0x11);
    ack();

    WriteI2C(0x05);
    ack();

    WriteI2C(0x03);
    ack();

    WriteI2C(0x06);
    ack();

    WriteI2C(0x09);
    ack();

    WriteI2C(0x07);
    ack();

    WriteI2C(0x03);
    ack();

    StopI2C();

    while (SSPCON2bits.PEN);

    tempo(60000);

    IdleI2C();

    StartI2C();

    while (SSPCON2bits.RSEN);

    WriteI2C(0xD1);
    ack();














    ////////////////////////////////////////////////////////////////////////
    // lecture de la trame I2C //
    ////////////////////////////////////////////////////////////////////////

    read_trameI2C(&octetrecu1, &octetrecu2, &octetrecu3, &octetrecu4, &octetrecu5, &octetrecu6, &octetrecu7, &octetrecu8);



















    ////////////////////////////////////////////////////////////////////////
    // CLOTURATION I2C //
    ////////////////////////////////////////////////////////////////////////

    NotAckI2C(); // transmet l'acquittement du maître
    while (SSPCON2bits.ACKEN); // attend fin de l'acquittement

    StopI2C(); // initialise une stop-condition


    while (SSPCON2bits.PEN); // attend fin de stop-condition





    printf("=%X", octetrecu1);
    printf("=%X", octetrecu2);
    printf("=%X", octetrecu3);
    printf("=%X", octetrecu4);
    printf("=%X", octetrecu5);

    SetPosition(0,1);

    printf("=%X", octetrecu6);
    printf("=%X", octetrecu7);
    printf("=%X", octetrecu8);
    while(1); // boucle infinie
    }

    void SetPosition(unsigned char x, unsigned char y)
    {
    if (y) SetDDRamAddr(0x40+x);
    else SetDDRamAddr(x);
    }

    void DelayFor18TCY(void)
    {
    Delay10TCYx(2);
    }
    void DelayPORXLCD(void)
    {
    Delay1KTCYx(15); //Delai de 15 ms
    }
    void DelayXLCD(void)
    {
    Delay1KTCYx(20); //Delai de 20 ms
    }

Discussions similaires

  1. Convertir un programme en C en ASM
    Par inviteeddea82a dans le forum Électronique
    Réponses: 6
    Dernier message: 17/04/2012, 17h43
  2. Horloge ds1307
    Par inviteb5437249 dans le forum Électronique
    Réponses: 44
    Dernier message: 24/05/2011, 08h51
  3. Programmer un DS1307 avec un 18f6627
    Par invite489d7312 dans le forum Électronique
    Réponses: 101
    Dernier message: 21/03/2010, 14h11
  4. Ds1307
    Par invite369c4784 dans le forum Électronique
    Réponses: 2
    Dernier message: 11/02/2007, 21h18
  5. Programme pour convertir du .mid (et pour les prolonger) ?
    Par shokin dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 21/04/2006, 23h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...