Kul med PIC församling - Episode 22 (4 / 4 steg)
Steg 4: programvara
Länkarna listas nedan. Medan det är måltavlan för 12F683, är det lätt portas till större versioner av bilden. Det kräver oftast ändra namn som TRISIO till TRISA och GPIO att PORTA. Du måste också ändra raden som identifierar den PIC versionen (lista =) och INCLUDE-filen men de är intuitivt förändringar. Den __CONFIG linjen kan också behöva tweaking bara för att en eller två av de etiketter som används är stavat fel i några av inkluderade filer. Se bara till att PIC du använder har en PIN-kod som gör att externa avbryta indata (vanligtvis märkt EXT). Som vi sett tidigare, 16F688 (14-polig PIC) kan användas med samma fysiska pin anslutningar som 12F683 om du vill ha mer I/O pins.
Programvaran är i princip samma kod som skrevs för 4-bitars LCD gränssnittet i Episode 12. De primära förändringarna är i hur data-byte är utgång för det seriella gränssnittet och i PIC hantering av I2C-protokollet. I2C rutinerna kan hittas lätt på internet, men som med många saker på internet, de behövde för att inspekteras för att säkerställa att de följde specifikationen. Ett fel jag hittade var slutet av "i2cwaitack" rutin där SDA pin sattes tillbaka till en utgång för SCL fodrar togs låg att slutföra klockcykel. Som skulle kunna ha både PIC (master) och slav enheten försöker köra SDA linjen på samma gång. Rutinen uppenbarligen har fungerat för andra folk men som gör inte det rätt.
I2C-modulen har en 8-bitars följetong till parallellförskjutning register byggdes för anslutning till LCD-skärmen. Bitars definitionerna visas i diagrammet ovan. De övre fyra bitarna ansluta till de övre fyra data linjerna på LCD-skärmen, precis som i en typisk 4-bitars LCD gränssnitt. De nedre fyra bitarna är anslutna till olika kontroll stift på LCD-skärmen. I en normal LCD gränssnittet dessa kontroll stift skulle antingen vara svårt kabelansluten (som R/W) eller kontrolleras med en GPIO linje på bild. Bakgrundsbelysning kontroll kommer inte ha någon effekt för många LCD-moduler för bakgrundsbelysningen är oftast hårt kabelansluten för att vara på.
I normal LCD gränssnitt aktivera linjen skulle växlas högt och sedan tillbaka låg för att orsaka LCD till spärren data. I denna ansökan hantera vi övergången genom att skicka varje byte två gånger. Den första skicka har inställningen aktivera lite hög och andra skicka har inställningen aktivera lite låg. För en normal 4-bitars gränssnitt som vi måste göra sänder två för varje byte eftersom vi skickar den övre nibble och sedan den lägre nibble. LCD-skärmen sedan bitar av två nibbles tillsammans internt. För I2C skickar ansökan vi faktiskt sluta att göra fyra för varje byte. Typ av ineffektiva men det är det pris vi betalar för ett gränssnitt för två tråd.
Som jag nämnde tidigare, gjorde jag en liten fix på "i2cwaitack" rutin som jag hittade på nätet. Jag lade också till lite kod till slutet av rutin. Om slaven inte erkänna en överföring från master kommer sedan programvaran att återställas genom att titta på hund Timer (WDT). Nyare PIC chips har en programvara Återställ kommando som kan användas i stället. Ett alternativ för vissa I2C program skulle vara att helt enkelt ringa till "i2cstop" och sedan fortsätta där koden slutade.
Tja, är det det för Episode 22 i "Kul med PIC församlingen". Håll ögonen öppna för ytterligare episoder.