Forum: Mikrocontroller und Digitale Elektronik PIC RA4 als I/O nutzen


von Rüdiger (Gast)


Lesenswert?

Hi

Ich möchte den RA4 als Ausgang nutzen. Da dieser ja open/drain ist, hab 
ich einen externen PullUp angeschlossen. Während man am PIC einen Reset 
auslöst, bleibt der Pin auch high, aber dann wird er sofort auf low 
gezogen und bleibt da, egal ob im Programm dann

PORTAbits.RA4 = 1
oder
PORTAbits.RA4 = 0

aufgerufen wird



Initialisiert wird der PIN ganz gewöhnlich mit TRISA=0


Weiß jemand weiter?
Rüdiger

von Gast (Gast)


Lesenswert?

Meine Glaskugel sagt mir, dass Du einen PIC-Typen verwendest, der beim 
Initialisieren den Port A als analogen Eingang setzt.

von Rüdiger (Gast)


Lesenswert?

sorry, PIC ist ein 18f242

mit dem TRIS register müsste man den PIN doch als digitalen Ausgang 
definieren können, steht so im Handbuch. Und außer dass AR4 open drain 
ist, hab ich keine weiteren Besonderheiten entdecken können...

von holger (Gast)


Lesenswert?

>sorry, PIC ist ein 18f242

>mit dem TRIS register müsste man den PIN doch als digitalen Ausgang
>definieren können, steht so im Handbuch. Und außer dass AR4 open drain
>ist, hab ich keine weiteren Besonderheiten entdecken können...

Da gibt es auch keine. Der Fehler kann eigentlich nur
irgendwo im Programm stecken. Wo greifst du noch auf PORTA zu?

von Rüdiger (Gast)


Lesenswert?

Also RA0, 1 und 2 gehen einwandfrei, 3 dient als analoger Input, 
funktioniert auch. 4 geht nicht, hab grad bemerkt, dass auch 5 nicht 
geht. Bei RA6 hängt der Quarz dran...

von (prx) A. K. (prx)


Lesenswert?

Rüdiger schrieb:

> mit dem TRIS register müsste man den PIN doch als digitalen Ausgang
> definieren können, steht so im Handbuch.

Das wohl. Aber schau mal beim ADC vorbei, auch wenn du den nicht 
verwendest. Der krallt sich ab Reset seine Pins und gibt die für I/O 
erst auf Anfrage frei.

von Rüdiger (Gast)


Lesenswert?

never mind Fehler lag im Programm habs grad gefunden.
Trotzdem danke

von holger (Gast)


Lesenswert?

>Das wohl. Aber schau mal beim ADC vorbei, auch wenn du den nicht
>verwendest. Der krallt sich ab Reset seine Pins und gibt die für I/O
>erst auf Anfrage frei.

Nicht beim 18f242. RA4 ist da kein analoger Eingang.
Und wenn er einer wäre müsste der Pullup ihn trotzdem hochziehen.

von Rüdiger (Gast)


Lesenswert?

wie gesagt ich hab den Fehler zwar gefunden bzw. eingrenzen können, aber 
es ist kurios. Der Aufruf von
PORTAbits.RA4 = 1;
setzt alle anderen Ausgänge von Port A auf low.

Der Ablauf:
while(1)
{
PORTAbits.RA4 = 1;
Delay10KTCYx(200);
PORTAbits.RA0 = 1;
Delay10KTCYx(200);
}

führt zu einem Wechselblinker zwischen RA0 und RA4. Weiß jemand Rat?

von Meister E. (edson)


Lesenswert?

>Weiß jemand Rat?

>PORTAbits.RA4 = 1

>PIC ist ein 18f242

Ausgangsregister spricht man bei PIC18 mit LATx an, dafür sind die extra 
eingeführt worden.

So z.B.:
1
LATAbits.LATA4 = 1

http://www.fernando-heitor.de/index.php?option=com_smf&Itemid=27&topic=1160.0

Grüße,
Edson

von Ben ■. (bloxx)


Lesenswert?

Nur noch mal der Vollständigkeit halber:

http://sprut.de/electronic/pic/fallen/fallen.html

von Chris (Gast)


Lesenswert?

Das ist normal, um das zu verhindern müsstest du mit hidden register 
arbeiten, sprich die Ausgangsports dir merken, und in sogenannte 
Schattenregistern reinschreiben, die Operation auf Schattenregister 
vollziehen, und dann das Register komplett auf das Port schreiben.

von Meister E. (edson)


Lesenswert?

>und in sogenannte Schattenregistern reinschreiben

Die bei PIC18 fest eingebaut und unter dem Namen LATx ansprechbar sind.

Grüße,
Edson

von Rüdiger (Gast)


Lesenswert?

thx, mit LATA hats geklappt. Allerdings hat alles andere auch mit PORTA 
bzw PORTB hingehauen... naja, sicherheitshalber stelle ich den ganzen 
Code um

Gruß
Rüdiger

von Meister E. (edson)


Lesenswert?

>Allerdings hat alles andere auch mit PORTA bzw PORTB hingehauen

Weil zwischen den Zugriffen mehr Zeit vergangen ist als in deinem 
Beispiel.

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.