Stap 3: 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. Zorg enkel ervoor dat de foto die u een PIN-code waarmee een externe Interrupt invoer heeft (meestal het label EXT of INT).
De software van de basislijn gekopieerd rechtstreeks van wat werd gebruikt in aflevering 2 met de LCD-routines verwijderd en de kleine wijzigingen aangebracht voor de 16F688 ter vervanging van de 12F683. De nieuwe software die bespaart was toegevoegd alle vier bytes van de IR-code ontvangen en daarna loopt door een eenvoudige set van logica om te bepalen of het een geldige opdracht. Elke routine "indrukken van een toets" schakelt een uitvoerregel van hoog naar laag voor 50 MS te simuleren een voorpaneel toets drukt. De vertragingstijd van 50 MS was willekeurig pakte omdat de meeste microprocessoren beslissen zal dat er een geldige toets drukt als de input waarde (stuiterde) niet is gewijzigd voor zo lang. U kunt het verlengen van die tijd, indien nodig, maar ik zou niet het verkorten.
In aflevering 2 we gewoon elke byte ontvangen naar de LCD gestuurd en had geen behoefte om op te slaan van de gehele vier bytevolgorde. In deze toepassing, echter wij slaan van alle vier en parse hen vervolgens voor geldige gegevens. Ziet u in de sectie variabelen declareren dat ik heb gedefinieerd, Byte1, Byte2, Byte3 en Byte4. Hoewel we kunnen gewoon het toevoegen van code om te bepalen welke byte die wij hebben ontvangen en vervolgens naar de juiste variabele schrijven, is het meer code efficiënt inspelen op de vier bytes als een matrix in C. De foto laat ons toe om dit te doen door het verstrekken van een aantal registers (FSR en INDF) indirecte adressering uit te voeren. U kunt zien hoe dat gebeurt in de "Save_Byte" routine. In dit geval weten we dat we zullen niet worden overschrijding van een pagina-einde (256 bytes) zodat we alleen hoeft te maken over het opzetten van de lagere 8 bits van het adres gegevens. Een ander ding om op te merken in deze routine is dat we wachten om te "Byte_Count" te verhogen tot nadat we het gebruiken als een adres-index. Dat komt omdat de index moet 0-3 voor onze gegevens terwijl "Byte_Count" gaat vanaf 1-4 terwijl tot nu toe ontvangen IR bytes.
Zoals ik al eerder zei, heeft het versterker-vak een microprocessor in die wat bepaalt te doen voor elke toetsaanslag. Ik vond dat het doet een paar eigenzinnige dingen dat ik niet graag dus deel van de software is toegevoegd om te "corrigeren" die
eigenaardigheden. Een van de dingen die het doet is aan de macht op vanuit de Standby-modus wanneer een toets wordt ingedrukt, niet alleen de / uit-toets. Dat lijkt misschien als een ok ding, maar het daadwerkelijk enkele complicaties veroorzaakt wanneer ik de software aan het schrijven was. Om dingen te vereenvoudigen, voegde ik een controle van de "Power_Up"-vlag in de decodering routine om te slaan met de opdracht alles anders dan het vermogen op sleutel decoderen als het versterker-vak nog steeds in standby-modus is.
Het vak versterker kan ook worden ingesteld voor 2.1 (stereo) modus of 5.1 (surround)-modus. Ik ben het met behulp van een enkele set luidsprekers rijden, dus ik wil het altijd in de 2.1-modus. Helaas, de microprocessor in het vak versterker wordt ingesteld op de modus 5.1 elke keer dat het vak vanuit stand-by gaat naar op of op een tijdstip dat de audio-ingangsbron wordt gewijzigd. Routine "Mode_2_1" wordt aangeroepen op de overgang vanuit stand-by om op en schakelt u de spreker kanalen terug naar 2.1. Ik vond dat ik nodig had over een 1 tweede vertraging na macht op voordat de spreker kanalen opdracht in werking zouden treden. Ook voegde ik de code te "Source_Sw" om te schakelen terug naar de 2.1 modus na het veranderen van de audio-ingangsbron maar dat vereist een kortere vertraging voordat de tweede opdracht kon worden gegeven.
Nou, dat is het voor 10 van de aflevering van "Fun met PIC vergadering". Stay tuned voor meer afleveringen.