Warhammer trollkarl på skiva med Magnetically-Coupled Motor och lysdioder (2 / 4 steg)

Steg 2: kod



Koden för PIC gjordes för att optimera batteriets livslängd och använda många slumpmässiga "händelser".

För att få batteriet senast så länge som möjligt, kretsen var tvungen att använda minst energi jag kunde lista, samtidigt hålla tanken vid liv. Så, jag bestämde mig att minska den ursprungliga verksamheten i genomsnitt 1 LED-blixt eller motor flytta var 6 sekunder.

Koden har 12 random "aktiviteter", från 1 LED tända, motorn slås på i olika tidsperioder eller riktningar, till ett slumpmässigt vänta staten. Händelser varierar från 3 sekunder isär till mer än 40 sekunder ifrån varandra, baserat på en slumpmässig händelse genereras.

KODEN

;===============================================================================
-Skiva Controller
;
; -----------
; VCC -> |1 8| <-Vss
; M <> - GPIO5 |2 7| GPIO0---> LED1
; M <> - GPIO4 |3 6| GPIO1---> LED2
; GPIO3 -> |4 5| GPIO2---> LED3
; -----------
;
;===============================================================================
; Revisionen historia & anteckningar:
; V1.0 första Header, kod 5/19/09
;
;
(C) 5/2009
; Denna kod kan användas för personliga lärande/programmodifieringar.
; All användning av denna kod i kommersiella produkter bryter mot denna freeware version.
; För frågor och kommentarer, kontakta krets dot mage på yahoo dot com.
;-------------------------------------------------------------------------------

#include P12C672. INC

;===============================================================================
; Definierar
;-------------------------------------------------------------------------------

;===============================================================================
; Data
;-------------------------------------------------------------------------------
; Tid hålla variabler

count1 equ 20
count2 equ 21
dröjsmål equ 22
Randlo equ 23
Randhi equ 24
Wtemp equ 25
Temp2 equ 26
rand equ 27
count3 equ 28

;===============================================================================
; Återställa vektorer
;
; KOLLA CONFIG. BITAR INNAN DU BRÄNNER!!!
; INTOSC
; MCLR: AKTIVERAD
; PWRUP: AKTIVERAD
; ALLA ANDRA: INAKTIVERA!
;
;-------------------------------------------------------------------------------
RESET_ADDR EQU 0X00

org RESET_ADDR
gå till start
;===============================================================================
; Börja här!
;-------------------------------------------------------------------------------
Start
; Config/o-portar
BCF STATUS, RP1
BSF STATUS, RP0
movlw h '08'; RA < 0-7 > utgångar, PGIO3 alltid ingång
tris GPIO
movlw h '07'; Ställ in GPIO till Digital-läget
movwf ADCON1

; Ställ in inre timer
movlw h'CF'; Tmr0 inre källa, prescale TMR0 1:256
movwf OPTION_REG
movlw h '00'
movwf INTCON; Inaktivera TMR0 avbrott,
BCF STATUS, RP0

; Initiera register
clrf GPIO
clrf count1
clrf count2
movlw 045h
movwf Randlo
movlw 030h
movwf Randhi

; vänta 1 SEK.
Ring debounce; 0.2 sek
Ring debounce
Ring debounce
Ring debounce
Ring debounce
;===============================================================================
; Main
;-------------------------------------------------------------------------------
huvudsakliga
kalla twosec; 2 SEK min mellan varje åtgärd
RRF Randhi, W
xorwf Randlo, W
movwf Wtemp
swapf Wtemp
Lantbrukarnas Riksförbund Randhi, W
xorwf Randhi, W; LSB = xorwf(Q12,Q3)
xorwf Wtemp
Lantbrukarnas Riksförbund Wtemp
Lantbrukarnas Riksförbund Randlo
Lantbrukarnas Riksförbund Randhi

movfw Wtemp; strip slumpmässiga 16 ner till 7
andlw 0x0F
movwf rand
; slumpmässigt rutinmässigt urval
xorlw 0x00; 0?
btfsc STATUS, Z
gå till flash1; Ja. Ring 0.
movfw rand
xorlw 0x01; 1?
btfsc STATUS, Z
gå till flash2; Ja. Ring 1.
movfw rand
xorlw 0x02; 2?
btfsc STATUS, Z
gå till flash3; Ja. Ring 2.
movfw rand
xorlw 0x03; 3?
btfsc STATUS, Z
gå till flashall; Ja. Ring 3.
movfw rand
xorlw 0x04; 4?
btfsc STATUS, Z
gå till movels; Ja. Ring 4.
movfw rand
xorlw 0x05; 5?
btfsc STATUS, Z
gå till movell; Ja. Ring 5.
movfw rand
xorlw 0x06; 6?
btfsc STATUS, Z
gå till movers; Ja. Ring 6
movfw rand
xorlw 0x07; 7?
btfsc STATUS, Z
gå till moverl; Ja. Ring 7
movfw rand
xorlw 0x08; 8?
btfsc STATUS, Z
gå till moveburst; Ja. Ring 8.
movfw rand
xorlw 0x09; 9?
btfsc STATUS, Z
gå till Wait1; Ja. Ring 9
movfw rand
xorlw 0x0A; A?
btfsc STATUS, Z
gå till Wait2; Ja. Ring Ath
movfw rand
xorlw 0x0B; B?
btfsc STATUS, Z
gå till Wait3; Ja. Ring Bth

