mikrocontroller.net

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


Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

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

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
never mind Fehler lag im Programm habs grad gefunden.
Trotzdem danke

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht 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.:
LATAbits.LATA4 = 1

http://www.fernando-heitor.de/index.php?option=com...

Grüße,
Edson

Autor: Ben ■. (bloxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur noch mal der Vollständigkeit halber:

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und in sogenannte Schattenregistern reinschreiben

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

Grüße,
Edson

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Allerdings hat alles andere auch mit PORTA bzw PORTB hingehauen

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.