En LED Tärning med en PIC 16F84 (eller 16F88) (5 / 12 steg)

Steg 5: Software design

Det är det för hårdvarudesign, nu måste vi utforma den programvara som gör att vår hårdvara blir en tärning.

En sak som du säkert märkt var att hårdvara genomförandet gjordes på ett strukturerat, byggsten sätt. Vi måste närma vår programvarudesign på samma sätt.

Vid utformningen av vår programvara, kan börja med att dela upp systemet i funktionella block. En lätt uppdelning är att dela upp problemet i indata (knappen), viss bearbetning (faktiskt rulla tärningarna) och produktion (The LED).

Kan börja med att bygga det utgång med vår kod först. Det är den mest visuella komponenten, och låter oss 'put några körs på bordet' tidigt. Innan vi börjar dock kan prata lite om mikroprocessor instruktionsuppsättning och arkitekturen.

PIC spänna av mikroprocessorer genomföra en minskad anvisning ställa datorn (RISC). Att ha en RISC kärna är en faktor som gör dessa processorer så snabbt. En nackdel med att ha en RISC kärna är att PIC spänna av mikroprocessorer bara genomföra ungefärligt 37 instruktioner, så det tar ibland fler instruktioner att göra saker, och ofta lösningar inte alltid verkar vara så intuitiv som de är på, till exempel en Z80 eller 6502.

I PIC är primära arbetar registret "W" registret. De flesta i vår verksamhet använder registret "W" på något sätt. Ta till exempel en uppsättning kommandon som kommer ut en binära mönster "10101010" till Port B.

MOVLW B "10101010"

MOVWF PortB

Först, det ord som vi vill skriva är laddad i 'W' registret, sedan 'W' register skrivs till Port B.

Vi kan använda denna sekvens av operationer för att mata lite mönster du visar ett tärningskast 6. Principskiss, kan vi se att första tärningen är ansluten till Port A, bits 0 – 3 på följande sätt.

Port A(0) - centrum LED

Port a.1 - lysdioder (1) och (3).

Port A(2) - lysdioder (2) och (4).

Port a.3 - mellersta lysdioder (5) och (6).

Om du vill visa mönstret för en 6, alla hörn lysdioder och alla mellersta lysdioder är på, men centrum-lampan inte lyser. Det motsvarar lite mönster av b '00001110'. Så, om du vill visa en 6, vi enkelt utföra instruktionerna;

MOVLW B '00001110'

MOVWF PortA

På samma sätt om du vill visa en 1 (centrum LED), skulle vi använda;

MOVLW B "00000001"

MOVWF PortA

Vi har hänvisat till 6 00001110, och 1 som 00000001. Kan det vara förvirrande att använda tal som denna, särskilt när de inte är verkligen siffror, de är helt enkelt lite mönster. För att underlätta förvirringen, tillåta de flesta montörer användning av "Konstanter" att ge en mappning mellan en textnamn och ett nummer. När det gäller våra dice display, kan vi använda ordet Die6 i stället för 00001110 eller Die1 i stället för 00000001.

En lista med konstanter som vi skulle kunna använda i vår uppvisning skulle vara;

Die1 B "00000001"

Die2 B "00000100"

Die3 B '00000101'

Die4 B '00000110'

Die5 B '00000111'

Die6 B '00001110'

DieOff B '00000000'

DieTest B "00001111"

De sista 2 posterna (DieOff och DieTest) är användbara för stänga av displayen, eller kontrollera att alla lysdioder är operativa vid uppstart genom att aktivera alla lysdioder.

Nu när vi vet hur du vill visa ett tal, vi borde producera byggblocket som tillåter oss att leverera ett urval, och lämplig bit mönstret läses in i displayen.

Innan vi diskuterar detta displayen rutin, bör det nämnas att mjukvaran bäst skrivs modulärt, en rutin i taget. Detta gör att funktioner läggas komponent av komponent. Vi kan sedan koncentrera sig på att skriva varje komponent var för sig, så att komplexa programvara byggas lager av lager.

Tillbaka till våra byggstenar för visar ett tärningskast. En rutin för att implementera funktionen display kan se ut så här;

; Först definiera krävs konstanterna...

