Forum: Mikrocontroller und Digitale Elektronik PIC16F887 COMF funktioniert nicht


von Michael (Gast)


Lesenswert?

Hallo,
ich habe gerade etwas mit Assembler an meinem PIC16F887 rumprogrammiert.
Als ich versucht habe das Kompliment von PORTA zu nehmen blieb PORTA 
aber immer auf HIGH, bei einem GPR hat der COMF Befehl aber wunderbar 
funktioniert.

Warum bekomme ich mit diesem Program ein durchgängiges HIGH signal an 
PORTA ?
Ich müsste doch ein schnell wechselndes Signal bekommen.

...
CLRF PORTA

LOOP
COMF PORTA,1
GOTO LOOP
...

Aber wenn ich ein GPR nehme, von diesem immer das Kompliment nehme es 
ins W kopiere und dann in PORTA funktioniert alles wie es soll und ich 
bekomme ein Wechselndes Signal an meinem Oszillator.

von *** (Gast)


Lesenswert?

Ist PORTA als Eingang oder Ausgang konfiguriert?

von Jürgen D. (poster)


Lesenswert?

Ist Port A auch auf Digitaler Ausgang geschaltet.
Bei manchen Pics sind da Anlalogports drauf.

Probiere mal LATA anstatt PORTA

von Walter (Gast)


Lesenswert?

Vllt. Stichwort "read-modify-write" problem?

Gruß,

Walter

von *** (Gast)


Lesenswert?

Vielleicht bringt es aber auch schon was, wenn du dem Oszillator auch 
ein paar Komplimente machst ;-)

von Max H. (hartl192)


Lesenswert?

Was hängt an PORTA? Lies dir mal das durch: 
http://www.sprut.de/electronic/pic/fallen/fallen.html#inout
> COMF PORTA,1
Wenn du COMF PORTA, F schreibst wird der Code mMn leichter zu lesen.

von Thomas E. (picalic)


Lesenswert?

Servus,

ich würde ebenfalls (wie Jürgen) darauf tippen, daß der Port auf 
"analog" eingestellt ist (= Zustand nach Reset!). Dadurch ist der 
digitale Eingangspuffer ausgeschaltet und Lesen vom Port liefert immer 
eine 0, die durch "COMF" dann eine 1 ergibt. Der Ausgangstreiber 
funktioniert auch, wenn der Port auf "analog" eingestellt ist!

Ein "LATA"-Register gibt es bei diesem Controller offenbar nicht.

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Siehe Anhang....

von Jochen-paul S. (picfan)


Lesenswert?

Hallo,
ich tippe auf eine ganz gemeine "Falle":
Mit dem COMF-Befehl wird das Port-Register ausgelesen, in der ALU 
verarbeitet und dann wieder in den betreffenden Port geschrieben.
Der Schönheitsfehler dabei ist, dass wenn zum Beispiel eine LED an einem 
Pin angeschlossen ist, wird beim Auslesen des Ports der Wert dieses Pins 
ausgelesen, die LED zieht also diesen Portpin dortin, wo das andere Ende 
der LED ist, z.b. 5Volt, dann wird dieser Portpin immer mit einer eins 
ausgelesen...
freundliche Grüsse Picfan

von Toxic (Gast)


Lesenswert?

Jochen-paul S. schrieb:
> ich tippe auf eine ganz gemeine "Falle":

Es gibt keine Fallen hier !
Stattdessen gibt es ausfuehrliche "Datasheets" - die aber kein Mensch 
liesst.

von picfan (Gast)


Lesenswert?

Toxic schrieb:
> Jochen-paul S. schrieb:
>> ich tippe auf eine ganz gemeine "Falle":
>
> Es gibt keine Fallen hier !
> Stattdessen gibt es ausfuehrliche "Datasheets" - die aber kein Mensch
> liesst.

Reading the PORTA register reads the status of the
pins whereas writing to it will write to the port latch. All
write operations are read-modify-write operations. So a
write to a port implies that the port pins are first read,
then this value is modified and written to the port data
latch.

von Thomas E. (picalic)


Lesenswert?

Na und? Damit diese Art von "Falle" zuschlägt, müsste die Hardware total 
lausig aufgebaut sein, so daß der Portausgang daran gehindert wird, 
seinen vorgegebenen Logikpegel anzunehmen, z.B. durch eine völlige 
Überlastung weil die LED keinen Vorwiderstand hat.

von picfan (Gast)


Lesenswert?

Den Eingängen der der Ports reichen schon wenige hundert K-ohm 
Sperrstrom der LEDS...
Eine neuerliche Falle habe ich beim PIC16F1459 erlebt, wenn man z.b. 
dort den Port RA4 mit dem ADC ausliest, kann man zwei verschieden Werte 
auslesen,
den einen, wenn man den weak-pullup deaktiviert, den anderen, wenn man 
vergisst WPUA zu deaktivieren, im Datasheet keinerlei Hinweise dazu...

von picfan (Gast)


Lesenswert?

P.S.
Die PIC18F und die neueren PIC16F haben ein separates Port-Latch zum 
auslesen...

von Thomas E. (picalic)


Lesenswert?

@picfan: irgendwie fehlt mir bei Deinen letzten Beiträgen der Bezug zu 
diesem Thread:
- Michael hat nix von LEDs gesagt,
- Michael hat den Port mit Sicherheit auf "Ausgang" gesetzt (nur als 
Eingang würde ihm auch LATA nix nützen)
- er hat einen Controller, der eben kein LATA-Register hat. Man kann 
hier auch hunderte von PICs auflisten, die LATA haben, davon kriegt sein 
PIC auch keins.
- LATA zu benutzen (wenn er es denn hätte), würde zwar ggf. auch das 
Problem beheben, wenn der Port auf "analog" steht, genauso kann er ihn 
aber auch einfach auf "digital" umstellen - zumindest hat er diese 
Möglichkeit in seinem Controller, im Gegensatz zu "LATA"...

von Volker S. (vloki)


Lesenswert?

Thomas E. schrieb:
> @picfan: irgendwie fehlt mir bei Deinen letzten Beiträgen der Bezug zu
> diesem Thread:
> - Michael hat nix von LEDs gesagt...

Michael hat schon lange nichts mehr gesagt.

Bestimmt hat er inzwischen kapiert, dass man die besten Tipps im 
Datenblatt bekommt, den Port schon lange auf digital umgestellt, das 
R-M-W Problem beseitigt, sich einen PIC mit LAT Registern geschnappt... 
oder was auch immer.

von picfan (Gast)


Lesenswert?

Ja, hier gehts nur noch um Besserwisserei.
Egal, ob der Eingang analog oder digital, der alte Pic liest die Pegel 
an den PORTPINS. Wenn der ganze Port auf output geschaltet ist - kein 
Problem. Wenn ein PORTPIN auf input geschaltet ist, wird bei diesem Pin 
eben der Pegel gelesen, der dort von aussen gegeben wird.
Scheinbar interessieren sich immer noch kluge Köpfe um diesen Tread...

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.