PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lib für SPI



Jacob2
22.07.2008, 13:31
Hallo,
ich habe jetzt mal ein bisschen was über SPI gelesen und das Grundprinzip verstanden. Trotz den Google-Suchergebnissen verstehe ich aber nicht, wie man nun in der Software (also in C) einen Datenaustausch programmiert! :-s
Mein Ziel ist es die RFMxx Module von Reichelt zu benutzen.
Gibts für SPI in C irgendwelche Libs oder vorgefertigte Funktionen, von denen man sich den Code abgucken kann, oder die man erstmal benutzen kann?

uwegw
22.07.2008, 13:41
http://www.mikrocontroller.net/articles/AVR_RFM12

fhs
22.07.2008, 16:04
Hallo Jacob2,

http://www.openavr.org/AVR_SPI_C_Snippets/de
http://atmel.com/dyn/resources/prod_documents/doc2585.pdf

MfG

Fred

Jacob2
22.07.2008, 16:52
@fhs
Frage zum 1. Link:
Unter "Initialisierung des Masters": was ist das SPI Control Register?

Die SPI nutzen ja auch MOSI MISO usw. , die ja auch zur ISP benutzt werden, werden die dann doppelt benutzt?

Foooob
22.07.2008, 17:39
[...]Die SPI nutzen ja auch MOSI MISO usw. , die ja auch zur ISP benutzt werden, werden die dann doppelt benutzt?

Richtig!

Das ist aber in der Regel nicht weiter schlimm.
Bevor der µC über ISP programmiert wird zieht der Programmierdongle den Resetpin auf Masse, die Ausführung des Codes im µC wird unterbrochen und die Leitungen sind freigegeben.

So ist es zumindest, wenn dein µC der Master ist. Ist er das nicht, musst du dafür sorgen, dass der Master den Bus freigibt, z.B. indem du den Resetimpuls, den der µC bekommt auch auf den Master gibst.

Jacob2
22.07.2008, 17:51
Und was ist das SPI Control Register?

fhs
22.07.2008, 18:28
Hallo,


... was ist das SPI Control Register?
bei den AVRs musst Du im entsprechenden Datenblatt nachsehen: Gewöhnlich wird dort das "SPI Control Register" als "SPCR" bezeichnet und das entsprechende Datenregister als "SPDR".


Die SPI nutzen ja auch MOSI MISO usw. , die ja auch zur ISP benutzt werden, werden die dann doppelt benutzt?
"Doppelt" ist hier kein passender Begriff -- die Register haben eben "alternative Funktionen" -- auch das steht im Datenblatt erklärt.

Bei den AVRs gibt es übrigens kein automatisches "Slave Select" im "SPI Master Mode", das muss man nötigenfalls selbst programmieren.

Gruß

Fred

Jacob2
23.07.2008, 12:04
Und gibts so was wie ein leichter verständliches Tutorial, bei den bisherigen Seiten darüber tat ich mir sehr schwer das zu verstehen, zumal die AVR-Datenblätter ja auch noch auf Englisch sind und man solche Fachausdrücke nicht mal eben im Wörterbuch nachgucken kann!

fhs
23.07.2008, 14:05
Hallo,

...ein leichter verständliches Tutorial, bei den bisherigen Seiten darüber tat ich mir sehr schwer das zu verstehen, zumal die AVR-Datenblätter ja auch noch auf Englisch sind ...

ohne das englischsprachige Originalmaterial sehe ich da wenig Möglichkeiten. Vielleicht kennt aber jemand etwas auf Deutsch?

Gruß

Fred

sternst
23.07.2008, 16:01
zumal die AVR-Datenblätter ja auch noch auf Englisch sind und man solche Fachausdrücke nicht mal eben im Wörterbuch nachgucken kann!

Das Englisch der Datenblätter ist normalerweise ein recht einfaches Englisch. Die Macher wissen ja schließlich, dass die Datenblätter auch von vielen Menschen verstanden werden müssen, deren Muttersprache eben nicht Englisch ist. Und die Menge der Fachausdrücke, die du nicht in einem "normalen" Wörterbuch findest, ist sehr überschaubar. Die Begriffe lassen sich meist auch sehr leicht ergooglen. Und wenn du partout mal einen Satz nicht verstehst, kannst du immer noch hier nachfragen.
Häng dich da rein, denn:
1. hat man sich das Datenblatt-Englisch wirklich schnell angeeignet
2. kann ich dir garantieren, dass du auf Dauer nicht ohne Datenblatt-Lesen auskommst.

Foooob
24.07.2008, 16:01
Da haben meine Vorredner wirklich recht.

Du musst dich damit nichteinmal richtig intensiv beschäftigen um Datenblätter (auf Englisch) lesen und verstehen zu müssen. Daran führt absolut kein Weg vorbei. Wir könnten dir das zwar auf Deutsch übersetzen oder einfacher schildern, aber spätestens beim nächsten Thema taucht die selbe Problematik wieder auf.


Im Datenblatt ist auch schön beschrieben (sogar mit C Code!), wie man SPI initialisiert und wie man Daten empfängt / sendet. Alle anderen Erklärungen die du finden wirst werden diese Codezeilen (oft sogar 1:1) beinhalten.

Jacob2
24.07.2008, 16:57
Ganz so sollte das nicht klingen! :D
Die Betonung sollte auf dem Fachdeutsch liegen!

Wenn ich das richtig verstanden habe kann man Daten senden indem man sie an SPDR übergibt. Ich habe da aber auch die Funktion SpiByte() gesehen. Bewirkt die das gleiche oder gibts da Unterschiede?

fhs
24.07.2008, 18:05
Hallo,


...Ich habe da aber auch die Funktion SpiByte() gesehen. Bewirkt die das gleiche oder gibts da Unterschiede?
der Name der Funktion spielt keine Rolle. Diese Frage wird Dir niemand beantworten können, wenn Du uns die Funktion nicht zeigst.

Noch wichtiger und zum wiederholten Mal: Bitte lies die Datenblätter; die SPI-Funktionen (sowohl Master als auch Slave) sind in Assembler und in C jeweils nur ein paar Zeilen kurz und sehr gut in den AVR-Datenblättern dokumentiert. Die Tatsache, dass die SPI-Hardware schon fast alles für einen tut und der Code so einfach ist, ist sicher der Grund, dass es keine (oder vielleicht ganz wenige?) SPI-Bibliotheken gibt, die Du publiziert finden wirst.

Gruß

Fred