Forum: Mikrocontroller und Digitale Elektronik Daten über SPI?


von Guido (Gast)


Lesenswert?

Tach,

kann ich Daten über SPI auf ähnliche Weise empfangen, wie über UART? 
Also Byteweise. Oder ist SPI nur zum Programmieren geeignet?

von Rahul D. (rahul)


Lesenswert?

>kann ich Daten über SPI auf ähnliche Weise empfangen, wie über UART?
>Also Byteweise.
Ja

von Schorsch (Gast)


Lesenswert?

Nee, kannst auch byteweise (8 Bit) empfangen/senden.

Mit vorzüglicher Hochachtung
Schorsch

von Guido (Gast)


Lesenswert?

Gibt es denn da auch ne Art Register wie beim UART, wo die Daten 
abgelegt werden? Oder wie funktioniert die Auswertung dabei?

Möchte Daten vom PC an die SPI Schnittstelle des Mikrocontrollers 
schicken. Muss ich da irgendetwas beachten, von wegen Synchronisation?

von Jörg B. (manos)


Lesenswert?

Rahul Der trollige wrote:
>>Also Byteweise.
> Ja
Nein... Bitweise - ist ja seriell :)

von Schorsch (Gast)


Lesenswert?

> Gibt es denn da auch ne Art Register wie beim UART, wo die Daten
> abgelegt werden?

Ja, nennt sich SPDR.

Näheres im Datenblatt, erhältlich hier:

http://www.atmel.com

von Guido (Gast)


Lesenswert?

Coole Sache,

hab ich mir gerade mal angeschaut.

Jetzt würde ich gerne Daten vom PC über USB an die SPI-Schnittstelle 
bringen. Ist das Grundsätzlich möglich. Wie kann ich denn Daten vom PC 
über USB senden?

von A.K. (Gast)


Lesenswert?

Der FT2232 kann SPI.

von Obelix (Gast)


Lesenswert?

Schau mal hier rein

http://de.wikipedia.org/wiki/Glaskugel

und poste dann hier, was Leute für Infos brauchen könnten um dir weiter 
zu helfen.

@Schorch
Woher weist du das denn "Ja, nennt sich SPDR." ? Hast du die besagte 
Glaskugel?

von Matthias (Gast)


Lesenswert?

Kann das sein, dass jemand meine Glaskugel geklaut hat, und bei Ebay 
verkauft...?

Hätte dir ja sonst gern geholfen...
Aber ohne genaue Infos...

von Thomas F. (thmsfrst)


Lesenswert?

Ich möchte auch von PC aus über die USB-Schnittstelle, mit einem 
Mikrocontoller dazwischen einen Baustein mit SPI-Schnittstelle 
ansprechen. Dabei sind mir einige Sachen noch nicht ganz klar. Auf jedem 
Fall braucht man sowas wie einen USB-Treiber. Man kann entweder einen uC 
verwenden der sowohl eine USB wie auch SPI-Schnittstelle verwendet oder 
man nimmt so einen Baustein von FTDI dazwischen. Die FTDI-Bausteine 
haben den Vorteil, dass die sonst recht aufwendige 
USB-Treiberprogrammierung mit der zugehörigen Software vereinfacht wird. 
Mit ist aber auch noch nicht so ganz klar wie ich vom Anwendungsprogramm 
aus den uC steuern bzw. ansprechen kann und wie ich über die ganze Kette 
schließlich den SPI-Baustein ansprechen kann. Ich denke man braucht 
sowas wie eine Firmware auf dem uC die, die Kommunikation zwischen den 
Ports macht (evtl. ein Gateway). Recht viel weiter bin auch noch nicht 
gekommen.

von Guido (Gast)


Angehängte Dateien:

Lesenswert?

Also ich hab mir nen kleinen Pegelwandler mit dem Max232 gebastelt und 
schicke Daten von der seriellen Schnittstelle über den Max an den 
Atmega88.

Wenn ich die Daten per UART empfange, klappt das. Nur per SPI nicht. Hab 
den Code mal angehangen, vielleicht kann mir wer sagen wo der Fehler 
liegt?


Gruß  Guido

von Severino (Gast)


Lesenswert?

@ Thomas Fürst

Ich möchte auf den PICkit Serial Analyzer von Microhcip hinweisen,
der samt Windows-Software daherkommt und ziemlich preiswert ist.
http://www.microchip.com/stellent/idcplg?IdcServic...
Vielleicht gibt es die Soft- und die Firmware auch irgendwo zum
Download, so kann man das Ding dann auch selber bauen.
(Beim PICkit 1 ist das so).

von Severino (Gast)


Lesenswert?

Sorry, der Link scheint nicht zu funktionieren.
Ich füge ihn nochmals ein
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en028600

Wenn's nicht klappt:
www.microchip.com und nach "PICkit Serial Analyzer" suchen


von Guido (Gast)


Lesenswert?

So,

versuche es nun mit einen Code aus der Codesammlung:

/**************************************************************
Es soll alle halbe Sekunde im Wechsel 0 bzw. 1 gesendet werden.
Am korrespondierenden Slave soll zur Indikation jeweils die
LEDs an bzw. aus gehen
Verdrahtung:  MISO(Master) --> MISO(Slave)
        MOSI(Master) --> MOSI(Slave)
        SCK(Master)  --> SCK(Slave)
        PB0(Master)   --> SS(Slave)
**************************************************************/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

volatile unsigned char data;
unsigned char status;

SIGNAL (SIG_SPI) {
  data = SPDR;
  if (data == '1')  PORTD = 0x00;      //LEDs an
  if (data == '0')  PORTD = 0xff;      //LEDs aus
}

void slave_init (void) {
  DDRB |= _BV(PB4);              //MISO als Ausgang, der Rest als 
Eingang
  SPCR = _BV(SPE) | _BV(SPIE);        //Aktivierung des SPI + Interrupt
  status = SPSR;                //Status löschen
}

int main (void) {

  DDRD = 0xff;
  slave_init ();
  sei ();

  for (;;);
  return 0;
}




Wo muss ich was von der seriellen Schnittstelle anschließen? Meine Daten 
an MOSI, klar. Aber die anderen?

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.