Forum: Mikrocontroller und Digitale Elektronik PIC 16F876 Port RA1 als digitaler Eingang


von David (Gast)


Lesenswert?

Hallo

Ich schaffs einfach nicht, beim PIC 16F876 den Port RA1 als digitalen 
Eingang zu verwenden. Das hier ist mein Code, bzw, die betreffenden 
Ausschnitte:



So initialisiere ich die Ports:
1
void InitPorts(void)
2
{
3
  PORTA = 0x00;    // All outputs = 0
4
  TRISA = 0x03;    // RA0,1: IN RA2..5: OUT
5
6
7
  PORTB = 0x00 ;    // Ausgänge: RB4=1 RB3/RB5/RB6/RB7=0
8
  TRISB = 0x07 ;    // Eingänge: RB0..RB2
9
  OPTION &= ~0x80;
10
11
  PORTC = 0x23 ;    // RC0,1,5 = 1 (Mode, /Enable, /Brake)
12
  TRISC = 0xD8 ;    // RC0,1,2,5: OUT RC 3,4,6,7: IN
13
14
15
}


Und so frage ich den Port ab:
1
if (RA1 == 0)
2
{
3
PositionInit();
4
nextState = WaitForCommand;  // Set next State    
5
}

Obwohl RA1 mit einem Pullup auf VCC gezogen wird, springt das Programm 
andauernd in den if-Block hinein :-(

Sieht jemand, was ich falsch mache? Bie Port B funktionieren die 
Eingänge und ich habe sie ja, genau gleich konfiguriert. Und 
standardmässig ist ja der Port A auf die Digitaleingänge geschaltet und 
nicht auf die Analogperipherie ...

Vielen Dank und Gruss

David

von Chris B. (dekatz)


Lesenswert?

David schrieb:
> Und
> standardmässig ist ja der Port A auf die Digitaleingänge geschaltet und
> nicht auf die Analogperipherie ...

Ganz sicher nicht sondern genau umgekehrt und das steht auch im 
Datenblatt!
Nach einem RESET steht in den ANSEL-Register(n) b11111111 und das ist 
ANALOG!

: Bearbeitet durch User
von Wilhelm F. (Gast)


Lesenswert?

Zusatz zu meinem Vorredner:

Im Datenblatt befinden sich immer auch Blockbilder mit 
Gatterschaltungen, an denen man sich eine Funktionsweise noch mal genau 
anschauen kann.

Davon bin ich sogar mit dem anscheinend nur popeligen 12F675 auch immer 
wieder selbst betroffen.

von Chris B. (dekatz)


Lesenswert?

Ich schätze das 95% aller "Port-Probleme" auf der vergessenen 
Analog/Digital Umschaltung beruhen.
Und wenn man das mal "intus" hat, stolpert man irgendwann über das 
"Comperator-Problem" - welcher auch Analog ist, sich aber nicht mit den 
ANSELx bzw. ADCONx Register umschalten läßt, sondern über das COMCON 
abgeschaltet werden muss ;-)

von Wilhelm F. (Gast)


Lesenswert?

Chris B. schrieb:

> Ich schätze das 95% aller "Port-Probleme" auf der vergessenen
> Analog/Digital Umschaltung beruhen.
> Und wenn man das mal "intus" hat, stolpert man irgendwann über das
> "Comperator-Problem" - welcher auch Analog ist, sich aber nicht mit den
> ANSELx bzw. ADCONx Register umschalten läßt, sondern über das COMCON
> abgeschaltet werden muss ;-)

Genau.

Ich liebe und hasse das auch, aber da gibt es nichts, man muß einfach da 
durch.

Das Datenblatt ist immer dabei, es muß immer wieder hinein geschaut 
werden, wenn ich am PIC diesbezüglich was mache.

Normalerweise weigere ich mich davor, mal eben 150 Seiten Datenblatt zu 
drucken. Beim PIC machte ich es aber, jedoch nur etwa ein Drittel, was 
ich gerade am meisten brauchte.

Zur Ehrenrettung des PIC: Sowas gibt es bei anderen auch. Für den 8051 
habe ich allerdings schon alte Bücher aus der Vor-Internet-Zeit, die 
brauchen ja nicht mehr nochmals ausgedruckt zu werden.

