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.
Dagens tips: Dela GPIO pinnar på PIC i A/D-läge
Dagens tips: Dela GPIO pinnar på PIC i A/D-läge
Senast redigerad av blueint 29 september 2012, 22:28:17, redigerad totalt 1 gång.
Anledning: var: Dagens tips.
Anledning: var: Dagens tips.
- bachler
- EF Sponsor
- Inlägg: 189
- Blev medlem: 23 december 2003, 13:58:24
- Skype: alexander.bachler.jansson
- Ort: Sala
- Kontakt:
Re: Dagens tips: Dela GPIO pinnar på PIC i A/D-läge
Ja, det var ganska smart.
Funkar ju när man ändå inte behöver "potta" ner värdet ända till noll.
Men det skulle väl ha gått att lösa i mjukvaran iofs. Så värdet där potten bottnar blir 0 i funktionen den styr.
Man skulle också kunna ha flera knappar på samma sätt (på samma pinne). beror på hur många ADC bitar man har på sig. och hur hög upplösning man behöver till potten.
Jag kom och tänka på dethär med automatisk baudrate detektering.
Har pysslat en del med att flasha PICar med en jobbarkompis Dataman S4 och den kan göra en "Auto baud sense" grej, där den promptar en efter att trycka på SPACE några gånger.
Hitta detta:
http://www.iol.ie/~ecarroll/autobaud.html
Verkar intressant, skall försöka lagra undan det i hjärnan tills jag behöver använda det.
Dock brukar de flesta av mina projekt som snackar RS232 bara köra 9600 om inte det verkligen behövs 115200 eller liknande.
Funkar ju när man ändå inte behöver "potta" ner värdet ända till noll.
Men det skulle väl ha gått att lösa i mjukvaran iofs. Så värdet där potten bottnar blir 0 i funktionen den styr.
Man skulle också kunna ha flera knappar på samma sätt (på samma pinne). beror på hur många ADC bitar man har på sig. och hur hög upplösning man behöver till potten.
Jag kom och tänka på dethär med automatisk baudrate detektering.
Har pysslat en del med att flasha PICar med en jobbarkompis Dataman S4 och den kan göra en "Auto baud sense" grej, där den promptar en efter att trycka på SPACE några gånger.
Hitta detta:
http://www.iol.ie/~ecarroll/autobaud.html
Verkar intressant, skall försöka lagra undan det i hjärnan tills jag behöver använda det.
Dock brukar de flesta av mina projekt som snackar RS232 bara köra 9600 om inte det verkligen behövs 115200 eller liknande.
Re: Dagens tips: Dela GPIO pinnar på PIC i A/D-läge
bachler: problemet för mig är att det går att ställa vilken baudrate som mastersystemet kör, jag kan alltså inte veta och det går inte att ställa om då andra delar beror på rätt baudrate. Så visst var det lite bök med att fixa denna växling men jag ska ju bara göra det en enda gång, sedan fungerar det i alla lägen.