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 det blinka verkligen snabbt. Programmet är förvånansvärt koncis och lätt att genomföra.

Se själv:

#include < avr/io.h >
#include < util/delay.h >

int main(void)
{DDRB | = 1 << PINB0;
samtidigt (1)
{
PORTB ^ = 1 << PINB0;
_delay_ms(100);
}

}

Hallå!! Vilka är dessa galna symboler! Crazy verkar vara ett gemensamt tema här. Tja, ska jag förklara. Men jag lovar, det är ganska lätt. Du behöver bara att memorera några saker. Jag kommer komma in en liten bit av detalj, men om du inte får det, inte oroa sig, bara memorera vad i hela uttrycket åstadkommer och du kommer att bli bra. Jag kommer att ge dig ett tips på vägen. Här kommer detaljerna i bitvis operationer:

Det finns logiska operatorer kallas och, eller inte och XOR som vi sysslar med på denna punkt. De verkligen menar vad de säger. Detta är allt för att jämföra två bitar, "1" och "0". Se? Hur kan bara jämföra två tal vara svårt! "1" och "1" är sann eller "1". Och ja, du gissade rätt, "0" och "0" är FALSKT eller "0". Men vad är "0" och "1" och vice versa? Tja, falskt eller "0", uppenbarligen. Dessa killar är olika, så, verkligen, de är falska.

Exempel och binära tal drift (den "&" används i C-programmering för och):

01001011 &
10001101
är lika med
00001001

Enkelt, rätt? Väl, eller ännu enklare! "1" eller "1" är "1", naturligtvis. "0" eller "0" är också "0". Det börjar mycket liknar AND, men här är skillnaden. Om två tal är olika, kommer att det resultera i "1". Så, "1" eller "0" "1".

