www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4 x SPI an einen Controller


Autor: Achim Gayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau'n mer mal, ob jemand Bescheid weiß.

Möchte 4 Peripheriechips, die SPI können an einen Microcontroller
(PIC) ankoppeln.
Kann man natürlich über Bus machen.
Aber das wird zu langsam.

Deshalb Frage:
Kennt jemand einen Microcontroller (< 20 Euro), der mehrere SPI
Interfaces im Mastermode unterstützt ?

Oder kann ich digitale I/O vom PIC an SPI Peripherie hängen ?
Muss ich natürlich per Software die Bits kippen. Kann aber alle
4 Peripheriebausteine parallel ankoppeln.

Achim

Autor: Manfred Glahe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

bin mir nicht ganz sicher was Du genau meinst. Der PIC als Master
(MOSI)kann natürlich viele SPI Slave's gleichzeitig (paralell)
ansteuern. SCK und MOSI werden an alle Eingänge gelegt und mit einem
Portpin wird der CS\ aktiviert. Einlesen (MISO) geht natürlich nur
sequentiell.

MfG  Manfred Glahe

Autor: Achim Gayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eben um das parallele Einlesen geht es mir.
Jeder Peripheriebaustein kann so betrieben werden, dass er
ständig Daten bereitstellt. Jeder liefert 2000 bis 4000 Messwerte
pro Sekunde!

Ich will nicht alle 4 sequentiell durchtackern mit chipselect.
Das wird wahrscheinlich zu langsam. Selbst wenn es ginge kommt
man bei der dafür notwendigen Clockfrequenz in HF rein.

Ich denke da an 4 interrupt-gesteuerte SPI Treibersequenzen, die
unabhängig voneinander die Daten in den PIC reinpumpen.

Autor: raoul4 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo achim,
interessiert mich jetzt nur mal so. wofür brauchst du so viele
messwerte? was willst du machen?

mfg raoul4

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das bringt dir doch nix. 4 mal SPI per Software zu realisieren ist
wesentlich langsamer als den CS umzuschalten.
Schließlich kannst du ja nicht 4 x SPI gleichzeitig auslesen. Dazu
bräuchtest du 4 Controller. Du wirst, egal wie, immer nur einen Chip
nach dem anderen ansprechen können, und da ist die Lösung mit CS (so
wie es eigentlich auch gedacht ist) wohl die beste. (Es sei denn, du
kennst nen µController, der wirkliches Multitasking macht.)

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aslo ich sehe bei 4 * 4khz noch keine ernsthaften Timingprobleme, wenn
Du alle 4 an einen Bus hängst. Ich verwende SPI z.Zt. mit 2Mhz (an
einer NEC-CPU) und demnächst mit 8 Mhz.

Die SPI über I/O-Ports anzusteuern ist meiner Ansicht aber zu langsam,
bringt nur Nachteile gegenüber einer Buslösung.

Wenn Du trotzdem eine CPU mit 4 separaten SPI suchst, dann schau mal
den M16C an, der hat 5 UARTs, die meiner Erinnerung nach alle auch als
SPI arbeiten können.

Stefan

Autor: Manfred Glahe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Achim

"Ich will nicht alle 4 sequentiell durchtackern mit chipselect."

Du hast leider über Deine SPI Quellen nicht sehr viel ausgesagt! Es
gibt z.B. die Möglichkeit alle Quellen synchron zu betreiben, wenn es
sich z.B. um gleiche Bausteine handelt wie z.B. 4 AD- Wandler. In
diesem Fall kann die Software SPI die Daten über den Pport eines
Controllers einlesen oder ausgeben (initialisieren der Bausteine usw.).
Diese Lösung habe ich in einem 8 Kanaligen/12Bit Datalogger/Oszi
eingesetzt und erreiche damit 400KHz/Kanal (ließe sich fast beliebig
beschleunigen).

MfG  Manfred Glahe

Autor: Achim Gayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sind 4 gleiche Chips, die per SPI angesprochen werden und 24 bit (3
Bytes) Messdaten liefern.
Damit sie diese liefern, muss allerdings mind. 1 Command-Byte an diese
Chips rausgehen. Beim Auslesen der 3 Messdaten-Bytes reicht es, wenn
man weiter 'clocked' nachdem das LSB des jeweiligen Bytes abgerufen
wurde.

Heisst 400 KHz 400 Bit/sec ? Oder 400 Messwerte pro Sekunde ?
In meinem Fall müssten mindestens 2000 Messwerte pro Sekunde
reinlaufen.
Das heisst 1 Byte raus 3 Bytes rein für 4 Kanäle.
Also 16 bytes * 2000 = 32000 bytes pro Sekunde.
Das entspricht 256 KBit / sec.

Autor: Manfred Glahe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

im Anhang zusätzlich eine weitere Steuerplatine mit dem HC11 Anschluß
für den Datalogger. Hier kannst du erkennen wie die 2 Byte
Initialisierung für die 4 DAC's 'erzeugt' werden und paralell an
alle weitergegeben werden (IC13A). Der SPI TAkt hat in dieser
Applikation für die ersten 4 BIT einen doppelt so hohen Takt um eine
synchronisierung von 12 auf 16 Bit zu erhalten zwischen AD und DA
Baustein.
Mit 400KHZ ist die Abtastrate (also 400K Meßwerte) gemeint. Die ADW's
sind hier nicht schneller ausgewählt worden weil dies Anwendung zur
Digitalisierung von Heuschreckengesang dient und das ist doppelt soviel
wie benötigt wird. Die Abtastrate hängt nur noch von der
Geschwindigkeit des eingesetzten µP's ab, Wandler gibt es bis 70MHZ
dafür.

Falls es Dir hilft, kann ich Dir auch den *.ass Teil zum HC11 noch
posten.

MfG  Manfred Glahe

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich will nicht alle 4 sequentiell durchtackern mit chipselect.
Das wird wahrscheinlich zu langsam."

Aber genau das Gegenteil !!

Nur mit Hardware-SPI bist Du schnell. Du kannst ja nebenbei noch was
anderes machen, während das SPI rumschiebt.
Deshalb ist ja die Hardware da, um die CPU zu entlasten.


Mit Flanken-getriggerten Interrupts und Tot und Teufel hast Du soviel
Softwareaufwand, das kostet mindestens 10..100-fach mehr Rechenzeit.
Und mehrere Interrupts gleichzeitig ist ja besonders beim PIC sehr
kompliziert und fehlerträchtig.


Peter

Autor: Mistral (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
m16c62 hat 5 SPI

Gruss
Mistral

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.