Horloge RGB – Avancement

J’ai bien avancé le projet d’horloge RGB dont j’avais parlé dans les premiers articles du blog.

C’est une horloge carrée de dimensions 20 x 20cm avec l’affichage de l’heure qui se fera par quatre afficheurs de sept segments composés de leds bleues et de soixante leds RGB.

Voici l’emplacement des LEDs et de leurs résistances :

J’ai déjà réalisé le schéma structurel et le typon. Cette horloge est composée principalement de 146 leds, de 17 CI et de 280 résistances !

La prochaine étape est la fabrication du premier exemplaire, qui je l’espère, ne posera pas trop de problèmes.

Pour tester la luminosité des afficheurs sept segments, j’ai réalisé une carte avec un afficheur aux dimensions réelles :

Je l’ai connecté à ma carte de développement PICKIT3 et ai fait des tests qui ont été concluants.

Taggé , .Lien pour marque-pages : Permaliens.

11 réponses à Horloge RGB – Avancement

  1. Fab dit :

    OUi je suis d’accord, c’est quand la suite le prototype il est ou??
    lol

  2. fred dit :

    Salut beau boulot,

    es ce que tu peut mettre un exemple de code pour le pilotage du pca9685 en c18?

    merci
    @++

    fred

    • Thienou dit :

      Bonjour,

      Merci voici un lien qui m’a beaucoup aidé : PCA9685 driver

      • fred dit :

        Merci pour ta réponse ,

        par contre je ne connais pas du tout le ccs je débute juste sur le C18 et du coup je n’arrive pas a complier ,
        en fait je cherche juste a piloter les voies d’un PCA9685 avec un pic.
        si tu as d’autre exemples qui pourrait m’aider je suis preneur
        merci

        @++

        fred

        • Thienou dit :

          En fait il faut adapter le code d’exemple pour le c18.

          Voici un bout de code que j’ai utilisé pour le sapin de noël :

          //Initialisation
          void Driver_Init(void)
          {
          IdleI2C();
          StartI2C();
          IdleI2C();
          WriteI2C(0x8E);
          IdleI2C();
          WriteI2C(0x00);
          IdleI2C();
          while(SSPCON2bits.ACKSTAT);
          WriteI2C(0x01);
          IdleI2C();
          StopI2C();

          IdleI2C();
          StartI2C();
          IdleI2C();
          WriteI2C(0x8E);
          IdleI2C();
          WriteI2C(0x00);
          IdleI2C();
          while(SSPCON2bits.ACKSTAT);
          WriteI2C(0xA1);
          IdleI2C();
          StopI2C();

          IdleI2C();
          StartI2C();
          IdleI2C();
          WriteI2C(0x8E);
          IdleI2C();
          WriteI2C(0x01);
          IdleI2C();
          while(SSPCON2bits.ACKSTAT);
          WriteI2C(0x10);
          IdleI2C();
          StopI2C();
          }

          //Envoi des données pwm led
          void Driver_Send(int led, int taux)
          {
          int adress_led;
          int pwm;

          if(led == 1)adress_led = 0x06;
          if(led == 2)adress_led = 0x0A;
          if(led == 3)adress_led = 0x0E;
          if(led == 4)adress_led = 0x12;
          if(led == 5)adress_led = 0x16;
          if(led == 6)adress_led = 0x1A;
          if(led == 7)adress_led = 0x1E;
          if(led == 8)adress_led = 0x22;
          if(led == 9)adress_led = 0x26;
          if(led == 10)adress_led = 0x2A;
          if(led == 11)adress_led = 0x2E;
          if(led == 12)adress_led = 0x32;
          if(led == 13)adress_led = 0x36;
          if(led == 14)adress_led = 0x3A;
          if(led == 15)adress_led = 0x3E;

          IdleI2C();
          StartI2C();
          IdleI2C();
          WriteI2C(0x8E);
          IdleI2C();
          WriteI2C(adress_led);
          IdleI2C();
          while(SSPCON2bits.ACKSTAT);

          pwm = taux;
          WriteI2C(0x00);
          WriteI2C(0x00);
          WriteI2C(pwm);
          pwm = taux>>8;
          WriteI2C(pwm);

          IdleI2C();
          StopI2C();
          }

          Il ne faut pas oublié de déclarer les fonctions dans le fichier .h et d’inclure la librairie i2c.h

          Il faut bien regarder la doc du circuit pour comprendre son fonctionnement.

          Voila en espérant t’avoir aidé.

          • fred dit :

            Merci ,
            du coup tu n’utilise pas du tout les fichiers pca9685.h et pca9685_reg.h?

            tu as complètement revu le code

            @++

            fred

          • Thienou dit :

            Oui j’ai refait le code à partir de l’exemple

          • fred dit :

            Bonjour,
            je voudrais être sur d’avoir bien compris
            le programme reste bloqué sur la ligne :
            while(SSPCON2bits.ACKSTAT);
            en fait le pic met ce bit a 1 et c’est le pca9685 qui doit lui retourner un bit0 quand il a reçu la commande pour poursuivre le programme?

            si il ne le met pas a 0 c’est que j’ai un problème de hard? ou alors que l’adresse du module n’est pas bonne?

          • Thienou dit :

            En effet cette ligne permet d’attendre une réponse du PCA9685 (acknowledge).

            Attention si tu est en mode débogueur cette ligne a beaucoup de mal à passer il faut insister plusieurs fois pour que sa passe.

            Il ne faut pas oublié de mettre la bonne adresse du PCA9685 également (sur mon exemple 0x8E).

          • fred dit :

            merci beaucoup ,

            j’avais un probleme sur une piste c’etait donc un probleme de hard

            merci encore pour ton aide

            @++

            fred

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *