Får ett märkligt fel, jag har en lysdiod kopplad till RA2 som styrs med pwm. Om jag slumpar fram ett värde eller anger ett fast till pwm funktionen funkar det utan problem så den är alltså utesluten.
if (PORTA.F0 == 0) { Diod += 5; }
if (PORTA.F1 == 0) { Diod -= 5; }
Problemet är att den börjar med att lysa (startvärdet är 70) men dimmas snabbt nedåt, även om RA1 är hög eller låg. Om jag kommenterar bort raden med RA1 så dimmas lysdioden istället upp till max, oavsett om RA0 är hög eller låg.
Jag initierar PORTA med
Finns det analoga funktioner på PORTA?
Dessa måste du slå av först.
Jag brukar slänga in:
CMCON=7;
ANSEL=0;
ANSELH=0;
Och ta bort de rader man får fel på.
> Jag brukar slänga in:
> CMCON=7;
> ANSEL=0;
> ANSELH=0;
> Och ta bort de rader man får fel på.
Ganska korkad metod. Rätt metod är naturligtsvis att kolla de exempel
som så gott som alltid finns i PORT kapitlet i databladet och göra rätt
från början.
Sen så är det ju uppenbart att 648A har analoga funktioner, det finns
ju ingen anledning att tveka om det. Jag såg också det där om "lite märkligt
med absolut inga analoga funktioner på en 16f648A", men jag viste inte hur det
skulle tolkas. Jag tänkte inte på att någon kanske trodde att 648A *saknade*
analoga funktioner...
Om jag hade tänkt efter lite hade jag ju förstått att 16F648A har analoga funktioner men igår trodde jag inte det eftersom jag råkade ta bort CMCOM och fick fortfarande fel så jag tog bort klabbet och tänkte "tydligen inte".
@Sodjan visst borde jag ha kollat i databladet, men tyckte felet var så märkligt. Har aldrig glömt detta tidigare så visste inte vad effekterna av det var.
Effekten av att behålla analoga funktionen påslagen och läsa porten
digitalt är alltid samma, porten läses som "0" oavsett vad man gör
med pinnen. Alltså just det du såg i ditt program.