"Hjärnan" en extern hårddisk och ljus skulptur (11 / 11 steg)
Steg 11: Att sätta allt ihop
En kort bild av händelseförloppet:
När driva, appliceras till de tre styrelserna börjar högra styrelsen långsamt pulserande av röda lysdioder i ett hjärtslag mönster. Detta görs med hjälp av programvara PWM kommandon (del av i den stora ko grundläggande) att variera ljusstyrkan på en uppsättning röda lysdioder. Denna kod är i en ögla.
Beroende på konfigurationen av byglarna, gör de andra två styrelserna ingenting, bara looping runt väntar på en signal som anger att hårddisken har öppnats.
Alla tre styrelser reagera när en signal tas emot för att indikera att hårddisken har öppnats. Varje styrelse gör en sekvens av LED belysning effekter varar några sekunder. Om hårddisken inte få nås igen, gå styrelserna tillbaka till deras "standard" looping status. Om hårddisken fortsätter att nås (det händer ofta) och sedan fortsätter de LED-belysning. Den första styrelsen håller en timer går och om hårddisken har upprepade gånger tillgång under en period av 30 sekunder eller mer, sedan en "mer frenetiska" uppsättning LED belysning effekter kickar in och en andra signal tråd kommunicerar detta tillstånd till de andra två brädor att låta dem öka tempot i sina LED effekter.
"LED effekter" inkluderar:
- "Roterande" mönster av lysdioder på dummy hårddisk tallrik
- "Rörliga" mönster av lysdioder reser upp ryggraden
- Random blixtar av lysdioder inuti "hjärnan"
Bara för intresse skull, har jag återskapat stor ko Basic-program som får upprättas och lastas på en PIC 16F88 att ge en smak av vad programvaruelementet av detta projekt ser ut. Denna mycket mer tillgänglig än de normala PIC programmering metoderna. Något liknande är laddad på var och en av de tre modulerna som PCB. Mycket av koden är kommentar, snarare än aktiv koden. Något efter en apostrof är en kommentar. Kommentera är mycket viktiga för att upprätthålla programvara och detta är ett exempel på min fungerande kod - inte speciellt kommenterade för andra att läsa!
"Program som driver"Hjärnan"styrelsen (Kicad" LED drivrutinsmodulen 01")
"den har alla PortB utgångarna ansluten till en ULN2804 drivrutin
"det har PortA.4, PortA.6 och PortA.7 anslutna till MOSFET drivrutiner
"det har PortA.2 (jumper 0) och PortA.3 (bygel 1) ansluten som läge byglar (normalt hög - byglar dra låg)
"det har PortA.1 och PortA.0 som insatsvaror
"det har ingen extern anslutning till PortA.5 (drog höga och anslutna för Vpp)
"Programvaran består av en 41 scen för/nästa slinga
"som driver röda"hjärtslag".
"Om en begäran görs på hårddisken (dvs PortA.0 har drivits på höga master styrelsen)
"och sedan de blå lysdioderna på dummy hårddisken lyser vid sidan (dvs som en del av) den
"för/nästa slinga.
"För dummy hård driva lysdioderna att starta, den för/nästa slinga har till slut dess hjärtslag cykler.
"Därför är det en fördröjning innan dummy enheten lyser start.
"Mjukvaran använder en programvara PWM (RB1)
"Programmera
"Maskinvaruinställningar
#chip 16F88, 8 ' PIC 16F88 på 8 MHz
#config MCLR = av, osc = INTRC_IO ' Stäng av MCLR, Välj inre osc.
"WDT och lägsta värdets princip inaktiveras automatiskt
"Initiera
"HJÄRTSLAG
'~~~~~~~~~
"Dela vågform i 20 värden att ange ljusstyrkan på de röda lysdioderna
"dim = 0 ljusa = 60???
Tabell RedLedBrightness
3
3
2
2
2
2
2
10
30
50
70
90
100
100
100
100
100
100
100
100
90
80
70
60
55
50
45
40
35
30
25
20
15
10
5
5
4
4
3
3
End tabell
"SET PORT RIKTNINGAR
Dir PORTB ut
dir PORTA.4 ut
dir PORTA.6 ut
dir PORTA.7 ut
dir PORTA.0 i "line-ingång - kräver att man
dir PORTA.1 i "line-ingång
dir PORTA.2 i ' läge bygel
dir PORTA.3 i ' läge bygel
dir PORTA.5 i ' MCLR ansluten till pin A5 - inte används
"nästa rad sätter upp programvara PWM kanalen
#define PWM_Out1 PORTA.7
"Anger starttillståndet för port B
PORTB = b "10000000"
iväg för PORTA.4
iväg för PORTA.6
iväg för PORTA.7
vänta 2 s ' ge programmeraren en stund att sparka in
AllLedsOff
'######################################################
"Programvara PWM
"PWMOut kanal, intermittens, cykler i 0.5us cykler (för en 8 MHz chip)
', 0-255, 100 = 50us
"inte övertygad om 255 värde att vara 100%! Med 0 - 100 verkar täcka hela ljusstyrkeintervallet???
'######################################################
"Main rutin
DemandMade = false
Göra
"### Kontrollera för jumper positioner
'================================
modeLSB=PORTA.2 "jumper närmast power block
modeHSB=PORTA.3 "jumper från blocket makt
läge = modeLSB + (modeHSB * 2) "inga byglar = 3
"jumper A.3 i = 2
"På användaren anvisning - kallad" J5 i J6 ut (2): hög efterfrågan orsakar slumpmässiga blinkande blå lamporna. "
"jumper A.2 = 1
"På användaren anvisning - kallad" J5 ut J6 i (1): hög efterfrågan ignoreras. Hjärtslag och dummy skiva är normal, blå tallrik lampor utanför."
"båda byglar i = 0
"På användarinstruktioner - kallad" J5 i J6 i: hög efterfrågan orsakar dummy skiva, röda heartbeat och blå tallrik ljus slumpmässigt blinka. "
"Kom ihåg jumper positioner i användarhandboken är numrerade i omvänd
"att markeringarna på fysiska kablarna (tråd 1 = bygel 8, etc)
"### När på efterfrågan och efterfrågenivå
'======================================
om Porta.0=on sedan
DemandMade = sant
annat
DemandMade = false
slut om
om PORTA.1=on sedan
PeakDemand = sant
annat
PeakDemand = false
slut om
"### Göra koden krävs av bygel
'================================================
Välj fall läge
fall 3' inga byglar i
"PORTB är sekvenserade i en cirkel för normala efterfrågan nivåer och gnistrar för höga
"Röda lysdioder har hjärtslag under alla omständigheter
"Andra 2 utgångar har slumpmässiga mousserande på höga nivåer - annars av
om DemandMade = true sedan PORTB = b "10000000"
För cykel = 1 till 40
ReadTable RedLedBrightness, cykel, ljusstyrka
PWMOut (1, ljusstyrka, 25)
om DemandMade = true och PeakDemand = falskt då rotera PORTB rätt enkel
om DemandMade = true och PeakDemand = True then
PORTB = random "gör utgång lysdioder"sparkle"
Porta.4=Random/128 "bara en random 0 eller 1 värde
Porta.6=Random/128
slut om
Nästa
fall 1
"PORTB är sekvenserade i en cirkel för alla efterfrågan nivåer
"Röda lysdioder har hjärtslag under alla omständigheter
"Andra 2 utgångar är avstängda av
om DemandMade = true sedan PORTB = b "10000000"
För cykel = 1 till 40
ReadTable RedLedBrightness, cykel, ljusstyrka
PWMOut (1, ljusstyrka, 25)
om DemandMade = true sedan rotera PORTB rätt enkel
Nästa
fall 2
"PORTB är sekvenserade i en cirkel för alla efterfrågan nivåer
"Röda lysdioder har hjärtslag under alla omständigheter
"Andra 2 utgångar har slumpmässiga mousserande på höga nivåer - annars av
om DemandMade = true sedan PORTB = b "10000000"
För cykel = 1 till 40
ReadTable RedLedBrightness, cykel, ljusstyrka
PWMOut (1, ljusstyrka, 25)
om DemandMade = true sedan rotera PORTB rätt enkel
om DemandMade = true och PeakDemand = True then
Porta.4=Random/128 "bara en random 0 eller 1 värde
Porta.6=Random/128
slut om
Nästa
fall 0 ' båda byglar i
"PORTB är sekvenserade i en cirkel för normala efterfrågan nivåer och gnistrar för höga
"Röda lysdioder har hjärtslag om det inte finns stor efterfrågan
"Andra 2 utgångar har slumpmässiga mousserande på höga nivåer - annars av
om DemandMade = true sedan PORTB = b "10000000"
För cykel = 1 till 40
om DemandMade = true och PeakDemand = falskt då
Rotera PORTB höger enkel
ReadTable RedLedBrightness, cykel, ljusstyrka
PWMOut (1, ljusstyrka, 25)
slut om
om DemandMade = true och PeakDemand = True then
"Alla portar blinkar bara slumpmässigt 40 gånger
"Bra för MAXED ut hjärnan (ljus och levande!)
PORTB = random "gör utgång lysdioder"sparkle"
om slumpmässig > 128 sedan
ställa in PORTA.4 på
annat
iväg för PORTA.4
slut om
om slumpmässig > 128 sedan
ställa in PORTA.6 på
annat
iväg för PORTA.6
slut om
om slumpmässig > 128 sedan
ställa in PORTA.7 på
annat
iväg för PORTA.7
slut om
vänta 40 ms
slut om
om DemandMade = falskt då
ReadTable RedLedBrightness, cykel, ljusstyrka
PWMOut (1, ljusstyrka, 25)
slut om
Nästa
End markerar
AllLedsOff
Loop
'######################################################
Funktion AllLedsOff
PORTB = b '00000000'
iväg för PORTA.4
iväg för PORTA.6
iväg för PORTA.7
slutet funktion