Gränsyta för elektroniska kretsar till Arduinos (3 / 6 steg)

Steg 3: Omvandla vågformer till koden

Steg 3: konvertera Timing diagram in koden
Arduino utvecklingsmiljön skyddar användaren från mycket rörig koden detaljer. Detta är bra när du just har börjat och vill att blinka en LED. När vi vill samverka med andra elektroniska kretsar, dock måste vi samverka mer direkt med mikroprocessor.

Första låt oss diskutera hur man effektivt läser i 16 stiften på databussen. Eftersom jag använder Arduino Mega eftersom det har en hel del IO pinnar, kan jag använda Port A och Port C vara min 16-bitars databuss. Port A och Port C är stiften 22-37 på Arduino Mega. Databussen är dubbelriktad, vilket innebär ibland stiften att används som utgångar och andra gånger som insatsvaror så vi måste ställa in pin lägen snabbt samt läsa/skriva till stiften själva. Det LÅNGSAMMA sättet att använda dessa stift skulle vara följande:
pinMode(22,INPUT);
pinMode(23,INPUT);
pinMode(24,INPUT);

pinMode(37,INPUT);
bit1 = digitalRead(22);
bit2 = digitalRead(23);
bit3 = digitalRead(24);

Bit16 = digitalRead(37);

I denna takt skulle vi förlora data som vi skulle läsa data långsammare än data tas emot. Vi måste påskynda detta genom direkt samverkar med Arduino mikroprocessorn.

Arduino mikroprocessorn är som motorn inuti Porschen. De flesta gånger en förare av en bil verkligen bara måste förstå hur man gör bilen sluta och gå och behöver inte till fullo förstå det interna arbetet av bilens motor. En racerförare, men måste förstå de begränsningar och möjligheter för motorn att driva det att vinna loppet. Likaså behöver vi förstå detaljerna för ATMEL AVR som den Arduino motor att samverka med andra elektroniska kretsar.

För att förstå den Arduino microcontroller läser vi AVR databladet. Arduino Mega använder ATMEGA1280 som kan hittas här: www.atmel.com/dyn/resources/prod_documents/doc2549.pdf

Ja, detta är 444 sidor med detaljerad information som kan vara skrämmande vid första titt. Hittar du på sidorna 100 och 101 som du kan ange alla stiften på port A för C med en enda skriva till PORTA adress och PORTC adress. Vi kan också läsa från dessa portar men vi gör det inte med att läsa från PORTA och PORTC adresser men från PINA och PINC adresser. Likaså vi kan ange pin lägen för alla stift i hamnen på en gång genom att skriva till DDRA och DDRC adresser, en '1' anger PIN-koden för utdata och '0' till ingång.

Nu kan vi ställa in stiften till ingångarna och läsa dem mycket mer snabbt med hjälp av dessa kommandon:
DDRA = 0X00;
DDRC = 0X00;
Byte1 = PINA;
Byte2 = PINC;

Och att skriva till port stiften:
DDRA = 0XFF;
DDRC = 0XFF;
PORTA = Byte1;
PORTC = Byte2;

Nu när vi kan effektivt läsa och skriva buss stiften, måste vi titta på hur man effektivt läsa och skriva andra normala stiften. I mitt exempel projekt använde jag Arduino stift 2 – 12 för att styra de 11 icke-bus styrsignaler mellan DEI1016 och Arduino. Om vi vill skriva effektiva kod för dessa stift också (och vi gör) måste vi undvika de digitalWrite och digitalRead rutiner som är långsamma eftersom de gör saker som kontroll av att se att stiften är inställd i rätt lägen, etc. För att skriva mycket snabbt kan igen vi skriva direkt till hårdvara stift att undvika Arduino overhead. Inkludera filen avrio.h innehåller funktionerna avrio_WritePin och avrio_ReadPin som utför snabb skrivning och läsning. Jag tog en aning från glcd bibliotek och definierat min egen fastWrite rutin som är #defined att avrio_WritePin att göra koden mer läsbar. Om du vill kan du granska hur glcd biblioteket löser deras snabba skriver, även om du måste korsa några lager falskhet.

