Forum: Mikrocontroller und Digitale Elektronik Frage zu meiner Schaltung


von Thomas (Gast)


Lesenswert?

Hallo,

ich habe mir eine Schaltung aufgezeichnet die ich demnächst erstmal
probeweise auf ein Steckbrett aufbauen will. Ich wollte dazu mal fragen
ob jemand ne Idee hat wie ich die die 10 Auswahleingänge(Chip-Enable(C)
und Output-Enable(OC)) mit möglichst wenig Leitungen des AVR's steuern
kann.

Da ich mit ASM noch nicht ganz so fit bin scheint mir diese parallele
Version am einfachsten. CE, OE und WE am 28C64 scheint mir auch nicht
ganz optimal zu sein da das dann immer gleichzeitig mit den
Adressleitungen übermittelt wird. Sollte ich diese vielleicht auf den
nächsten HCT legen? Einen HCT habe ich genau umgekehrt angeschloßen um
die Daten in den AVR zu bekommen. Könnte man bestimmt weglassen, da
wenn ich die HCT's hochomig schalte die Eingänge ja auch normal
benutzen kann so aber ist es aber wie ein Zwischenspeicher.

Wäre sehr dankbar wen mir jemand ein paar Verbesserungsvorschläge oder
Tipps für meine (warscheinlich) oversized Schaltung geben kann.
http://people.freenet.de/Thomasoly/Speicher_vs_AVR.png Auflösung ist
etwas hoch, am besten speichern und mit dem Windows-Viewer anzeigen
lassen der verkleinert es passend.

von Yagan Z. Dongobar (Gast)


Lesenswert?

Hallo Thomas,

willst Du damit ein Programmiergerät für EEPROMs bauen?
Für eine Optimierung der Schaltung wäre es sinnvoll, den Zweck zu
kennen.

Ciao, Yagan

von A.K. (Gast)


Angehängte Dateien:

Lesenswert?

Als Anregung mal diese Variante für die Ausgänge. Keine Dekoder und
dergleichen. Einfach bloss die 3 Bytes nacheinander durchtakten.

Ich nehme an, dass es parallel sein muss. Sonst kommt ja die übliche
HC164-er Kaskade in Frage, die wesentlich weniger Pins, aber deutlich
mehr Zeit braucht.

von Thomas (Gast)


Lesenswert?

Hallo,

Yagan: Ne soll kein Programmierer werden. Wenn ich jetzt wieder den
Einsatzzweck schreibe werd ich nur wieder ausgelacht. Ich sag mal
soviel. Es werden in regelmäßigen kurzen Abständen(µSek-mSek) Daten
ausgelesen und die Leseadresse ändert sich in Abhängigkeit von Werten
die aus dem A/D-Teil stammen. Dieses Analogteil habe ich auch schon
fertig. Jetzt geht es um das Einlesen der Daten aus dem Speicher und
danach mache ich die Sache mit den Ausgangssignalen.

A.K.: Ich verstehe deine Schaltung nicht ganz, da ja hier alle 3
Bausteine über gemeinsame CK und OC-Leitungen angesteuert werden.
Ich verstehe diese Bausteine so, das sie einen Wert weitergeben der
intern gespeichert wird und das sie einen Wert vom Eingang direkt zum
Ausgang weiterleiten können ohne das der interne Wert geändert wird.
Und auserdem habe ich dann doch nur 8 bit und diese nacheinander ich
muss aber z.b. die 12 Adressleitungen gleichzeitig ansteuern können,
was ich mit Schieberegistern machen könnte was dann aber doch etwas
lange dauert als wenn ich jeweils 8 bits an einen Latch schicke, danach
die nächsten Daten an den nächsten Schicke.... und am Ende alle Latchs
Output enable schalte.

von A.K. (Gast)


Lesenswert?

Ich war ein bischen faul beim zeichnen. Natürlich stehen alle 24
Ausgänge der 3 Register zur Verfügung (Register, also 574 - beim Latch
573 geht das so nicht).

Denk dir das als 8 parallele 3-fach Schieberegister. Das wird wohl auch
die schnellste Version sein, denn es müssen keine Auswahl-Leitungen
programmiert werden:

Daten für IC3 anlegen und takten.
Daten für IC2 anlegen und takten.
Daten für IC1 anlegen und takten.
Fertig.

Wenn der Speicher nicht hotplug-fähig sein muss, dann spricht
m.E.nichts dagegen, dessen Datenbus direkt an den 8-bit-"Datenbus"
vom µC anzuschliessen. Dann muss auch das OE der register nicht
gesteuert werden, sondern kann fest auf 0 liegen.

Nochmal nachgerechnet. Eigentlich braucht's nur 2x574. Für A0..A12, OE
und WE. Dann noch CE separat an dem µC mit externem Pullup (definierter
Zustand nach Reset!) und das war's.

> Ich verstehe diese Bausteine so, das sie einen Wert weitergeben der
> intern gespeichert wird

Soweit stimmt's.

> und das sie einen Wert vom Eingang direkt zum
> Ausgang weiterleiten können ohne das der interne Wert geändert wird.

Und hier stimmt's nicht mehr. Es wird immer der gespeicherte Wert
weitergegeben (bzw bei OE=1 garnichts). Bei C=1 wird zusätzlich
gespeichert.

von Thomas (Gast)


Lesenswert?

Hallo,

werden da jetzt getrennte taktleitungen benutzt? Oder wie bei einem
einfachen Schieregister weitergereicht. Wenn du es mit vielleicht
besser erklären kannst werde ich die Möglichkeit mal aufzeichnen.

