BloodBowl zet teller met behulp van 7-segment LED's (3 / 5 stap)

Stap 3: Breadboarding & Micro Code


Breadboard was een must voor dit. Weergegeven is mijn generieke breadboard zelf, maar voor de grootte van dit project eigenlijk gebruikte ik dit één en een kleinere breadboard, want er waren vele draden die moesten worden gespreid.

Ik testte eerst één enkele 7-segment LED met behulp van oorspronkelijke code. Dit bevestigd 3 dingen;
1) bedrading van de IC's werd goed gecontroleerd!
2) leidde me om te optimaliseren en het voltooien van mijn code.
3) deed me beseffen dat ik niet de huidige beperkende weerstanden hoefde!

1 bedrading
Zoals vermeld, bleek mijn schematische ontwerp om te werken met mijn code, zoals de LED getallen met een drukschakelaar, doorlopen zou zodat gecontroleerd mijn code en de lay-out. Niet veel nodig was maar breadboarding bevestigd was ik in goede vorm.

2 CODE
Oorspronkelijk had ik mijn code ingesteld met een belangrijkste routine om te scannen voor knoppen en het display van de ISR (Interrupt Service Routine) de getallen. Na breadboarding proeven, omgekeerd ik de routines, zodat het merendeel van de tijd voortdurend van getallen de ISR weergeven werd om knoppen te controleren. De reden waarom ik deed dit, was gewoon om een constante vertoning, aangezien de PIC wordt uitgevoerd met een interne klok van 4Mhz, ik ben het verliezen van heel weinig tijd scannen voor knoppen. Geen big deal... hangt enkel hoe u wilt doen van de code en wat is het meest zinvol voor elke toepassing. Voor dit is display belangrijk, dus heb ik die in de belangrijkste routine.

Toen mijn eerste onderdelen aangekomen (alle 6 displays!), ik voltooide het breadboard bedrading en vond een andere kwestie. Wanneer de knop duwen mijn code had sommige slordig registers die werden niet geruimd en de ISR werd veroorzaakt sommige kleine display glitches.

;===============================================================================
; Zet de teller
;
; -----------
; Dsply3 <---A2 |1 18| A1---> Dsply2
; Dsply4 <---A3 |2 17| A0---> Dsply1
; Led1 <---A4 |3 16| A7---> Led3
; A5 |4-15| A6---> Led2
; VSS |5 14| VDD
; 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
;

;===============================================================================
; Revisiegeschiedenis & nota's:
; V1.0 de oorspronkelijke Header, Code 3/30/09
;
;
; (C) 5 / 2009
; Deze code kan worden gebruikt voor persoonlijke leren / / wijzigingen in de toepassing.
; Elk gebruik van deze code in commerciële producten in strijd is met deze versie van de freeware.
; Voor vragen/opmerkingen, circuit dot mage op yahoo dot com te contacteren.
;-------------------------------------------------------------------------------

#include P16F627A. INC

;===============================================================================
; Definieert
;-------------------------------------------------------------------------------

;===============================================================================
; Gegevens
;-------------------------------------------------------------------------------
; Tijd bijhouden variabelen

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 2A

;===============================================================================
; Reset vectoren
;
; SELECTIEVAKJE CONFIG. BITS VOORDAT HET BRANDEN!
; INTOSC
; PICSSOFTWARE: INGESCHAKELD
; PWRUP: INGESCHAKELD
; ALLE ANDEREN: UITSCHAKELEN!!
;
;-------------------------------------------------------------------------------
RESET_ADDR EQU 0X00
ISR_ADDR EQU 0X04

org RESET_ADDR
goto start
;===============================================================================
; ISR
;
;-------------------------------------------------------------------------------
org ISR_ADDR
movwf w_temp
swapf STATUS, w
movwf status_temp;

; ISR HIER
; PB0-PB5 Switches controleren

btfsc PORTB, 0; Selectievakje SW1
oproep sw1debounce
btfsc PORTB, 1; Selectievakje SW1
oproep sw2debounce
btfsc PORTB, 2; Selectievakje SW1
oproep sw3debounce
btfsc PORTB, 3; Selectievakje SW1
oproep sw4debounce
btfsc PORTB, 4; Selectievakje SW1
oproep sw5debounce
btfsc PORTB, 5; Selectievakje SW1
oproep sw6debounce

