Stap 7: Uitvoering van de I²C routines
Het is zeer belangrijk om te onthouden, dat we praten over een slave apparaat hier, laten we dat in gedachten te houden.
Als u functies schrijven voor dit, zijn dit de functies die u moet implementeren.
void AckI2C (void) Deze functie is verantwoordelijk voor de ACK-bit, en deze te verzenden. Erkennen is verzonden voor elke byte, dat met succes door onze slaaf ontvangen werd
void IdleI2C (void)
Maakt van de bus gaan idle
void CloseI2C (void) Sluit de I²C bus, geen verdere overdracht wordt gemaakt, niet tot een OpenI2C() heet
unsigned char ReadI2C (void)
Leest de bus, en resulteert in de waarde die zij ontvangt
unsigned char DataRdyI2C (void)
Signalen van een volledige gegevens transactie
unsigned char WriteI2C (unsigned char)
Schrijft een byte naar de I²C bus
void OpenI2C (unsigned char, unsigned char)
Wordt geopend en configureert de MSSP module voor I²C communicatie
Zoals ik al zei, ik zal met behulp van het gegevensblad kort om dit werk: ik SSP1 interrupt inschakelen en behandelen alles I²C gerelateerde in de interrupt service routine. Aangezien deze toepassing niet tijdkritisch, geven niet dit ons teveel problemen. Bekijk mijn interrupt service routine die de I²C communicatie verzorgt:
Ik maakte enkele knipsels van communicatie met mijn logic analyzer:
Zijn blij met het zien van dit werk, stuurde ik het nummer 6500 via I²C aan de andere PIC, gesneden in twee stukken.
6500 1964h in de hexadecimale notatie is, dit is wat we moeten zien als de progressbar opvult. En het is een match!
Vlek voort weer! Ik moest snijden in twee stukken, om ze gemakkelijker te zien, er zijn tientallen van microseconden tussen de twee datatransmissies.
Een packet-achtige vertegenwoordiging van de uitwisseling van gegevens:Een afbeelding van de Raad van bestuur worden getoond van de dingen wij bevelen hem aan:
De PICKIT is het leveren van huidige naar het circuit. Ik herinner me lezing over, dat de maximale stroom die het kan bieden ongeveer 30 is mA. Ik zeg, dat is een vrij goede verbruik voor een circuit met 32 LED-s!
Dit gedaan, we hebben een PIC, die reageert op opdrachten van de I²C. De nieuwe randapparaten die we zojuist hebt gemaakt zal worden gebruikt in onze ultrasoonmeting tape.