Stap 6: De PIC als een slaaf van de I²C configureren
Configureren van de MSSP module van de PIC12LF1840T39AIn ons geval zullen we voor het configureren van de PIC12LF1840T39A om op te treden als een slave-apparaat. Eerste ding, dat moet gebeuren, is het configureren van de module MSSP. Het gegevensblad wordt deze procedure in detail, evenals de transacties beschreven.
1. start bit gedetecteerd.
2. S bit van SSP1STAT is ingesteld; SSP1IF wordt ingesteld als interrupt op Start detecteren is ingeschakeld.
3. adres matching met R/W beetje duidelijk wordt ontvangen.
4. de slaaf trekt SDA lage een ACK sturen aan de meester, en SSP1IF-bit ingesteld.
5. software wist de SSP1IF bit.
6. software leest ontvangen adres van SSP1BUF wissen de BF-vlag.
7. als SEN = 1; Slaaf stelt CKP beetje te laat de SCL-lijn.
8. de kapitein klokken uit een gegevensbyte.
9. slaaf rijdt SDA lage een ACK sturen aan de meester, en SSP1IF-bit ingesteld.
10. software wist SSP1IF.
11. software leest de ontvangen byte van SSP1BUF BF wissen.
12. de stappen 8-12 worden herhaald voor alle ontvangen bytes van de meester.
13. Master stuurt Stop voorwaarde, instelling P beetje SSP1STAT, en de bus gaat Idle.
Laten we beginnen met het schrijven van ons programma. Opzij van onze gebruikelijke configuraties, zoals oscillator configuratie, zullen we moeten waarden geven de MSSP registers:
SSP1STAT = 0X80
1 = slew rate control uitgeschakeld voor standaard snelheid modus (100 kHz en 1 MHz)
0 = SMBus uitschakelen specifieke ingangen
0 = geeft aan dat dat de laatste byte ontvangen of verzonden adres
0 = stop bit was niet laatst ontdekt
0 = start bit was niet laatst ontdekt
0 = schrijven
0 = adres hoeft niet te worden bijgewerkt
0 = gegevens overbrengen voltooid (omvat niet de ACK en Stop bits), SSP1BUF is leeg
SSP1CON1 = 0X26
0 = geen botsing
0 = geen overloop
1 = maakt de seriële poort en configureert de SDA en SCL-pinnen als de bron van de seriële poort pinnen
1 = disable kloksnelheid
0110 = I2C-Slave-modus, 7-bits adres
SSP1CON2 = 0X00
0 = algemene oproep adres uitgeschakeld
0 = Acknowledge werd ontvangen
0 = Acknowledge
0 = Acknowledge reeks Idle
0 = ontvangen inactief
0 = stop-voorwaarde Idle
0 = herhaald beginnen voorwaarde Idle
0 = klok uitrekken is uitgeschakeld
SSP1ADD = 0X88
1000100 = slaaf van de 7-bits adres
0 = niet gebruikt
SSP1MSK = 0X0F
Slave adres maskeren, kijk niet voor de wedstrijd in de eerste vier bits
Dit zijn dus de instellingen we aan onze PIC moeten te laten werken zoals wij verwachten. Dit alles gaat in de initialisatie routine, voordat onze oneindige lus.
Zodra dit is gebeurd, we schrijven onze schrijven, lezen, erkennen, negatieve moeten erkennen, stationair, starten en stoppen van routines. Het is altijd een mooi ding om te bouwen van iets vanuit het niets, maar als iemand met I²C vóór werkte, en al zijn favoriete/geoptimaliseerd routines - die enkel te gebruiken. Ik volgde de instructies van het gegevensblad, ook al had ik al een tijdje geleden I²C functies geschreven. Ik ben begonnen van kras omwille van de instructable.