goto endisr

sw1debounce
oproep ontdendering; 0.2 sec wachten
oproep ontdendering
INCF dis1; Update teller
movf dis1, W; Selectievakje voor overloop
xorlw 0x1A; 10 op 7-seg?
btfss STATUS, Z
terugkeer; Nee, terug naar de scannen.
movlw h '10'; Ja, opnieuw weergegeven.
movwf dis1
terugkeer
sw2debounce
oproep ontdendering; 0.2 sec wachten
oproep ontdendering
INCF dis2; Update teller
movf dis2, W; Selectievakje voor overloop
xorlw 0x4A; 10 op 7-seg?
btfss STATUS, Z
terugkeer; Nee, terug naar de scannen.
movlw h '40'; Ja, opnieuw weergegeven.
movwf dis2
terugkeer
sw3debounce
oproep ontdendering; 0.2 sec wachten
oproep ontdendering
INCF dis3; Update teller
movf dis3, W; Selectievakje voor overloop
xorlw 0x5A; 10 op 7-seg?
btfss STATUS, Z
terugkeer; Nee, terug naar de scannen.
movlw h '50'; Ja, opnieuw weergegeven.
movwf dis3
terugkeer
sw4debounce
oproep ontdendering; 0.2 sec wachten
oproep ontdendering
INCF dis4; Update teller
movf dis4, W; Selectievakje voor overloop
xorlw 0x8A; 10 op 7-seg?
btfss STATUS, Z
terugkeer; Nee, terug naar de scannen.
movlw h '80'; Ja, opnieuw weergegeven.
movwf dis4
terugkeer
sw5debounce
oproep ontdendering; 0.2 sec wachten
oproep ontdendering
INCF dis5; Update teller
movf dis5, W; Selectievakje voor overloop
xorlw 0x9A; 10 op 7-seg?
btfss STATUS, Z
terugkeer; Nee, terug naar de scannen.
movlw h '90'; Ja, opnieuw weergegeven.
movwf dis5
terugkeer
sw6debounce
oproep ontdendering; 0.2 sec wachten
oproep ontdendering
INCF dis6; Update teller
movf dis6, W; Selectievakje voor overloop
xorlw 0xCA; 10 op 7-seg?
btfss STATUS, Z
terugkeer; Nee, terug naar de scannen.
movlw h 'C0'; Ja, opnieuw weergegeven.
movwf dis6
terugkeer

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

;===============================================================================
; Start hier!
;-------------------------------------------------------------------------------
Start
; Config i/o-poorten
clrf PORTA
movlw 0x07
movwf CMCON
BCF STATUS, RP1
BSF STATUS, RP0
movlw h '00'; RA < 0-7 > uitgangen, RA5 geen uitgang
movwf TRISA

BCF STATUS, RP0
clrf PORTB
BSF STATUS, RP0
movlw h'FF'; RB < 0-7 > ingangen
movwf TRISB

; Instellen interne timer
BSF PCON, 3; Ingesteld op 4Mhz.
movlw h'CF'; Tmr0 interne bron, prescale TMR0 1:256
movwf OPTION_REG
movlw h 'A0'
movwf INTCON; TMR0 interrupts, inschakelen
BCF STATUS, RP0

; Initialiseren van de Registers
clrf PORTA; Duidelijke PortA
clrf PORTB; Duidelijk PortB uitgangen

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

oproep ontdendering; 0.2 sec

; testen LEDs, 8 weer???

;===============================================================================
; Main
; Krijgt ingangen van wissels, debounces en incriments displays.
;
; Dit werkt bij de beeldschermen, met TMR0 prescal 1:4, met een snelheid van 1Khz.
Display 0 wordt gebruikt voor het toewijzen aan een ongebruikte display. Weergeven 1-6 zijn aangesloten.
; Eerst, BCD-7Seg IC is geladen met de weergavewaarde, en BCD-Dec IC is geactiveerd voor
; selectie weergeven.
; Ten tweede, een vertraging van ms wordt gehouden voor weergave.
; Ten derde, BCD-Dec IC is gedeactiveerd... display0 is geselecteerd voor dicht vandoor weergeven
;
; Dit wordt herhaald voor elk van de 6 displays, en een lus.
ISR behandelt schakelaar sensing 15Hz tempo.
;-------------------------------------------------------------------------------
belangrijkste

