ATTiny USI I2C inledning - en kraftfull, snabb och bekväm kommunikationsgränssnitt för ATTiny projekt! (7 / 8 steg)

Steg 7: ATTiny USI I2C kod genomförandet - USI I2C slav



Till skillnad från master koden, USI I2C slav koden (usi_i2c_slave.c/h) är genomfört nästan helt med hjälp av USI avbrotten. Som tidigare nämnts, har USI modulen två avbrott, ett genereras vid upptäckt av ett tillstånd som START och den andra bygger på överflödet av den 4-bitars räknaren. Räknaren är avgörande för slav koden ska fungera, och förklarades inte mycket väl i handledning och koden jag läst. Jag har noterat nummer för varje stat i logiken i flödesschemat bilden. Dessa siffror (8 s, 1 och 0 är) är räknaren räkna värden som anger hur många fästingar disk bör räkna innan övergången till nästa tillstånd. Som räknaren är klockat måste använder SCL klockor, dessa värden berätta hur många SCL klocka pulser uppstå innan nästa tillstånd. I allmänhet, väntar något som väntar 8 klockan pulser på överföring/mottagning av en databyte medan något som väntar 1 klocka puls väntar på överföring/mottagning av en ACK/NACK. Några saker vänta 0 klockor, vilket innebär att de omedelbart fortsätta till nästa tillstånd eller en utökad del av det tidigare tillståndet (för skriva eller läsa?).

Så, som en slutanvändare, är du förmodligen mer intresserad av hur gränssnittet biblioteket till din egen kod! Detta är lätt, och här är varför. Jag har gjort bort med de ta emot/Transmissionsbuffert som användes i andra USI I2C implementeringar (främst de som baseras på AVR312 app-note) och istället implementeras den registrera bank protokollet beskrivs i början av denna handledning. Banken lagras som en matris med pekare, inte datavärden, så du måste bifoga lokala variabler i koden till minnesadresser i I2C registrera bank genom att ange pekare till peka på dina variabler. Detta innebär att stambanan koden har inte någonsin att avsöka I2C buffertar eller hantera data ankomster, värdena uppdateras omedelbart när de anländer. Det gör också programmet variabler att vara tillfrågade när som helst av I2C-gränssnittet utan att påverka stambanan koden (än förseningen på grund av avbrott). Det är ett ganska snyggt system. Låt oss återigen ta ett kort exempel.

Till exempel, låt oss säga att vi har en mycket grundläggande programvara PWM generator som driver en LED. Vi vill ha möjlighet att ändra PWM-värde (ett 16 - bitarsvärde, bara för att lära sig om pekare) utan att göra den huvudloop komplicerat. Med magiskt av asynkrona I2C slav, kan vi göra just det!

#include "usi_i2c_slave.h"

Definiera en referens till I2C slav register bank pekaren matris
extern char * USI_Slave_register_buffer [];

int main)
{
Skapa värde för 16-bitars PWM
unsigned int pwm_val = 0;

Tilldela den pwm-värde låg byten till I2C interna adress 0x00
Tilldela pwm värdet övre byte till I2C interna adress 0x01
USI_Slave_register_buffer [0] = (unsigned char *) & pwm_val;
USI_Slave_register_buffer [1] = (unsigned char *)(&pwm_val) + 1;

Initiera I2C slav med slav enhetsadress 0x40
USI_I2C_Init(0x40);

Ställa in pin A0 som utgång för LED (antar vi att oavsett chip vi på har pin A0 tillgängliga)
DDRA | = 0X01;

While(1)
{
PORTA | = 0X01; Aktivera LED
för (unsigned int jag = 0; jag < pwm_val; i ++)
{
PORTA & = ~ (0x01); Inaktivera LED
}
}
}

Och där har du det! Stora slingan hänvisar inte till I2C alls, men på skickar en PWM-värde på 16-bitars plats i I2C interna adress 0x00/0x01, kan vi helt kontrollera PWM LED! För extra stabilitet (se till att endast de pekare värden du använder är tillgängliga och att förhindra herrelösa pekare) föreslår jag att du ändrar #define USI_SLAVE_REGISTER_COUNT vara antalet register pekare du behöver, inte fler, inte färre. När en tillgång (läsa och skriva) görs på ett register index utanför intervallet 0x00 till USI_SLAVE_REGISTER_COUNT - 1, så skrivs ingenting och returneras noll.

Se Steg
Relaterade Ämnen

Hur man bär DODOCase på huvudet snabba och bekväma

Hur man gör DODOCase wearable som oculus och bekväma utan extra verktyg eller komponenter.Detta hack i DODOCase bygga natten @ Kairo HackerspaceSteg 1: Hur man bär DODOCase snabbt: Steg 2: Hur till bära DODOCase och göra det bekvämt ur lådan:...

Knappen för snabb och bekväm selfie

Selfies är nu en del av vårt liv. Var och en vill ha deras selfie, även gruppen selfie. Människor bär stora stora tillbehör för det, som en selfie sticka med en fjärrkontroll för slutare. Här är en enkel metod att göra en knapp som hjälper till att t...

Snabb och enkel Shorts utan ett mönster

jag är trött på förstör fina shorts arbetar i trädgården så jag hittade några gamla denim i min tyg stash och piskade upp några snabba och bekväma shorts.Allt du behöver är:-tyg-sax-måttband-den person som kommer att bära shorts (att mäta)-Strykjärn...

