AVR Assembler Tutorial 10 (6 / 10 stap)

Stap 6: Hoe de TWI stuurt gegevens?


Wij willen nu om te bespreken wat er precies gebeurt wanneer de TWI is het overbrengen van gegevens.

Het eerste wat dat we verzenden is de "start"-voorwaarde. Dit is een dalende SDA-signaal wanneer het signaal van de SCL hoog is. Dus als u op zoek bent op de twee regels ziet u de SCL gaan op en neer tussen de 0V en 5V in een blokgolf 490 keer per seconde. De SDA lijn, aan de andere kant zit er gewoon op 5V. Nu, plotseling, de SDA lijn druppels neer aan 0V tegelijkertijd die de SCL-lijn in de hoge (5V) deel van de cyclus is. Dit is een "start"-voorwaarde. Wanneer de slave zien van dat gebeuren het veren in actie. Nou... Ik zeg "veren in actie", maar aangezien de slaaf CPU-frequentie 16 MHz en de frequentie van de SCL 490 Hz betekent dit is dat de slaaf 32653 cycli te zitten rond twiddling haar duimen voor de volgende cyclus van de SCL komt langs. Dus het is nauwelijks "verende in actie", maar je krijgt mijn zin.

Wanneer de slaaf een start-voorwaarde detecteert, het horloges van de regels en begint met het opnemen op de volgende hoge klok-puls. De volgende 7 bits zal het adres van de slaaf die de meester wil praten met zijn. Dus, bijvoorbeeld, ik ben de slaaf en ik zie SDA dalen tot 0V tijdens een hoge puls op de SCL-regel. Dan ik weet transmissie is begonnen, dan zie ik de SCL Ga naar haar lage deel, dan terug tot hoge weer, ik kijk dan naar SDA tijdens deze hoge deel en zie het is laag (0V), dit betekent dat de eerste bit van het adres is 0, ik wacht de volgende hoge pols en opnieuw kijken SDA, nogmaals zie ik een 0V , zodat de volgende adres bit een 0 is, dan de volgende pols zie ik 5V op de SDA lijn, dus ik weet het volgende adres bits is een 1, en dit gaat op totdat ik heb de 7 adres bits. Zodra ik heb het hele 7 bits slaaf adres ik vergelijk het met mijn eigen adres, en indien zij afwijkt ik negeer de TWI-lijn na die. Als het is hetzelfde als mijn adres dan weet ik dat het hoofdbesturing wil met me praten.

Ik wacht voor de volgende hoge SCL pulse en als SDA een 1 is dan weet ik de master wil lezen van mij. Dit betekent dat de meester is in de "Master-ontvanger modus". Anders als SDA een 0 was zou in plaats daarvan het meester wil schrijven voor mij betekenen. Dit betekent dat de meester is in "Master zender Mode". Nu weet ik of ik ben de slaaf wordt van adres, en ik weet of het is een lees- of schrijfbewerkingen zijn. Dit nam 8 klokcycli en 8 bits (7 bits van het adres en een beetje lezen/schrijven) dat is goed omdat ik ben dit byte-bereik in een gegevensregister genoemd TWDR die ik benutten zal om erachter te komen als het gelijk aan mijn adres automatisch opslaat en als het een lees- of schrijfbewerkingen zijn verzonden.

Vervolgens moet ik erkennen dat ik dat informatie dus ik trek de SDA lijn laag in de volgende hoge SCL cyclus (de 9e cyclus sinds het begin) en dit de meester vertelt dan ik kreeg alles en ik klaar voor de volgende gegevenspakket ben ontvangen.

Als ik wil, kan op dit punt ik trek de SCL-lijn laag en hou het er zo lang als ik wil. Dit zal "pauze" dingen totdat ik laat het gaan weer hoog.

