8051: An Port 0 kann nichts ausgegeben werden

OP #231759
Lesenswert?

Hallo,

ich habe ein kleines Problem.
Ich habe ein Board gebastelt mit einem AT89C51ed2, welches im Anhang
beiliegt.

Das Schmatic ist leider nicht komplett aktuell:
Die UART Schnittstelle, PSEN und RST haben mittlerwele eine etwas
andere Beschaltung. Sind aber im Betrieb (nicht Programmierung) korrekt
beschaltet.

Ich habe getestet, ob ich verschiedene I/O-Pins setzen kann.
Dies klappt bei fast allen: Bei allen außer bei Port 0.

Diese geben immer 0 aus. Egal was ich ausgebe. Das Merkwürdige ist,
dass wenn ich Spannung daran messe (zu Masse hin), dann verändert ishc
die Spannung von >0V bis <5V je nachdem wie ich die Spannung, wenn ich
die + und - Messstrippen anfasse! Wenn ich die Minus-Strippe mit der
Hand anfasse, geht die Spannung runter. Wenn ich die Plus-Strippe
anfasse geht die Spannung hoch.
Das ist das gleiche Verhalten, wie wenn ich die Messstrippen garnicht
anschließe und nur anfasse.
Andere Pins kann ich Prima messen .. warum?

Kann es sein, dass der Controller glaubt, dass P0.0 - P0.7 Eingänge und
keine Ausgänge sind?
Angehängte Dateien:
Gast #231763
Lesenswert?

lies dir mal das Datenblatt über die Ports durch - da wird dir einiges
klar....
Prinzipiell haben die Ports nur einen FET am Pin nach Masse, dazu
normalerweise einen pullup nach Vcc. Am Port0 fehlen die Widerstände
aber, hat was mit dem Interface für ext. Speicher zu tun.
OP #231766
Lesenswert?

Oh, .. mein Fehler .. ich meinte mV .. :D
Jetzt hab ich mir selber einen mächtigen Schreck eingejagt :P

Ich hab das nochmal mit den Widerständen überprüft.
In der Manual war nichts vorgeschlagen, habe es also nochmal genau
nachgeguckt und einen 4.7k nach +5V an P0.7 angeschlossen. Kein
Resultat.

Hab dann mal an P0.7 eine 1 ausgegeben und extern den Pin P0.7 mit P1.0
verbunden. Da P1 interne Pull-Ups hat, müsste das dann doch gehen,
oder?!
Geht aber nicht.

An P0.7 bzw. P1.0 sind immer noch ein wechselnder Wert ohne und mit
Pull-Up (4.7k) an P0.7 zu messen.

Kann es vielleicht sein, dass der P0 irgendwie in einem Modus ist, der
ihm einen Eingang oder irgendetwas anderes zuschreibt? Ich meine, z.B.
dass durch die Beschaltung oder Softwareeinstellung (SFR?) des
Controllers P0 als Eingang zählt, obwohl ich doch mit "setb P0.7"
eine 1 ausgebe?

Die Verknüpfung von P0.7 mit der SFR Adresse #87h habe ich überprüft.
Daran liegts also nicht.

ich hoffe, euch fällt etwas ein!

Sebastian
Gast #231767
Lesenswert?

Schliesse Deine Optokoppler anders an:

Port -|\/\/|---- Optokoppler --- VCC

    (Vorwiderstand)

Die Ports der MCS-51 können nur nach Masse ziehen, die Pull-Ups liegen
im K-Ohm -Bereich, da kannst Du keinen Optokoppler mit treiben.
Gast #231769
Lesenswert?

Hallo!

Schließe an Port 0 die Pull_Up_Widerstände 4,7kohm nach High!
Ich empfehle dir danach einen Inverter z.b. 7404 an zuschliessen damit
wird der Port nicht so belastet.

Was wichtig ist wenn Du ne "1" einschreibst wird der Transistor
am Port z.b. P0.0 abgeschaltet so bekommst Du nur noch über den
Pull-Up-Wiederstand ein Signal-High der wiederum durch den Inverter
negiert wird.

Somit brauchst Du deine Optokoppler-Schaltung nicht zu ändern.



Gruß Klaus
OP #231770
Lesenswert?

Hi,

ich muss mich entschuldigen. :/

Die Widerstände habe doch gewirkt, .. habe nur in der Hektig den
Unterschied zwischen V-AC und V-DC auf dem Messgerät nicht beachtet oO
..

Man hab ich mich geärgert!

Optokoppler funktionieren genauso, wie die Schaltung auf dem Plan ist.
Ich habe lediglich die Pull-Ups hinzugefügt.

Inverter oder anderen Schnickschnack habe ich nicht genommen.
Der Optokoppler muss auch nur einmal kurz auf allen 4 Transistoren
schalten. Maximal 1sec in Betrieb. Und nur einer zur selben Zeit.

Wenn ich jetzt den Optokoppler durchschalten lassen will, muss ich
lediglich eine logische 0 am Port Pin ausgeben!


Vielen Danke für eure Hilfe!!!

Sebastian

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