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.
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.
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
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.
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.
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.
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...
@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"...
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.
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...