Tach, kann ich Daten über SPI auf ähnliche Weise empfangen, wie über UART? Also Byteweise. Oder ist SPI nur zum Programmieren geeignet?
>kann ich Daten über SPI auf ähnliche Weise empfangen, wie über UART? >Also Byteweise. Ja
Nee, kannst auch byteweise (8 Bit) empfangen/senden. Mit vorzüglicher Hochachtung Schorsch
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?
Rahul Der trollige wrote: >>Also Byteweise. > Ja Nein... Bitweise - ist ja seriell :)
> 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
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?
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?
Kann das sein, dass jemand meine Glaskugel geklaut hat, und bei Ebay verkauft...? Hätte dir ja sonst gern geholfen... Aber ohne genaue Infos...
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.
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
@ 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).
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.