Forum: Mikrocontroller und Digitale Elektronik Datenbus 8051 Problem, Terminierung?


von C. L. (calle)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde!

Frohe Ostern nebenbei...

Habe ein Problem mit meiner Platine (Testaufbau).
Hier ist ein 89C51cc03 verbaut, der mit einem simplen Adresslatch 
(74573) und einen CS Decoder (74154) eine 8Bit Eingabe mit 74541 sowie 
eine 8Bit  Ausgabe mit 74374 und eine RTC 72421 verwalten soll.
Das Problem ist, das ich die Uhr nicht vernünftig stellen/lesen kann und 
auch die Eingabe hat immer wieder mal unplausible Werte. Irgend etwas 
scheint es zu tun zu haben mit Busterminierung o.ä.
Momentan ist nichts terminiert und es ergeben sich die Signale wie auf 
dem Bild => unschön. Mit 10K am Ende von AD0..7 gegen GND wird es ein 
wenig besser, aber noch nicht schön. Wenn ich 3,1K (mit POTI an AD0 gg. 
GND ermittelt) als Abschlussterminierung verwende, funktioniert die 
Schaltung. Die Flanken habe dann einen steilen Anstieg aber fallen ab, 
ähnlich wie eine e Funktion.

Unter der Platine ist der Bus in Freiluftverdrahtung ausgeführt. Foto 
möchte ich lieber nicht zeigen. Habe den Busverlauf mal eingezeichnet.
Ist hierbei als Abhilfe ein Serienwiderstand o.ä. erforderlich oder muss 
ich da nochmal neu verdrahten.

Takt des CC03 ist 11,0592Mhz.

Software kann ich wirklich ausschließen, die läuft in anderen 
professionell gerfertigten Platinen einwandfrei. IC´s sind alle ok!

Was kann ich da machen.??

Ich kann allerdings erst nachher antworten!

Carsten

von Achim S. (Gast)


Lesenswert?

Der Port 0 beim 8051 ist mit Open Drain Treibern realisiert. Wenn du per 
MOVX einen Buszugriff durchführst, treibt der µC bzw. der externe Chip 
den Bus nur für ein paar µs auf definierte Werte, dazwischen ist der Bus 
hochohmig. Während dieser hochohmigen Phase wird er von deinem 3,1kOhm 
Pulldown gegen GND gezogen. Der daraus folgende exponentielle Verlauf 
sieht zwar komisch aus, aber er hat mit deinem Timing-Problems nichts zu 
tun, weil zu dieser Zeit der Bus nicht benutzt wird.

Nur während des einige µs dauernden Pulses mit steilen Flanken wird der 
Bus tatsächlich benutzt (d.h. hier wird jeweils ein MOVX durchgeführt). 
Wenn du ein Timing-Problem erkennen willst, musst du dir diesen Puls 
genauer ansehen (also Oszi auf 500ns/DIV und auf 1V/DIV und auf den 
steilen Puls getriggert).

Da kann es dann schon sein, dass du unsaubere Flanken aufgrund von 
Reflektionen erkennst oder einen GND-Bump wegen gleichzeitig schaltender 
IOs oder dass du siehst, dass das externe IC zu langsam auf Lesebefehle 
reagiert. Der 89C51cc03 hat aber ein Register, um das Timing des 
externen Zugriffs zu entspannen, vielleicht klappt es dann auch mit der 
Freiluftverdrahtung:

"Slow peripherals can be accessed by stretching the read and write 
cycles. This is done
using the M0 bit in AUXR register. Setting this bit changes the width of 
the RD# and
WR# signals from 3 to 15 CPU clock periods."

von Peter D. (peda)


Lesenswert?

Terminiert habe ich noch nie was beim 8051.

Schmeiß mal die standard TTL raus und ersetze sie durch CMOS (74HCxx).
Die 8051 können nur eine TTL-Last (1,6mA), da wirds eng mit den alten 
Stromfressern.

Und erstmal das langsamste Timing (maximale Waitzyklen, XTAL/12) für die 
externen Zugriffe einstellen.

Wenn Du keinen externen RAM/ROM anschließt, sollten doch 256 IO-Adressen 
reichen, d.h. das Latch kann man sparen und nur mit DPH adresssieren.

von C. L. (calle)


Angehängte Dateien:

Lesenswert?

Hallo!

Sorry für die falschen Bildformate bzw. Größe, hatte in png gewandelt 
aber dann doch die falschen Bilder hochgeladen.

Soooooo! Das war mal erfolgreich!!!!


Achim S. schrieb:
> Der 89C51cc03 hat aber ein Register, um das Timing des
> externen Zugriffs zu entspannen, vielleicht klappt es dann auch mit der
> Freiluftverdrahtung:
=> gemacht und siehe da, die Uhr läuft und lässt sich wieder stellen!!! 
Auch die sporadischen Werte der 8 Bit Eingabe sind "0".
=> Danke dafür, allerdings musste ich die Pull down Widerstände 
rausschmeißen sonst klappt es nicht!
Soviel mit PIC und 8051 gemacht, das war aber neu!


