Bonjour
Je reviens avec mon projet qui avance bien.
Il ne me reste plus qu'à réaliser une modification.
Je vous rappel le fonctionnement globale.
- 8 relais
- 8 minidils
- 8 BP secondaires
- 1 BP principale
Si avec mes MINIDILS je met ce code :
CodeDIL = 00001111
J'apuis sur le BP principale ( PIND.0 )
Il va au sous programme activ_rel et envoie la séquence suivante via SPI.
e = 0x01
tempo
e = 0x03
tempo
e = 0x07
tempo
e = 0x0F
Donc les 4 premiers relais s'activent les uns après les autres et RESTENT allumés.
Je ra-puis sur le BP principal, appel du sous programme desactiv rel et les relais s'éteignent les uns après les autres.
J'ai essayé sur ma maquette et ca fonctionne très bien.
Maintenant que les 4 premiers relais sont activés, imaginons que je veuille allumer AUSSI le relais 8.
J'apuis sur le BP secondaire 8
Donc PORTC = 10000000
Et je doit obtenir e = e + PORTC = 10001111
J'ai réussi à le faire mais y'a des beugs...quand je rapuis sur BP principale, les 4 remais doivent s'éteindre mais aussi le 8 ième !
Je suis à cours d'idée après avoir cherché des jours...
Si vous avez une sollution...Merci
Code:void activ_rel(void) // sous programme d'activation des relais. { e = 0x00; M = 0x01; for (i=0; i<=8; i++) { resultat = CodeDIL & M; if (resultat > 0) { e = e + M; trans(); delay_ms(100); }; M = M << 1; }; }; // fin. void desactiv_rel (void) { M = 0x80; for (i=0; i<=8; i++) { resultat = CodeDIL & M; if (resultat > 0) { e = e - M; trans(); delay_ms(100); }; M = M >> 1; }; }; // fin.
Et la boucle principale :
A partir de Y = ~PINC, c'est à modifier...j'ai fait n'importe quoi.Code:while (1) { CodeDIL = ~PINA; // Lecture du code mini-dils et inversion. if (PIND.0 == 0) { delay_ms(5); BP = ~BP; if ( BP == 1 ) { activ_rel(); }; if ( BP == 0 ) { desactiv_rel(); }; delay_ms(300); }; Y = ~PINC; if (Y > 0) { delay_ms(300); Z = Z + Y; e = e+Z; trans(); }; W = 0x60; Z = 0; }; };
-----