Hallo, wenn ich eine SPI Schnittstelle per Software realisieren möchte, wie gehe ich da vor? Ein paar Gedanken habe ich mir schon gemacht, hier die Fragen die mir gerade im Kopf herumkreisen: Ich müsste ja eine Clock erzeugen sagen wir mal 1kHz für das Clock Signal. Dann muss ich einen weiteren Pin als MOSI toggeln. Benötigt der Pin dann 1kHz Frequenz für die Bits, oder muss ich die Bits mit 8kHz toggeln, Sprich: muss ich pro Clockflankenwechsel einen Bitflankenwechsel realisieren, oder muss der MISO ein Byte innerhalb eines Clockzyklus reinschieben und damit 8x so schnell sein, wie das Clocksignal? Und noch eine Frage: Da die Frequenz ja von dem Master vorgegeben wird, müsste es doch egal sein, ob die Taktrate stets gleichbleibend ist oder das eine oder andere Bit länger dauert als das andere, ist das richtig? mfg
BUS schrieb: > Benötigt der Pin dann > 1kHz Frequenz für die Bits, oder muss ich die Bits mit 8kHz toggeln, > Sprich: muss ich pro Clockflankenwechsel einen Bitflankenwechsel > realisieren, oder muss der MISO ein Byte innerhalb eines Clockzyklus > reinschieben und damit 8x so schnell sein, wie das Clocksignal? Warum guckst du nicht einfach in das Datenblatt eines IC mit SPI Interface? Da findest du die tollsten Zeitdiagramme zu den Signalen. Und lass dich nicht davon ins Boxhorn jagen, dass die mitunter unterschiedlich aussehen - es gibt verschiedene SPI Modi.
W.A. schrieb: > das Datenblatt eines IC mit SPI Interface SPI Interface ISR Routine LCD Display SDR Radio Weisses Schimmel-Pferd .......
Leute, so unkonkret waren meine Fragen nun wirklich nicht, dass hier dieser Ton angeschlagen werden müsste.
Du legst das 1. Bit, üblicherweise das Highbit, an deinen Mosi-Pin, dann wackelst du einmal am Clock, nächstes Bit, Clock wackeln usw.. Nach 8 Bits und 8 Clocks ist dein Byte drüben. Teste das mit einem 595er Schieberegister, einmal Latch Up und du hast dein erstes Erfolgserlebnis.
:
Bearbeitet durch User
Und noch zur Verdeutlichung: Ja, SPI ist per Definition voll statisch. D.h. man könnte die Signale auch mit Schaltern o.ä. erzeugen.
Wie schon gesagt: SPI geht von 0Hz bis xMHz, solange der Empfänger mitkommt. Auch muss der Takt nicht konstant sein: wichtig ist nur, dass man bei der passenden Flanke des Taktes das richtige Level an Data hast. Hier ein Schnipsel eines Masters ohne etwas zu empfangen.
1 | static bool put(uint8_t value) { |
2 | if (useDelay) Util::delay(Config::SoftSpiMaster::pulseDelay); |
3 | CSPin::low(); |
4 | for(uint8_t i = 0; i < 8; ++i) { |
5 | if (useDelay) Util::delay(Config::SoftSpiMaster::pulseDelay); |
6 | ClockPin::low(); |
7 | if (value & 0x80) { |
8 | DataPin::high(); |
9 | }
|
10 | else { |
11 | DataPin::low(); |
12 | }
|
13 | if (useDelay) Util::delay(Config::SoftSpiMaster::pulseDelay); |
14 | ClockPin::high(); |
15 | value <<= 1; |
16 | }
|
17 | ClockPin::low(); |
18 | if (useDelay) Util::delay(Config::SoftSpiMaster::pulseDelay); |
19 | CSPin::high(); |
20 | DataPin::low(); |
21 | return true; |
22 | }
|
Deutschlehrer schrieb: > LCD Display Wenn wir schon bei solchen Details sind: Liquid Crystal Devices http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470032022.html LED Display ?
Thomas E. schrieb: > wackelst du einmal am Clock, nächstes Bit, Clock wackeln usw.. > Nach 8 Bits und 8 Clocks ist dein Byte drüben. Hähhh? An der Uhr wackeln und nach 8 runtergefallenen Uhren ist mein Byte drüben? Oder am Takt wackeln? Ist so ein Takt nicht eher was regelmäßiges und nicht von Wackelkontakten bestimmt. Man kann ja nur hoffen, daß der TE son verquasten und Takflankenfreien Beitrag ignoriert.
BUS schrieb: > Leute, so unkonkret waren meine Fragen nun wirklich nicht, dass hier > dieser Ton angeschlagen werden müsste. Deine Frage zeigt, daß Du schlicht und einfach unhöflich bist weil Du andere das machen lassen willst was Deine eigene Aufgabe ist: sich erst einmal selber schlau machen: Denn in defakto jedem Datenblatt eines SPI-tauglichen Teils ist auf den ersten Blick ersichtlich wie das Timing vom SPI aussieht. Und wenn Du zufälligerweise im www das eine Datenblatt gefunden hast in dem das nicht drinnensteht schaust Du dir das in der Wikipedia an. Daher - selbst wenn die Frage im ersten Moment sehr konkret war - sie ist auf den 2. Blick ziemlich unhöflich. MiWi
Ich finde die Frage nicht unhöflich: es zwingt niemanden, sich diesen Thread anzusehen oder gar zu antworten. Es ist eben eine Anfängerfrage. Da kann man einen entsprechenden Hinweis geben oder einfach der Geschichte seinen Lauf lassen ...
falscherFuß schrieb: > Hähhh? An der Uhr wackeln und nach 8 runtergefallenen Uhren ist mein > Byte drüben? Oder am Takt wackeln? Ist so ein Takt nicht eher was > regelmäßiges und nicht von Wackelkontakten bestimmt. Nein, beim Software-SPI nicht. Du kannst mit 8MHz anfangen und mit 8Hz beenden, es macht absolut keinen Unterschied, ausser in der Übertragungszeit, natürlich. falscherFuß schrieb: > Man kann ja nur hoffen, daß der TE son verquasten und Takflankenfreien > Beitrag ignoriert. Nein, man kann nur hoffen, dass der TO deinen Beitrag ignoriert.
Wilhelm M. schrieb: > Es ist eben eine Anfängerfrage. Da kann man einen entsprechenden Hinweis > geben oder einfach der Geschichte seinen Lauf lassen ... Eher eine Hausaufgabe, wenn man den Nachbarthread berücksichtigt.
Thomas E. schrieb: > Du legst das 1. Bit, üblicherweise das Highbit, an deinen Mosi-Pin, dann > wackelst du einmal am Clock, nächstes Bit, Clock wackeln usw.. > Nach 8 Bits und 8 Clocks ist dein Byte drüben. Thomas, das ist ja wohl die allergeilste Beschreibung die ich je las.
MiWi schrieb: > Deine Frage zeigt, daß Du schlicht und einfach unhöflich bist weil Du > andere das machen lassen willst was Deine eigene Aufgabe ist: sich erst > einmal selber schlau machen: Grundsätzlich sollte man sich schlau machen. Aber deine Aussage zeigt nur, dass du entweder noch sehr unreif und jung bist oder dein Weitblick nicht so sehr weit reicht. Gerade ein Anfänger braucht doch einmal einen richtigen Impuls zum suchen der richtigen Dokumente. Es gibt so unendlich viel, über jede Sache zu lesen, da weiß ein Anfänger doch oft gar nicht wo er gucken soll.
F. F. schrieb: > Gerade ein Anfänger braucht doch einmal einen richtigen Impuls zum > suchen der richtigen Dokumente. Es gibt so unendlich viel, über jede > Sache zu lesen, da weiß ein Anfänger doch oft gar nicht wo er gucken > soll. Guckst du hier: https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus Guckst du hier auch noch: https://de.wikipedia.org/wiki/Serial_Peripheral_Interface Guckst du hier weiter: http://www.mct.net/faq/spi.html Kannst du auch gucken hier: http://www.mct.de/faq/spi.html Hier noch mehr gucken: https://downloadcenter.intel.com/download/22112 Schau an: http://www.byteparadigm.com/applications/introduction-to-i2c-and-spi-protocols/?/article/AA-00255/22/Introduction-to-SPI-and-IC-protocols.html Lesen hier: http://www.corelis.com/education/SPI_Tutorial.htm ... Eine Suchmaschine hilft gucken!
F. F. schrieb: > 123457890 schrieb: >> Guckst du hier: > > Ich war nicht der Fragesteller. Sorry, aber vielleicht hilft ihm die Antwort trotzdem!
F. F. schrieb: > MiWi schrieb: >> Deine Frage zeigt, daß Du schlicht und einfach unhöflich bist weil Du >> andere das machen lassen willst was Deine eigene Aufgabe ist: sich erst >> einmal selber schlau machen: > > Grundsätzlich sollte man sich schlau machen. Aber deine Aussage zeigt > nur, dass du entweder noch sehr unreif und jung Aha. > bist oder dein Weitblick nicht so sehr weit reicht. Aha. > > Gerade ein Anfänger braucht doch einmal einen richtigen Impuls zum > suchen der richtigen Dokumente. Es gibt so unendlich viel, über jede > Sache zu lesen, da weiß ein Anfänger doch oft gar nicht wo er gucken > soll. Findest Du es wirklcih schwierig mit Google nach SPI zu suchen, den Link der Wikipedia zu öffnen und dann die in den Commons gezeigten Timingdiagramme anzuschauen und darüber nachzudenken, wie das gemeint ist? Ich erwarte von meinen Schülern, daß sie sich vorher mit den Fragen erst einmal selber beschäftigt haben und die techn Resource Internet entsprechend genutzt haben. Mag sein, daß das für Dich schon zu sehr fordernd ist den TO aufzufordern zu zeigen was er schon hat, für mich ist es eine (durchaus grantige) Hilfe zu Selbsthilfe. Für mich sind solche Fragen "Mama ich will" und dann rennt die Meute und der TO schaut entspannt auf seinem PC zu .... funktioniert auch wie man an dem Thread sieht. BUS hat sich bis dato mit keinerlei Rückfrage wieder gemeldet... MiWi
Marc V. schrieb: > falscherFuß schrieb: >> Hähhh? An der Uhr wackeln und nach 8 runtergefallenen Uhren ist mein >> Byte drüben? Oder am Takt wackeln? Ist so ein Takt nicht eher was >> regelmäßiges und nicht von Wackelkontakten bestimmt. > > Nein, beim Software-SPI nicht. > Du kannst mit 8MHz anfangen und mit 8Hz beenden, es macht absolut > keinen Unterschied, ausser in der Übertragungszeit, natürlich. Du bist auch eher von übersichtlichem Verständnis geplagt oder?
MiWi schrieb: > BUS hat sich bis dato mit keinerlei Rückfrage wieder gemeldet... Gibt dir natürlich in gewisser Weise recht ...
falscherFuß schrieb: > Du bist auch eher von übersichtlichem Verständnis geplagt oder? Was verstehst du an der Aussage nicht? Wer im Glaushaus sitzt ...
Nochmals, es braucht keine verlinkten Seiten, oder so'n quatsch. CS=0; Clock=0; Data=(Daten and $01); clock=1; Daten=shiftleft(Daten); clock=0; Data=(Daten and $01); clock=1; Daten=shiftleft(Daten); clock=0; .. fertig. Kannst mit dem Timingdiagramm im Datenblatt vergleichen.
Noch nicht Rentner schrieb: > Nochmals, es braucht keine verlinkten Seiten, oder so'n quatsch. > > CS=0; > Clock=0; > Data=(Daten and $01); > clock=1; > Daten=shiftleft(Daten); > clock=0; > Data=(Daten and $01); > clock=1; > Daten=shiftleft(Daten); > clock=0; > .. Wär nicht schlecht, wenn du für unsere Anfänger noch dazuschreiben würdest, welcher der vier Moden das sein soll und ob LSB oder MSB zuerst. > fertig. Kannst mit dem Timingdiagramm im Datenblatt vergleichen. Welches Datenblatt? Wurde vom TE schon ein Datenblatt erwähnt?
falscher Fuß schrieb: > Noch nicht Rentner schrieb: >> Nochmals, es braucht keine verlinkten Seiten, oder so'n quatsch. > > Wär nicht schlecht, wenn du für unsere Anfänger noch dazuschreiben > würdest, welcher der vier Moden das sein soll und ob LSB oder MSB > zuerst. Wär nicht schlecht, wenn man nur über Sachen reden würde, von denen man wenigstens ein bisschen Ahnung hat. Und das gilt für euch beide. Für dich: Wenn man nach links schiebt, ist das MSB zuerst. Für Noch nicht Rentner: Aber, wenn man nach links schiebt, wird kein AND mit 0x01 ausgeführt. In Assembler wird überhaupt kein AND benötigt, in C wird das dann mit 0x80 und bestimmt nicht mit 0x01 gemacht.
:
Bearbeitet durch User
Marc V. schrieb: > Für dich: (ich glaube er meint mich) > Wenn man nach links schiebt, ist das MSB zuerst. > > Für Noch nicht Rentner: > Aber, wenn man nach links schiebt, wird kein AND mit 0x01 ausgeführt. > In Assembler wird überhaupt kein AND benötigt, in C wird das dann mit > 0x80 und bestimmt nicht mit 0x01 gemacht. Wenn man nach rechts schiebt ist das dann LSB zuerst? und würde dann mit 0x01 in C verknüpft?
Hier gibt es auch noch ein schönes Code-Beispiel: https://www.maximintegrated.com/en/app-notes/index.mvp/id/4184
Das Ganze stand ja schon weiter oben in einem Post ... Code lesen ist meistens wichtiger als Code schreiben ;-)
Ich kann mir beim UP nicht vorstellen, dass es hier jemals um eine Realisierung gegangen ist. Es kann nur eine Hausaufgabe sein. Das jemand einen SPI in Software implementieren will und fragt, ob 8Bit während einer Clock rausgehauen werden, halte ich für unwahrscheinlich. Die Antworten sind daher: > Dann muss ich einen weiteren Pin als MOSI toggeln. Benötigt der Pin dann > 1kHz Frequenz für die Bits, oder muss ich die Bits mit 8kHz toggeln weder noch. Für das nächste Bit wird nur getoggelt, wenn es anders ist. Und Clock wird je Bit 2 Mal getoggelt. Maximal hat der MOSI damit die halbe Frequenz des Clock-Signals. > Sprich: muss ich pro Clockflankenwechsel einen Bitflankenwechsel > realisieren, oder muss der MISO ein Byte innerhalb eines Clockzyklus > reinschieben und damit 8x so schnell sein, wie das Clocksignal? beides nicht. Für jedes Bit brauchst Du 2 Clockflankenwechsel, während ein Bit 0 oder 1 Flankenwechsel hat. > Und noch eine Frage: > Da die Frequenz ja von dem Master vorgegeben wird, müsste es doch egal > sein, ob die Taktrate stets gleichbleibend ist oder das eine oder andere > Bit länger dauert als das andere, ist das richtig? Ja.
falscherFuß schrieb: > An welcher Aussage? Marc V. schrieb: > Du kannst mit 8MHz anfangen und mit 8Hz beenden, es macht absolut > keinen Unterschied, ausser in der Übertragungszeit, natürlich.
google mit "spi bit bang" liefert auf der ersten Seite u.a. das: http://www.avrfreaks.net/forum/spi-bitbang-implementation
Dr Emmet Brown jr. sr. schrieb: > google mit "spi bit bang" liefert auf der ersten Seite u.a. das: > http://www.avrfreaks.net/forum/spi-bitbang-implementation Wow, ausgezeichnetes Beispiel. Da versucht der Slave den Clock zu setzen...
Marc V. schrieb: > Dr Emmet Brown jr. sr. schrieb: >> google mit "spi bit bang" liefert auf der ersten Seite u.a. das: >> http://www.avrfreaks.net/forum/spi-bitbang-implementation > > Wow, ausgezeichnetes Beispiel. > Da versucht der Slave den Clock zu setzen... Die Beispiele aus denen man beides -richtig und falsch- lernen kann, sind die Besten ;-)
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.