Dagens tips: Dela GPIO pinnar på PIC i A/D-läge
Postat: 29 september 2012, 22:23:04
Håller på med ett litet display, 3 st 7-segment, seriellt interface osv. Använder en PIC16F1827 i DIL18-kapsel där alla pinnar är använda. Jag är ganska konservativ och har därför låtit ICSP-pinnarna vara fria till detta enbart och det ställer till problem.
Problemet är att jag har en enda pinne till två funktioner: jag har monterat ett potentiometer så att man kan ställa intensiteten, det avläsas och värdet (som 8 bit) används för att ställa av-tid och på-tid så att det effektuellt blir en PWM-styrning av intensiteten. Detta fungerar bra men då jag inte minns vilken baudrate som det befintliga systemet använder är jag lite på herrens mark...
Alltså planerade jag att lägga in ett antal olika standard baudrates och peta med en knapp, tryck på den och baudrate byts till nästa steg osv. Men plötsligt var det två funktioner på samma analoga pinne... Besvärligt!
Men ändå inte! Jag lade helt enkelt med ett motstånd i serie men potentiometern så att när man vrider det ner till lägsta värdet finns det ändå en restspänning kvar vilket ger att intensiteten inte kan ställas lägre än ett visst lågt värde - och det är ju OK.
Från löparen på potentiometern har jag då klämt in ett 10k motstånd och därifrån går signalen till en AD-ingång. Men knappen (tangentbordstryck modell mini) kan kortsluta denna AD-ingång till GND och plötsligt är det bara att kolla: om värdet är X eller mer är det intensitet som gäller, är värdet under X är det för att man trycker på knappen.
Sedan räknar den så att man ska trycka någon sekund för att den ska registrera det hela men det fungerar bra på alla sätt, dock kvarstår test av det seriella interface där jag ska ha tillverkat sändarkortet (montera en RS422 drivkrets).
Som ytterligare en finess visas baudraten dels vid påslag och dels vid byte, en kort stund i båda fall. Är displayen "tom" tänds DP längst till höger för att visa att det är liv i dosan. Varje ändring av baudrate sparas i EEPROM i processorn och återkallas när det behövs.
För att spara en del jobb med att sätta i rött displayglas har jag vald en transparent röd Hammond 1591-låda, då behöver man bara att ha en bit frigolit mellan botten och kretskortet, då ligger displayen dikt an mot locket på lådan och den fungerar då som displayglas. Vill man kan man spraya själva lådans insida med svart målning, då blockerar man insyn och ströljus men det del skiter jag i, det får kunden fixa.
Men det var den analoga ingång med dubbelfunktion jag egentligen ville berätta om och ja, jag vet om att jag får begränsat område på AD-upplösningen att jobba med men det skiter jag i, man ställer ändå potentiometern till den lysstyrka man vill ha och exakt var på skalan det värde är har ingen betydelse, bara man kan reglera mellan A och O och målet befinner sig någonstans däremellan.
Problemet är att jag har en enda pinne till två funktioner: jag har monterat ett potentiometer så att man kan ställa intensiteten, det avläsas och värdet (som 8 bit) används för att ställa av-tid och på-tid så att det effektuellt blir en PWM-styrning av intensiteten. Detta fungerar bra men då jag inte minns vilken baudrate som det befintliga systemet använder är jag lite på herrens mark...
Alltså planerade jag att lägga in ett antal olika standard baudrates och peta med en knapp, tryck på den och baudrate byts till nästa steg osv. Men plötsligt var det två funktioner på samma analoga pinne... Besvärligt!
Men ändå inte! Jag lade helt enkelt med ett motstånd i serie men potentiometern så att när man vrider det ner till lägsta värdet finns det ändå en restspänning kvar vilket ger att intensiteten inte kan ställas lägre än ett visst lågt värde - och det är ju OK.
Från löparen på potentiometern har jag då klämt in ett 10k motstånd och därifrån går signalen till en AD-ingång. Men knappen (tangentbordstryck modell mini) kan kortsluta denna AD-ingång till GND och plötsligt är det bara att kolla: om värdet är X eller mer är det intensitet som gäller, är värdet under X är det för att man trycker på knappen.
Sedan räknar den så att man ska trycka någon sekund för att den ska registrera det hela men det fungerar bra på alla sätt, dock kvarstår test av det seriella interface där jag ska ha tillverkat sändarkortet (montera en RS422 drivkrets).
Som ytterligare en finess visas baudraten dels vid påslag och dels vid byte, en kort stund i båda fall. Är displayen "tom" tänds DP längst till höger för att visa att det är liv i dosan. Varje ändring av baudrate sparas i EEPROM i processorn och återkallas när det behövs.
För att spara en del jobb med att sätta i rött displayglas har jag vald en transparent röd Hammond 1591-låda, då behöver man bara att ha en bit frigolit mellan botten och kretskortet, då ligger displayen dikt an mot locket på lådan och den fungerar då som displayglas. Vill man kan man spraya själva lådans insida med svart målning, då blockerar man insyn och ströljus men det del skiter jag i, det får kunden fixa.
Men det var den analoga ingång med dubbelfunktion jag egentligen ville berätta om och ja, jag vet om att jag får begränsat område på AD-upplösningen att jobba med men det skiter jag i, man ställer ändå potentiometern till den lysstyrka man vill ha och exakt var på skalan det värde är har ingen betydelse, bara man kan reglera mellan A och O och målet befinner sig någonstans däremellan.