Etape 11 : PIC contrôlées lightdimmer : le logiciel
Si vous souhaitez utiliser ce circuit avec un microcontrôleur PIC, le logiciel dans ce lien peut vous aider à aller plus loin :
http://www.edaboard.com/thread265546.html
Un bon article sur zéro détection de passage avec un PIC peut être trouvé ici :
http://tahmidmc.blogspot.nl/2012/10/Zero-Crossing-...
L’écrivain Syed Yona Mahbub donne un programme de base qui détecte le passage par zéro et déclenche ensuite la LED avec une temporisation de 20 ms.
Bien que j’ai jamais travaillé avec PIC avant et ne suis aucune fissure sur la programmation en C. J’ai décidé de voir si je pouvais construire sur son programme et permettent de varier l’intensité lumineuse, plutôt que de simplement lui donner une seule valeur (le retard de 20ms).
J’ai vite découvert que les fonctions delay_ms et delay_us dans C, sont un peu délicat, à savoir qu’ils n’acceptent pas une variable. Le délai doit être connu au moment de la compilation car elle est codée en dur. J’ai vu certains de contournement compliquées, mais j’ai pensé à une solution plus simple serait de faire une fonction qui donne une uS 75 retard (Assurez-vous que 65 à 60Hz) et appeler ça avec un paramètre déterminant combien de fois ce retard est en boucle.
Le nombre maximal de fois où que le retard est lu en boucle est 128. C’est parce que j’ai choisi au hasard que la lumière doit être grisée dans 128 étapes (avec 0 étant complètement illuminé et 128 étant hors tension).
Un avertissement cependant : je n’ai aucun programmeur PIC et je ne prévois pas (encore) d’aller en photos, heureux que je suis avec la série Atmega et Attiny. C’est pourquoi je ne peux pas tester le programme. Je peux seulement dire qu’il compile sans problème, et si vous souhaitez utiliser le circuit sur un PIC, il va vous aider à démarrer. Vous trouverez également des projets à part entière, y compris un programme, ici et ici, y compris une télécommande IRet ici
//---------------------------------------------------------------------------------------------------------
Programmateur : DIY_Bloke
Fortement basée sur un programme de 0-X de Syed Yona Mahbub
Compilateur : mikroC PRO pour PIC v4.60
Cibler des PIC : PIC16F877A
Programme de contrôle d’angle de phase
signal zéro passage sur broche RB0/INT 33
blocage de signal à MOC3021 via 220-470R de pin 19 RD0/PSP0
X-tal 4 MHz
//---------------------------------------------------------------------------------------------------------
unsigned char FlagReg ;
int x ;
int maal ;
gradation int = 20; / / « 20 » est juste un exemple. Gradation doit contenir une
valeur comprise entre 0 et 128 et peut être prélevé par exemple une
résistance variable ou LDR ou une valeur provenant d’un programme
sbit ZC à FlagReg.B0 ;
void interrupt() {}
Si (INTCON. INTF) {//INTF hissé, donc interruption externe s’est produite
ZC = 1 ;
INTCON. INTF = 0 ;
}
}
Sub retard (int maal) {}
pour (x = 1; x < maal; x ++) {}
delay_us(75) ; 65 pour 60Hz
}
}
Sub main() {}
PORTB = 0 ;
TRISB = 0 X 01 ; RB0 entrée d’interruption
PORTA = 0 ;
ADCON1 = 7 ; Désactiver l’ADC
TRISA = 0XFF ; Faire toutes les entrées PORTA
PORTD = 0 ;
TRISD = 0 ; PORTD toutes les sorties
OPTION_REG. INTEDG = 0 ; interrompre le front descendant
INTCON. INTF = 0 ; effacer les interrupt flag
INTCON. INTE = 1 ; activer les interruptions externes
INTCON. GIE = 1 ; activez l’interruption mondiale
tandis que (1) {}
Si (ZC) {//zero passage a eu lieu
Delay(dimming) ; « 20 » est un exemple
PORTD. B0 = 1 ; Envoyer une impulsion
delay_us(250) ;
PORTD. B0 = 0 ;
ZC = 0 ;
}
}
}