Hur man gör en Bow - PVC båge - snabb och enkel

hur man gör en Bow - PVC båge - snabb och lättI denna video Visa jag dig stegen för att göra dig själv en enkel båge av pvc.Du behöver inte någon värme eller omarbetning av PVC: n att göra detta, bara några enkla kapning och sågning behövs.Denna båge...

Kraftfull trianglar och sfärer: papper plattan Buckyballs - 1: a klass knorra - vecka 7

"Kraftfull trianglar och sfärer: papper plattan Buckyballs" är den sjunde lektionen i 10 i veckan Tinkering serien erbjuds till första klass studenter. Med hjälp av vardagliga material i öppna projekt, omvandlar vi vanligt till det extraordinära...

Snabb och smutsig Guide till Mac

Alla alltid säga hur lätt Mac-datorer är att använda och sedan människor prova och använda dem och... de har ingen aning vad något är. Denna handledning är en snabb och smutsig guide på grunderna i OSX för nybörjare som antingen att byta till en mac/...

Hur man gör en kraftfull, snabb hornet!

Detta är min första Instructable, så alla kommentarer är välkomna (positiva och negativa, så länge jag får feedback!).Hur som helst, jag visar dig hur man gör en bra papper hornet! Jag ser en massa Instructables säga kan du bara göra bra hornets med...

3 snabba och enkla recept (del tre)

Detta är det senaste receptet i denna serie. Onekligen, detta är egentligen inte en måltid per-säga, är mycket snabb och enkel men den använder också bara 3 ingredienser. Denna gång: jordgubbsglass. De återstående två recept finns på min profil, elle...

Skapa din egen hemsida | Gratis, rolig, snabb och enkel

I detta instructable, du lära dig att skapa din egen hemsida med hjälp av en gratis, snabb och lätt att använda builder.Steg 1: Skapa en Wix.com kontoGå till Wix.com och klicka på logga in. Klicka på "Jag är en ny användare". Skriv ett mail och...

Snabb och enkel - Office Safe

om du har några kontanter som du håller vid skrivbordet men du inte vill att alla ska se eller få på det, här är ett enkelt sätt att ha det praktiskt men människor kommer aldrig gissa där du håller det!Snabb och enkel kontoret säker!Steg 1: Vad du be...

5 snabba och enkla livet Hacks! -del 1

5 fantastiska tips och tricks du kan använda för att imponera på dina vänner och göra ditt liv lite lättare.http://www.youtube.com/user/ValvexFTWI denna video ser du hur man;-Ladda din iphone nästan två gånger snabbare (100% säkert för din telefon)-T...

En snabb och smutsig Voulge

Ungefär ett år sedan byggde jag en snabb och smutsig spjut för mina vänner och jag att använda för bekämpning av falsade machete. Sedan dess har jag tänkt att göra en andra polearm. För några veckor sedan gjorde jag sist. Här är hur jag gjorde det.St...

Snabb och smutsig Mosquito Trap

Mygga säsongen närmar sig snabbt - göra en enkel fälla för billigt. Teorin är att ljuset lockar myggor och fläkten suger dem i påsen (vanligtvis fragmentering dem i processen). Detta instructable är i experimentell fas och kommer att uppdateras när v...

En snabb och enkel gåva för en kreativ matlagning hushåll - jag gjorde det på TechShop San Jose

jag har varit medlem i San Jose TechShop sedan de öppnade sina dörrar, det är en underbar plats att skapa och/eller förstöra (med avsikt att återskapa något bättre, mer om det i en annan ' ibble). Det är också en fantastisk resurs för snabb och enkel...

Snabb och enkel kyckling pastasallad

En enkel, friska, välsmakande Pastasallad med smör stekt kyckling och en hel del krispigt trädgård färska grönsaker slängt i en lätt krämig yoghurt dressing kryddat med italienska örter är en uppfriskande sallad som är längtade efter för.Serverar : 2...

Snabb och lätt Orange Drink

denna snabb och enkel dryck kommer garanterat att bli en favorit vädret din på en fest eller helt enkelt bara avkopplande hemma. Friskare än de flesta drycker dina vänner kommer att tacka dig och frågat om receptet.Med möjlighet att lägga din favorit...

Snabb och enkel EasyUp portabla tält förankring

Slutresultatet på bilden.Vi bor i Florida, av EasyUP...Här är min EasyUp snabb och enkel ankring system. Till skillnad från typiska sträng och stakes eller sträng och vissa tung förankring material som en båt ankare, kräver detta en ingen sträng, ing...

Hur man gör snabb och lätt modell tråd träd

denna guide tar dig genom stegen för att skapa snabb och enkel modell tråd träd. Dessa träd är bra för modelljärnväg, arkitektoniska och landskapet modeller, eller helt enkelt för dekoration i ditt hem (om du gillar sånt). Dessa instruktioner tar dig...

Snabb och lätt pressad blomma ljus

Dessa ljus är super snabb och lätt, och gör stora gåvor för människor.För att titta på dem, skulle du tro att de tar en hel del färdigheter och tålamod - att trycka blommor för veckor sedan mödosamt placera dem i formar, innan du avslutar dem noggran...