Flytta från PIC16F877A till PIC16F887

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
SeniorLemuren
Inlägg: 8429
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Flytta från PIC16F877A till PIC16F887

Inlägg av SeniorLemuren »

Flyttade över ett drivprogram för LCD från PIC16F877A till PIC16F887. Och det funkade inte. Port B, 4-7 och D, 0-3 används till data ut. Eftersom initieringen som låg på port D funkade men inte data ut från port B så misstänkte jag att det hade något att göra med ANSELH för B-porten. I Databladet för port B (3.4.1) kan man läsa följande:
The state of the ANSELH bits has no affect on digital
output functions. A pin with TRIS clear and ANSELH
set will still operate as a digital output, but the Input
mode will be analog.
Jag. prövade med att säta ANSELH til 0b00000000; och se det funkade. Har jag fått hjärnsläpp eller kan jag inte förstå vad jag läser? :humm:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Flytta från PIC16F877A till PIC16F887

Inlägg av sodjan »

En skillnad är att de äldre modellerna har inställningar där man valde
mellan ett visst antal kombinationer av analoga/digital pinnar. Man
kan inte välja inställning individuellt per pinne.

På de nyare har man fler ANSEL/ANSELH register där varje pinne (som kan
ha analog funktion) kan sättas analog/digtal individuellt via en egen bit.

Så man sätter t.ex inte länge det gamla värde "7" som var vanligt,
utan man gör CRLF på ANSL/ANSELH (d.v.s då man inte ska ha några
analoga funktioner alls, alltså).
ghu
Inlägg: 701
Blev medlem: 6 juni 2010, 14:28:18

Re: Flytta från PIC16F877A till PIC16F887

Inlägg av ghu »

SeniorLemuren: Om du läser den följande meningen i manualen kanske det klarnar:
This can cause unexpected
behavior when executing read-modify-write
instructions on the affected port.
D v s om du t ex skriver till en enskild bit i PORTB kan de andra bitarna i PORTB ändras om du inte har initierat ANSELH korrekt
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Flytta från PIC16F877A till PIC16F887

Inlägg av sodjan »

Ja just det, det var ju det som det gällde här... :-)

> Port B, 4-7

Om vi antar att ANSELx är satt så att dessa är analoga, så kommer en
skrivning till hela PORTB ändå att fungera som vanligt (MOVWF PORTB).

> D v s om du skriver till en enskild bit i PORTB.....

*Eller* t.ex först läser hela PORTB och sedan ändrar något och
skriver tillbaka det, så blir det samma effekt p.g.a att alla analoga
pinnar *läses* som "0".

På denna punkt är det inte någon skillnad på 877A och 887.

Om man däremot jämför med de nya 16F1xxx modellerna, så har dessa
även ett "latch" register för varje port, så där fungerar t.ex BCF/BSF LATB
alltid som förväntat.

Men bäst är att stänga av de analoga funktioner helt om man inte behöver dom.
Skriv svar