Für mich hört es sich jetzt so an das ich 24 mal takten muss und wenn
ich ein einzelnes Bit ändern muss sind wieder 24 Takte fällig.

von A.K. (Gast)


Angehängte Dateien:

Lesenswert?

Gemeinsamer Takt natürlich. Siehe Bild.

von A.K. (Gast)


Lesenswert?

Natürlich solltest Du erst mal rauskriegen, wie der HC574 funktioniert.
Schwierig sonst.

von Thomas (Gast)


Lesenswert?

Hallo,

glaube jetzt hab ichs verstanden, der erste 574 wird transparent
geschaltet und die ersten 8 Takte setzen dann den rechten Chip, dann
wird die Transparenz abgeschaltet und der linke Chip erhält seine Daten
ohne diese an den rechten weiterzugeben. Aber womit wird das geschaltet?
Der Chip hat doch nur die OC und CK.

Aber ich favorisieren immer noch meine Lösung nur bräuchte ich dann
wieder 10 Leitungen um die einzelnen Latches zu steuern.

von A.K. (Gast)


Lesenswert?

Nee, das war's immer noch nicht. Obacht: Der 574 (Register) ist nicht
der 573 (Latch).

Ausserdem sind's nicht 8 Takte sondern pro Register einer. Die 57x
sind keine Schieberegister, das 573 nicht und das 574 nicht.

Schreiben sieht also so aus (Grundzustand PD6=1 PD7=0 DDRC=output):

PORTC=A0..A7
PD7=1
PD7=0

nun ist das untere Adressbyte in IC2.

PORTC=A8..A12,OE=1,WE=0
PD7=1
PD7=0

nun ist das untere Adressbyte in IC3 und das obere mitsamt OE/WE in
IC2.

PORTC=Daten
PD6=0
PD6=1

Fertig. Lesen geht ähnlich, nur muss zum richtigen Zeitpunk DDRC
umgeschaltet werden.

von A.K. (Gast)


Lesenswert?

Nochmal deutlicher: In deiner Schaltung wird's beim Einschalten immer
wieder mal ein zufälliges Byte zersägen. Da muss was rein, das CE von
Anfang an auf 1 legt, sonst...

von Thomas (Gast)


Lesenswert?

Hallo,

da wird also das komplette Byte beim ersten Takt in IC2 eingelesen und
beim 2ten Takt zu IC3 weitergeschoben, gleichzeitig holt sich IC2 die
nächsten Daten. Ich muss dann also alle Register nacheinander
beschreiben was etwas unpraktisch wäre wenn sich z.b. nur das untere
Adressbyte ändert.

Ich habe mir jetzt überlegt ich könnte bei meiner Lösung einen Latch
hernehmen mit dem ich die ganzen OE der anderen Latches schalte dann
bräuchte ich nur einen Steuerleitung vom AVR und die 8 Datenleitungen.
Werde morgen nochmal einen Schaltplan dazu machen. Die ganzen CE kann
ich ja auf high legen. Das habe ich schon auf meiner Steckplatine
gesehen das sich das Latch beim einschalten Daten holt dies garnicht
gibt so nei Wiederstandsreihe(10k) gegen Masse hat das aber in den
Griff bekommen so das das Latch beim einschalten auch leer bleibt und
selbst wenn spätestens wenn die ersten Daten kommen stimmts ja wieder.

von A.K. (Gast)


Lesenswert?

Kannst auch getrennte Takte für die beiden Register verwenden (dann sind
auch 573-er ok). Braucht halt einen Pin mehr.

von Peter D. (peda)


Lesenswert?

Warum nimmste nicht einfach einen 24C64 ?

Peter

von Thomas (Gast)


Lesenswert?

Hallo,

so habe deine Antwort garnicht gesehen gehabt, das wäre auch ne Lösung
wenn ich jeden 573 einzeln takte. Werde mir das jetzt alles durch den
Kopf gehen lassen und di ebenötigten Leitungen durchzählen.

von Thomas (Gast)


Lesenswert?

Hallo,

habe die Schaltung jetzt noch etwas verändert, brauche jetzt nur die 8
Datenleitungen und 2 zusätzliche Leitungen. Einfach den Link in der
ersten Nachricht anklicken habe das Bild ausgetauscht.

von A.K. (Gast)


Lesenswert?

Wie man mit einem Maximum an Aufwand und Laufzeit ... und immer noch das
CE-Problem bei Reset hat.

von Thomas (Gast)


Lesenswert?

Hallo,

habe mir mal eine Ahndvoll 574er bestellt. So wie ichs gerade
gezeichnet hab funktionierts ja eh nicht, habe da nen Fehler drin. CE
Problem gibgs aber nicht da ich die Eingänge auf Masse ziehe, das
Phänomen hatte ich nämlich beim Aufbau der Schaltung habe es aber damit
in den Griff bekommen.

von peter dannegger (Gast)


Lesenswert?

Also das OE der 754-er zu schalten: ganz ganz gefährlich !

Dein EEPROM floatet dann wild in der Gegend umher und wird
warscheinlich seine Daten mit Müll überschreiben.

Nochmal:

Warum sparst Du Dir nicht diesen ganzen umständlichen Scheiß und nimmst
nur nen AT24C64 (2 Drähte, 2 Widerstände).


Willst Du aber trotzdem beim AT28C64 bleiben, dann unbedingt das
Software-Data-Protection enablen !

Ansonsten hast Du nämlich wunderschönen Datenmüll beim Ein- oder
Ausschalten (da Zustand der 574 undefiniert).

Den Effekt kennen alle AVR-User, die den internen EEPROM verwenden,
aber vergessen haben, den Brown-Out zu fusen.


Peter

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.