Zodra dingen blijven, stel dat het was een signaal van het schrijven. Dat betekent dat de kapitein stuurt mij nu sommige gegevensbytes. Dus ik weer kijken van de SDA-lijn en de bits te verzamelen als ze komen. Deze keer zal er 8 bits (gaande van MSB naar LSB, d.w.z. van bit 7 om het bit 0) en vervolgens, als ik heb ze allemaal zonder problemen, ik zal de SDA lijn onder brengen 0V in de 9e cyclus te erkennen dat ik heb ze weer. Dit kan voortduren, het verzenden van bytes na byte. Elke keer krijg ik een deze wordt automatisch opgeslagen in de TWDR en het is mijn taak te kopiëren uit daar en er iets mee te doen, voordat de volgende gegevensbyte komt in en erover schrijft. Tot slot, wanneer de meester voltooid verzendend me gegevens is, een "stop"-voorwaarde wordt toegestuurd. Dit is wanneer de meester de SDA lijn hoog in het midden van het hoge deel van de SCL-klokcyclus trekt. Als ik dit Zie ben ik klaar met het TWI totdat ik een start-voorwaarde, gevolgd door mijn adres opnieuw detecteren.

U ziet iets. Wanneer de SCL klokcyclus is laag is wanneer de controller is het opzetten van de volgende bits. Bijvoorbeeld als ik wil verzenden een 1 tot en met de slaaf in de volgende klokpuls cyclus, ik gebruik de tijd wanneer de SCL-lijn laag tussen cycli instellen de lijn van de SDA ofwel hoge of lage is zodat wanneer de volgende hoge cyclus mijn SDA verschijnt is lijn reeds uitbeelden van de bits die ik wil versturen. Vervolgens laat ik het ofwel 0 of 1 tot en met die hele hoge fase tot de SCL terug daalt en ik kan weer aan mijn nieuwe data-bit aanpassen. Aan de andere kant, als ik wil verzenden een START of een STOP, mij troep opwaarts een oorspronkelijke toestand tijdens het lage deel van de cyclus zoals gebruikelijk, maar dan in plaats van gewoon verlaten het als dat door middel van de volgende hoge fase, ik de overgang naar het tegenovergestelde staat tijdens het hoge deel van de cyclus.

Stel dat ik ben de meester en ik ben klaar met het overbrengen van mijn gegevensbytes en ik wil een stop signaal afgeven aan de slaaf. Tijdens de volgende laag cyclus nadat ik de acknowledge voor mijn laatste stukje van de gegevens zal ik trek de SDA lijn laag en wachten ontvangen heb, zal vervolgens tijdens de volgende grote fase van de SCL ik trek dan de hoge SDA-lijn. Deze overgang vertelt iedereen op de regel dat een stop-voorwaarde heeft voorgedaan.

U moet alle diagrammen op pagina's 208 tot en met 211 onderzoeken en begrijpen van de mechanica van de TWI-signalen. Zij bespreken ook "herhaalde begint", arbitrage tussen meerdere modellen, en andere dingen die ik niet krijgen in omdat we ze nog niet nodig.

Gerelateerde Artikelen

AVR Assembler Tutorial 2

AVR Assembler Tutorial 2

Deze tutorial is een voortzetting van het "AVR Assembler Tutorial 1"Als je niet hebt doorlopen Tutorial 1 moet je nu stoppen en dat men eerst doen.In deze tutorial zullen we onze studie van assembly language programmering van de atmega328p in de
AVR Assembler Tutorial 11

AVR Assembler Tutorial 11

