Början Microcontrollers del 6: Skriva det första programmet till vända på en LED



Jag vet att du är redo att skriva det första programmet. Du har gått igenom en hel del hittills! Medan vi i frågan, låt oss sammanfatta händelserna. Du gick ut och köpte Atmel AVR mikrokontroller för att förstora. Jag valde theATMega32 för min använder. Du infördes begreppet microcontrollers hur de fungerar. och har också införts för att programmeraren, den enhet som hjälper till att överföra programmet till mikrokontroller. Du byggt en bekväm gränssnitt som används för att ansluta SPI stiften till rätt stift av mikrokontroller. Du verifierat att programmerare (USBTinyISP) drivrutiner har installerats korrekt för 32-stycke och 64-bitars versioner av Windows (XP, Vista och 7). Du också installerat programmering miljö installerad "Programmering miljö" kallad WinAVR så att du kan ha en miljö där du kan skriva ditt program, och sedan överföra det till mikrokontroller. Och se till att allt fungerar korrekt, du brukade avrdude testade programmeraren medan inkopplad i datorn och mikrokontroller. Minns att detta program är verktyget programmet överföring till flytta vårt kompilerade program i minnet på mikrokontroller. Slutligen, du byggt den första kretsen så att vi kunde ha något att skriva ett program för. Puh... det var en hel del! Men eftersom du hoppade genom alla de hinder, det hårda arbetet är över och det är smidigt segling här på. Förhoppningsvis har du kunnat få genom de föregående stegen utan problem--så nu Låt oss få med vårat första.

För att förenkla, låt oss kategorisera funktionen av mikrokontroller i tre kategorier: kontroll, fjärranalys och kommunikation. Vi lämnar information om hur du utvecklar var och en av dessa funktioner, och gräva i dessa detaljer som vi skriver de olika programmen. Observera att det finns många sätt att programmera dessa funktioner. För det första programmet, ska vi göra mikrokontroller "styra" något. Och som ni vet från tidigare inlägg, vi kommer att använda en LED för detta ändamål. I grund och botten tänds vi lysdioden. Ja jag vet... tråkigt, rätt? Jag måste väl börja någonstans! När jag tar dig genom erfarenhet av programmering, vill jag tillägga mer komplicerat lite i taget så du kan lätt svepa huvudet runt dessa viktiga begrepp.

Så på denna punkt du förmodligen frågar... Hur gör vi ett program för att styra en LED? Tja, det är verkligen lätt: helt enkelt berättar vi Pin0 på PORTB att mata 5 volt. Kom ihåg att detta är PIN-koden som är ansluten till den positiva bly (anod). Den första nyckeln i det här fallet är "output", och nästa är "5 volt." Det finns ett sätt som vi kan tala om en särskild PIN-kod måste vara en utgång från MCU. När en PIN-kod har angetts att ge resultat, kommer du sedan att kunna kontrollera att pin- och göra det antingen hög (5 volt) eller göra det låga (noll spänning). Och eftersom det finns endast två för detta stift i produktionen läge (5v eller 0v), och endast två stater för sig (ingång eller utgång), behöver du bara ange värdet till antingen logiska 1 eller 0-läget. Observera att detta måste göras för varje stift som vi vill använda i vår krets. Men innan vi kommer att koppla in en 1 eller 0, låt oss tala om input kontra utgång. När en PIN-kod är ingångsläge, lyssnar det för en spänning. När stift i Utläge, kan it debiteras vid 5v eller inte debiteras på 0v. Det är det!

Det finns många sätt att göra detta. Detta är inte att förvirra dig, utan att göra saker enklare. Jag kommer att introducera dig till ett av många sätt att utföra denna uppgift, och senare jag kommer att förklara vissa andra metoder medan du skriver andra program. Observera dock att även denna första metoden är bra för att införa begreppet, det är nog inte så bra i praktiken. Därför ser du andra metoder i framtida program som kommer att lämna kontextuella stift (dessa stift på vardera sidan av pin av intresse) påverkas inte, så de kan mycket väl ha varit tidigare angett i programmet. Men eftersom vi skriver ett enkelt program, vi brukar oroa denna komplexitet vid denna tid.