gå till ingenting; 1/4 tiden, gör ingenting för 10 SEK.

flash1
BSF GPIO, 0
Ring debounce
BCF GPIO, 0
gå till största
flash2
BSF GPIO, 1
Ring debounce
BCF GPIO, 1
gå till största
flash3
BSF GPIO, 2
Ring debounce
BCF GPIO, 2
gå till största
flashall
BSF GPIO, 0
BSF GPIO, 1
BSF GPIO, 2
Ring debounce
Ring debounce
BCF GPIO, 0
BCF GPIO, 1
BCF GPIO, 2
gå till största
movels
BSF GPIO, 4
BCF GPIO, 5
Ring debounce
BCF GPIO, 4
gå till största
movell
BSF GPIO, 4
BCF GPIO, 5
Ring debounce
Ring debounce
BCF GPIO, 4
gå till största
Movers
BCF GPIO, 4
BSF GPIO, 5
Ring debounce
BCF GPIO, 5
gå till största
moverl
BCF GPIO, 4
BSF GPIO, 5
Ring debounce
Ring debounce
BCF GPIO, 5
gå till största
moveburst
BCF GPIO, 4
BSF GPIO, 5
Ring debounce; flytta höger 3 gånger, korta skurar.
BCF GPIO, 5
Ring debounce
Ring debounce
BSF GPIO, 5
Ring debounce
Ring debounce
BCF GPIO, 5
Ring debounce
Ring debounce
BSF GPIO, 5
Ring debounce
BCF GPIO, 5
Ring debounce
Ring debounce
Ring debounce
Ring debounce
BSF GPIO, 4. flytta vänster 3 gånger, korta skurar.
BCF GPIO, 5
Ring debounce
Ring debounce
BCF GPIO, 4
Ring debounce
Ring debounce
BSF GPIO, 4
Ring debounce
Ring debounce
BCF GPIO, 4
Ring debounce
Ring debounce
BSF GPIO, 4
Ring debounce
Ring debounce
BCF GPIO, 4
Ring debounce
Ring debounce
gå till största
Wait1; Vänta 1 sekunder
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
gå till största
Wait2; Vänta 0,6 sekunder
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
gå till största
Wait3; Vänta 4 sekunder
kalla twosec
kalla twosec
gå till största

ingenting
movlw.50; Fördröjning på 10 sekunder totalt
movwf count3
nothing_loop
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
decfsz count3, F
gå till nothing_loop

gå till största

;===============================================================================
; 2 andra vänta
;-------------------------------------------------------------------------------

twosec
movlw.10; Fördröjning för 2 sekunder totalt
movwf count3
twosec_loop
movlw 255; Fördröjning för 2/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
decfsz count3, F
gå till twosec_loop
returnera

;===============================================================================
; Debounce signal
; 4 cykler att ladda och ring, 2 cykler för att återvända.
; 4 Mhz Tc:: count2 = 255 -> 0.2 sek
;-------------------------------------------------------------------------------
Debounce

movlw.127; Fördröjning för 1/10 sekund Dämpningstid.
movwf count2
kalla pon_wait
returnera
;-------------------------------------------------------------------------------
; count1 = 255 d:: 775 cykler 0 + 3 cykler att återvända.
;-------------------------------------------------------------------------------
pon_wait

big_loopS
movlw 255
movwf count1
short_loopS
decfsz count1, F
gå till short_loopS
decfsz count2, F
gå till big_loopS
returnera

slutet

Se Steg
Relaterade Ämnen

Enkla cirkelsåg med hårddisk tallrik och CDRom DC-Motor

som datorexpert, jag har många bortskämda hårddiskar. Det finns värdefull saker i en hårddisk att räddas, gillar som tallrik, motor och magnet. Jag vet vad jag ska göra med magnet och motor, men vanligtvis undrar jag vad man ska göra med skivorna.De...

BLDC Motor Control med Arduino, bärgades HD motor och hallgivare

det finns ett stort intresse dessa dagar bland hobbyister kontrollera borstlösa DC (BLDC) motorer, som har bättre prestanda och bättre energieffektivitet övertraditionella DC-motorer, är men svårare att använda. Många off-the-shelf produkter finns fö...

Förstöra en CD-skiva med hög spänning

förstöra en Justin Bieber CD-skiva med en hög spänning nätaggregat....

Posten kontrollerade parkering System med Servo Motor och PIR med LinkIt en styrelse

I detta Instructable, vi kommer att genomföra transaktionen kontrollerad parkering med Servo Motor och PIR med LinkIt en styrelse.En servomotor är en roterande ställdon eller linjärt ställdon som möjliggör exakt kontroll av kantiga eller linjär posit...

