BloodBowl tourner Counter utilisant des LEDs de 7 segments (3 / 5 étapes)

Étape 3: Breadboarding & Code Micro

Maquette était un must pour cela. Montré est ma maquette générique, mais pour la taille de ce projet j’ai effectivement utilisé celui-ci et une maquette plus petit, car il y ont beaucoup de fils qui devaient être espacées.

Tout d’abord, j’ai testé une seule LED 7 segments à l’aide de code initial. Ceci confirmé 3 choses ;
1) câblage de l’IC a été vérifiée bien !
2) m’a amené à optimiser et finaliser mon code.
3) m’a fait réaliser que je n’avait pas besoin les résistances de limites actuelles !

1 câblage
Comme indiqué, ma conception schématique s’est avérée pour fonctionner avec mon code, comme la LED aurait successivement les nombres à l’aide d’un bouton-poussoir, afin que vérifié mon code et la mise en page. Pas grand chose il fallait mais breadboarding confirmé que j’étais en bonne forme.

2 CODE
Initialement, j’ai eu mon code sertie d’une routine principale de scanner pour les boutons et l’affichage de l’ISR (Interrupt Service Routine) les numéros. Après breadboarding des tests, j’ai inversé les routines, donc la plupart du temps a été constamment affichage des nombres et l’ISR pour vérifier les boutons. La raison pour laquelle j’ai fait cela, était juste d’avoir un affichage constant, depuis le PIC s’exécute avec une horloge interne de 4Mhz, je perds très peu de temps pour les boutons de numérisation. Pas grand chose... tout dépend de comment vous voulez faire le code et ce qui fait le plus de sens pour chaque application. Pour ce faire, l’affichage est important, alors j’ai mis que dans la routine principale.

L’arrivée de mes premières parties (tous les 6 écrans!), j’ai terminé le câblage de la maquette et trouvé une autre question. Lorsque vous appuyez sur le bouton mon code avait certains registres bâclés qui n’ont pas été innocentés et l’ISR causait quelques problèmes d’affichage mineurs.

;===============================================================================
; Tourner le compteur
;
; -----------
; Dsply3 <---A2 |1 18| A1---> Dsply2
; Dsply4 <---A3 |2 17| A0---> Dsply1
; LED1 <---A4 |3 16| A7---> DEL3
; A5 |4 15| A6---> Led2
; VSS |5 14| DMV
; Button1 -> B0 |6 13| B7
; B1 |7 12| B6
; B2 |8 11| B5
; B3 |9 10| B4
; -----------
;
; LED1-3---> BCD-dec IC---> LEDSeg's1-6
; Dsply1-3---> BCD-7seg IC---> Dsply #1-9
;

;===============================================================================
; Historique des révisions & Notes :
; En-tête Initial v1.0, Code 30/03/09
;
;
; (C) 5 / 2009
; Ce code peut être utilisé pour les personnels d’apprentissage/demande/modification.
; Toute utilisation de ce code dans les produits commerciaux viole cette version freeware.
; Pour questions ou commentaires, contactez circuit dot mage at yahoo dot com..
;-------------------------------------------------------------------------------

#include P16F627A. INC

;===============================================================================
; Définit
;-------------------------------------------------------------------------------

;===============================================================================
; Données
;-------------------------------------------------------------------------------
; Variables de maintien fois

count1 equ 20
count2 equ 21
DIS1 equ 22
dis2 equ 23
DIS3 equ 24
dis4 equ 25
DIS5 equ 26
dis6 equ 27
w_temp equ 28
status_temp equ 29
ISRCNTR equ 2 a

;===============================================================================
; Réinitialiser les vecteurs
;
; VÉRIFIER LA CONFIG. BITS AVANT LA GRAVURE!!!
; INTOSC
; MCLR : ACTIVÉ
; PWRUP : ACTIVÉ
; TOUS LES AUTRES : DÉSACTIVER!!
;
;-------------------------------------------------------------------------------
RESET_ADDR EQU 0 X 00
ISR_ADDR EQU 0 X 04

org RESET_ADDR
Goto début
;===============================================================================
; RAPPORT DE RECHERCHE INTERNATIONALE
;
;-------------------------------------------------------------------------------
org ISR_ADDR
movwf w_temp
swapf statut, w
movwf status_temp ;

; RAPPORT DE RECHERCHE INTERNATIONALE ICI
; Vérifiez les commutateurs PB0-PB5

