mikrocontroller.net

Forum: Projekte & Code Portextension: SPI mit AVR und CPLD


Autor: Axel Schnell (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
An einen AVR Microcontroller soll eine Porterweiterung mit der USI 
Schnittstelle angeschlossen werden. Wie schon öfter beschrieben, können 
hierfür externe Schieberegister (74LS165 /74LS595) benutzt werden.  In 
der hier vorgeschlagenen Lösung wird aber ein einfacher programmierbarer 
CPLD Baustein verwendet, der mit der XILINX Entwicklungsumgebung als SPI 
Slave programmiert wird. Der xc9572xl ist kostengünstig zB. bei Reichelt 
erhältlich und wird mit den Funktionen beider Schieberegister 
programmiert. Für die Hardwarebeschreibung des CPLD Bausteins wird eine 
Kombination aus VHDL und  Schaltplaneingabe benutzt. Die SPI Funktion 
wird nicht in VHDL modelliert, sondern als Schaltplanmodul eingebunden. 
8 Bit Ausgabe und 8 Bit Eingabe können in einen SPI Zyklus übertragen 
werden. Dies hat den Vorteil das nur wenig Resourcen im Baustein 
benötigt werden, mehr als drei Viertel  stehen für weitere 
Logikfunktionen, die dann auf VHDL Ebene modelliert werden können, zur 
Verfügung. Ein externer Takt wird in dem vorliegenden Entwurf für den 
CPLD nicht benötigt, da das Timing über SCLK des SPI realisiert wird.
In dem .zip Archiv sind enthalten: C Programm (CodevisionAVR) mit 
eingebundener Assemblerroutine zur Datenübertragung über die USI 
Schnittstelle eines ATtiny2313 als SPI Master, Schaltplan des SPI Slave 
und VHDL Top Level Modul  für XILINX Entwicklungsumgebung. UCF Datei zur 
CPLD Portdefinition, JED Datei zum Download mit Impact. Schaltbild der 
Verbindung AVR - CPLD.

Die Kommunikation wurde getestet, ein 8 Bit Wert vom xc9572 wird über 
SPI zum ATtiny übertragen und anschließend wieder über SPI zum xc9572xl 
zurückgeschrieben und dort ausgegeben. Mit einem Takt von 8 Mhz für den 
Atmel ergab sich eine SPI Clockfrequenz von ca 1 Mhz.



Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja, sowas ähnliches hatte ich auch mal mitm ATV750 (20 Macrozellen) 
gemacht (siehe Anhang).

Ist ja nur ein Schieberegister mit nachgeschaltetem Latch.

Das sind dann 12 Codezeilen in CUPL, Schaltplaneingabe hätte zu lange 
gedauert.

Ich hab auch noch ein Fast-Reset mit drin, wenn STB und CLK gleichzeitig 
1 sind, werden die Ausgangsregister sofort rückgesetzt.

Mit STB werden die Ausgangsregister gesetzt und das Schieberegister auf 
parallel Laden umgeschaltet.


Der XC9572 hat ja viel mehr Macrozellen, müßte für mindestens 35 
Eingänge und 35 Ausgänge reichen.


Peter

Autor: Axel Schnell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lieber Peter,

ich bin immer wieder beeindruckt über die sehr kompakten Entwürfe von 
Ihnen.
(zb. rc5 dekoder). Meine Hochachtung.

Axel

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann man damit auch einen bidirektionalen portexpander aufbauen (also 
jeder pin umschaltbar zwischen in und output) oder habe ich da was 
falsch verstanden? ich brauche sowas um per cpld einen flash zu 
beschreiben und aus zu lesen der da dran hängt

Autor: Axel Schnell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im vorliegenden Konzept sind jeweils 8 getrennte Inputs und Outputs 
verfügbar. Bidirektionalität von I/O Pins und weitere Ansteuerlogik kann 
dann aber zusätzlich im Toplevel VHDL Modul modelliert  werden.

Axel

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lupin

Ja, das geht, man braucht aber für jedes Pin zwei Bit, eins für die 
Richtung und eins für die Daten. Ds gibts aber auch schon fertig als IC, 
z.B. 74HC299.

MFG
Falk

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk wrote:

> Ja, das geht, man braucht aber für jedes Pin zwei Bit, eins für die
> Richtung und eins für die Daten. Ds gibts aber auch schon fertig als IC,
> z.B. 74HC299.

Nö, der 74HC299 hat nur ein gemeinsames /OE für alle.
Aber für nen Datenbus reicht das ja.

Die CPLD-Ausgänge haben auch alle nen OE-Term.


Peter

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.