PIC16F887 COMF funktioniert nicht

Gast #4277299
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.
#4277862
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.
#4277943
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
Gast #4280078
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.
Gast #4280305
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...
#4280413
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"...
#4280430
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.
Gast #4280508
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren