mikrocontroller.net

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


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: aha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inden man ein Schiebregister verwendet. kann man seriell auf parallel 
wandeln, oder ungekehrt.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, Schieberegister. 8 bit reinlesen und dann als paralleles Wort 
verwenden.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

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


Peter

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.