Go Down

Topic: ez expander : mettre un programme (Read 5105 times) previous topic - next topic

costiflex

May 29, 2013, 06:44 pm Last Edit: May 30, 2013, 10:05 am by costiflex Reason: 1
Bonjour à tous,

j'ai acheté un ez-expander ( http://www.robotshop.com/blindage-ez-expander.html )
afin d'augmenter le nombre de sorties de mon arduino uno.

je voudrais donc savoir comment faire pour "étendre" le programme qui est dans mon arduino dans les nouvelles sorties (du expander).

voici le programme (il fonctionne) dans mon arduino :

Code: [Select]

int led[10] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // Assign the pins for the leds
int leftChannel = 0;  // left channel input
int left, i;

void setup()
{
for (i = 0; i < 10; i++)  // Tell the arduino that the leds are digital outputs
 pinMode(led[i], OUTPUT);
//  Serial.begin(9600); // Uncomment to enable troubleshooting over serial.
}

void loop()
{
left = analogRead(leftChannel);  // read the left channel
// Serial.println(left);  // uncomment to check the raw input.
left = left / 50;    // adjusts the sensitivity  
//  Serial.println(left);  // uncomment to check the modified input.
// left = 1500;  // uncomment to test all leds light.
// left = 0;    // uncomment to check the leds are not lit when the input is 0.

 if (left == 0)  // si le volume = 0 then éteindre ttes les leds
  {
  for(i = 0; i < 10; i++)
    {
    digitalWrite(led[i], LOW);
    }
 }
 
 else
 {
  for (i = 0; i < left; i++) // allume les leds en fonction du niveau du volume
   {
    digitalWrite(led[i], HIGH);
   }
   
   for(i = i; i < 10; i++)  // éteind les leds en fonction du niveau de voltage
    {
     digitalWrite(led[i], LOW);
    }
 }
}



Suffit il d'ajouter le numero des nouvelles sorties au programme,
faut il programmer le expander (si oui, comment) ?


Merci d avance pour vos réponses.

si vous avez des questions, je suis à vous

bonne soirée.

costiflex

ce site peut guider, mais j avoue ne pas avoir tt compris

http://nootropicdesign.com/ez-expander/

68tjs

Franchement le mieux est que tu commence par comprendre comment fonctionne un registre à décalage (shift register).
Un site pris au hasard  http://www.premiumorange.com/daniel.robert9/Digit/Digit_8T.html
Trois points à comprendre :
- Le role de l'horloge
- Qu'est ce qu'on met sur l'entrée donnée
- Le role du verrou (latch)
Une fois compris le fonctionnement d'un registre isolé c'est simple d'étendre le raisonnement à des registres chaînés (daisy chain) puisque sur ta carte tu en a deux.

Ensuite regarde du coté de la fonction arduino "shiftout()".

Et pour la suite c'est à toi de constituer les deux octets que tu enverra sur les registres en fonction de ce que tu veux faire.

68tjs

Un site encore meilleurs et adapté Arduino 74HC595
http://blog.matael.org/writing/arduino-et-registres/

costiflex

Bonjour 68tjs,

merci pour ta réponse.

je débute en programmation donc je ne maîtrise pas trop arduino et son langage.

je vais essayer de comprendre en effet les décalages, horloges ...


si vous avez d autres remarques à faire, n hésitez pas ;p

haifger

Indépendamment du code, il y a un autre paramètre à prendre en compte : ces registres sont spécifiés pour un courant max par broche de +/- 6mA, c'est nettement moins que les broches de l'avr, il sera donc peut-être nécessaire de revoir la valeur des résistances associées aux leds.

costiflex

j'ai des resistances de 390 ohms

j'ai pu mettre environs 10 leds en derivation à chaque sorties du arduino.

faut il diminuer les valeurs des resistances aux sorties de l'expander ?
a voir

68tjs

Quote
j'ai pu mettre environs 10 leds en derivation à chaque sorties du arduino.

Tu es sur de ce que tu annonce ?
Une led  consomme au moins 10mA donc 100mA par sortie C'est bien cela ?
Le micro-controleur supporte :
40mA par sortie en usage exeptionnel et sur un temps limité
Le fournisseur Atmel ne garanti que 20 mA en usage permanent.