Welkom bij Tutorial 11!In deze korte tutorial, zijn we eindelijk het eerste deel van onze laatste project bouwen.Het eerste wat dat u moet doen is gaat u naar de allerlaatste stap van deze tutorial en Bekijk de video. Dan kom hier terug. [onderbreken
AVR Assembler Tutorial 1

AVR Assembler Tutorial 1

Ik heb besloten om een serie tutorials over hoe te schrijven van assembler programma's voor de Atmega328p die het gebruikt in de Arduino microcontroller is schrijven. Als mensen geïnteresseerd blijven blijft ik stak een een week of zo totdat ik oprak
AVR Assembler Tutorial 6

AVR Assembler Tutorial 6

Welkom bij Tutorial 6!Today's tutorial zullen kort waar zullen we het ontwikkelen van een eenvoudige methode om gegevens tussen een atmega328p en een andere met twee poorten verbinden hen te delen. Wij zullen vervolgens nemen de dobbelstenen rol van
AVR Assembler Tutorial 8

AVR Assembler Tutorial 8

Welkom bij Tutorial 8!In deze korte tutorial gaan we een beetje een afleiding van de invoering van nieuwe aspecten van assembly language programmering te laten zien hoe onze prototyping componenten verplaatsen naar een aparte "gedrukt" printplaa
AVR Assembler Tutorial 9

AVR Assembler Tutorial 9

Welkom bij Tutorial 9.Vandaag zullen wij tonen hoe de controle van zowel een 7-segment display en een 4-cijferige weergave met behulp van onze ATmega328P en AVR assembler code. In de loop doen die we nemen van omleidingen moeten zal op how to use van
AVR Assembler Tutorial 7

AVR Assembler Tutorial 7

Welkom bij Tutorial 7!Vandaag gaan we naar eerste show hoe opruimen van een toetsenbord, en vervolgens laten zien hoe de analoge input poorten gebruiken om te communiceren met het toetsenblok.We zullen dit doen met behulp van interrupts en een enkele
AVR Assembler Tutorial 5

AVR Assembler Tutorial 5

Vandaag gaan we nemen een kijkje op de verschillende geheugenlocaties in de Atmega328p microcontroller en zien als we beter begrijpen kunnen hoe de dingen worden opgeslagen, waar ze worden opgeslagen en hoe de pointers en opzoektabellen werken.De tut
AVR Assembler Tutorial 4

AVR Assembler Tutorial 4

Welkom bij de handleiding voor nummer 4!In deze tutorial zullen we bouwen een circuit om te simuleren het rollen van twee dobbelstenen. Dan zullen we eerst een brute-force-programma welk doet naar de job schrijven. Dan zullen we dat programma op vers
AVR Assembler Tutorial 3

AVR Assembler Tutorial 3

Welkom op tutorial nummer 3!Voordat we beginnen wil ik een filosofische opmerking maken. Wees niet bang om te experimenteren met de circuits en de code die we proberen op te in deze tutorials bouwen. Draden rond wijzigen, nieuwe onderdelen toe te voe
Een geavanceerde benadering van programmering van Arduino & AVR

Een geavanceerde benadering van programmering van Arduino & AVR

Dit instructable is een must read voor iedereen die vertrouwd is met core AVR chips en Arduino.Nou, om meer specifieke, bij het lezen van de instructable, zal u zitten kundig voor:1) weten het juiste verschil tussen AVR en Arduino.2) programmering Ar
Programmeerbare LED

Programmeerbare LED

geïnspireerd door diverse LED Throwies, knipperende LEDs en soortgelijke instructables ik wilde doen van mijn versie van een LED aangestuurd door een microcontroller.Het idee is om de LED knipperende reeks Herprogrammeerbare. Deze herprogrammering ka
De generator van willekeurige golfvorm, voor ~ 20$

De generator van willekeurige golfvorm, voor ~ 20$

een willekeurige golfvorm generator (AWG) is een nuttige maar vaak duur stuk van testapparatuur (ebay voor lacht). Gebruiken om te bepalen component frequentiebereik, genereren van vervoerder signalen, als een LCR-meter als u een bereik, tune resonan
Star Trek deurbel Hack

Star Trek deurbel Hack

Ik heb altijd al een fan van de Star Treks en als zodanig ik was erg opgewonden toen mijn kamergenoot bracht het huis van een originele serie stijl Star Trek comm panel. Ik had nog nooit gezien een van deze, maar een snelle zoektocht nam ons mee naar