btfsc PORTB, 0 ; Vérifiez SW1
appel sw1debounce
btfsc PORTB, 1 ; Vérifiez SW1
appel sw2debounce
btfsc PORTB, 2 ; Vérifiez SW1
appel sw3debounce
btfsc PORTB, 3 ; Vérifiez SW1
appel sw4debounce
btfsc PORTB, 4 ; Vérifiez SW1
appel sw5debounce
btfsc PORTB, 5 ; Vérifiez SW1
appel sw6debounce

Goto endisr

sw1debounce
appel debounce ; Attendre 0,2 sec
appel debounce
RIFC dis1 ; Compteur de mise à jour
movf dis1, W ; Vérification de dépassement de capacité
xorlw 0x1A ; 10 sur 7-seg ?
btfss STATUS, Z
retour ; Non, reprendre le scan.
movlw h « 10 » ; Oui, remettre affichage.
movwf dis1
retour
sw2debounce
appel debounce ; Attendre 0,2 sec
appel debounce
RIFC dis2 ; Compteur de mise à jour
movf dis2, W ; Vérification de dépassement de capacité
xorlw 0x4A ; 10 sur 7-seg ?
btfss STATUS, Z
retour ; Non, reprendre le scan.
movlw h « 40 » ; Oui, remettre affichage.
movwf dis2
retour
sw3debounce
appel debounce ; Attendre 0,2 sec
appel debounce
RIFC dis3 ; Compteur de mise à jour
movf dis3, W ; Vérification de dépassement de capacité
xorlw 0x5A ; 10 sur 7-seg ?
btfss STATUS, Z
retour ; Non, reprendre le scan.
movlw h « 50 » ; Oui, remettre affichage.
movwf dis3
retour
sw4debounce
appel debounce ; Attendre 0,2 sec
appel debounce
RIFC dis4 ; Compteur de mise à jour
movf dis4, W ; Vérification de dépassement de capacité
xorlw 0x8A ; 10 sur 7-seg ?
btfss STATUS, Z
retour ; Non, reprendre le scan.
movlw h « 80 » ; Oui, remettre affichage.
movwf dis4
retour
sw5debounce
appel debounce ; Attendre 0,2 sec
appel debounce
RIFC dis5 ; Compteur de mise à jour
movf dis5, W ; Vérification de dépassement de capacité
xorlw 0x9A ; 10 sur 7-seg ?
btfss STATUS, Z
retour ; Non, reprendre le scan.
movlw h « 90 » ; Oui, remettre affichage.
movwf dis5
retour
sw6debounce
appel debounce ; Attendre 0,2 sec
appel debounce
RIFC dis6 ; Compteur de mise à jour
movf dis6, W ; Vérification de dépassement de capacité
xorlw 0xCA ; 10 sur 7-seg ?
btfss STATUS, Z
retour ; Non, reprendre le scan.
movlw h « C0 » ; Oui, remettre affichage.
movwf dis6
retour

endisr
BCF INTCON, T0IF
swapf status_temp, w
movwf statut
swapf w_temp, f
swapf w_temp, w
retfie

;===============================================================================
; Commencez ici !
;-------------------------------------------------------------------------------
début
; Ports e/s de config
CLRF PORTA
movlw 0 x 07
movwf CMCON
BCF STATUS, RP1
BSF STATUS, RP0
movlw h « 00 » ; RA < 0-7 > sorties, sortie N° RA5
movwf TRISA

BCF STATUS, RP0
CLRF PORTB
BSF STATUS, RP0
movlw h'FF' ; RB < 0-7 > entrées
movwf TRISB

; Réglez le minuteur interne
BSF PCON, 3 ; Affectez à 4Mhz.
movlw h'CF' ; Source interne Tmr0, prescale TMR0 1: 256
movwf OPTION_REG
movlw h « A0 »
movwf INTCON ; Activer les interruptions TMR0,
BCF STATUS, RP0

; Initialiser des registres
CLRF PORTA ; Claire PortA
CLRF PORTB ; Claire PortB sorties

CLRF count1
CLRF count2

movlw h « 10 »
movwf dis1
movlw h « 40 »
movwf dis2
movlw h « 50 »
movwf dis3
movlw h « 80 »
movwf dis4
movlw h « 90 »
movwf dis5
movlw h « C0 »
movwf dis6

