Forum: Mikrocontroller und Digitale Elektronik Ausgänge nur mit Pause schaltbar


von PIC Einsteiger (Gast)


Lesenswert?

Hallöchen,

ich spiele gerade mit einem PIC12 herum und habe ein merkwürdiges 
Problem bei einfachsten Anwendungen:

Schreibe ich
RA5=1;
RA4=1;
sind beide Ausgänge high.

Schreibe ich aber
RA4=1;
RA5=1;
ist nur RA5 high.

Die Reihenfolge macht ist also entscheidend.
Wenn ich eine kleine Warteschleife dazwischen schreibe funktioniert es 
auch.
Also so:
RA5=1;
delay(1);   //for-Schleife mit einem Durchlauf
RA4=1;

Woran kann das liegen? Ist das vielleicht sogar normal oder mache ich 
etwas falsch?

von TK (Gast)


Lesenswert?

Ich bin jetzt bei den 12er PICs nicht sicher - aber der RA4 ist ein
Open-Drain-Ausgang -> der wird nur dann H, wenn Du einen ext. Pull-Up 
dranhängst.


Gruß
TK

von PIC Einsteiger (Gast)


Lesenswert?

TK schrieb:
> Ich bin jetzt bei den 12er PICs nicht sicher - aber der RA4 ist ein
> Open-Drain-Ausgang -> der wird nur dann H, wenn Du einen ext. Pull-Up
> dranhängst.

Aber wäre er dann nicht immer LOW? Wenn ich eine kleine Verzögerung 
dazwischen habe funktioniert es ja. O.o

von Oliver J. (skriptkiddy)


Lesenswert?

PIC Einsteiger schrieb im Beitrag #2648574:
> ich spiele gerade mit einem PIC12
Mit welchem denn? Das solltest du uns schon verraten.

Gruß Oliver

von PIC Einsteiger (Gast)


Lesenswert?

Achso, sorry. Mit dem PIC12F1840

VG

von g532z25g (Gast)


Lesenswert?

Hast Du Dir ein parasitäres RC-Glied gebaut?

von PIC Einsteiger (Gast)


Lesenswert?

g532z25g schrieb:
> Hast Du Dir ein parasitäres RC-Glied gebaut?

Wie könnte das denn passieren?
Meine Pins (RA4 und RA5) gehen auf BCR108 Transistoren, um LEDs zu 
schalten.

von PIC Einsteiger (Gast)


Lesenswert?

Also ich habe es mir nochmal im Debugger angesehen und verstehe es 
einfach nicht:
Setze ich RA4, erscheint im LATA eine 1 für RA4 aber auch nach zwei 
NOP() nicht im PORTA.
Setze ich dann RA5, erscheint im LATA eine 1 für RA5 aber RA4 erlischt 
aus unerfindlichen Gründen wieder. RA5 wird dann immerhin nach einem 
NOP() im PORTA angezeigt. War das halbwegs verständlich? Was ist denn da 
nur los?

von PIC Einsteiger (Gast)


Lesenswert?

RA4 ist also im LATA high und auch am Pin high aber im PORTA low. Das 
kann doch auch nicht sein, oder?

von Peter D. (peda)


Lesenswert?

PIC Einsteiger schrieb im Beitrag #2648574:
> Woran kann das liegen? Ist das vielleicht sogar normal oder mache ich
> etwas falsch?

Das Verhalten ist korrekt. Das ist ne PIC-Eigenart. Du liest das 
Eingangsregister, aber Du schreibst das Ausgangsregister. Folgen 2 
solcher Read-Modify-Write aufeinander, ist der erste Wert noch nicht im 
Eingangsregister angekommen und geht damit verloren.
Das Eingangsregister latcht erst mit dem nächsten CPU-Zyklus. Ein NOP 
dazwischen und es geht.

Bei AVR oder 8051 gibt es das nicht, da wird immer das Ausgangsregister 
gelesen bei Read-Modify-Write.


Peter

von John B. (johnbauer)


Lesenswert?

Hast Du die Entsprechenden Bits im ANSELA-Register auf 0 gesetzt?

-----------------------------------------------------------------------
The state of the ANSELA bits has no affect on digital output functions. 
A pin with TRIS clear and ANSEL set will still operate as a digital 
output, but the Input mode will be analog. This can cause unexpected 
behavior when executing read-modify-write instructions on the affected 
port.

Note: The ANSELA register must be initialized to configure an analog 
channel as a digital input. Pins configured as analog inputs will read 
‘0’.
-----------------------------------------------------------------------

Für solche Read-Modify-Write Befehle solltest Du
LATA4=1;
LATA5=1;
benutzen, und nicht
RA4=1;
RA5=1;
dann wird das Ausgangsregister gelesen bei Read-Modify-Write.

John

von PIC Einsteiger (Gast)


Lesenswert?

Super, mit dem LATA Register Funktioniert es jetzt. Vielen Dank! :)

von Peter D. (peda)


Lesenswert?

Die LATA-Zugriffe dauern aber länger, da dazu erst auf Bank 2 
umgeschaltet werden muß.
Man sollte sie trotzdem nehmen, da sie sicherer sind.
Die RA-Zugriffe, haben nämlich noch weitere Seiteneffekte. In alle 
RA-Pins, die Eingänge sind, wird Mumpitz eingeschrieben. Wenn man sie 
dann auf Ausgang schaltet, haben sie Zufallswerte.


Peter

von Georg (Gast)


Lesenswert?

Gut zu wissen. Danke :)

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.