;-)

von Jens M. (Gast)


Lesenswert?

Wilhelm F. schrieb:
> PIC 16F876 den Port RA1

Da ist ein analog Eingang mit drauf. Die sind nach Reset aktiv.
Hast du den ausgeschaltet?

Da fast alle Pics mehrere Funktionen auf einem Pin haben muss man die 
gewünschte aktivieren.

Etwas überspitzt gesagt geschieht das sinnvollerweise dadurch das man 
alle anderen deaktiviert ;-) Ist nun mal so.

> Normalerweise weigere ich mich davor, mal eben 150 Seiten Datenblatt zu
> drucken.

dann such im pdf mal nach ADCON

von Wilhelm F. (Gast)


Lesenswert?

Jens Martin schrieb:

> Wilhelm F. schrieb:
>> PIC 16F876 den Port RA1
>
> Da ist ein analog Eingang mit drauf. Die sind nach Reset aktiv.
> Hast du den ausgeschaltet?
>
> Da fast alle Pics mehrere Funktionen auf einem Pin haben muss man die
> gewünschte aktivieren.
>
> Etwas überspitzt gesagt geschieht das sinnvollerweise dadurch das man
> alle anderen deaktiviert ;-) Ist nun mal so.
>
>> Normalerweise weigere ich mich davor, mal eben 150 Seiten Datenblatt zu
>> drucken.
>
> dann such im pdf mal nach ADCON

Äääääh, du hast dich bestimmt im Zitat vertan. Macht aber nichts. Ich 
beteiligte mich hier nur mal an Hinweisen.

von Jens M. (Gast)


Lesenswert?

Wilhelm F. schrieb:
> Äääääh, du hast dich bestimmt im Zitat vertan.

Kann gar nicht sein ;-).

von David (Gast)


Lesenswert?

Danke für den Tip. Im Moment bin ich gerade überfordert. Hier zu Hause 
finde ich im Internet nicht das selbe Datenblatt wie am Arbeitsplatz... 
Das, welches ich jetzt gerade im Internet gefunden habe, ist irgendwie 
anders... Seltsam... Ich muss morgen im Labor nochmals nachschauen und 
melde mich dann nochmals.

Aber danke schon mal jetzt ;-)

von ./. (Gast)


Lesenswert?

> Hier zu Hause
> finde ich im Internet nicht das selbe Datenblatt wie am Arbeitsplatz...

Guggel findet bevorzugt steinalte, noch mit "Preliminary" 
gekennzeichnete
Versionen, von Microchip Produkten.

Vielleicht sollte Microchip seiner Webseite mal eine Sitemap goennen,
die immer auf die aktuellen Versionen zeigt.

Bis dahin sollte man seine Datenblaetter eben nicht ueber den Umweg
der Suchmaschine sondern direkt beim Hersteller suchen.

von Hugo (Gast)


Lesenswert?

Wilhelm F. schrieb:
> Normalerweise weigere ich mich davor, mal eben 150 Seiten Datenblatt zu
> drucken.

Eben, du sollst es ja auch lesen und nicht drucken.

von David (Gast)


Lesenswert?

Ok, jetzt hab ichs gesehen: Ich verwende fälschlicherweise das 
Datenblatt
PIC16F876A
anstatt
PIC16F876

Aber sehe ich folgendes richig?

Datenblatt PIC 16F876A, Seite 135 und 136:
Register CMCON Bit 0..2 sind per default auf 111

Somit sind die Komparatoreingänge per default auf Masse geschaltet und 
die Pins RA0..RA3 als Digitalports verwendbar?

Der Initialwert von CMCON steht auf Seite 43 (= 0000 0111)

Dies steht aber im Widerspruch zu der Note auf Seite 41:

"On a Power-on Reset, these pins are configured
as analog inputs and read as ‘0’.
The comparators are in the off (digital)
state."



Im Datenblatt von PIC16F876 (ohne A) sehe ich, dass die Pins per default 
auf die Analogperipherie geschaltet sind. Das werde ich als nächstes 
ausprobieren. Lieder aber erst übermorgen, ich muss an so ne lustige 
Weiterbildung :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.