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
Meine Glaskugel sagt mir, dass Du einen PIC-Typen verwendest, der beim Initialisieren den Port A als analogen Eingang setzt.
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...
>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?
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...
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.
>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.
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?
>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
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.
>und in sogenannte Schattenregistern reinschreiben Die bei PIC18 fest eingebaut und unter dem Namen LATx ansprechbar sind. Grüße, Edson
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.