En sista bit av svårigheter vi måste översätta timing diagram kod – bara hur dröj vi för det angivna antalet nanosekunder? Hur lång är en nanosekund? Fråga: Hur lång tid det tar för dig att halka på en peeling och falla? Svar: En bananosecond. Ledsen för den dåliga ordvitsen. Arduinoen har en delay(milliseconds) och delayMicroseconds() men har inte en delayNanoseconds() funktion. När du arbetar på en hög nivå språk som C, har vi mindre kunskap om hur mycket tid en mikrokontroller tar för att köra våra kommandon. Detta blir riktigt knepigt som processorerna blir mer komplexa och har undervisning rörledningar med L1 och L2 minne gömställen, etc. I vårt Arduino fall är det inte alltför svårt som vi kan använda språket C förmåga för att inkludera inline-kod. Med hjälp av församlingen kan vi räkna instruktionerna och vet hur många klocka cykler (vanligtvis 1/16000000 av en sekund) en operation tar. Genom att använda "inline" församling, våra instruktioner inte får genomföras som subrutiner och därför tar inte längre till med hoppningen subrutin och trycka och poppar data från stacken. Nackdelen med inline församling är att kompilerade objektkod blir längre, men detta är acceptabelt eftersom vi inte gör en massa förseningarna nanosekund.

Igen stjäla jag lösningen i glcd bibliotek. Det innehåller de filen delay.h som innehåller funktionen _delay_cycles. Jag definierar sedan denna funktion som den mer lättläst DelayNanoseconds enligt följande:

Hans Heinrichs dröjsmål cykel rutin:
#define DelayNanoseconds(__ns) _delay_cycles ((dubbel) (F_CPU) * ((dubbel) __ns) / 1.0e9 + 0,5)

Du kommer att märka att det finns dubbla flytande punkt math pågår här som är oftast undvikas eftersom det är mycket tidskrävande och vi vill ha mycket små förseningar. Denna rutin använder flytande punkt math rutiner att automatiskt anpassa sig till den microcontroller klockfrekvens Infoga rätt mängd av församlingen koden inline med C-kod och det bästa är att den flyttal beräkningar utförs när du kompilerar och utförs inte av Arduino vid körning! Denna metod kan resultera i en singel-instruktion 'NOP' infogas som en upptagen fördröjning.

Se Steg
Relaterade Ämnen

Intro till Arduino

An Arduino är en öppen källkod microcontroller utveckling styrelsen. På ren svenska, kan du använda Arduino att läsa sensorer och styra saker som motorer och lampor. Här kan du ladda upp program till denna styrelse som sedan kan interagera med saker...

En nybörjares guide till Arduino

Efter några år av experimentera med Arduino, beslutade jag att det är dags att dela den kunskapen har jag fått. Så jag här går, en guide till Arduino, med nakna grunderna för nybörjare och lite mer avancerade förklaringar för personer som är något me...

Hemautomation - lägga till reläer till Arduino

