carte "I2C PWM Driver" : programmation et test du câblage

Carte pilote en Pwm sur bus I2C

carte "I2C PWM Driver" : programmation et test du câblage

Message non lude Francois » Sam 5 Mar 2011 22:36

Bonjour,
Ayant passé plusieurs heures :cry: à faire le lien entre la programmation I2C et les sorties de la carte "I2C PWM Driver", je vous propose ici une explication que j'espère suffisamment simple ;) dans le programme de test (que je joins à ce message) pour l'Arduino équipé de "l'I2C Power Protoshild".
Cordialement
Fichiers joints
Programme_test_I2C_PWM_Driver.zip
(1.47 Kio) Téléchargé 205 fois
Francois
 
Messages: 3
Inscription: Dim 30 Jan 2011 16:31

Re: carte "I2C PWM Driver" : programmation et test du câblag

Message non lude Lionel » Lun 7 Mar 2011 21:16

Bonjour,

merci pour ta contribution fort bien commentée !!

je le mets en dessous en quote

Code: Tout sélectionner

// programme de test des cartes "I2C PWM Driver"
// pour Arduino équipé de "l'IC Power Protoshield"


// Voici la numérotation des sorties de la carte "I2C PWM Driver" :
// et les registres de programmation correspondants (pour chaque colonne):

//            ----------------------------        -----------------------
//      N°:  19     17    15    13    11     9    7     5     3     1     
//      N°:  20     18    16    14    12    10    8     6     4     2
//registre:        0x13  0x12  0x11  0x10        0x17  0x16  0x15  0x14

// les broches 9 et 19 sont à la masse (0V)
// les broches 10 et 20 délivrent + 5V

// Après réglage du Setup (voir "void Setup" ci-dessous),
// Une commande en sortie d'intensité variable sur une des broches (1 à 8, 11 à 18)
// se programme avec le code :

// Wire.beginTransmission(address);
//   Wire.send( reg);
//   Wire.send( data);
// Wire.endTransmission();

// où "reg" est l'adresse en hexa du registre (colonne dans le tableau ci-dessus) ,
// par exemple "0x11" si on veut commander la sortie 13
// et où "data" indique avec deux chiffres en hexa, l'intensité que l'on veut délivrer sur chacune des deux broches du registre (0 pour le maxi à f pour le minimum),
// la place de ces deux chiffres correspond aux numéros de broches croissants de droite à gauche.
// par exemple : un data "0xf0" commandé sur le registre "0x11" donnera l'intensité maxi sur la broche 13 et l'intensité mini sur la broche 14.
//          ou : un data "0x0f" commandé sur le registre "0x11" donnera l'intensité mini sur la broche 13 et l'intensité maxi sur la broche 14.



#include <Wire.h>

void SendToMax(byte address, byte reg, byte data);
byte Max7313_Address = 0x10;  // la valeur de la variable "Max7313_Address" est celle qui a été choisie en plaçant les 3 ponts de soudure sur la carte "I2C PWM Driver".
int intensity = 0xff;
int tempo1 = 100;
int tempo2 = 2000;


void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
  Serial.begin(9600);
  SendToMax(Max7313_Address, 0x0f, 0x10); // blink disable, gl int. dis.
  SendToMax(Max7313_Address, 0x06, 0x00); // config P7-P0 out
  SendToMax(Max7313_Address, 0x07, 0x00); // config P15-P8 out
  SendToMax(Max7313_Address, 0x02, 0xff); // global intensity reg.
  SendToMax(Max7313_Address, 0x03, 0xff);
  SendToMax(Max7313_Address, 0x0e, 0xff); // config bit
}


void SendToMax(byte address, byte reg, byte data){   // fonction pour commander une sortie sur les deux broches d'un registre
  Wire.beginTransmission(address);
  Wire.send( reg);
  Wire.send( data);
  Wire.endTransmission();
}

void toutEteindre() {                               // fonction pour éteindre toutes les sorties
   SendToMax(Max7313_Address, 0x10, 0xff);
    SendToMax(Max7313_Address, 0x11, 0xff);
     SendToMax(Max7313_Address, 0x12, 0xff);
      SendToMax(Max7313_Address, 0x13, 0xff);
       SendToMax(Max7313_Address, 0x14, 0xff);
        SendToMax(Max7313_Address, 0x15, 0xff);
         SendToMax(Max7313_Address, 0x16, 0xff);
          SendToMax(Max7313_Address, 0x17, 0xff);
}

