Je suis complètement nouveau dans le monde des microcontrôleurs PIC et de l'électrotechnique, alors allez-y doucement :)
Quoi qu'il en soit, j'ai réussi à programmer mon PIC 16f627 pour allumer trois LED lorsque le bouton-poussoir (bouton de déclenchement) est enfoncé et démarrer une séquence d'arrêt (fondamentalement, chaque LED s'éteint l'une après l'autre avec un délai de 5 secondes entre les deux) lorsqu'un autre bouton-poussoir est enfoncée (bouton de réinitialisation). J'ai testé cela sur une carte de programmation / expérimentation PIC Velleman K8048. Les broches RA0 et RA2 sont respectivement les entrées des boutons-poussoirs de déclenchement et de réinitialisation, tandis que les broches RB0, RB1 et RB2 sont les broches de sortie des DEL.
Travailler avec la carte d'expérimentation est génial, mais je veux déplacer cela vers un circuit réel. Le problème est que je ne sais pas par où commencer. J'ai acheté 3 LED (3,3 Volts chacune), des boutons poussoirs et du fil et j'ai construit le circuit suivant:
(désolé pour le schéma horrible)
Dans le circuit que j'ai construit, j'ai d'abord testé pour voir si les LED fonctionneraient avec 3 piles AA de 1,5 Volt et elles fonctionnaient bien, donc j'ai pensé que des résistances ne seraient pas nécessaires.
Cela ne fonctionne pas, cependant, et je suis totalement perdu. Pour référence, voici mon code pour le PIC. Son écrit en C en utilisant MikroC. Cela fonctionne sur le plateau d'expérimentation donc je ne pense pas que ce soit un problème
void main() {
TRISB.RB0 = 0;
TRISB.RB1 = 0;
TRISB.RB2 = 0;
PORTB.RB0 = 0;
PORTB.RB1 = 0;
PORTB.RB2 = 0;
CMCON = 0x07;
TRISA = 255;
for(;;){
if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
delay_ms(5000);
PORTB.RB0 = 0;
delay_ms(5000);
PORTB.RB1 = 0;
delay_ms(5000);
PORTB.RB2 = 0;
}
if(PORTA.RA2 == 1){
PORTB.RB0 = 1;
PORTB.RB1 = 1;
PORTB.RB2 = 1;
}
}
}
Toute aide serait grandement appréciée. Merci!
la source
Réponses:
Tout d'abord, vous avez toujours besoin de résistances en série avec les LED lorsqu'elles sont alimentées par une source de tension (par exemple, batterie, alimentation CC, etc.)
En effet, les LED ont une courbe IV non linéaire, qui ressemble à une haute impédance jusqu'à la tension de seuil du La LED augmente ensuite très fortement, ce qui signifie qu'avec un très léger changement de tension, le courant change beaucoup, ce qui rend presque impossible de régler le courant à une valeur stable de cette manière.
En utilisant les résistances de série de valeur correcte, vous vous assurez que le courant ne peut pas monter suffisamment pour endommager la LED.
Pour calculer la valeur de la résistance, vous devez connaître la tension directe de la LED (Vf), puis soustraire Vf de la tension d'alimentation et diviser par le courant souhaité, par exemple pour une alimentation 5V, 2V Vf et 15mA:
(5V - 2V) / 0.020A = 200Ω (La valeur standard de 220Ω fera l'affaire - si vous ne l'avez pas, visez quelque chose entre 150Ω et 600Ω pour une plage de 20mA à 5mA)
Cela suppose une LED typique de 5mm ou 3mm de courant de fonctionnement max 20mA.
Bien qu'il indique "3 x 1.5V Battery in Series" dans votre schéma, les batteries semblent être connectées en parallèle. Pour confirmer, les batteries doivent être connectées bout à bout comme le schéma du bas dans cette image:
Vous avez besoin de condensateurs de découplage présents entre le microcontrôleur Vdd et la masse. Je n'entrerai pas dans les détails (cherchez ici, il y a beaucoup de bonnes réponses à ce sujet) mais elles visent essentiellement à fournir au microcontrôleur une réserve d'énergie locale de faible impédance pour une demande de courant haute fréquence, à laquelle l'alimentation ne peut pas répondre rapidement suffisant.
Idéalement, vous devez en placer un (la céramique 100 nF ou 1 uF est assez standard) à travers les broches d'alimentation et de terre, aussi près que possible des broches.
Assurez-vous que vous utilisez l'oscillateur interne si vous n'avez pas de cristal présent. Votre code n'affiche pas les paramètres de bits de configuration, si vous les avez omis, vous devez les ajouter pour vous assurer que le microcontrôleur est correctement configuré. Le manuel CCS devrait vous expliquer comment procéder. Toujours dans les bits de configuration, assurez-vous que la minuterie du chien de garde est désactivée, sinon votre micro se réinitialisera continuellement (sauf si vous appelez régulièrement la commande WDT clear)
Assurez-vous d'avoir les LED dans le bon sens.
Assurez-vous que la broche MCLR est attachée haut, sinon votre PIC sera maintenu en réinitialisation (sauf si vous désactivez MCLR dans les bits de configuration). Cela se fait généralement avec une résistance à Vdd, d'une valeur d'environ 10kΩ. La fiche technique en aura un exemple dans la section de réinitialisation. (merci à ajs410 de l'avoir mentionné)
la source
Je recommande fortement le livre de la série O'Reilly "Designing Embedded Systems" de John Catsoulis pour quelqu'un dans votre position. Il y a un chapitre "Electronics 101" qui vous amènera à la vitesse fonctionnelle assez rapidement, et d'autres sur la construction pratique.
la source
Ne dépassez pas 5V, votre PIC pourrait se brûler au-dessus du niveau de tension de 5V. Vous pouvez utiliser des piles 9V ou un adaptateur AC / DC avec un régulateur de tension linéaire comme LM7805 pour produire 5V pour votre circuit. Comment câbler:
http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html
Comme la plupart d'entre eux l'ont dit: n'oubliez pas de fournir une broche MCLR avec une résistance série. Vous pouvez utiliser la configuration pull-up pour réinitialiser votre PIC. Voici le lien pour le schéma: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php
Utilisez toujours une résistance série avant une LED. Cela évitera que la led ne soit brûlée et réduira la consommation d'énergie. Pour des leds 3,3V, 220 ou 330 ohms seraient bien.
la source
La fonction des boutons est simple. Lorsque nous appuyons sur un bouton, deux contacts sont réunis et la connexion est établie. Pourtant, ce n'est pas si simple. Le problème réside dans la nature de la tension en tant que dimension électrique et dans l'imperfection des contacts mécaniques. C'est-à-dire qu'avant que le contact ne soit établi ou coupé, il y a un court laps de temps où des vibrations (oscillations) peuvent se produire en raison de l'inégalité des contacts mécaniques, ou en raison de la vitesse différente en appuyant sur un bouton (cela dépend sur une personne qui appuie sur le bouton). Le terme donné à ce phénomène s'appelle SWITCH (CONTACT) DEBOUNCE. Si cela est ignoré lors de l'écriture du programme, une erreur peut se produire ou le programme peut produire plus d'une impulsion de sortie pour une seule pression sur un bouton. Afin d'éviter cela, nous pouvons introduire un petit retard lorsque nous détectons la fermeture d'un contact. Cela garantira que la pression d'un bouton est interprétée comme une seule impulsion. Le délai anti-rebond est produit dans le logiciel et la durée du délai dépend du bouton et de la fonction du bouton. Le problème peut être partiellement résolu en ajoutant un condensateur sur le bouton, mais un programme bien conçu est une bien meilleure réponse. Le programme peut être ajusté jusqu'à ce que la fausse détection soit complètement éliminée. L'image ci-dessous montre ce qui se passe réellement lorsque le bouton est enfoncé. Le programme peut être ajusté jusqu'à ce que la fausse détection soit complètement éliminée. L'image ci-dessous montre ce qui se passe réellement lorsque le bouton est enfoncé. Le programme peut être ajusté jusqu'à ce que la fausse détection soit complètement éliminée. L'image ci-dessous montre ce qui se passe réellement lorsque le bouton est enfoncé.
En savoir plus: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR
la source
En plus de ce que les autres ont écrit: ne pas attribuer à des broches de sortie PIC individuelles, comme par exemple "PORTB.RB0 = 1;". Au lieu de cela, effectuez le changement de bit dans une variable de taille octet, puis écrivez cette variable sur le port.
Vous pouvez soit
la source