Die1 EQU B '00000001'; vissa konstanter definieras

Die2 EQU B '00000100'; för de olika LED Tärning

Die3 EQU B '00000101'; bitars mönster

Die4 EQU B "00000110"

Die5 EQU B "00000111"

Die6 EQU B "00001110"

DieOff EQU B '00000000'; ALLA lysdioder av

DieTest EQU B '00001111'; ALLA lysdioder på

; Disp_Dice1 - orsakar ett visst nummer ska visas på en tärning ansikte

; Ingång: Registret W

; Produktion: En LED mönster på tärningen.

; Kommentarer: för värdena i registret "W"; 0 = alla lysdioder av

; 1-6 = Visa mönstret för 1 – 6

; 7 = alla lysdioder ON (testläge)

;

DISP_DICEA CALL DIE_LOOKUP

MOVWF PortA

RETURNERA

; Detta är en förgrening uppslagstabell. I princip, oavsett värde skickas via W registret är

; lägga till programräknaren (PCL). Detta sedan leder till lämpligt värde för den

; lookup resultat som laddas in i W register, och kontroll som återsänds till uppringande

; sub rutin.

; dvs, om en 2 skickas via W registret, ADDWF PCL, orsakar f operation 2 ska vara

; läggas till den aktuella instruktionsräknaren orsakar RETLW Die2 instruktion som ska utföras.

; Detta resulterar i konstant Die2 (B "00000100") laddas in W registret, och

; kontroll som returneras till det anropande programmet.

DIE_LOOKUP ADDWF PCL, f

RETLW DieOff

RETLW Die1

RETLW Die2

RETLW Die3

RETLW Die4

RETLW Die5

RETLW Die6

RETLW DieTest

De flesta av ovanstående notering är kommentarer (linjerna föregås av tecknet ';'), så det bör kunna följas.

Rutinen display kan användas genom att köra följande kod;

MOVLW 4

KALLA DISP_DICEA


Se Steg
Relaterade Ämnen

ATtiny85 LED Tärning

Idag ska jag visa dig mitt nya projekt - LED Tärning med en ATtiny85.När du trycker på knappen, det genererar ett antal slumpmässigt och visar den som en dö.Steg 1: material Delar:ATtiny85 (du kan också använda ATtiny45 och ATtiny25)DIP8 uttag7 gröna...

En CharliePlexed RGB LED Tärning

detta Instructable kommer att visa hur man gör en färgstark tärning med hjälp av charlieplexing med RGB-lysdioder.Projektet använder 7 RGB lysdioder ordnade i form av tärningarna. Varje RGB LED har tre separata lysdioder inuti så som gör totalt 21 ly...

CHR'S 8 X 8 X 8 LED Cube Revisited med förbättringar!

Se steg 17 för mer information angående musik inmatningsläge för icke-RAMP brädor.Det finns nu 7 musik lägen i bokförda koden, och jag söker fler idéer för animeringar eller musik utlöste effekter!HOPPA direkt till steg 1 om du bara vill få till de f...

555 RGB Rainbow LED Driver (inte med en 4029)

| A_Teacher |OK, är så såvitt jag kan säga, detta ett unikt varumärke NEW design.Ringer alla rymdkadetter: Som ett sätt att motivera folk att göra projektet, för närvarande ger jag bort en 3 månaders Instructables Pro medlemskap till den första perso...

ATtiny85/45/25 LED Tärning (Super enkelt och billigt!)