Achim S. schrieb:
> Wenn du ein Timing-Problem erkennen willst, musst du dir diesen Puls
> genauer ansehen (also Oszi auf 500ns/DIV und auf 1V/DIV und auf den
> steilen Puls getriggert).

=> Habe ein Bild angehangen, erkenne da außer dem Bitwechsel nichts was 
großartig reflektiert! Oder sind das Reflektionen?

Peter Dannegger schrieb:
> Schmeiß mal die standard TTL raus und ersetze sie durch CMOS (74HCxx)

=> Bin mal eben im Keller!

Peter Dannegger schrieb:
> Und erstmal das langsamste Timing (maximale Waitzyklen, XTAL/12) für die
> externen Zugriffe einstellen.

=> ist das gemeint, was ich da schon gemacht habe, oder noch was neues?

Peter Dannegger schrieb:
> Latch kann man sparen und nur mit DPH adresssieren
=> DPH ?????

Danke

Carsten

von Reinhard Kern (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Schmeiß mal die standard TTL raus und ersetze sie durch CMOS (74HCxx).
> Die 8051 können nur eine TTL-Last (1,6mA), da wirds eng mit den alten
> Stromfressern.

Es ist genau umgekehrt: was mit TTL und LS noch funktioniert hat, hört 
bei gleichem Aufbau mit HC auf zu funktionieren wegen der viel steileren 
Flanken.

Gruss Reinhard

von C. L. (calle)


Angehängte Dateien:

Lesenswert?

Hi!

Habe die LS raus und die HC reingebaut! Funktioniert genauso aber das 
Signal sieht deutlich besser aus!

Was meint Ihr?

CL

von Peter D. (peda)


Lesenswert?

Meine Erfahrungen sind genau andersrum.
TTL schalten bei ~1,4V, LS schon bei 0,9 .. 1,1V, HC aber erst bei 2,5V.
Die LS sind am störempfindlichsten, die HC dagehen kaum zu stören.

von Achim S. (Gast)


Lesenswert?

C. L. schrieb:
>> Latch kann man sparen und nur mit DPH adresssieren
> => DPH ?????

Peter meint damit, dass du nur die oberen 8 Bit des DPTR (also DPH) zur 
Adressierung benutzt, und die unteren 8 Bit (die im Latch gespeichert 
werden müssten) ignorierst.

C. L. schrieb:
> => Habe ein Bild angehangen, erkenne da außer dem Bitwechsel nichts was
> großartig reflektiert! Oder sind das Reflektionen?

Nö, ich sehe auch nichts aufregendes. Ich verstehe zwar nicht wirklich, 
was am Ende den Nadelpuls nach unten erzeugt. Aber wenn die Schaltung 
zuverlässig läuft, dann ist die Signalqualität offenbar gut genug ;-)

C. L. schrieb:
> Habe die LS raus und die HC reingebaut! Funktioniert genauso aber das
> Signal sieht deutlich besser aus!

Würde ich auch machen. Ich verstehe aber nicht wirklich, wo du hier eine 
bessere Signalqualität siehst. Wie schon heute Mittag gesagt: wenn der 
Bus von keinem IC getrieben wird, kann die Spannung sonstwo hin driften. 
Interessant ist nur das Verhalten der Signale, wenn der Bus wirklich 
benutzt wird. Dass die Spannung weniger rauscht liegt wahrscheinlich 
eher daran, dass du die Messung von 17:01 Uhr erst im Nachhinein auf 
1V/DIV aufgezoomt hast, oder?

von C. L. (calle)


Lesenswert?

HeyHo!

Achim S. schrieb:
> DPTR (also DPH)

=> Achso, Klar hätte man auch so machen können, hätte auch gereicht, 
wollte aber den 154er einsezten und 15 Adressen zur Verfügung haben. 
Hätte auch mit den letzten 3 Adressen einen 138er nehmen können. Viele 
Wege führen nach ROM...

Achim S. schrieb:
> Dass die Spannung weniger rauscht liegt wahrscheinlich
> eher daran, dass du die Messung von 17:01 Uhr erst im Nachhinein auf
> 1V/DIV aufgezoomt hast, oder?

=> Ohhh, das habe ich (glaube ich) gemacht ohne ans rauschen zu denken, 
dann bitte nicht so ernst nehmen. Zumindest erkennt man jetzt ein 
Datenwort und keine Treppen.

Ich werde mal mit der Schaltung experimentieren und sehen ob es das 
schon war. Geht ja in die richtige Richtung. Eingentlich ärgerlich, habe 
damit Tage vergäudet.! Hmmmm!

Danke an Euch!!

Carsten

