AVR Assembler handledning 10 (6 / 10 steg)

Steg 6: Hur det tolerabla VECKOINTAGET överför data?



Vi skulle nu vilja diskutera exakt vad som händer när det tolerabla VECKOINTAGET sänder data.

Det första vi överför är startvillkoret"". Detta är en fallande SDA signal när SCL signalen är hög. Så om du tittar på de två raderna visas SCL-värdet går upp och ner mellan 0V och 5V i en fyrkantsvåg 490 gånger per sekund. SDA linjen, å andra sidan, sitter bara där på 5V. Nu, plötsligt, SDA linjen sjunker till 0V samtidigt SCL linjen är i hög (5V) delen av sin cykel. Detta är en "start"-tillstånd. När den slav see som inträffar det fjädrar till handling. Tja... Jag säger "fjädrar i action" men eftersom slaven CPU-frekvens är 16 MHz och den SCL är 490 Hz betyder att slaven har 32653 cykler att sitta och tråkigt tummarna innan nästa SCL cykel kommer tillsammans. Så det "växer knappast i handling" men du får min mening.

När slaven upptäcker en startvillkoret, klockor linjer och börjar spela in på nästa hög klocka pulsen. De nästa 7 bitarna blir adressen till den slav som befälhavaren vill prata med. Så, till exempel antar att jag är slav och jag ser SDA sjunka till 0V under en hög puls på raden SCL. Då jag vet överföring har startat, jag då se SCL-värdet går till dess låg del, sedan tillbaka upp till hög igen, då jag ser på SDA under denna höga del och se det är låg (0V), innebär den första biten av adressen är 0, jag då vänta på nästa hög puls och igen titta på SDA, igen jag ser en 0V , så nästa adress lite är en annan 0, sedan nästa puls jag se 5V på SDA linjen, så jag vet nästa adress lite är en 1, och detta pågår tills jag har 7 adress bitar. När jag har hela 7 bitars slavadress jag jämföra det med min egen adress och om det är olika jag ignorera bara raden TWI efter det. Om det är samma som min adress då vet jag ledarstyrning vill prata med mig.

Jag då vänta på nästa hög SCL puls och om SDA är en 1 då vet jag det master vill att läsa från mig. Detta innebär master i "Master mottagare Mode". Annars om SDA var 0 skulle istället det innebära master vill skriva till mig. Detta innebär master i "Master sändaren Mode". Nu vet jag om jag är slav som adress, och jag vet om det är en Läs- eller skrivåtgärder. Detta tog 8 klockcykler och överförda 8 bitar (7 adress bitar och lite Läs/skriv) vilket är bra eftersom jag automatiskt lagra det byte i ett dataregister som heter TWDR som jag använder för att räkna ut om det är min adress och om det är en Läs- eller skrivåtgärder.

Då måste jag erkänna att jag fått att information så jag dra raden SDA låg i den nästa hög SCL cykel (den 9: e cykeln sedan starten) och detta säger master än fick jag allt och jag är redo för nästa datapaketet.

Om jag vill, kan på denna punkt jag dra raden SCL låg och bara behålla det där så länge jag vill. Detta kommer att "pausa" saker tills jag låta det gå högt igen.

När saker och ting fortsätta, antar att det var en skriva signal. Det innebär att befälhavaren kommer nu att skicka mig några data-byte. Jag titta på SDA linjen igen och samla in bitarna som de kommer in. Denna gång blir det 8 bitar (kommer från MSB att LSB, dvs från bit 7 för att bit 0) och sedan, om jag fick dem alla utan några problem, kommer jag med SDA linjen till 0V igen i den 9: e cykeln att erkänna att jag fick dem. Detta kan fortsätta på obestämd tid, skicka byte efter byte. Varje gång jag får en det kommer att automatiskt lagras i TWDR och det är mitt jobb att kopiera den därifrån och göra något med det innan nästa databyte kommer in och skriver över den. Slutligen, när befälhavaren är färdiga skickar mig information, ett "stop" tillstånd att skickas. Detta är när befälhavaren drar SDA raden hög i mitten av den höga delen av SCL klockcykel. När jag ser detta är jag klar med det tolerabla VECKOINTAGET tills jag upptäcka en startvillkoret följt av min adress igen.