appel debounce ; 0,2 sec

; test de diodes, affichage 8???

;===============================================================================
; Principal
; Extrait entrées affiche commutateurs, debounces et incriments.
;
; Cela met à jour les affichages, TMR0 Rémy 1:4, à un taux de 1Khz.
Affichage 0 est utilisée pour allouer à un affichage inutilisé. Affichage 1 à 6 sont câblés.
; Tout d’abord, IC BCD-7Seg est chargé avec la valeur d’affichage, et IC BCD-Dec est activé pour
; Afficher sélection.
; Deuxièmement, une attente de ms est tenue pour l’affichage.
; En troisième lieu, IC BCD-Dec est désactivé... display0 est sélectionné pour mettre hors tension de l’affichage
;
; Cela est répété pour chacun des 6 écrans et en boucle.
Rapport de recherche internationale poignées interrupteur de détection à la fréquence de 15Hz.
;-------------------------------------------------------------------------------
principal

Disp1
movf dis1, 0
movwf PORTA
appel ledon

Goto principal

;===============================================================================
; Ledon
; Rodage pour LED power sur.
; 6 écrans -> rapport cyclique 1/6 à 1 Khz = 166 cycles
;-------------------------------------------------------------------------------
Ledon

movlw.54
movwf count1
ledloop
decfsz count1, F
Goto ledloop
retour
;===============================================================================
; Debounce signal
; 4 cycles de charge et d’appeler, 2 cycles pour retourner.
; 4 Tc Mhz:: count2 = 255 -> 0,2 s
;-------------------------------------------------------------------------------
Debounce

movlw.255 ; Délai pour debounce 1/5e de seconde.
movwf count2
appel pon_wait
retour
;-------------------------------------------------------------------------------
; count1 = 255 d:: 775 cycles à 0, + 3 cycles à retourner.
;-------------------------------------------------------------------------------
pon_wait

big_loopS
movlw.255
movwf count1
short_loopS
decfsz count1, F
Goto short_loopS
decfsz count2, F
Goto big_loopS
retour

fin

3 CIRCUIT
J’avais initialement résistances 470 Ohm de chaque ligne de conducteur d’affichage de la 74LS47 et CD4028 permettent de ligne. Cependant, j’ai testé un appel de courant de mon circuit et trouvé il tirait seulement ~ 31mA. Et puisque le pilote réel pour les affichages fait directement à partir de la 74LS47 et enable provient d’un autre IC, un rapide couler de la moyenne et de pointe et les fiches techniques respectives... J’ai tiré les résistances au large de la maquette et constaté une différence de 1mA ! Il semble que directement en venant la ligne CA le 4028 tandis que la conduite directement tous les segments est OK ! .. .sort de. :)

J’ai eu un petit problème dans mon code que ne comprenait pas mes registres lorsqu’une touche a été enfoncée, provoquant l’affichage dernier d’avoir 2 segments très brillamment allumé quand un bouton a été activé. C’était mauvais. Cependant, le registre de compensation fixe ce problème et contrôles de puissance continue de confirmer que c’est constamment autour de 30mA tirage au sort. Cela devrait me donner (basé sur l’expérience acquise avec des circuits similaires) ~ 20 hrs d’exécution à l’aide de 1 pile 9V (500mAH/30mAH sous 5V Règlement)... J'espère!

J’ai décidé de garder les LED directement entraîné, mais mettez-les dans prises dans le cas où quelque chose s’est passé, à long terme.

Articles Liés

Réutiliser des LEDs pour l’éclairage de la boîte d’ombre

Réutiliser des LEDs pour l’éclairage de la boîte d’ombre

J'aime faire et fixation des trucs et je voulais partager cette idée de mes amis avec tout le monde sur le site Instructables. Plaidoyer pour des centaines d'autres idées, répare et hacks. Initialement, j'ai rédigé ce tutoriel il et écrit même plus e
Neon glow ripstick utilisant des LEDs !

Neon glow ripstick utilisant des LEDs !

Avez jamais eu envie d'avoir un néon dans la nuit sera votre ripstik d'équitation ?Cette instructable vous montrera comment installer n'importe quel nombre ou la couleur de LED à votre ripstik.VidéoVidéo 2Étape 1: Composants et outils Pour ce mod, il
Joule Thief - utiliser des LED avec seulement une pile AA !