Flytande penna med magneter

Detta är material för farkoster en flytande penna/pensel med magneter.Steg 1: Hur du ansluter magneterna till paintbtrushAnvända en massa band ansluta magneterna till pensel. Se till att magneterna är jämnt fördelade och att du mäter dem samma avstån...

Hur man säkert akvarium Mesh lock med magneter

detta DIY-projekt är för dem som behöver att säkra deras mesh akvarium lock, men utan att alltid ångra eller titta på de fula låsning eller icke-låsande klipp!Detta är inte en DIY som sparar massor av pengar eftersom de icke-låsande klipp är bara någ...

Lätt $3 ferrofluid och andra upptäcktsfärder med magnetic slime

Vår DIY klass har kämpat med oogoo, men en kommentar på oogoo instructableinspirerade oss att prova att lägga till järn-oxid och därifrån en herrelös kommentar om att lägga till järnoxid silly kitt lämnade mig tänka på magnetism i plast och icke-newt...

Hur makten din cykel med en whippersnipper motor

detta Instructable visar dig hur du ändrar din push cykel med en liten motor så du inte behöver trampa så mycket och ser en hel kylare! Jag gjorde mina med en riktigt gammal kawasaki whipper snipper (ogräs whacker för ni amerikaner) motor. Jag kunde...

PWMSwizzling en Edison Arduino Breakout att arbeta med Grove Seeed Motor sköldar

Detta instructable beskrivs stegen för att konfigurera maskinvara och programvara av en Intel Edison Arduino Breakout ombord så att det kommer att kommunicera med en Grove Seeed Motor sköld. Exempel på skisser för att kontrollera ett par av likströms...

RC plan bygga med CD Rom Motor (borstlös motor); första försöket!!

Hej!!Jag vill visa dig mitt första försök att bygga ett rc plan med CD Rom motor!eftersom, CD Rom motorn i en liten borstlös motor, så att vi kan användas med våra ESC!så här complet video av att bygga och också provet.Prenumerera!...

Weed trimmer motor ersättas med borstlösa RC lastbil motor och använder en Arduino kontroll ombord

I år har jag använt min trimmer med uppgraderade LiPo batterier, ungefär som de som används i en RC-bil. LiPo batterier har fungerat bra och som mycket mer trimmern Använd tid på ganska lite mindre vikt. Problemet var motorn slutligen gav ut häromdag...

Pole klättring Bot (med enstaka inriktade motor)

Detta bot klättrar en pole - långsamt.Obs: just upptäckt denna bot kommer också att klättra 1/4 tums rund elektrisk kabel.Varför gjorde jag detta bot?: Jag såg en cool video som visar en bot klättra upp en persons byxbenet som sedan fick mig att vilj...

Enkel och billig ROBOT HAND med endast en MOTOR!

Hej alla,Jag ville bara dela denna idé att göra en enkel, billig robotic hand (eller någon slutet effektor) med endast en motor.Med endast en motor för hela handen kan räcka för att:-extremt billigt, vilket är bra för din plånbok eftersom vanligtvis...

Experiment med magneter, burkar och annat

En serie experiment med magneter, aluminiumburkar och othere delar och bitar.Detta experiment vända virvelströmmar. Att induceras strömmar av ett växlande magnetfält nära en metall elektrisk ledare. Att generera strömmar ett magnetfält som motsats ti...

Micro trä-svarv: Hur man gör det med en symaskin MOTOR

se till att kolla in min blogg!En hur-att-se video jag gjorde visar processen för att bygga en micro trä-svarv med en symaskin motor. Den använder foten pedalen som medföljde symaskinen som justeringen på/off/hastighet.Denna svarv är direkt drivning,...

Bärbar bänk kvarnen med gamla ugnen Motor

har du någonsin haft att arbeta från din butik, men fortfarande behöver en kvarn. Jag har, så här är lösningen jag kom med. Jag hade en gammal ugn motor och en berså. Mycket praktiskt att ha och enkla att göra.Lista:1 - bit 3/4" plywood, klipp till d...

Boutonniere / kylskåp Magnet (3D tryckta med luft växt och magnet)

jag designade och 3D tryckt några intressanta behållare baserat på geometriska former påverkas av mitt intresse för helig geometri. Utforskandet av blandning av organiska och oorganiska former och tomt utrymme är kärnan i dessa bitar. Så här är några...

Kontroll DC och stepper motors med L298N Controller moduler med dubbla motorer och Arduino

Du behöver inte spendera en massa pengar att styra motorer med en Arduino eller kompatibel styrelsen. Efter lite jakt runt vi kan hittade en snygg motorisk kontrollmodul baserad på L298N H-bridge IC som kan du styra hastighet och riktning av två liks...

Arduino klocka med en dc-motor (enda nål)

Hej,Jag var försökande till göra en klocka med arduino med en enda motor men det var inte möjligt med referensmetoden som det måste finnas minst två nålarTimmar och minuter så jag försökte något nytt. I denna klocka finns sex divisioner i en timme i...