Märka något. När SCL klockcykel är låg när registeransvarige är att inrätta den nästa bit. Till exempel om jag vill skicka en 1 till slav i nästa klockan cykel, jag använder tiden när raden SCL är låg mellan cykler för att ange SDA alltid antingen hög eller låg så att när nästa hög cykel visas min SDA linje redan porträttera den lite som jag vill skicka. Då jag lämna den antingen 0 eller 1 till det hela kicken arrangerar gradvis tills SCL-värdet går tillbaka ner och jag kan justera igen till min nya data lite. Å andra sidan, om jag vill skicka en START eller stopp, jag satt upp ett starttillstånd under den låga delen av cykeln som vanligt, men sedan istället för att bara lämna det som det genom nästa hög fas, jag övergå till den motsatt läge under den höga delen av cykeln.

Till exempel säga jag är master och jag har slutat sända min data-byte och jag vill skicka en stoppsignal till slav. Sedan under nästa låg cykel kommer att efter att jag har fått kvittering för min senaste databit jag kommer dra raden SDA låg och vänta, sedan under nästa hög fas av SCL-värdet jag dra raden SDA hög. Denna övergång berättar alla på den rad som ett stoppvillkor har inträffat.

Du bör granska alla figurerna på sidorna 208 till 211 och förstår mekaniken i TWI signalerna. De diskuterar också "upprepade startar", mellan flera bakgrunder, och andra saker som jag inte kommer komma in eftersom vi inte behöver dem ännu.

Se Steg
Relaterade Ämnen

AVR Assembler handledning 11

Välkommen till handledning 11!I den här korta guiden kommer vi slutligen att bygga den första delen av vårt sista projekt.Det första du bör göra är att gå till det allra sista steget i denna tutorial och titta på videon. Sedan komma tillbaka hit. [pa...

AVR Assembler handledning 6

Välkommen till Tutorial 6!Dagens handledning kommer att vara kort där vi kommer att utveckla en enkel metod att kommunicera data mellan en atmega328p och en med två portar ansluta dem. Vi kommer ta sedan tärningarna rullen från läraren 4 och registre...

AVR Assembler handledning 8

Välkommen till Tutorial 8!I denna kort tutorial ska vi ta lite av en skenmanöver från att införa nya aspekter av assembler programmering att visa hur man flytta våra prototyper komponenter till ett separat "tryckta" kretskort. Anledningen är att...

AVR Assembler handledning 5

Idag kommer vi att ta en närmare titt på de olika minnesplatserna i Atmega328p mikrokontroller och se om vi bättre kan förstå hur saker lagras, där de lagras och hur pekare och uppslagstabeller fungerar.Handledningen kommer att delas upp i två delar....

AVR Assembler handledning 3

Välkommen till tutorial nummer 3!Innan vi börjar vill jag göra en filosofisk punkt. Inte vara rädd för att experimentera med kretsar och den kod som vi konstruerar i dessa tutorials. Ändra sladdar runt, lägga till nya komponenter, ta komponenter ut,...

AVR Assembler Tutorial 1

Jag har beslutat att skriva en serie tutorials om hur man skriver assembler program för den Atmega328p som är mikrokontroller används i Arduino. Om människor förblir intresserad fortsätter jag att lägga ut en en vecka eller så tills jag får slut på l...

AVR Assembler Övningsexempel 7

Välkommen till Övningsexempel 7!Idag vi första visar hur du rensar en knappsats och sedan visar hur du använder Analog ingång hamnarna för att kommunicera med knappsatsen.Vi kommer att göra med avbrott och en enda tråd som indata. Vi kommer tråd knap...

AVR Assembler Övningsexempel 9

Välkommen till Övningsexempel 9.Idag kommer vi att visa hur du kan styra både 7-segment display och en 4-siffrig display med våra ATmega328P och AVR assembler kod. I samband med detta får vi ta omvägar till hur du använder stacken för att minska anta...

AVR Assembler Tutorial 2

Denna handledning är en fortsättning på "AVR Assembler Tutorial 1"Om du inte har gått igenom Tutorial 1 bör du sluta nu och göra att man först.I den här guiden kommer vi fortsätta vår studie av assembler programmering av den atmega328p som använ...

AVR Assembler Övningsexempel 4

Välkommen till tutorial nummer 4!I den här guiden kommer vi att bygga en krets som kommer att simulera rullning av två tärningar. Sedan kommer vi först skriva en brute force-program som gör jobbet. Sedan kommer vi förenklar det programmet på olika sä...

En avancerad metod för Arduino & AVR programmering

Detta instructable är ett måste läsa för alla som är bekanta med core AVR chips och Arduino.Tja, mer konkret, när jag läste den instructable kommer du att kunna:1) vet väl skillnaden mellan AVR och Arduino.2) programmering Arduino med WinAVR & använd...

