Daten über SPI?

Gast #508057
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?
Gast #508130
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?
#509881
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.
Gast #509895
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
Angehängte Dateien:
Gast #509957
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren