Forum: Mikrocontroller und Digitale Elektronik AD-Bus auf SPI Umbauen


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe eine Schaltung mit einem µC der einen AD-Bus bereitstellt: 
AD0-AD7, /RD, /WR und ALE (AddressLatchEnable). Mit diesen Bus wird ein 
CPLD angesteuert in welchem ein Addresslatch, Adressdekoder, D-Flipflops 
(für die Ausgänge) und Buffer (für die Eingänge) implementiert sind. Nun 
soll der µC durch einen neuen ohne AD Bus ersetzt werden, welcher dafür 
ein SPI hat. Auf jeden Fall wird das irgendwie auf Schieberegister 
hinauslaufen, aber wie am besten im Detail macht man das am günstigsten 
? Neben DO, DI, CLK und /CS eine weitere Leitung die Adress- oder 
Datenwort angibt ? Adresswort immer als erstes übertragen ? Und wie 
könnte man am günstigsten auch das Lesen von IOs über das SPI 
bewerkstelligen ?

Vielen Dank schon mal für Vorschläge !

Stefan

von Benjamin S. (recycler)


Lesenswert?

SPI ist ein serieller Bus. Durch DI kommen die Daten zum Master (µC) und 
mit DO kannst du zum Device schicken. Mit \CS wählst du das Slave. Das 
ist wie wenn du einen Adressvergleicher hast, der bei entsprechender 
Adresse eine 1 bzw invertiert eine 0 ausgibt. CLK ist für den Takt 
zuständig.
Da es seriell eingelesen wird, brauchst du nur eine CS, DI und CLK 
Leitung - bidirektional DO. Wobei DI und DO gleichzeitig im betrieb 
sind. Das passiert parallel.

Schau dir am besten den Wikipediaarikel zu SPI an.

von Stefan (Gast)


Lesenswert?

Hallo Benjamin,

Danke für Deine Antwort, die Funktion der SPI ist mir sehr bekannt, habe 
selbige schon sehr oft verwendet. Meine Frage bezog sich mehr auf die 
Logik im CPLD um die ganzen IOs am CPLD, die bisher in altbekannter 
Manier über den Daten-/Adressbus gelesen und geschrieben wurden, 
ansteuern zu können.

Stefan

von aha (Gast)


Lesenswert?

Inden man ein Schiebregister verwendet. kann man seriell auf parallel 
wandeln, oder ungekehrt.

von Benjamin S. (recycler)


Lesenswert?

Ja, Schieberegister. 8 bit reinlesen und dann als paralleles Wort 
verwenden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du willst also den Rest der Schaltung beibehalten, und den AD-Bus über 
ein SPI-Interface nachbilden?
An welcher Stelle soll dein SPI-Interface eingreifen?
Welche Komponenten hängen ausser den angesprochenen EA noch am AD-Bus?

Wenns nur EA sein soll, dann würde ich einen SPI-Slave in einem CPLD 
verwenden. Damit hast du ruckzuck 32 Ein- und 32 Ausgänge.


BTW:
Bitte schreib statt
> übertragen ? Und
doch lieber
> übertragen? Und
Bei Punkten machst du das doch auch.

von Peter D. (peda)


Lesenswert?

Schau Dir mal den 74HC299 an, der kann beide Richtungen.
Die /RD, /WR, ALE mußt Du aber über Portpins erzeugen.


Peter

von Stefan (Gast)


Lesenswert?

Hallo,

@Lothar
>Du willst also den Rest der Schaltung beibehalten, und den AD-Bus über
>ein SPI-Interface nachbilden?
Richtig, der neue Controller hat keinen AD Bus mehr sondern ein HW SPI.

>An welcher Stelle soll dein SPI-Interface eingreifen?
Alt: µC (AD0-AD7, /RD, /RW, /CS, ALE) -> CPLD -> Peripherie
Neu: µC (SDI, SDO, CS, SCK) -> CPLD -> Peripherie

>Welche Komponenten hängen ausser den angesprochenen EA noch am AD-Bus?
- Ein Standard-LCD (auf 2 Adressen, die Logikumsetzung auf E, RW, RS des 
LCDs ist im CPLD mit ein paar Logikgattern bewerkstelligt), auf beiden 
Adressen (Command, Data) kann so einfach mit Portzugriffen geschrieben / 
gelesen werden
- Ein ULN der ein paar Relais schaltet
- Ein paar Optokoppler als Eingänge (ULN und OKs sind derzeit auf der 
gleichen Portadresse)
- Eine Matrixtastatur; Eine Adresse auf der schreibend die Zeile gesetzt 
wird und lesend die Spalten ausgelesen werden

>SPI-Slave in einem CPLD verwenden.
Ja, jetzt kommen wir denke ich zum Knackpunkt; wie macht man das? 
Ausschließlich für Ausgänge würde ich das mit Schieberegistern 
vielleicht noch hinbekommen (z.B. 64 bit einlesen, wenn /CS abfällt 
alles auf die Ausgänge latchen), aber auch noch lesend?

>Bei Punkten machst du das doch auch.
Hast recht, ich werde es versuchen.

@Peter
>Schau Dir mal den 74HC299 an, der kann beide Richtungen.
>Die /RD, /WR, ALE mußt Du aber über Portpins erzeugen.
Habe mir das IC mal angeschaut. /RD /WR ALE dann per Hand erzeugen zu 
müssen ist zwar nicht sehr "kompakt", da das SPI auch blockweise 
arbeiten kann, könnte aber andererseits den Aufwand im CPLD verringern 
(ist ein XC9572, da passt nicht wahnsinnig viel rein).

Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ist ein XC9572, da passt nicht wahnsinnig viel rein
Das kommt darauf an, was man daraus macht ;-)

> Ja, jetzt kommen wir denke ich zum Knackpunkt; wie macht man das?
Für SPI-EA im CPLD sieh da mal nach:
http://www.lothar-miller.de/s9y/categories/26-SPI-Slave

> - Ein ULN der ein paar Relais schaltet
> - Ein paar Optokoppler als Eingänge
> - Eine Matrixtastatur;
Das sind jeweils ordinäre EA, das ist einfach...


Für das Display wirds etwas aufwendiger, wenn du es auch zurücklesen 
willst.
Wie wäre es, wenn du ein SPI-Display anschließt?

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.