Go Down

Topic: Variateur de lumière 8 canaux 230V (Read 11950 times) previous topic - next topic

jeanot1314

Ca y est ça fonctionne!! vraiment efficace ton code, merci bcp!

Profitant d'être sur un forum ou l'on manipule du 220V, quelqu'un aurait une idée de quel genre de boitier peut être utilisé pour protéger tout ça? Y a t'il des sites pour en acheter des sur mesure? Peut on en fabriquer un? Quel genre de fils faut il utiliser?

merci d'avance :)

Tant mieux si tu es satisfait.
Rencontres-tu des soucis ? scintillement par exemple ?
Combien de canaux utilises-tu ?

J'envisage d'optimiser le code à l'avenir.

Pour les boitiers, j'utilise les boitiers Railtec C, sur rail DIN, de chez http://www.okatron.fr. Mes PCB sont conçus pour rentrer pile dedans.

Gromain
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

erlik

Hello

Dans le genre "trucs et astuces pour gagner en perf", tu peux manipuler directement des états des pins en donnant des valeurs (binaires ou hexadécimal) aux variables PORTB PORTC et PORTD. Cela permet de se passer des fonctions  pinMode(pin, mode) et digitalWrite(pin, state). Tu peux faire commuter plusieurs pins en même temps, et grandement gagner en poids et perfs sur le programme compiler.
C'est, je pense, très efficace pour des programmes comme le tient, où il faut définir ou commuter un grand nombre de sorties.
De plus, on peut l'utiliser en complément des fonctions classiques des librairies arduino.

Un petit exemple, pour mieux comprendre, avec ton setup.
Supposons que tu as 6 canaux sur le port B (pins 8 à 13).
( J'utilise exprès 6 canaux au lieu de tes 8 car cela est plus facile a manipuler pour mes exemples. )
Donc, dans ton setup, tu as une boucle for pour sélectionner chaque pin, et définir son statut et son état. Avec la manipulation des ports, ça prend 2 lignes, et cela devrait éliminer le "flash" des ampoules au démarrage de la carte.
Code: [Select]
DDRB = B1;
PORTB = 0b0;


Explication :
Première étape, assigner le port en output :
Code: [Select]
DDRB = B1; // Définie le port entier en output
// DDRB = B111110;  // Définie les pins 9 à 13 en output et la pin 8 en input

Tu passes ensuite toutes les pins a 0:
Code: [Select]
PORTB = 0b000000;
ou
Code: [Select]
PORTB = 0;

D'autres exemples :
Si tu ne veux que les pins 8 et 10 en high:
Code: [Select]
PORTB = 0b000101;
ou
Code: [Select]
PORTB = 0x05;

Tu veux une pin précise (la 10) à HIGH:
Code: [Select]
PORTB |= 0b000100;
ou
Code: [Select]
PORTB |= 1 << 2;
ou
Code: [Select]
PORTB |= _BV(2);
A noter que 2 est la position de la pin sur le port ( donc 0=8, 1=9, 2=10, etc)

La même à l'état LOW:
Code: [Select]
PORTB &= ~0b000100
ou
Code: [Select]
PORTB &= ~(1<<2)
ou
Code: [Select]
PORTB &= ~_BV(PB2);
ou
Code: [Select]
PORTB &= ~_BV(2);
ou
Code: [Select]
PORTB &= ~0x4;


Pour plus d'info:
http://www.arduino.cc/en/Reference/PortManipulation
http://www.playarduino.fr/2009/11/booster-le-temps-de-reponse-de-votre-arduino.html
http://www.instructables.com/id/Arduino-is-Slow-and-how-to-fix-it/

jeanot1314

hi, pour l'instant je ne l'ai pas testé sur haute tension donc pas de scintillement... ceux ci ne sont ils pas du au filtre?
Dans des montages de gradateurs comme sur ce site, l'auteur met des filtres de plus haut niveau...
Par ailleurs je n'ai besoin que d'un seul canaux pour chez moi, donc je n'utilise pas tout ton code!
je pense avoir dessiné/gravé/soudé la plaque d'ici deux semaines. Je te fais un compte rendu dans peu de temps!

erlik

Dans le genre petite interface 8 voies simple et efficace qui irait bien avec ton code
http://sonelec-musique.com/electronique_realisations_interfaces_lpt_003.html
Manque juste là détection du zéro.

Go Up