Låt oss använda samma binära nummer för exempel (rolig tecknet "|" är eller, ibland ovanför "\" på tangentbordet):

01001011 |
10001101
är lika med
11001111

Hmm, som vände på alla platser där det var saknat dem! Det är där magiskt händer. Ja, det höll de i det första numret och där det finns sådana i andra binärt tal, men inte först, det ändrade de till sådana. Mycket enkel. INTE bara tar alla bitar och vänder dem. Till exempel för denna binärt tal: 01001101 kommer att förvandlas till 10110010. Det visade 0 till 1 och 1 till 0 är, men får inte detta ihop med XOR.

XOR liknar OR men "1" XOR "1" är faktiskt "0". Jag ska bara Visa exemplet och du kan räkna ut vad happenes.

01001011 ^
10001101
är lika med
11000110

Japp, du gissade det, den "^" ovan "6" är symbolen för XOR. Hmmm... Den "|" och den "^" i programmet. Cool. Tja, eftersom vi är tänkande program, låt oss disect grejer vi vet inte ännu!

#include < util/delay.h >

Du vet redan vad den < avr/io.h > gör, så jag inte kommer slösa din tid med det, men det finns ett nytt #include uttalande. Delay.h kommer att ge oss ett par bekväma metoder för oss att använda. Precis som namnet antyder, kommer att delay.h ge oss ett sätt att skapa förseningar i vårt program.

Hoppa över "main" eftersom vi vet att redan, ser vi den DDRB förändrats. Bli inte rädd! Här är processen från där vi var dit vi är:

Detta är vad vi hade innan. Detta är inte ett mycket bra sätt av minipulating stiften eftersom vi bara bytt alla stiften från 1 till 7 som indata, men "what if" vi hade ett större program som används dessa pins för andra saker, som till exempel, stift 2 allpies broms tryckkontroll för antilåsningssystemet. Du skulle inte bara godtyckligt sätta så pass som indata. Som skulle göra din bromsar värdelös (som skulle vara riktigt illa).

DDRB = 0b00000001;

Vi behöver ett sätt att bara påverka en bit, pin 0 bit. Tja, om du tittar ovan på "Eller", kan vi göra detta med en mask (inte karneval masken du tänker, men en binär mask.

DDRB = DDRB | 0b00000001;

Detta kommer att tar sin forna jag och "Eller" det till en mask. Masken är: 0b00000001. Ja det ser ut som den faktiska binärt tal, men om den tidigare DDRB var, säga, 0b01001010, sedan göra ett eller som med vår mask skulle vara: 0b01001010 | 0b00000001 = 0b01001011. Vad är annorlunda i resultatet. Just det, bara pin 0 bit ändras!

Denna statememt kan komprimeras ytterligare i C++:

DDRB | = 0b00000001;

Men det är inte vad som finns i programmet. Även om detta är helt giltiga, varför inte vi dra nytta av några av definitionerna i huvudfilen io.h. Jag menar, det är där för vår bekvämlighet, inte är det? Märka min användning av sammandragningar! Detta är samma i C++: "det är" är verkligen "det", precis som "DDRB | = 0b00000001" är samma som "DDRB = DDRB | 0b00000001 ". Jag sjunka i min stol med den dåliga analogin. Whataver, hjälper till!

Så varför "DDRB | = 1 << PINB0"?

1 << PINB0 är handlingen att skapa masken. "1" representerar vad kommer att införas i masken, den << är en vänster SKIFT operatör. Den gör exakt vad det står, och PINB0 är ett antal positioner som "1" kommer att flytta vänster. PINB0 är i huvudsak bara lika med 0. Så du börjar med en 0b00000000, och du lägger till "1" för att göra 0b00000001 och sedan du flytta den till vänster 0 positioner. Så är du kvar med 0b00000001, lika många från ovan. Så, Tänk om det var PINB4? Uttalandet skulle vara: 1 << PINB4. "1" skulle skiftas vänster 4 gånger resulterar i: 0b00010000. Kom ihåg att vi använder ett noll index, så finns det fyra 0s efter 1.

Låt oss gå vidare till While loop. Du har rätt, vi hade inte något i "oändlig loop" innan. Tja, nu behöver vi mikrokontroller att visa några åtgärder. Detta är endast möjligt i slingan. Slingan är där åtgärden upprepas om och om igen. Om åtgärden var ligger före öglan, skulle sedan åtgärden bara ske en gång, som att sätta riktningen av PIN-koden, som är lämplig för detta program. Men för att skapa för alltid blinka, vi måste vända PINB0 på och av i slingan. Här finns också där förseningarna kommer in. Om vi inte hade förseningar, vi skulle inte se lysdioden blinkar alls, det skulle se ut som det är bara å sedan blinkandet skulle uppstå snabbare än vad ögat kan uppfatta, så vi måste sakta ner.

Vi vet hur man ställer en viss bit i det binära talet, men vi vet inte hur man gör lite specifika "0" om det är "1" ännu. Följande kod gör just detta, men du kommer att märka att det är inte vad programmet visar. Första par linjer vänder lite till "1" (5 volt, ljus), och pausar för 100 millisekunder (Förresten, kan du använda mikrosekunder genom att ändra "ms" till "oss"). De andra två raderna visar PINB0 lite till "0" (0 volt, inget ljus). Nej, och jämförelsen kan inte bara göra en "0" från lite, men om du inte "~" den binära tal masken, det kommer att vända alla av 0s till 1s och alla 1s till 0s. Detta gör att du kan bara påverka den PINB0 biten och förvandla det till "0". Jag la parentesen bara för att innehålla maskering funktion så inte kunde inte hela maks och inte bara "1" innan det vänster skiftet "<<".

PORTB | = 1 << PINB0;
_delay_ms(100);
PORTB & = ~ (1 << PINB0);
_delay_ms(100);

Om förseningen kommer att vara samma för på och av, kunde vi förkorta de föregående fyra raderna till endast två och dra nytta av funktionen XOR. Kom ihåg att XOR stänger vår specifika stift till 1 om det är 0 och vice versa. Denna anvisning påverkar endast PINB0. Varje gång som instruktionen körs, kommer det knäppa lite till motsatsen.

PORTB ^ = 1 << PINB0;
_delay_ms(100);

Det var allt. Se det inte var smärtsamt alls.

Relaterade Ämnen

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änd...

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 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 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 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 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...

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...

Kasta inte det i deponin: "hur att reparera en borrmaskin med bruten eller saknade batteri för ca $3 (eller mindre)"

många människor har batteriet i deras borrmaskin går ut, och helt enkelt kasta bort. I själva verket fått jag 2 sladdlösa borrmaskiner med saknade batterier på en loppmarknad i en fri ruta, och som ni gissade gratis. Detta instructable visar du hur t...

Det snabbaste sättet att göra kit

jag lärde mig detta trick från min vän Becky, och det verkade smärtsamt uppenbart efter att ha sett den. Men hade jag aldrig trott detta på egen hand. Minst sagt, skulle det ha tagit mig ett tag att komma till denna slutsats.Men för att få på med den...

5 minut regenererade trä: det snabbaste sättet att få trä från en pall!

Jag har använt massor av regenererade pall trä år nu. Problemet är att jag ofta spenderar alldeles för mycket tid på att försöka ta bort virket från lastpallarna.Problemen med andra metoder är att de är tidskrävande och ofta "verktyg konsumerar"...

Det enklaste sättet att ansluta 2 datorer i ett LAN

utmaningen är att ge det enklaste sättet att ansluta 2 datorer med liknande system (kan vara windows, Linux, Mac, oavsett...), i ett LAN (Local Area Network).Krav:2 datorer med liknande OS.UTP patch/korsad kabel;Minst två RJ45 terminaler.RJ45 falsnin...

Hur man äter, det är-IT (utan att få ingå i glass)

så du kan ha varit till västkusten, och även om det, kanske du har snubblat på eller har införts för att Det är-It. Detta ice cream sandwich är mycket älskad av Bay Area infödda, och medan jag inte är en, jag har ätit i det underverk som är, det är-d...

Det billigaste sättet att spela RockBand med riktiga trummor

jag brukade älska RockBand innan jag lärde mig spela trummor, men efter ett tag att spela trummor jag försökte spela RockBand igen och jag var så mycket värre än innan. Så slutade jag spela RockBand under lång tid tills häromdagen när jag bestämde mi...

Det enklaste sättet att bränna Bootloader till Atmega328P-PU

Atmega328P-PU kan användas för att ersätta den brända atmega328 på Arduino UNO eller bygga en enkel fristående Arduino. Här skulle jag vilja dela de enklaste sätten att bränna bootloader med dig och hoppas det kan hjälpa dig.Steg 1: Material förbered...

Det enkla sättet att klippa din iller tånaglar

en händig knep för att lätt skära din iller tånaglar utan att du behöver en person, utan scruffing och utan en kamp!Vi kör en iller skydd och ofta har över 400 tånaglar att skära var tredje vecka. Detta behändiga trick gör att du kan ta din tid skära...

Svart vitlök - förmodligen det enklaste sättet att göra det hemma!

Pojkar och flickor, jag är tillbaka...Jag var verkligen upptagen för de senaste månaderna... Men jag är tillbaka.De som känner mig, vet att jag älskar att äta konstiga saker.Svart vitlök är en underbar fest, en söt svart pasta som smakar lite som ett...