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

aide programmation température pic16f877



  1. #1
    user1234

    aide programmation température pic16f877


    ------

    bonjour,
    je suis en possession d'une carte pic16f877 et je travaille avec mplab icd 2 et cc5x, et j' n'arrive pas a afficher sur l'ecran digitale la température (grace a la sonde TC74)... je dois utiliser le bus i2c... mais je n'en sors pas problème de librairie introuvable,...
    toute suggestion est bienvenue!!!
    merci d'avance!!!
    matth

    -----

  2. Publicité
  3. #2
    RISC

    Re : aide programmation température pic16f877

    Bonsoir,

    Utilises-tu une carte standard ou ta propre carte ?
    (Je pose la question car la carte PICDEM2+ de Microchip semble posseder des composants proches des tiens et tu pourrais donc eventuellement trouver des fichiers sources voir meme un projet sous MPLAB.... :

    http://www.microchip.com/stellent/id...&part=DM163022

    Peux-tu nous ecrire le message precis que tu vois ?

  4. #3
    user1234

    Re : aide programmation température pic16f877

    bjr,
    il s'agit d'une carte standard exactement la meme que sur ton lien. j'essaie de réutiliser des codes mais il en existe peu ecrit sous cc5x... et quand c'est le cas j'ai des problèmes au niveau des librairies. Dans CC5X je recherche une librairie qui contient l'ensemble des fonctions permettant de pouvoir controler le bus I2C.
    Lorsque je compile, CC5X me répond qu il ne connait pas les fontions.
    En fait j'ai l'impression de mélanger avec différents compilateurs et mon programme a quelque difficulté à s'exécuter avec CC5X.
    merci

  5. #4
    user1234

    Re : aide programmation température pic16f877

    bjr,
    voila notre code... toute aide est la bienvenue!!!

    /*
    IIC BUS INTERFACE:

    Code size for one read and one write to IIC device:

    8 MHz clock : 110 instructions
    4 MHz clock : 91 instructions
    2 MHz clock : 82 instructions
    500 kHz clock : 76 instructions

    Use of macros are recommended. This module use
    subroutines in one level. New macros may be
    constructed in a similar way.

    Delay syntax:
    delay_4us_m3 : insert a 4 microseconds delay, but subtract the
    time to execute 3 instruction cycles

    1 instruction cycle = 4 clock cycles = 1 microsecond at 4 MHz
    */


    #ifndef WRITE_sda

    #define TEST_IIC

    /* these should be user defined */

    #define Clock_8MHz

    #pragma bit scl_IIC @ PORTA.1
    #pragma bit sda_IIC @ PORTA.0

    #define WRITE_sda() TRISA = 0xFE
    #define READ_sda() TRISA = 0xFF

    #define IIC_address_RW_0 0xa2
    #define IIC_address_RW_1 0xa3

    char IIC_byte;
    bit IIC_error, master_ack;

    #endif

    #ifdef Clock_8MHz
    #define delay_(kn) { char x; x=kn; do x--; while (x>0); }
    #define delay_4us_m1 delay_( 2)
    #define delay_4us_m3 nop();nop();nop();nop();nop();
    #define delay_4us_m6 nop(); nop();
    #define delay_4us_m7 nop();
    #define delay_4us_m8
    #define delay_5us_m1 delay_( 3)
    #define delay_5us_m2 delay_( 3)
    #define delay_5us_m5 nop();nop();nop();nop();nop();
    #define delay_5us_m7 nop();nop();nop();
    #define delay_5us_m10
    #define delay_0us_m1
    #endif

    #ifdef Clock_4MHz
    #define delay_4us_m1 nop();nop();nop();
    #define delay_4us_m3 nop();
    #define delay_4us_m6
    #define delay_4us_m7
    #define delay_4us_m8
    #define delay_5us_m1 nop();nop();nop();nop();
    #define delay_5us_m2 nop();nop();nop();
    #define delay_5us_m5
    #define delay_5us_m7
    #define delay_5us_m10
    #define delay_0us_m1
    #endif

    #ifdef Clock_2MHz
    #define delay_4us_m1 nop();
    #define delay_4us_m3
    #define delay_4us_m6
    #define delay_4us_m7
    #define delay_4us_m8
    #define delay_5us_m1 nop();nop();
    #define delay_5us_m2 nop();
    #define delay_5us_m5
    #define delay_5us_m7
    #define delay_5us_m10
    #define delay_0us_m1
    #endif

    #ifdef Clock_500kHz
    #define delay_4us_m1
    #define delay_4us_m3
    #define delay_4us_m6
    #define delay_4us_m7
    #define delay_4us_m8
    #define delay_5us_m1
    #define delay_5us_m2
    #define delay_5us_m5
    #define delay_5us_m7
    #define delay_5us_m10
    #define delay_0us_m1
    #endif


    void startIICcomm( void)
    /* assuming sda_IIC = 1 and scl_IIC = 1 */
    {
    WRITE_sda();
    sda_IIC = 0;
    delay_5us_m10
    }


    void stopIICcomm( void)
    {
    scl_IIC = 0;
    WRITE_sda();
    sda_IIC = 0;
    delay_5us_m1
    scl_IIC = 1;
    delay_4us_m1
    sda_IIC = 1;
    delay_4us_m6
    }


    void readIICbus( void)
    /* reads one byte from IIC slave device */
    {
    char counter;

    scl_IIC = 0;
    READ_sda();
    counter = 8;
    do {
    scl_IIC = 0;
    delay_5us_m1
    scl_IIC = 1;
    delay_4us_m7
    Carry = sda_IIC;
    IIC_byte = rl( IIC_byte);
    } while ( -- counter > 0);

    scl_IIC = 0;
    WRITE_sda();
    sda_IIC = master_ack;
    delay_5us_m7
    scl_IIC = 1;
    delay_4us_m6
    }


    void sendIICbyte( char W)
    /* writes one byte to IIC slave device */
    {
    char counter;

    IIC_byte = W;
    WRITE_sda();
    counter = 8;

    do {
    IIC_byte = rl( IIC_byte);
    scl_IIC = 0;
    delay_5us_m5
    sda_IIC = Carry;
    delay_0us_m1 /* minimum 250 nanosec. */
    scl_IIC = 1;
    delay_4us_m3
    } while ( -- counter > 0);

    /* read ack. */

    scl_IIC = 0;
    READ_sda();
    delay_5us_m2
    scl_IIC = 1;
    if ( sda_IIC)
    IIC_error = 1;
    delay_4us_m8
    }


    #define readByteFromIIC( address, variable) \
    startIICcomm(); \
    sendIICbyte( IIC_address_RW_0); \
    sendIICbyte( address); \
    stopIICcomm(); \
    \
    startIICcomm(); \
    sendIICbyte( IIC_address_RW_1); \
    \
    /* more bytes to read .. \
    master_ack = 0; \
    readIICbus(); */ \
    \
    master_ack = 1; \
    readIICbus(); \
    stopIICcomm(); \
    variable = IIC_byte


    #define writeByteToIIC( address, IIC_data) \
    startIICcomm(); \
    sendIICbyte( IIC_address_RW_0); \
    sendIICbyte( address); \
    \
    sendIICbyte( IIC_data); \
    /* + more bytes to send \
    sendIICbyte( .. ); */ \
    \
    stopIICcomm();

    /* NOTE: EEPROM's require a delay between each
    (block) write to the IIC device */


    #ifdef TEST_IIC
    void main( void)
    {
    char x;
    //writeByteToIIC( 1, 100);

    readByteFromIIC( 0x9A, x); /*C est Ici qu on voudrait pouvoir capter la temperature a partir
    /*de l'adresse de la sonde sur le bus I2C


    }
    #endif

  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 :

Discussions similaires

  1. aide en programmation en c
    Par j---b dans le forum Électronique
    Réponses: 0
    Dernier message: 12/06/2007, 16h45
  2. aide programmation python
    Par Elek dans le forum Logiciel - Software - Open Source
    Réponses: 30
    Dernier message: 10/06/2006, 12h58
  3. aide petit programme PIC16F877
    Par solid_sneak06 dans le forum Électronique
    Réponses: 12
    Dernier message: 26/04/2006, 20h18
  4. Aide à la programmation des PIC
    Par alainav1 dans le forum Électronique
    Réponses: 0
    Dernier message: 06/07/2005, 17h36
  5. Aide pour programmation VBA
    Par knecmotet dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/07/2004, 22h55
Découvrez nos comparatifs produits sur l'informatique et les technologies.