För att plocka Utläge för en PIN-kod, kommer att du använda den Data riktning registrera (DDR). Oh man! Vad är ett register?!? Låt inte oroa dig. Ett register är helt enkelt en minnesplats som gör mikrokontroller reagera på något sätt. Vi använda ett register för att skapa en stat för mikrokontroller, eller göra mikrokontroller göra något. Det är som reflexer, eller kittlar. När en person kittlar en annan person, åberopar skratt. Vi kan göra MCU göra något genom att ange ett specifikt värde i ett register. Det är allt du behöver veta just nu.

Så när du använder DDR registret, kan du ställa in PIN-koden till utgång data eller godkänna inmatning av data. Men vi sa in- eller, nu du säger data också. Termen "data" används tillför här helt enkelt bara en ny dimension till denna idé i form av "tid". Om du gör en pin 5 volt, sedan noll volt, och sedan 5 volt igen... skickar du faktiskt 1: or och 0: or. Att klämma fast, detta är inget annat än en hög (5 volt) stat, och sedan en låg (noll volt) stat: The MCU ser denna hög/låg logik. Och du kan även ta emot data på samma sätt.

Det finns flera sätt att ange pin0 för port B ut. Ett sätt att göra detta är att skriva:

DDRB = 0b00000001;

Låt mig förklara. "DDRB" avser Data riktning registrera för port B; "0b" är att tala kompilatorn att vad som följer är det binära uttrycket av en rad; och "1" på slutet betecknar pin 0 position (det första stiftet i port B). Minns att det finns 8 stift för port B; stift 0 om 7. Det finns också 8 siffror i vår lina av koden. Så varje siffra representerar en pin på porten, och vi kan använda de enskilda siffrorna att särskilt hänvisa till någon av stiften i port B. Så hänvisar '1' i slutet av vår koduttrycket till den första pinne i port B, som i detta fall är pin 0. (Minns att C och C++ är nollbaserat språk, så första index för en datastruktur hänvisar till är det zero'th elementet, det andra indexet avser det första elementet, etc.) Vi behöver verkligen inte att få någon mer komplexa på denna punkt, eftersom detta kommer att omfattas i mycket mer detalj i framtiden tutorials. Men om du vill veta mer om binära systemet, kolla här.

Nu måste vi tillämpa 5v till stift. Detta fungerar precis som DDR koduttrycket vi använt ovan. Vi kommer att använda ett binärt tal till pålagt att pin (stift 0) 5v med detta uttalande:

PORTB = 0b00000001;

Den enda skillnaden mellan detta och tidigare uttalande är att vi nu använder PORT registret. Detta register vet stiften på den aktuella porten, och ger oss tillgång till ange det faktiska datavärdet (logisk 0 eller 1) för dessa stift.

Nu måste vi prata lite om den övergripande strukturen av vårt program. Alla program måste ett angivet ställe att börja utförandet. Det är som att ge någon en uppsättning instruktioner om hur man gör en tårta utan att tala om dem som steg för att börja på. "Main" funktion är platsen där alla C/C++ program startar utförande. Så vi kommer att skapa en huvudfunktion.

int main(void)
{
}

För att förstå den DDR och PORT registrera information och hur detta arbete inom mikrokontroller, en include-deklaration måste läggas innehåller som all information om AVR microcontrollers. Detta inkluderar uttalande kommer förmodligen att vara i alla dina program.

#include < avr/io.h >
int main(void)
{
}

När startar kompileringsprocessen pre-processor portion av kompilatorn ser ut i katalogen "avr" för filen "io.h". Tillägget ".h" här indikerar att detta är en header-fil och (som namnet antyder) koden i filen infogas i början (huvud) filen du skapar. Nu kan vi infoga uttalanden av DDR och PORT i vår kod, eftersom införandet av io.h sidhuvudfilen har informerat kompilatorn om dem.

#include < avr/io.h >
int main(void)
{

DDRB = 0b00000001; //Data riktning registrera inställning pin0 att mata och återstående stiften som indata PORTB = 0b00000001; //Set pin0 till 5 volt

}

Nu ställs riktningen av pin0 utgång, med ett värde på 5v. Men vi är fortfarande inte färdig. Vi måste hålla mikrokontroller köra på obestämd tid, så vi behöver en rutin för att göra detta. Detta kallas en oändlig (eller oändlig) loop. Oändlig loop säkerställer att mikrokontroller inte slutar utför sin verksamhet. Jag kommer att förklara detta mer i detalj när vi har saker att göra i denna slinga. Det finns flera typer av slingor kan vi använda för detta ändamål, men för denna demonstration kommer jag använda while loopen. Det betyder samma sak på engelska som i koden: till exempel "medan" Jag har min hand, du bör hålla klappar.

#include < avr/io.h >
int main(void)
{

DDRB = 0b00000001; Data riktning registrera inställningen pin0 utgång och övriga stiften som indata
PORTB = 0b00000001; Ange pin0 till 5 volt
while(1)
{

//Code skulle vara här om det behövs för att köra över och över och över... oändligt

}

}

Observera att vi använder en '1' som argument att while loop, eftersom något annat än "0" är en logisk sann. Därför while loop tillstånd blir aldrig annat än logiskt sant, och programmet kommer att fortsätta att köra på obestämd tid (dvs.; Jag hålla min hand upp).

Så är här frukten av vårt arbete. Det var en lång resa så långt, men jag lovar, allt från och med nu kommer att vara glädjande och mycket mindre tidskrävande. I nästa video och instruktion vi LED blinkar. Vi kommer att undersöka hur man skapar en fördröjning så att lampan inte blinkar så snabbt att det ser ut som det inte blinkar.

Relaterade Ämnen

Början Microcontrollers del 7: Omarbetning av det första programmet att göra LED blinkar

Du har skrivit det första programmet, som visade på en LED. Ja, det var spektakulärt! Tja, inte riktigt, men låt oss införa lite galenskap till LED. Vi ska ge det en "bipolära" personlighet genom att blinka. Då vi kliver upp ett snäpp och gör de...

Början Microcontrollers del 8: Lägga till en knapp till mikrokontroller och göra det göra något

En mycket enkel och lätt sätt att tillhandahålla för mänsklig interaktion med mikrokontroller är att infoga en knapp i kretsen. Att kommunicera med datorer som använder två viktigaste inmatningsenheter: musen och tangentbordet. Ett tangentbord är ing...

Början Microcontrollers del 2: Att skapa ett SPI gränssnitt från programmeraren till mikrokontroller

Hej, hoppas vi du gillade del 1 av början Microcontrollers. Vi ska flytta i del 2 och börja prata om gränssnitt och hur du får din microcontroller att kommunicera med en dator.Så, vid denna punkt, du bör känna till begreppet mikrokontroller (MCU). Du...

Början Microcontrollers del 11: Timers, räknare och mikrokontroller klockan

Timers och räknare är så integrerad att du kommer att se många exempel på dem i hela denna serie. Som namnet säger, används timers för tid och räkna. Inventering och timing kan du göra några mycket fina saker som kontrollerande LED brights, vinkel gr...

Början Microcontrollers del 12: Intro till avbryter

I denna del av handledningen vi prata om avbrott arbeta till exempel med räknaren. Avbryter förbättra mikrokontroller i stort sätt. Avbryter göra din program reagerar på hårdvaran i microcontrollers, vilket kan vara en reaktion från circuit utanför m...

Början Microcontrollers del 13: Intro till LCD gränssnitt

Mikrokontroller är en underbar bit av ingenjörskonst och det kan göra många saker (med hjälp av några bra programmering), men det är fortfarande en ogenomskinlig svart låda. Om du vill att dela information, eller visa dig vad det försöker göra det, m...

Början Microcontrollers del 3: Överföra ett Program till mikrokontroller (drivrutiner)

Välkommen till del 3. Detta är en mindre handledning som kommer att behandla helt enkelt laddar drivrutiner se till din programmerare kan kommunicera med datorn ordentligt.Observera att ibland TinyISP och USBAVR enheter nu kommer förladdad med Window...

Början Microcontrollers del 5: Provning programmeraren och bygga den första kretsen

Så långt, bör du ha alla mjukvaran installerad och konstruerade det gränssnitt som kommer att ge en bekväm anslutning från programmeraren till mikrokontroller (MCU). För nästa steg måste en skärbräda (de med siffror är mycket bra), en LED och ett mot...

Början Microcontrollers del 9: Knappen och programvara Debouncing metoder

I denna del av handledningen kommer att vi diskutera knappen och programvara debouncing.Vi vill studera knappen debouncing första och i detalj så vi har en god förståelse för vad det innebär. Knappen debouncing är viktigt och bör inte vara undervärde...

Början Microcontrollers del 4: Installera programmering miljö (WinAVR)

Välkommen till nästa steg i vår serie. Vi kommer att introducera några grundläggande programmeringselement nu. Denna handledning är helt enkelt om hur du installerar din programmeringsmiljö. Den programmeringsmiljö som vi kommer att använda kallas Wi...

Animatronic ögon och Wii Nunchuck del 2 - ge det en röst

Efter att jag byggt animatronic ögonen i Del1, ville jag fylla i ansiktet med en röst och eventuellt flytta ögonbryn. Om du ser tillbaka på min Del1, ser du att jag använt en modell från Thingiverse för basen. När du har modell 3D tryckt, måste du lä...

Avskärma som skrivar ut Tutorial del 3: Skriver ut en bild

detta är tredje i en serie av tre skärm utskrift tutorials, som jag kommer att beskriva processen jag använder för att skapa handen ut objekt till salu i min Etsy shop, Hund hus. Under loppet av tutorials kommer att jag visa dig hur att använda ett f...

Börjar Microcontrollers del 1

Detta är först i en lång rad av tutorials syftade till att ge Nybörjarguide och handledning kring Atmel AVR Atmega32 mikrokontroller. Jag kommer att visa dig, genom exempel och projekt, hur program och tillhandahålla funktioner för denna mikrokontrol...

Hur till vända en vigselring på en svarv - del I

jag gjort vigselringar för min bror och syster (i lag) på svarven på TechShop Detroit! Jag gjorde dem av mässing eftersom det är billigt och enkelt att vända; sedan hade jag dem gjuten och omarbetning i dyrare metaller. Du bör absolut prova detta! Va...

Hur man gör en lätt trä skriver redskapet innehavaren som kopplar till skrivbord

tar inte ens 10 minuterSteg 1: skär trä ta din träbit den storlek du vill ha helst en tum tjockSteg 2: Markera där hålen är sopposed att vara om du vill kan du göra den mindre spridning eller mer men hålla mönstret du göra så att det inte ser konstig...

Hur till använda den praktiskt swing IPO IDC Howest SWING SCHOMMEL del 2

I nästa steg visas hur du använder handy svingen. Ha det så kul!Steg 1: Fördelen med händig svingen Den stora fördelen av händig gungan är att du kan ta honom överallt där du går i naturen. Det är så att du kan sätta gungan lätt i en ryggsäck.Steg 2:...

Hur man skriver det kinesiska tecknet för Dragon

Kinesiska tecken är ofta svårt att skriva. Denna guide hjälper dig att vara kompetent tot skriva en mycket svår kinesisk karaktär. Det uttalas "lång" och det är tecknet för dragon.Steg 1: Vänstra övre hörnet Denna del av tecknet för dragon har 5...

Hur man skriver in Instructables och populärvetenskap "Använda den igen!" Tävling

Contest resultat har postats här.Inom räckhåll för mig just nu finns det tre elmotorer (två från sladdlösa borrmaskiner, en från en R/C bil), 10 ampere av H-broar, 30 watt solpaneler, en förmodligen bruten trådlös router, 10 kiselskivor (vissa med te...

Stylus iPad tips - (hur till vända små delar på en Jet svarv), jag gjorde detta på Tech Shop!

Göra detta mässing tips för att hålla pennan gummi nibs! Detta är svåraste med att göra dina egna kapacitiv stylus! Jag behövde en mässing spets till hålla gummi nib för min tryck känslig stylus jag utveckla. Detta instructable visar dig min penna sp...