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.
Ist Port A auch auf Digitaler Ausgang geschaltet. Bei manchen Pics sind da Anlalogports drauf. Probiere mal LATA anstatt PORTA
Vielleicht bringt es aber auch schon was, wenn du dem Oszillator auch ein paar Komplimente machst ;-)
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.
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...
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.