Kul med PIC församling - episod 10 (3 / 3 steg)
Steg 3: programvara
Programvaran länk nedan. Medan det är måltavlan för 16F688, är det lätt portas till andra versioner av bilden. Du kommer att behöva ä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 eller INT).
Originalplan programvaran kopierats direkt från vad användes i episod 2 med LCD rutiner tas bort och de mindre ändringar som gjorts för 16F688 att ersätta 12F683. Den nya mjukvaran som lades till sparar alla fyra byte av IR-koden fick och sedan körs genom en enkel logik för att avgöra om det är ett giltigt kommando. Varje "knapptryckning" rutin växlar en utgång linje från hög till låg för 50 ms att simulera en frontpanelen trycker på en tangent. Fördröjningstiden för 50 ms plockades godtyckligt eftersom de flesta mikroprocessorer kommer att besluta att det är en giltig nyckel pressa om indata inte har ändrat värde (studsade) så länge. Du kan förlänga denna tid, om det behövs, men jag skulle inte förkorta den.
I episod 2 vi helt enkelt skickade varje byte mottas till LCD och hade ingen anledning att spara hela fyra byten ordningsföljd. I denna ansökan, men vi sparar alla fyra och sedan tolka dem för giltiga data. Du kommer att se i avsnittet variabeldeklaration att jag har definierat Byte1, Byte2, Byte3 och Byte4. Medan vi kunde bara lägga till koden för att avgöra vilka byte vi fått och sedan skriva till lämpliga variabel, är det mer kod effektivt ta itu med de fyra byte som en matris i C. PIC tillåter oss att göra detta genom att tillhandahålla ett par register (FSR och INDF) att utföra indirekt adressering. Du kan se hur det är gjort i rutinen "Save_Byte". I detta fall vet vi att vi inte kommer korsar sidgränsen (256 bytes) så vi behöver bara oroa sig om att ställa in lägre 8-bitar av data adress. En annan sak att notera i denna rutin är att vi väntar med att öka "Byte_Count" fram till när vi använder det som en adress index. Det beror på index måste vara 0-3 för våra data medan "Byte_Count" går från 1-4 medan räknar emot IR byte.
Som jag nämnde tidigare, har rutan förstärkare en mikroprocessor som bestämmer vad du ska göra för varje knapptryckning. Jag hittade att det gör ett par udda saker som jag inte gillar så del av programvaran lades till "rätt" de
quirks. En av de saker som det gör är att makt på från Standby-läge när valfri knapp trycks ner, inte bara på strömknappen. Som kan tyckas vara en ok sak men det faktiskt orsakat några komplikationer när jag skrev programvaran. För att förenkla saker och ting, La jag en kontroll av flaggan "Power_Up" i rutinen avkodning för att hoppa över alla kommando avkodning annat än makt på nyckel om rutan förstärkare är fortfarande i Standby-läge.
Rutan förstärkaren kan också ställas in för antingen 2.1 (stereo) eller 5,1 (surround) läge. Jag använder det för att köra en enda uppsättning högtalare så jag vill alltid ha det i 2.1-läge. Tyvärr, mikroprocessor i rutan förstärkare s├ñtter som 5.1 varje gång som rutan går från Standby till på eller helst som ljudingångskälla ändras. Rutinmässiga "Mode_2_1" blir kallade om övergången från Standby till på och växlar mellan högtalare kanaler tillbaka till 2.1. Jag fann att jag behövde om en 1 sekunds fördröjning efter makt på innan kommandot högtalare kanaler skulle träda i kraft. Jag också till koden "Source_Sw" för att växla tillbaka till 2.1-läge efter ändra audio ingång källa men det krävs en kortare fördröjning innan det andra kommandot kunde utfärdas.
Tja, det är det för episod 10 av "Kul med PIC församlingen". Håll ögonen öppna för ytterligare episoder.