Hur du väljer reläer – handlar om makt.När du väljer ett relä för anslutning till din Arduino måste du övervägaen) makt (spänning och ström) vad du vill slå på och av ochb) makt (spänning och ström) krävs för att driva reläet (dvs. att vitalisera rel...

Android G1 följetong till Arduino Robot

lära sig hur din Android mobiltelefon kan styra en robot med en Arduino ombord. Telefonen tar kommandon via telnet från en annan telefon eller en PC, så kan du fjärrstyra roboten. Detta projekt kommer annars inte ändra G1 så du kan fortsätta använda...

Skapa egna membran matris knappsatsen (och ansluter den till Arduino)

så du vill skapa din egen membran knappsatsen? Varför? bra att göra din egen knappsats kan vara bra av många skäl. Det är billigt och lätt att göra, den kan placeras i situationer där det kan vara vandaliserade eller stulen utan mycket frustration, h...

Prototyp elektroniska projekt med Arduino & 3D-utskrifter

Så har du denna stora idé om ett elektronik projekt. Du är inte riktigt säker vilken krets du kommer att använda, så måste du göra några prototyper. Vad bättre sätt att göra detta än med en Arduino och en skärbräda? I denna tutorial kommer jag visa d...

Hur gränssnittet Ultrasonic Sensor (HCSR04) till arduino uno

Ultraljudssensorer är mycket effektivare än andra hinder detektering sensorer. Ultraljudssensorer relativt billig och också de ultraljud utsläppsländerna och detektorer är portabla utan behov av komplicerade kretsar. Realtid stöd och konstgjorda visi...

Överföra data från Android till Arduino genom audio domkraft

Med detta projekt kan du skicka byte från android till arduino använder endast en audio jack-kontakt.Hur fungerar det?I princip, signal android en "morse" audio till arduino. Arduino i andra hand avkoda Morsealfabetet till en byte. Så enkelt.Del...

Android talar till Arduino

detta projekt ändrar något Google Android prov app kallas "Bluetooth Chat" så kan du skriva ett meddelande i Android app och att samma meddelande kommer att visas på en LCD-skärm bifogas en Arduino Uno.Funktioner: Android talar till Arduino1. kö...

Gränsyta för en vindgivaren till lysdioder

mål:Genom att använda Arduino, gränssnittet en vind/andedräkt sensor till lysdioder. Via Arduino, du kan programmera lysdioderna att svara på olika nivåer av vinden från sensorn, kontroll ljusstyrkan på enskilda lysdioder, och programmet ett unikt öv...

#3 Nybörjarguide till Arduino hårdvara del 1

Ibland är det de små sakerna i livet som kan förvandlas till stora stötestenarna och det gäller definitivt för noobs start på sin resa i Arduino. Det var säkert så i mitt fall.Så i den här videon jag redogöra för några fundamenta som du behöver för a...

Introduktion till arduino

Hej du kommer att läsa om elektronik! i detta instructable lär du om mikrokontrollanter, brödunderläggen, etcSteg 1: grundernaen kondensator butiker spänning de kan kan vara stora till mycket små mätt i ferads.resistors reglerar hur mycket spänning g...

Att lägga till Arduino stöd till ESP8266 med exempelkod test

ESP8266 packar en massa punch. Det är inte bara en WiFi-modul, den har också en anständig mikro-controller i byggt. Nu den bästa delen är har gemenskapen gjort programmering denna inbyggd mikro-controller mycket enkelt genom att lägga till Arduino st...

Ansluta nätström till arduino för nybörjare!

Hej du!! Jag är här här för att jag kan.Vi kan ge endast 5V till arduino styrelsen från batteripaketet eller från någon källa.Men vi kan inte arbeta med objekt som behöver mer kraft som vi bara ger 5v till arduino styrelsen.Vilket ger mer kraft kan o...

Smart hemautomation webserver på OpenWRT router WR703N kopplats ihop till Arduino, jämfört med Raspberry Pi och Ubuntu

Hämta WR703N Digest (340MB zip-fil):https://sourceforge.net/projects/wr703n/---------------------------------------------------------------------------------------------------------------------------------Kära läsare,Det finns många Linux styrelser p...

Ansluta en analog sensor textil till Arduino

Detta instructable förklarar hur du ansluter en analog sensor till Arduino (i vårt fall använder en Lilypad).Material du behöver:-en Lilypad Arduino (www.sparkfun.com)-en FTDI stiger ombord (www.sparkfun.com)-en USB A till mini B kabel (www.sparkfun....

DIY Intelligent Autonomus Robot (elektroniska Pet) /w Arduino

Jag älskar alla slags robotar speciellt autonomus eller intelligenta robotar, som har lite mer intelligens än att undvika ett hinder. Så jag bestämde mig att jag ska bygga min egen billig intelligent robot som har en bygga i kameran, avstånd sensorer...

Ladda upp skiss till Arduino Pro Mini med usbASP

I handledningen tvåspråkig (engelska, indonesiska, indonesiska versionen under avgränsningslinjen med kursiv stil), vi lär dig hur man laddar upp skiss ("skiss" är termen för programkod skriven för Arduino) till Arduino Pro Mini enhet med populä...

Hur du ansluter Liquid Crystal Display(LCD) till Arduino

ÖversiktI denna tutorial kommer du lära dig att ansluta en flytandekristallskärm (LCD) till en Arduino Uno och göra det Visa saker. LCD-skärmar komma till hands om du behöver Visa information på skärmen. De är billiga och vanliga. Ansluta en LCD till...