Disp1
movf dis1, 0
movwf PORTA
oproep ledon

goto belangrijkste

;===============================================================================
; Ledon
; Tijd voor LED power afwikkeling op.
; 6 displays -> 1/6 taakcyclus op 1 Khz = 166 cycles
;-------------------------------------------------------------------------------
ledon

movlw.54
movwf count1
ledloop
decfsz count1, F
goto ledloop
terugkeer
;===============================================================================
; Ontdendering signaal
; 4 cycli te laden en te roepen, 2 cycli om terug te keren.
; 4 Mhz Tc:: count2 = 255 -> 0.2 sec
;-------------------------------------------------------------------------------
ontdendering

movlw.255; De wachttijd voor 1/5 seconden debounce.
movwf count2
oproep pon_wait
terugkeer
;-------------------------------------------------------------------------------
; count1 = 255 d:: 775 cycli aan 0, + 3 cycli om terug te keren.
;-------------------------------------------------------------------------------
pon_wait

big_loopS
movlw.255
movwf count1
short_loopS
decfsz count1, F
goto short_loopS
decfsz count2, F
goto big_loopS
terugkeer

einde

3 CIRCUIT
Ik had oorspronkelijk 470 Ohm weerstanden van elke lijn van de bestuurder van het display van de 74LS47 en CD4028 u regel. Echter ik getest van mijn circuit huidige trekken en het was alleen trekken ~ 31mA. En aangezien de feitelijke bestuurder voor de displays rechtstreeks van de 74LS47 is en inschakelen van een andere IC, een snelle omlaag lopen van het gemiddelde en piek eisen, en de respectieve gegevensbladen... Ik trok de weerstanden uit het breadboard en vond een 1mA verschil! Blijkt dat direct rijden de CA-lijn van de 4028 terwijl direct het besturen van alle segmenten OK is! .. .sort van. :)

Ik heb een glitch in mijn code die deed mijn registers niet duidelijk wanneer een knop is ingedrukt, waardoor de laatste weergave hebben 2 segmenten zeer fel verlicht wanneer een knop is ingedrukt. Dit was slecht. Echter dit probleem opruimen van het register vast, en continu vermogen controles bevestigen dat het is voortdurend rond 30mA trekken. Zulks moeten verlenen mij (gebaseerd op eerdere ervaringen met soortgelijke circuits) ~ 20 uren van gebruikstijd met 1 9V batterij (500mAH/30mAH onder 5V verordening)... Ik hoop!

Ik besloot om te houden van de LED's direct gedreven, maar zet ze in sockets in het geval dat iets gebeurd, lange termijn.

Gerelateerde Artikelen

Digitale ontwerp: Eenvoudige automatische Tally teller met behulp van Velostat druksensor

Digitale ontwerp: Eenvoudige automatische Tally teller met behulp van Velostat druksensor

In deze Tutorial Leer je hoe maak je een eenvoudige automatische tally teller met behulp van druksensoren (waardoor we ook)!De teller tally zal verhogen met één telkens de druk pads zijn liep door welke zal worden weergegeven in een 7 segment display
Bouwen van een eenvoudige binaire teller met behulp van de Arduino

Bouwen van een eenvoudige binaire teller met behulp van de Arduino

De volgende instructable zal gaan door de stappen voor het bouwen van een eenvoudige binaire teller met behulp van de volgende materialen.1 x Arduino Uno1 x drukknop5 x LED's (maar het aantal bits u wilt uw teller)1 x 10 k ohm weerstand1 x 220 ohm we
Auto nacht Lamp met behulp van High Power LEDs

Auto nacht Lamp met behulp van High Power LEDs

dit is een van de zeer nuttige circuits "Auto nacht Lamp met behulp van High Power LEDs" genoemd. Dit is een eenvoudige schakeling die turns ON the LED-lampjes geïnterfacet ernaar op moment van de nacht en het wordt de verlichting automatisch ui
Binaire BCD teller met behulp van de TTL 74LS185

Binaire BCD teller met behulp van de TTL 74LS185

