Ultrasonic måttband (11 / 13 steg)
Steg 11: Några ord om SPI protokollet och dess position i detta projekt
Ett SPI (Serial perifera Interface) buss erbjuder dubbelriktad kommunikation mellan två enheter. Liknar det tidigare använda I²C protokollet, även detta är Master/Slave baserat. Det kallas ofta fyra wire interface; ett SPI buss används dock ofta 3, 5, 6 eller ännu mer sladdar för att kommunicera. SPI bussen kan utökas genom att lägga till slavar till det: deras MOSI, MISO, SCLK stiften kopplas ihop, slave select pin måste dras separat. Slave select PIN-koden för en SPI slav är som slav adress byten ordningsföljd för en I²C enhet.
Vanligtvis tar det 8 klockor att slutföra en dataöverföring. Medan master enheten skickar lite till slav (på raden MOSI), sänder slav lite till master (MISO linje). Denna överföring synkroniseras av klocksignalen på SCLK net. Frekvensen av denna klocksignal kan gå upp till tiotals i MHz.
SPI protokollet och PIC12LF1840T39A
Kärnan i en PIC SPI är modul SPIxSR skiftregister, övergången sker med varje klocksignal på SCLK stift. Liknar andra seriella kringutrustning, även detta är dubbel buffrat, SSP1SR innehåll inte kan skrivas, eller läsa direkt. De uppgifter som behövs skickas måste skrivas in i SSP1BUF, detta fungerar som ett transmit register på skriva. Under överföringen data laddas automatiskt i SSP1SR och är klockat härifrån.
Mottagning sker igen via den interna skiftregister. När 8 bitar är klockade in i SSP1SR, byten är laddad LundaEkonomernas SSP1BUF, användaren kan läsa den därifrån. Den här gången, agerade SSPBUF ta emot register.
SPI moduler byggs i bilder kan arbeta upp till 10 MHz. I vårt fall, kommer att vi använda ~ 10 KHz.
Till vår stora sorg, är SPI och I²C linjer multiplexed till samma stift. Detta innebär, måste vi bit-bang en av dem. Jag skrev några rutiner för en annan instructable till mig, jag kopierade den till denna processor, men drabbades vissa svårigheter, så jag skrev dem igen, denna gång utan några avbrott involverade.
Eftersom jag använder bit slog SPI, jag kommer inte riktigt gå in på Detaljer om det. Snarare ska jag fokusera på analysera MAX7219 databladet för att se vad jag har att lägga på stiften det fungerar!
Här är en bild från MAX7219 databladet:
Du kan se hur raderna måste växlas, eftersom tiden går. Det är precis vad min signaler måste se ut på ett scope, när jag är klar. Titta på kodexemplet och analysera vad som står där, ser du hur det fungerar för att generera lite mönster vi behöver.
Detta kan återanvändas, du bara behöver ändra den #define-s i huvudfilen eller varhelst du placerat dem. Jag har ett avbrott driven version också, men jag fik befria för den, eftersom jag om detta var skyldig för min icke-arbetande display. Mer sistnämnd vände det displayen var på det översta lagret i stället för det understa lagret - detta gav mig huvudvärk. Men då jag redan rullade över till dröjsmål-baserade SPI bit-bang algoritm och inte ville byta tillbaka.
När koden du skrev genererar exakt vågformen du förväntar sig att generera, du kan gå vidare för att skicka kommandon till din skärm! Det finns många sätt att testa din algoritm, det finns simulator, analysatorer, scope som kan hjälpa dig med detta.
Detta är en enda ord överföring, har beskurna ut och zoomas från nästa bild med utbytet av uppgifter