costiflex

ce que je fais est un vu metre

donc les diodes ne sont pas allumée en permanence

mtn j ai un doute sur mon message précédent mais ce dont je suis sur c'est que 60 leds sur la meme sortie ca fonctionne

costiflex

#9
May 29, 2013, 08:47 pm Last Edit: May 30, 2013, 10:05 am by costiflex Reason: 1
j'ai bien pris en compte vos remarques et je continue à étudier les registres et décalage...

j ai juste une question :

est ce qu il est possible d'inclure un programme du genre : (je l ai trouvé dans le lien de mon 2° mess )
Code: [Select]

#include <EZExpander.h>

// Create an EZExpander object
EZExpander expander = EZExpander();

void setup() {
}

void loop() {
 for(int i=20;i<=35;i++) {
   expander.digitalWrite(i, HIGH);
 }
 delay(1000);
 for(int i=20;i<=35;i++) {
   expander.digitalWrite(i, LOW);
 }
 delay(1000);
}

au programme du arduino de base ?

mais en mettant le meme programme que j ai mis dans le arduino

en gros, mettre

#include <EZExpander.h>

int led[13] = {20 à 32}; // Assign the pins for the leds
int leftChannel = 0;  // left channel input
int left, i;

void setup()
{
for (i = 0; i < 13; i++)  // Tell the arduino that the leds are digital outputs
 pinMode(led[i], OUTPUT);
//  Serial.begin(9600); // Uncomment to enable troubleshooting over serial.
}


puis le meme void loop que celui du arduino



dsl mes questions sont un peu compliquées ^^ ;p

68tjs

Je ferais la même réponse que pour le topic : "74HC595 newbie perdu"
De plus je ne connais pas la bibliothèque qui accompagne ta carte.
Désolé.

PS : pour le code la charte du forum, que tu n'as pas manqué de lire avant de poster, stipule que le code doit être placé entre balise code -> icône # situé juste avant l'icône pour les citations que tu utiles par erreur.
Merci d'éditer tout tes messages avec l'option "modify".


costiflex

mon montage est le suivant (c'est un vu metre dc les diodes s allument en fonction de la musique) :



je me suis inspiré de ça pour réaliser la partie droite du schema :
https://www.youtube.com/watch?v=GBX_6ucEZ1E

mtn, j aimerai ajouter des sorties grace à 2 74HC595. (partie gauche du schema).
Et là ça fait plusieur semaine que je cherche mais malheureusement je ne maitrise pas assez  arduino.

je pense avoir compris ça : http://www.arduino.cc/en/Tutorial/ShiftOut

mais je n arrive pas à "traduire" ttes ces infos en code.

Merci d'avance pour votre aide

bonne journée et à bientot


68tjs

Ton problème n'a rien à voir avec l'arduino c'est juste de la programmation en C ou C++.

La fonction shiftout() permet d'envoyer un octet dans un registre à décalage.
Si tu as plusieurs registres chaînés (sortie du registre n raccordé sur l'entrée du registre n+1) il faut envoyer autant d'octets que de registres.

Les données sont envoyées en série, c'est à dire  les une après les autres, ce qui fait que pour changer la valeur d'une sortie d'un registre il faut TOUT ré-envoyer c'est à dire autant d'octets qu'il y a de registres chaînés.

Après ce qui y a dans l'octet c'est à toi de le décider.
Pour écrire un octet il y a plusieurs méthodes, pour moi la plus simple est d'écrire le nombre en notation binaire : c'est visuel.
Le registre à 8 sorties Q7 à Q0 pour passer à "1" la sortie Q2 il suffit d'écrire :

uint8_t mot ;
mot= 0b00001000 ;

Après il y a des méthodes plus élaborées qui sont connues sous le nom de "manipulation de bit" où on utilise des fonctions "OU" et "ET" avec des masques. Je te renvoie sur des tutos ou simplement le site du zéro.

costiflex

mais j'ai vraiment du mal avec la programmation.

si qq'un pouvait m aider ça serait génial ; )

Go Up