Om du har tittat på min 5 LED ATtiny85 POV display, vi programmerade ATtiny med Arduino. (Om du inte har sett det, klicka här) Vi kommer att göra samma sak för detta LED Tärning projekt.Totalt delar kostnaden för projektet är om $5-$10. (Inte inklusi...

Bluetooth kontrollerad LED bärbar med Intel Edison

Har du någonsin föreställt en värld där du kan ändra mönster av en klänning med ett tryck på knappen? Eller en till kunna ändra höjd på en fåll med en känga av du finger? Tekniken möjliggör kontroll och anpassning på platser där du inte brukar. Telef...

Hur man gör en elektronisk tärning med ARDUINO

Hey guys vi är tillbaka med en annan cool Arduino projekt för dig. I detta Instructable kommer jag visa dig hur man gör en elektronisk tärning med Arduino. Jag vet att du kommer att gilla den. Titta på videon.Steg 1: komponenter1. LED (7)2. IC 4017 (...

Ghettofabulous LED spårning bord på en Budget

någonsin vill återskapa en Albrecht Dürer, Davinci eller spåra några av dina favorit bilder, botanik pressningar eller ursprungliga konstverk?Ja, då är Ghettofabulous LED spåra tabellen på en Budget för dig!Jag ville skapa en kopia av en av mina favo...

RGB LED Mood taklampa med hackad IR-fjärrkontroll

detta instructable dokument utformning och konstruktion av en gigantisk RGB LED taklampa, kontrolleras av en hacka GE fjärrkontroll.Efter att bygga ett par mindre RGB lampor, bestämde jag mig för jag ville se hur långt jag kunde ta konceptet. Kontrol...

Elektronisk tärning med Attiny84

Detta projekt är en elektronisk tärning med hjälp av ett Attiny84 chip. Attiny84 fungerar som en Arduino utom det en 14 pin chip och är har mindre minne och det finns ingen inbyggd programmerare. Jag kommer att visa hur man lägger upp ett program med...

GÖRA en ALTOIDS liten USB LED testare / minne (med justerbar spänning)

jag har alltid velat göra något med en alotids liten väska men jag kunde aldrig lista ut vad tills nyligen! Detta täcker hur man gör en LED testare (med spänning urval) / flash-enhet. Den använder usb som kraftkälla (5 volt) och det finns två alterna...

Arduino: Elektronisk tärning (med slumptal)

detta instructable visar dig hur man gör en elektronisk tärning med minimal erfarenhet med hjälp av 7 lysdioder, motstånd, hoppare ledningar, och naturligtvis den arduino (eller arduino klon). Jag skrev detta instructable för alla att enkelt följa me...

LED Strip styrenhet med LED Amp + Arduino

Glöm DIY LED drivers med mosfet transistorer! Det är extremt enkelt att köra hög driv LED-strips med Arduino till låg kostnad utan att gå in för mycket kretsar. Hemligheten är billigt mini LED förstärkare.Detta instructable är bara om körning LED str...

Designa för Ponoko laserskärning med SketchUp och Inkscape (en studie i kuber)

detta Instructable kommer att diskutera praktiska frågor av de mönster som presenteras i SketchUp, Inkscape och Ponoko laserskärning. Du kommer att visas framgångar och misslyckanden (det är ingen mening i att göra mitt misstag - jag kan göra tillräc...

24 Watt LED Grow Light med ljusstyrka

mat växer är en av mina favorit hobbies eftersom jag är ett stort fan av ekologiska livsmedel och sunda matvanor. Detta Instructable visar dig hur man bygger en LED grow light med röd/blå ljusstyrka kontroller efter växande behov och tillåta dig att...

Bluetooth trådlös spänning Meter med Wiimote + Pic Chip + AutoIt

i denna tutorial jag ska visa dig hur du kan skicka spänningsvärden till datorn med en Pic chip, Wiimote, och Autoit3 skriptspråk. Processen fungerar genom att binda en pic chip till knappen kuddar av en wiimote. Sedan använda pic marker Analog till...

LED Steampunk lampa med gamla glödlampor

I detta instructable jag ska visa dig hur man gör en LED Steampunk lampa med gamla glödlampor.Jag ville göra en Steampunk lampa av gamla glödlampor för en lång tid men jag var alltid upptagen med andra projekt. Nyligen fick jag slutligen till det gen...

8 x 40 LED matris klocka med kalender med fjärrkontrollen

Idag ska jag visa hur man gör rullning och animerade LED matris klocka med kalender för arduino. Detta projekt har följande funktionerVad är nytt i Version 2.0Extra IR-fjärr baserade justera tid/datumSmidig animationMånga buggfixar i programvaraVersi...

Ren binär LED väggklocka med Arduino

Min binära Väggklocka är inspirerad från många binära klockor jag hittade på InstructablesLänkar:Lilypad Arduino klocka:Binär klocka:Plus några andra binär klocka instructables.Men...Vad jag fann saknas i dem var omfattningen och storleken på display...