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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.