Joule Thief - utiliser des LED avec seulement une pile AA !

Making LED périphériques portatifs peuvent être un peu encombrants en raison des piles. Le voleur de Joule, résout en amplifiant tension d'une seule pile AA à un niveau suffisamment élevé pour allumer une LED.Cette ible entraînera comment souder un v
Clignotement des LEDs avec des éléments distincts

Clignotement des LEDs avec des éléments distincts

comme chacun le sait sûrement la Fondation complète de la technologie moderne, nay le fondement même de notre civilisation avancée repose sur l'humble témoin clignotant. Rien ne dit que high tech tout à fait comme un clignotement de la del. Maintenan
DIY grand LED allumé 7 Segment affichage

DIY grand LED allumé 7 Segment affichage

un de mes amis qui enseigne les sciences lycée m'a chargé de faire un contrôleur de jeu Jeopardy style quiz avec un minuteur grand écran et les boutons pour les joueurs. Le meilleur type de minuterie que je pouvais penser était un grand afficheur 7 a
Matrice de LED utilisant des registres à décalage

Matrice de LED utilisant des registres à décalage

cette instructable est censée être une explication plus complète que d'autres disponibles en ligne. En particulier, cela vous donnera plus d'explication matérielle celle située sous le chapiteau de LED instructable par led555.ObjectifsCette instructa
Clignotement des LEDs en utilisant arduino de fantaisie

Clignotement des LEDs en utilisant arduino de fantaisie

Il s'agit de fantaisie générateur de lumière qui est construit à l'aide d'Arduino. Ce projet utilise quatre LEDs et contrôlée à l'aide d'un microswitch(button switch) qui eux déclencher à LEDs lueur dans patterns and séquence différente...Uno est une
Contrôle des LEDs sur USB avec VUSB

Contrôle des LEDs sur USB avec VUSB

Il y a beaucoup d'instructions sur ce site pour la construction de lumières d'ambiance LED, mais je voulais une lumière d'ambiance que je pourrais mettre une couleur arbitraire. J'ai également voulu être capable de le contrôler par l'intermédiaire de
Clignotement des LEDs de la musique

Clignotement des LEDs de la musique

il s'agit d'un projet assez simple pour ceux qui ont certaines compétences électroniques.Brancher une source audio de ce circuit et la LED clignote au rythme de la musique. Tout, c'est vraiment utilise la tension de l'entrée audio pour activer un tra
Falangafone - utilisation des gestes pour contrôler votre musique !

Falangafone - utilisation des gestes pour contrôler votre musique !

À HackPrinceton 2014, mon coéquipier et j'ai construit un robuste, kit mains-mouvement contrôlé par la musique. Nous avons utilisé la Motion Leap et son développeur API pour saisir les données de main et des doigts, et nous avons utilisé le langage P
Comment obtenir des LED de haute qualité pour quelques centimes

Comment obtenir des LED de haute qualité pour quelques centimes

Mise à jour : Lorsque j'ai publié il y a des années instructable, LEDs étaient tout à fait un peu plus chers qu'ils le sont aujourd'hui. Si vous vous retrouvez avec un ensemble emmêle de lumières de Noël, cela peut être un bon moyen de les sauver. Av
Diffuse des Led en seulement quelques étapes

Diffuse des Led en seulement quelques étapes

C'est aussi simple que de prendre la partie A et partie B et en frottant ensemble pour obtenir le résultat souhaité !Je suis venu avec cette idée tout à l'heure quand vous jouez avec quelques 5mm LED RGB et le paquet acrylique clair (du moins je croi
LedUSB : Conversion de l’énergie solaire en énergie électrique avec l’utilisation de LEDs

LedUSB : Conversion de l’énergie solaire en énergie électrique avec l’utilisation de LEDs

Oui vous avez lu c'est bon.Aujourd'hui, nous allons faire une matrice de LED qui génère suffisamment d'énergie libre pour charger vos téléphones et tablettes. C'est un appareil portable de poche qui peut charger un appareil. Nous avons eu le souci qu
Comment utiliser une LED RGB

Comment utiliser une LED RGB

à l'aide d'une LED RVB, vous pouvez faire défiler toutes les couleurs. Utile pour faire, lampe d'ambiance, robot expressif ou des effets de lumière froide.Mais pour définir simplement la couleur (teinte) peut être un peu délicat parce que vous avez b