Stap 11: Een paar woorden over de SPI protocol en haar positie in dit project
Een SPI (Serial Peripheral Interface)-bus biedt bidirectionele communicatie tussen twee apparaten. Gelijkaardig aan het eerder gebruikte I²C protocol, ook dit is Master/Slave gebaseerd. Het heet vaak vier draad interface; een SPI-bus worden echter vaak de 3, 5, 6 of zelfs meer draden gebruikt om te communiceren. De SPI-bus kan worden uitgebreid door slaven ernaar toe te voegen: hun MOSI, MISO, SCLK pinnen zijn aangesloten samen, hun slaaf Selecteer pin moet afzonderlijk worden getrokken. De slaaf Selecteer pin voor een SPI slaaf is als de slaaf adres bytevolgorde voor een apparaat van de I²C.
Meestal duurt het 8 klokken te voltooien een gegevensoverdracht. Terwijl de master apparaat verzendt een beetje naar de slaaf (op de MOSI-lijn), stuurt de slaaf een beetje aan de kapitein (MISO lijn). Deze overdracht wordt gesynchroniseerd door het kloksignaal op de netto SCLK. De frequentie van deze kloksignaal kan gaan tot tientallen in MHz.
De SPI-protocol en de PIC12LF1840T39A
De kern van een PIC SPI is module het SPIxSR shift register, de verschuiving doet zich voor bij elke kloksignaal op de pin SCLK. Gelijkaardig aan andere seriële randapparatuur, ook dit is dubbele gebufferd, de SSP1SR inhoud niet kan worden geschreven, of direct lezen. De gegevens die nodig zijn om te worden verzonden moet worden geschreven in SSP1BUF, dat fungeert als een register zenden op schrijven. Tijdens de overdracht, de gegevens wordt automatisch geladen in SSP1SR, en is geklokt uit vanaf hier.
Receptie is weer gedaan via het interne shift register. Wanneer 8 bits zijn klokte in de SSP1SR, de byte is geladen intu SSP1BUF, de gebruiker kan het lezen vanaf daar. Deze keer trad de SSPBUF op als een register van ontvangen.
De modules van de SPI gebouwd in de foto's kunnen werken tot 10 MHz. In ons geval zullen we in het bijzonder, ~ 10 KHz gebruiken.
Tot ons grote verdriet, zijn de SPI en de lijnen van de I²C multiplexed op de dezelfde pinnen. Dit betekent, zullen we moeten bits-bang, een van hen. Ik schreef enkele routines voor andere instructable van mij, ik gekopieerd naar deze processor, maar sloeg sommige problemen, dus schreef ik ze weer, ditmaal zonder enige betrokken interrupts.
Want ik ben met behulp van bits geneukt SPI, ik zal niet echt ingaan op details over het. Ik kom liever concentreren op het analyseren van de MAX7219-gegevensblad, om te zien wat ik heb te plaatsen op de pinnen te laten werken!
Hier is een afbeelding van het gegevensblad van de MAX7219:
U kunt zien hoe de lijnen moeten worden van een knevel gevoorzid, naarmate de tijd verstrijkt. Dat is precies wat mijn signalen moeten eruit op een toepassingsgebied, als ik klaar ben. Kijk naar het codevoorbeeld en analyseren wat er geschreven daar, dat zult u zien hoe het werkt voor het genereren van de bit-patroon dat we moeten.
Dit kan worden hergebruikt, hoeft u alleen te wijzigen van de #define-s in het headerbestand of waar u ze hebt geplaatst. Ik heb een interrupt aangedreven versie ook, maar mij got afhelpen ervan, omdat ik al die schuldig voor mijn niet-werkende weergave was. Later bleek het scherm was op de bovenste laag in plaats van de onderste laag - dit gaf mij de hoofdpijn. Echter, op dat moment ik al rolde het vertraging gebaseerde SPI bits-bang-algoritme, en niet wilde om terug te schakelen.
Opdrachten verzenden het beeldscherm zodra de code die u genereert de exacte golfvorm die je verwacht geschreven te genereren, kunt u bij! Er zijn tal van manieren om te testen uw algoritme, er zijn simulator, analysers, scopes die u met dit helpen kunnen.
Dit is een enkel woord transmissie, heeft het bijgesneden uit en ingezoomd uit de volgende afbeelding met de uitwisseling van gegevens
Oke, lijkt het kregen we onszelf door dit display ding ook. Nu moeten we deze PIC om haar MSSP module geconfigureerd als de meester van een I²C configureren.