PIC RA4 als I/O nutzen

Gast #1371674
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
Gast #1371691
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...
Gast #1371704
>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?
Gast #1371712
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...
#1371713
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.
Gast #1371719
>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.
Gast #1371758
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?
Gast #1371791
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.
Gast #1371799
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.