void loop() {                                         // boucle principale du programme : clignotement successif des sorties
  toutEteindre();
  delay (tempo1);
  SendToMax(Max7313_Address, 0x14, 0xf0);  // test de la broche 1
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x14, 0x0f);  // test de la broche 2
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);     
  SendToMax(Max7313_Address, 0x15, 0xf0);  // test de la broche 3
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x15, 0x0f);  // test de la broche 4 
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x16, 0xf0);  // test de la broche 5
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x16, 0x0f);  // test de la broche 6
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x17, 0xf0);  // test de la broche 7
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x17, 0x0f);  // test de la broche 8   
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x10, 0xf0);  // test de la broche 11
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x10, 0x0f);  // test de la broche 12
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x11, 0xf0);  // test de la broche 13
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x11, 0x0f);  // test de la broche 14   
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x12, 0xf0);  // test de la broche 15
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x12, 0x0f);  // test de la broche 16
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x13, 0xf0);  // test de la broche 17
  delay (tempo2);   
  toutEteindre();
  delay (tempo1);   
  SendToMax(Max7313_Address, 0x13, 0x0f);  // test de la broche 18   
  delay (tempo2);
}




Lionel
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: carte "I2C PWM Driver" : programmation et test du câblag

Message non lude raphdasouth » Lun 14 Mar 2011 21:11

Salut la team,

Est-ce que vous fournissez une librairie Matrix avec votre I2 PWM driver comme il en existe pour le MAX7219 LED matrix controller?
raphdasouth
 
Messages: 4
Inscription: Lun 14 Mar 2011 21:07
Localisation: Var

Re: carte "I2C PWM Driver" : programmation et test du câblag

Message non lude Lionel » Lun 14 Mar 2011 21:31

Bonjour,

nous avons ça dans nos projets, mais ce n'est pas encore prêt,

Pour l'instant nous pouvons fournir aux intéressés quelques exemples de code genre "je prends ce qui arrive sur le port série de l'arduino" (par processing, code dispo aussi) je le traite avec l'arduino (code diso) et je l'envoie aux cartes I2C PWM drivers

ça permet ce genre d'installation :)



Sinon la librairie pour le 7219 est elle pratique ?

Lionel
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: carte "I2C PWM Driver" : programmation et test du câblag

Message non lude raphdasouth » Lun 14 Mar 2011 21:46

Ouais franchement j'ai bien kiffé votre projet Ledpong !

Ca me donne des idées pour faire un cadre décoratif sympa pour mon futur salon :D


Je débute en µcontroleur mais c'est vrai que le concept arduino me convient bien car programmer devient plus accessible 8-)

Je n'ai pas encore testé, et la libraire Matrix me semble succinte mais suffisante pour animer un LED matrix display :

write(): Write data to the display.
clear(): Clears the display screen.
setBrightness(): Set the brighness of the screen.

From http://wiring.org.co/reference/libraries/Matrix/index.html

Comment gérez-vous les algos d'animation des LED ?
Vous ne codez quand même tous les états de toutes les leds par unité de temps ?!!
raphdasouth
 
Messages: 4
Inscription: Lun 14 Mar 2011 21:07
Localisation: Var

Re: carte "I2C PWM Driver" : programmation et test du câblag

Message non lude Lionel » Lun 14 Mar 2011 22:08

raphdasouth a écrit:(...)
Comment gérez-vous les algos d'animation des LED ?
Vous ne codez quand même tous les états de toutes les leds par unité de temps ?!!


Euuh ben si, on envoie toutes les colonnes pour l'instant

On va se pencher sur la librairie existante pour le 7219 et voir ce qu'on peux en extraire.

On postera l'avancée de nos travaux dès qu'on a une version dispo
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: carte "I2C PWM Driver" : programmation et test du câblag

Message non lude raphdasouth » Lun 14 Mar 2011 22:20

Bon dès que j'ai un peu avancé je passe commande de votre Power screwshield + I2Cdriver ;)
raphdasouth
 
Messages: 4
Inscription: Lun 14 Mar 2011 21:07
Localisation: Var


Retourner vers Driver I2C Pwm

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron