Stap 2: Software
Hieronder vindt u de link van de software. Terwijl het wordt gericht voor de 16F688, is het gemakkelijk ported aan andere versies van de PIC. U zult moeten veranderen de regel waarmee de PIC-versie (lijst =) en het INCLUDE-bestand, maar die zijn intuïtieve veranderingen. De __CONFIG lijn wellicht ook tweaken alleen maar omdat een of twee van de gebruikte etiketten zijn anders gespeld in sommige van de INCLUDE-bestanden.
Zoals vermeld in de sectie hardware, het LCD-scherm in de 8-bit-modus begint en moet worden geboden aan de 4-bits modus. Als je kijkt naar de LCD initialisatie sectie ziet u dat de eerste vier opdrachten worden verzonden terwijl de LCD in 8-bits modus is. Omdat de LCD de gronden aan de lagere vier data lijnen ziet, sturen we alleen het bovenste knabbelen van de gegevens. Bijvoorbeeld, in de versie van de 8-bit interface zou sturen we hexadecimale bytes 30, 30, 30 te vertellen van het LCD-scherm dat we willen het initialiseren. In de versie 4-bits verzenden wij hex nibbles 3, 3, 3 maar het LCD-scherm ziet 30, 30, 30. De vierde knabbelen die wij sturen is 2 die het LCD-scherm als 20 ziet. Dit vertelt het overstappen naar de 4-bits modus. Na dat punt zullen we voor het verzenden van elke gegevensbyte, zoals een paar nibbles en het LCD-scherm zal ze stik intern alvorens ze te verwerken. De rest van de initialisatieopdrachten hebben dezelfde waarden zoals in de 8-bit-versie, behalve dat we verzenden 28 in plaats van 38 voor de functie opdracht instellen. Dat komt omdat '2' betekent 4-bits modus terwijl "3" betekent 8-bits modus.
Omdat we moeten sturen elke byte als achtereenvolgend nibbles voegen we een paar regels code aan de routine van de "Write_LCD". Het LCD-scherm verwacht eerst de bovenste knabbelen dus we een nibble swap doen om de bovenste knabbelen in de lagere vier bits en vervolgens uit de bovenste vier bits maskeren. Wanneer we de lagere knabbelen sturen we niet doen van de swap en gewoon masker uit de bovenste vier stukjes. Vrij eenvoudige wijzigingen, maar voor de langste tijd die ik om goed krijgen kon mijn gegevens berichten weergeven. Ik dacht dat iets mis is met de routine van de "Write_LCD" moet zijn, maar het verwarrend ding was dat de routine prima werkte bij het verzenden van de initialisatieopdrachten. Alleen knoeide het omhoog toen ik probeerde om het LCD-scherm overschakelen naar de modus voor gegevensinvoer. Wat tot slot vestigde ik op als een oplossing was om toe te voegen een vertraging van de 50us vlak voor de inschakelen puls die de LCD vertelt te vangen de eerste knabbelen. Zodra ik kreeg het werkend probeerde ik minder vertraging (het werkte neer over 25us). Ik heb ook geprobeerd om de vertraging net voordat het inschakelen voor de tweede knabbelen maar dat werkte niet. Interessant, werkte zetten de vertraging binnenkant van de eerste inschakelen puls. Ik schuurde de spec voor de Hitachi LCD controller chip, maar vond niets dat de noodzaak van de extra vertraging – uitgelegd alleen terwijl in data-modus, en alleen tijdens de eerste beet van elke byte wordt verwerkt. Het simpel gezegd dat u controleren moet de "drukke vlag" na elk stuk van de gegevens verzonden maar waarvoor de complexiteit van het LCD-scherm om te lezen modus over te schakelen. Het blijkt dat de miljoenen voorbeelden op het web van geen hulp waren ofwel en velen van hen liet me af als ze echt werkte zoals geschreven. Ik heb verschillende versies van het LCD-scherm, zodat het niet lijkt te een anomalie in slechts één van hen. Het mij nog steeds een beetje gek niet weten "waarom" het rijden.
In het belang van de volledigheid, moet ik vermelden dat de eerste drie opdrachten van de "Speciale functie Set" (de 3, 3, 3) zijn waarschijnlijk niet nodig. Als het LCD-scherm goed dan de spec inschakelt zegt kun je rechtstreeks naar het verzenden van de opdracht voor een 4-bits modus. Het doet geen pijn om te vertrekken deze eerste set van commando's in daar en ze kunnen helpen als het LCD-scherm heeft niet de nodige energie correct af. Dat is waarom ik zet ze er. Nou, dat is het voor aflevering 12 van "Fun met PIC vergadering". Stay tuned voor meer afleveringen.