mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16-Bit SPI Slave mit AVR


Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benötige einen µC der als SPI Slave fungieren soll. Hierbei wird vom 
SPI Master eine 16-Bit Übertragung bei einem SPI-Takt von 1Mhz genutzt.
Gibt es eine Möglichkeit, hierfür ein µC der AVR Serie einzusetzen? Laut 
Datenblatt unterstützt dieser ja nur 8-Bit Übertragung. Richtig?

Gruß

Autor: sechszweisechs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, dann muss man eben 2 byte hintereinander schieben. SPI mit 1MHz 
sollte gehen. Der Clock muesste dann mind 8MHz sein.

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich frage mich ob der AVR das handeln kann, wenn 16-Bit daten am Stück 
mit 1 MHz ankommen. Interessant wäre auch was passiert wenn ich 8-Bit 
auslese und zu diesem Zeitpunkt schon die nächsten 8-Bit ankommen. 
Genauso ist die Frage, ob ich 16-Bit Daten am Stück (mit 1MHz) zurück 
zum Master schicken kann.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1 MHz SPI ist nun nicht soooviel.
Da der Empfang 2fach gepuffert ist, kann man die ersten 8Bit auslesen 
(sobald die ersten 8Bits empfangen, werden die automatisch in ein 
"Schattenregister" transferiert), derweil die nächsten Bits eintrudeln.
Steht sehr gut im Datenblatt beschrieben.

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort,

du hast natürlich rest. Der Empfangspuffer ist doppelt ausgeführt und 
somit habe ich ~8 SPI CLocks Zeit das Empfangspuffer auszulesen. Doch 
der Sendepuffer ist nur einfach ausgeführt:
"The system is single buffered in the transmit direction and double 
buffered in the receive direction.
This means that bytes to be transmitted cannot be written to the SPI 
Data Register before the entire shift cycle is completed."

D.h. das ich innerhalb eines SPI Takts das Senderegister neu beschreiben 
muss (nach ende der ersten 8-Bit und vor dem ersten neuen Bit der 
zweiten 8-Bit). Und ich denk daran würde es dann wohl scheitern. Da ich 
den internen Oszilator verwenden möchte (8MHz) wird das wohl nicht 
zeitlich reichen :(

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Sender gibt doch auch den Takt vor. Wenn also das Senderegister 
geleert wurde, wird der Takt angehalten, und man kann den Sendepuffer 
neu füllen.
Dann startet man eine neue Übertragung.
Der zitierte Satz bedeutet nur, dass das Senden etwas "unkomfortabler" 
als der Empfang ist.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rahul Der trollige wrote:
> Der Sender gibt doch auch den Takt vor.

Nein, der Master gibt den Takt aus. Gesendet und empfangen wird immer 
gleichzeitig.

Und wenn der Slave bei 1MHz was senden soll, hat er max 1µs Zeit, das 
Senderegister zu befüllen. Sieht also sehr schlecht aus für den AVR als 
Slave.

Man könnte nen AT89LP4052 nehmen, der hat auch nen Sendepuffer.


Peter

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort,

das dachte ich mir schon fast :(

Ich benötige ein µC mit:
-internem Oszilator
-5V Versorgung
-SPI Slave fähig bei 1MHz und 16-Bit Datenübertragung
-Minimalbeschaltung (nur Versorgung, Stützkondensatoren und Pull-up am 
Reset nötig)
-Flash (~1k reicht)
-freier C-Compiler und günstigem Programmierer
-max. 32 Pins in SMD (TQFP oder was ähnliches, nur kein BGA)

Ansonsten brauch ich nichts an Peripherie. Lediglich ne handvoll 
digitale IOs.

Vielleicht hat jemand eine Idee?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ AVR-User (Gast)

>Ich benötige ein µC mit:
>-internem Oszilator
>-5V Versorgung
>-SPI Slave fähig bei 1MHz und 16-Bit Datenübertragung
>-Minimalbeschaltung (nur Versorgung, Stützkondensatoren und Pull-up am
>Reset nötig)
>-Flash (~1k reicht)
>-freier C-Compiler und günstigem Programmierer
>-max. 32 Pins in SMD (TQFP oder was ähnliches, nur kein BGA)

Kann alles der AVR wenn er als Slave nicht senden muss. Was soll der den 
machen? Vielleicht geht ja auch ein CPLD?

MFg
Falk

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau deshalb dachte ich ja zunächst an einen AVR.
Der µC soll zwei 16-Bit Pakete einlesen. Diese werden mehrfach 
verschickt. Wenn x mal die gleichen Pakete empfangen -> Daten 
weiterreichen an Schieberegister. Außerdem soll ein weiteres 
Schieberegister und digitale IOs eingelesen werden und auf den SPI-Bus 
gelegt werden. Das "Protokoll" ist leider fest.
Dabei soll der Entwicklungsaufwand aufs minimale beschränkt werden.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ AVR-User (Gast)

>weiterreichen an Schieberegister. Außerdem soll ein weiteres
>Schieberegister und digitale IOs eingelesen werden und auf den SPI-Bus
>gelegt werden. Das "Protokoll" ist leider fest.

Klingt nach einem IO-Expander mit SPI Anschluss. Sowas ist besser mit 
einem CPLD gemacht. 72 Macrozellen sollten reichen.

MFG
Falk

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut möglich, dass ein CPLD dafür geeignet ist. Nur wie siehts da mit 
Einarbeitungszeit, Entwicklungszeit, Bauteilkosten und Kosten für 
Entwicklungstools aus? Habe bisher keine Erfahrung mit CPLDs, FPGAs und 
Co.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ AVR-User (Gast)

>Gut möglich, dass ein CPLD dafür geeignet ist. Nur wie siehts da mit
>Einarbeitungszeit, Entwicklungszeit, Bauteilkosten und Kosten für
>Entwicklungstools aus? Habe bisher keine Erfahrung mit CPLDs, FPGAs und
>Co.

Von nix ist nix. Die Einarbeitungszeit ist je nach Hintergrund zwischen 
zwei Wochen bis zwei Monaten, ggf. mehr. Entwicklungszeit ist, so man in 
der Materie drin steckt, eher kurz, ich würde mal auf 3 Tage tippen, 
eher weniger. Bauteilkosten sind abhängig vom Lieferanten und 
Abnahmemenge, der XC9572XL kostet bei Angelika R. aus S. im PC44 Gehäuse 
2,90 (jaja, Ziegelstein). Bei http://www.nuhorizons.com bekommt man den 
für $2,12.

MFG
Falk

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.