PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Portzustand nach Initalisierung (Start/Reset)



herrma
29.03.2006, 07:00
Hallo zusammen,
wie verhalten sich Ausgänge eines PIC (Port A) unmittelbar nach dem Einschalten oder nach einem Reset? Ist, bzw. wie kann PIC-intern gewährleistet werden, dass die Ports den definierten Pegel haben?


THX
herrma

djdune
29.03.2006, 07:47
Ohne Definition sind die Ports als Eingang definiert. Wenn man sie jetzt auch im Programmcode als Ein oder Ausgang definiert, dann haben sie im Normalfall 0 Pegel, es sei denn, man aktiviert die internen Pullups sofern vorhanden

PICture
29.03.2006, 08:06
Hallo herrma!

Ich initialisiere alle Ports und alle im Programm benutzte Variablen durch ein Initialisierungsunterprogramm, das als erste nach dem Start des Prozessors aufgerufen wird. Um definierte Zustände der Ports zu haben, muss man sie mit mit "movlw 0xXX" und "movwf TRISX" bestimmen und danach mit "clrf PORTX" löschen. Bei einigen PICs (14-bit) muss noch vor dem laden des "TRISX" Registers ensprechende Bank mit "bsf STATUS,RP0" gewählt werden

So schauen meine alle Programme aus:


ORG 0x0000
call Init
Main ............
............
............



............
............
............
goto Main

Init ............
............
............



............
............
............
return

MfG

herrma
29.03.2006, 08:07
Ohne Definition sind die Ports als Eingang definiert. Wenn man sie jetzt auch im Programmcode als Ein oder Ausgang definiert, dann haben sie im Normalfall 0 Pegel, es sei denn, man aktiviert die internen Pullups sofern vorhanden

Hi,
wie gesagt, es geht um Ausgänge (Port A) und die Pegel der einzelnen Pins unmittelbar nachdem der PIC mit Ub versorgt, oder resetet wird.
Ich muss (möglichst PIC-intern) sicherstellen, dass unmittelbar nach dem Einschalten oder einem Reset alle Ausgänge den gewünschten Pegel haben.

Beispiel:
Mit einem Ausgang(RA.0) wird der Set-Eingang eines externen RS-FlipFlops gesetzt, mit dem über weitere Stufen z.B. eine Maschine(Säge) eingeschaltet wird. Aus Sicherheitsgründen darf es auf gar keinen Fall passieren, dass diese Maschine nach dem Einschalten der Steuerspannung startet. Natürlich kann man dies durch eine Zusatzbeschaltung verhindern, was aber nicht notwendig wäre, wenn dies picseitig garantiert werden könnte.

herrma
29.03.2006, 08:23
Ich initialisiere alle Ports und alle im Programm benutzte Variablen durch ein Initialisierungsunterprogramm, das als erste nach dem Start des Prozessors aufgerufen wird. Um definierte Zustände der Ports zu haben, muss man sie mit mit "movlw 0xXX" und "movwf TRISX" bestimmen und danach mit "clrf PORTX" löschen. Bei einigen PICs (14-bit) muss noch vor dem laden des "TRISX" Registers ensprechende Bank mit "bsf STATUS,RP0" gewählt werden


Ja OK, so (ähnlich) mache ich´s auch. Aber es bleibt die Frage, was vor der Initialisierung passiert.

PICture
29.03.2006, 11:07
vor der Initialisierung, nach dem anlegen der Betriebspannung auf den PIC, wenn Power On Timer in der Konfiguration enabled ist, wird 72 ms abgewartet, damit der Oscillator startet u.s.w. Erst nach dieser Zeit startet der Prozessor mit der Ausführung des Programms.

MfG

herrma
29.03.2006, 11:21
vor der Initialisierung, nach dem anlegen der Betriebspannung auf den PIC, wenn Power On Timer in der Konfiguration enabled ist, wird 72 ms abgewartet, damit der Oscillator startet u.s.w. Erst nach dieser Zeit startet der Prozessor mit der Ausführung des Programms.

MfG

O:)
OK, hab´ ich PWRT "natürlich" enabled, aber wie verhalten sich die Ports in der Wartezeit (72ms)?!

PS
Ich hoffe das ich nicht nerve :roll:

PICture
29.03.2006, 11:35
das weiss ich leider nicht, weil es für mich unwichtig ist. Du kannst am besten direkt beim Microchip (Forum?) fragen, im Reference Manual suchen oder selber untersuchen. Die letzte Möglichkeit ist die schnellste und sicherste.

MfG

herrma
29.03.2006, 12:00
.. selber untersuchen. Die letzte Möglichkeit ist die schnellste und sicherste.
MfG

So wie´s ausschaut, wird mir wohl nichts anderes übrig bleiben. 8-[
Werde mir dazu mal eine automatische Testvorrichtung bauen um einen Dauertest machen zu können.

1. Idee:
Mittels PIC-Impulssummierer die Ausgänge des Prüflings überwachen und den Probanden ein paar Tage so richtig quälen. :-b

Trotzdem THXXL für die Mühe.

kalledom
29.03.2006, 12:10
Hallo herrma,
hier die Reset-Werte für den PIC 16F87X laut Datenblatt:
- - RA5 RA4 RA3 RA2 RA1 RA0
PORTA Value on POR, BOR = --0x 0000
PORTA Value on all other resets = --0u 0000
TRISA Value on POR, BOR = --11 1111
TRISA Value on all other resets = --11 1111

Du mußt die Ausgangs-Pins mit PullUp-Widerstände auf +5 / High ziehen.
Bei der Initialisierung zuerst die späteren Ausgangs-Pins von PORTA auf 1 setzen und dann erst das Richtungsregister TRISA setzen. Sonst gibt es ein kurzes Low.

EinsamerUser
30.03.2006, 07:46
hier die Reset-Werte für den PIC 16F87X laut Datenblatt:
- - RA5 RA4 RA3 RA2 RA1 RA0
PORTA Value on POR, BOR = --0x 0000
PORTA Value on all other resets = --0u 0000
TRISA Value on POR, BOR = --11 1111
TRISA Value on all other resets = --11 1111


Aufpassen!!!
Laut datenblatt ist der PortA noch dem POR als Analog-Eingang geschaltet (Siehe im PDF Datenblatt S.43).

Also am besten überprüfen, welchen Pegel beim Einschalten anliegen.

Gruß
Stefan

kalledom
30.03.2006, 09:36
Stimmt, ist bei mir nie aufgefallen, weil ich den AD-Wandler mit den Pins RA0...RA3 + RA5 durch ADCON1 = 1--- 0010 immer benutzt habe.

Da ADCON1 nach Reset 0000 0000 ist, sind neben RA0...RA5 auch RE0...RE2 erst mal Analog-Eingänge.