Ultrasonic måttband (6 / 13 steg)
Steg 6: Konfigurera PIC som en I²C slav
Konfigurera modulen MSSP av PIC12LF1840T39AI vårt fall, kommer att vi behöva konfigurera PIC12LF1840T39A att fungera som en slav enhet. Första, som måste att göra, är att konfigurera modulen MSSP. Databladet beskriver proceduren i detalj, liksom transaktioner.
1. starta bit upptäcks.
2. S bit i SSP1STAT är inställd; SSP1IF ställs om avbrott på börja upptäcka är aktiverat.
3. matchande adress med R/W lite klart tas emot.
4. slaven drar SDA låg skicka en ACK till befälhavaren och anger SSP1IF biten.
5. mjukvara rensar SSP1IF lite.
6. programvara läser fick adress från SSP1BUF clearing flaggan BF.
7. om SEN = 1; Slav programvara anger CKP biten att släppa raden SCL.
8. befälhavaren stämplar ut en databyte.
9. slav enheter SDA låg skicka en ACK till befälhavaren och anger SSP1IF biten.
10. mjukvara rensar SSP1IF.
11. programvara läser den mottagna byte från SSP1BUF clearing BF.
12. steg 8-12 är upprepas för alla mottagna byte från Master.
13. herre skickar Stop skick, inställningen P bit av SSP1STAT och bussen går Idle.
Låt oss börja skriva vårt program. Åt sidan av vår vanliga konfigurationer, som oscillator konfiguration, vi måste ge värden till de MSSP register:
SSP1STAT = 0X80
1 = slew rate reglaget inaktiverad för Standard hastighet läge (100 kHz och 1 MHz)
0 = inaktivera SMBus särskilda ingångar
0 = indikerar att sista byte tas emot eller överförs var adress
0 = stopp bitar upptäcktes inte senast
0 = start bit inte upptäcktes senast
0 = skriva
0 = adress behöver inte uppdateras
0 = data överför komplett (inte inkluderar de ACK och stopp bitarna), SSP1BUF är tom
SSP1CON1 = 0X26
0 = ingen kollision
0 = inget spill
1 = gör det möjligt för den seriella porten och konfigurerar SDA och SCL stiften som källa för seriell port stiften
1 = inaktivera klocka
0110 = I2C slav-läge, 7-bitars adress
SSP1CON2 = 0X00
0 = allmänna samtal adress inaktiveras
0 = kvittering mottogs
0 = kvittering
0 = kvittering sekvens Idle
0 = få tomgång
0 = stoppvillkor Idle
0 = upprepade starta skick Idle
0 = klocka stretching är inaktiverad
SSP1ADD = 0X88
1000100 = 7-bitars slavadress
0 = används inte
SSP1MSK = 0X0F
Slav-adressmaskning, inte leta efter matchen i de första fyra bitarna
Så är dessa inställningarna måste vi tillämpa vår pic att göra det arbete som vi förväntar oss. Allt detta går in i initieringen rutin, innan vår oändlig loop.
När detta är gjort, måste vi skriva våra skriva, läsa, erkänna, negativa erkänna, tomgång, starta och stoppa rutiner. Det är alltid en trevlig sak att bygga något från grunden, men om någon arbetat med I²C innan, och redan har hans favorit/optimerade rutiner - använda bara de. Jag följde instruktionerna från databladet, även om jag redan hade skrivit I²C funktioner ett tag sedan. Jag började från scratch för att skapa den instructable.