In dit project leert u hoe te bouwen van een 8 bit teller. Geen codering is vereist. Wij zullen drie 74LS185 IC's gebruiken om dit mogelijk te maken. Ja bestaan deze chips nog steeds! Ze zijn beschikbaar op www.bits4bots.comIk zal gebruik maken van e
Digitale klok met behulp van 7 Segment Display gecontroleerd met behulp van TV Remote

Digitale klok met behulp van 7 Segment Display gecontroleerd met behulp van TV Remote

er zijn rassen van digitale klok beschikbaar in ons dagelijks leven. Eenvoudige digitale klok zal meestal hebben sommige gebouwd in functies zoals alarm klok, kalender en thermometer naast de display de klok-informatie. Sommige van de vooraf digitale
Hartslag teller met behulp van MSP430

Hartslag teller met behulp van MSP430

Hallo vrienden, hier is mijn project bij het tellen van de hartslagen met behulp van een MSP430G2553 en een dual op-amp ic, LM358, ik denk dat elke andere dual op-amp kan werken in zijn plaats [naar zorg, controleer enkel de pinouts voor vervanging].
Met behulp van een RGB-LED te detecteren kleuren

Met behulp van een RGB-LED te detecteren kleuren

I 'm gonna Toon u hoe u kunt een RGB LED en een fotocel cd's als de sensor van een kleur voor een micro-controller. Ik zal illustreren de methode om op te halen van een kleur met behulp van Arduino, en ik zal u tonen hoe u kunt controleren of de kleu
Geketend mood light met behulp van krachtige RGB LED's

Geketend mood light met behulp van krachtige RGB LED's

ik heb gestart: dit project meer dan een jaar geleden en werken op het aan en uit sindsdien. Nu is het eindelijk gedaan.Het doel was om een mooi uitziende mood light voor mijn woonkamer, geïnspireerd door een standaard verlichting console een vriend
Eenvoudige Nerf Gun Shot teller met behulp van een kijker van de foto sleutelhanger

Eenvoudige Nerf Gun Shot teller met behulp van een kijker van de foto sleutelhanger

ik op de Universiteit, en zombie jacht met Nerf guns is een gemeenschappelijk tijdverdrijf.  In de loop van explosieven weg bij het imaginaire undead, het is gemakkelijk om losse track van gewoon hoeveel Darten zitten in die clip.  Nooit angst!  Met
Een LED dobbelsteen met behulp van een PIC 16F84 (of 16F88)

Een LED dobbelsteen met behulp van een PIC 16F84 (of 16F88)

Dit is een opnieuw afdrukken van een project dat ik een aantal jaren geleden maakte-ik was trawlvisserij het web, en ontdekte dat anderen had geboekt, dus heb ik besloten om de details hier op instructables.com - zodat anderen kunnen profiteren.Veel
Weerstand rekenmachine met behulp van RGB LED's

Weerstand rekenmachine met behulp van RGB LED's

Het is gebruikelijk om een heleboel rommelig verschillende weerstanden en u wilt een specifieke waarde maar je de weerstand kleurcode niet onthouden.In dit project heb ik geprobeerd om dit probleem oplossen door het maken van een circuit met behulp v
Hoe maak je een paracord pols lanyard met behulp van de cobra-geweven

Hoe maak je een paracord pols lanyard met behulp van de cobra-geweven

deze tutorial zal u tonen hoe te maken van een pols lanyard met paracord en het cobra-weefsel. Dit kan worden gebruikt om een zeer belangrijke ketting, mes, mutitool, camera of mobiele telefoon, enz. Ik geef alle lof aan Stormdrane voor het cobra-wee
Garage deur server met behulp van willekeurige upcycled elektronica

Garage deur server met behulp van willekeurige upcycled elektronica

eerste, een grote dank aan al de talloze mensen die ik geleerd van die hun projecten op deze website zetten.  Het heeft zeker een hele wereld aan mij geopend.  Hiervoor heb ik zou hebben nooit gebruikt een soldeerbout, of een multimeter, of gaan krij
Magic Wand POV berichtweergave met behulp van Bluetooth-Module

Magic Wand POV berichtweergave met behulp van Bluetooth-Module

A persistentie van Vision (POV) Wand is een kleine stok als instrument waarmee kan worden weergegeven berichten (volledige woorden) met behulp van slechts 5 LEDS (in dit geval) die knipperen overeenkomstig de persistentie van de visie. Hier hebben wi