Utveckling styrelsen för Attiny84 mikrokontroller

Detta är en utveckling styrelse för Attiny84 mikrokontroller. Tha Attiny84 chip har 11 pins adresserbara med Arduino IDE, 8k flashminne för lagring av program och 512 byte ram tillgängligt för variablerna stack och program.En funktion av den Attiny84...

Hur man ladda program till en Arduino UNO från Atmel Studio 7

I denna korta Instructable kommer vi att lära sig att ladda ett program till en Arduino UNO ombord med Atmel Studio istället för Arduino IDE. Detta är användbart när du behöver utveckla ett program med fler advance funktioner eller på ett annat språk...

MRETV - Video, ljud och mycket mer från en standard Arduino!

MRETV - Video, ljud och mycket mer från en standard Arduino!Nu uppdaterad för Arduino 1.6.6 November 2015!Använd endast två resistorer och två dioder för att generera full skärm video. Text 47 x 29 8 x 8 tecken, dubbla vertikala upplösningen (47 x 57...

Älskling, jag krympte Arduino: flytta från Arduino till ATtiny och skriva din kod i ren AVR-C

Arduino är en stor hård- och mjukvaruplattform, men med alla dess funktioner är det också lite uppsvälld och ofta behöver du bara en liten del av alla funktioner. Projektet kräver ibland för att ha mindre och billigare enheter. Vad du behöver är ATti...

65xx teknik-församlingen språk programmering med W65C02SXB-handledning 1

Western Design Center (WDC) har beslutat att skriva en serie tutorials på hur du kommer igång med vår 65xx teknik och hur man skriver assembler program för 65xx familjen för ICs. Denna handledning kommer att baseras på använda det Standard W65C02 chi...

AVR fuse grunderna: kör en avr med en extern klocka

säkringar är bland de svåraste ämnen som jag stött på samtidigt lära sig om programmering microcontrollers. Även efter att söka och läsa flitigt, kunde jag fortfarande inte lyckas rensa mitt begrepp om dem. Men sedan jag började lära dem ta en i tage...

AVR programmering med Arduino, AVRdude och AVR-gcc

AVR är en gemensam, billig typ av mikro-controller som kan verka skrämmande att arbeta med, men oroa dig inte! När du har Ställ in grundläggande kunskap och kan de bli inte bara nyttigt, men viktigt att nya projektidéer som du drömmer upp!Denna handl...

Idiot's Guide till programmering AVR: s på de billiga (med Arduino IDE!)

Mikrokontroller är, utan tvekan, fantastiska små saker. De är mångsidiga, kraftfull och mycket små. Tyvärr, den sistnämnda drag också delas av både min plånbok och mina kunskaper i programmering. Min förståelse av C är dålig, och jag har knappt råd a...