Forum: Mikrocontroller und Digitale Elektronik 8051: An Port 0 kann nichts ausgegeben werden


von Sebastian B. (lufti)


Angehängte Dateien:

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?

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Sry .. hier die richtige Schematic-Datei.

von crazy horse (Gast)


Lesenswert?

hat keine internen pullup-Widerstände, und aktiv H kann sowieso kein
8051 ausgeben. Hänge an die benutzten Ports einen Widerstand (4k7) nach
Vcc, gut ist.

von Sebastian B. (lufti)


Lesenswert?

Oh, .. ich dachte bei Ausgängen braucht man keine Pull-Ups?
Das verstehe ich nicht.

von crazy horse (Gast)


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.

von Sebastian B. (lufti)


Lesenswert?

Dann muss ich ja die Optokopller Widerstände neu berechnen.
Ich verstehe nicht, wie das funktionieren soll.

Ich habe einen rangebastelt und es liegen dort jetzt
~300mA bei: setb P0.7
~300mA bei: clr  P0.7

Das kann doch nciht stimmen?!

von Peter Dannegger (Gast)


Lesenswert?

300mA, sofort abschalten, da ist was oberfaul !

Oder warscheinlich schon kaputt.


Peter

von Sebastian B. (lufti)


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

von Max (Gast)


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.

von crazy horse (Gast)


Lesenswert?

und dann dran denken: der OK ist eingeschaltet, wenn der Port0 ist (und
umgekehrt) :-)

von Klaus (Gast)


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

von Sebastian B. (lufti)


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

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.