von Reinhard Kern (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Die LS sind am störempfindlichsten, die HC dagehen kaum zu stören.

Das ist die passive Seite, und setzt voraus dass durchgehend HC 
verwendet wird. Meine Erfahrungen beziehen sich auf die aktive Seite: 
LS245 gegen HCT 245 usw. als Treiber für eine Matrix aus Memory Devices. 
Da war ich nach Umstellung auf HCT gezwungen, 100 Ohm Source-Widerstände 
an allen Leitungen (Adresse, Daten, RD, WR) einzusetzen (direkt an 
HCT245 usw.).

Gruss Reinhard

von Wilhelm F. (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Terminiert habe ich noch nie was beim 8051.

Ach, das ist doch fast noch Gleichstrom da an einem 8051-Bus.

Manchmal sah ich Widerstands-Arrays 10k oder 4,7k an den Busleitungen 
als Pullup direkt neben dem µC, ist aber laut den Manuals auch nicht 
nötig. Vielleicht braucht man sie noch für uraltes NMOS-RAM bzw. EPROM.

Terminieren, bei der niedrigen Busfrequenz, sah ich auch nie als 
dringend notwendig an. Die Wellenlängen sind doch meilenweit von 
Leiterbahnlängen entfernt. Wenn schon terminieren, dann gleich mit einem 
Busleitungstreiber.

Ich selbst betrieb den Bus an Port 0 aber auch mit allen Arten von 
Bausteintechnologien, von Standard-TTL über LS und ALS bis zu HC, HCT, 
AC, ACT am Adreßlatch. EPROM und RAM haben meistens ohnehin 
CMOS-Ausgänge.

Am alten Standard-8051 hingen ja am Bus wenigstens immer die 
Datenleitungen von EPROM und RAM noch parallel mit dran, also mit dem 
Adreßlatch-Input zusammen 3 Leitungen, hatte da niemals Störungen. Auch 
nicht an einem 8085, wo noch viel mehr parallel am Bus hing. OK, der 
lief auch nur mit Gleichstrom 2MHz, Busfrequenz noch sehr viel 
niedriger.

In Wahrheit sind die Treiber im 8051 aber äußerst leistungsfähig, mehr 
als man glaubt, auch wenn sie nur auf einen TTL-Fanout spezifiziert 
sind. Hatte kürzlich aus Faulheit mal eine LED ohne Vorwiderstand an 
einem Pin, das waren schon gut 100mA, zog die Gesamtversorgung in die 
Knie. Der Pin schaffte also noch knapp 3V an die gelbe LED, die schon 
leicht orange leuchtete. Wenn man seine Bauteile wertschätzt, sollte man 
das aber bleiben lassen. Hier hatte ich aber einen ollen Siemens-80515 
noch in NMOS dran, der sowieso ausgetauscht und nie mehr verwendet 
werden sollte, ein wahrer Stromfresser und Heizer.

von Peter D. (peda)


Lesenswert?

Wilhelm Ferkes schrieb:
> Manchmal sah ich Widerstands-Arrays 10k oder 4,7k an den Busleitungen

Das macht man, damit die Pins nicht floaten zwischen den IO-Zugriffen. 
Die HC-ICs könnten sonst mehr Strom ziehen.
Man kann aber auch nach jedem MOVX ein "MOV P0, #0" einfügen.

von Wilhelm F. (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Wilhelm Ferkes schrieb:
>> Manchmal sah ich Widerstands-Arrays 10k oder 4,7k an den Busleitungen
>
> Das macht man, damit die Pins nicht floaten zwischen den IO-Zugriffen.
> Die HC-ICs könnten sonst mehr Strom ziehen.
> Man kann aber auch nach jedem MOVX ein "MOV P0, #0" einfügen.

Ich hätte da jetzt auch auf ältere NMOS-Peripheriebausteine getippt. Bei 
alten 8085-Schaltungen sah man die Pullup-Arrays zu Hauf.

Normalerweise passiert da aber auch kaum was. Sicher kann man einen 
Dummy einfügen, wenigstens zum Test.

Ich hielt mich zur Bausteinverwendung immer an die Busdiagramme in den 
Datenblättern, und das ging immer gut.

Aber sind denn HC-Bausteine nicht noch kapazitive Lasten, und bspw. 
LS-TTL nicht so sehr? Das müßte ich mal konkret nach schauen.

Aktuell habe ich hier einen 80C517A im Vollausbau liegen. Da sind auf 
jeden Fall 4 Speicherbausteine parallel am Bus, nämlich je zwei EPROM 
27C256 und zwei RAM 62256. Die Busleitungen bis zum letzten Stein sind 
knapp über 10cm lang. Da stört absolut nichts, noch nicht mal bei Quarz 
18MHz. Die Schaltung wurde oft verkauft und ist erprobt.

von MCUA (Gast)


Lesenswert?

>Aber sind denn HC-Bausteine nicht noch kapazitive Lasten, und bspw.
>LS-TTL nicht so sehr?
alle ca 5..10pF (neuere etwas weniger, ca 3pF) . Bereits ein leerer Pin 
(ohne el.Anschluss dahinter) (bsp Steckverbinder) hat schon ca 4pF! (Was 
die Backplane bremst)

Auch bei niedriger (8051-) Busfrequenz könnte sich, bei Glitch oder 
Fehler auf bsp.weise \WR, ein Fehler ins XRAM einschleichen.

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.