Forum: Mikrocontroller und Digitale Elektronik SPI funktioniert mit externem SCK takt


von MSN (Gast)


Lesenswert?

Hey,
ichversuche grade ein arduino mirco mit nem mega8 reden zu lassen und 
zwar über je ein nRF24L01+ modul. der mega8 hat z.z. keine externe 
beschaltung außer 10k am reset und ist auf 8 MHZ intern getaktet.
Die funkkommunikation funktioniert problemlos, wenn ich einen externen 
sck takt am mega 8 anlege: entweder der vom ISP programmer oder der vom 
arduino.
hab bereits versucht einen pullup oder pulldown wiederstand von 10k oder 
2,2k an die sck leitung zu hängen, außerdem 330 Ohm in reihe und 
kombinationen aus wiederstand in reihe und pull wiederstand. bisher 
alles erfolglos. kann es sein, dass der interne takt zu ungenau ist?
danke,
Marc

von Jim M. (turboj)


Lesenswert?

Bei SPI ist der Takt fast völlig egal. Man darf nur die Setup & Hold 
Zeiten nicht unterschreiten.

Dein Problem klingt eher nach falsch verwendetem NSS Pin, der muss ein 
AUSGANG sein.

von MSN (Gast)


Lesenswert?

ich benutze den code:
http://physudo.blogspot.de/2013/07/funkmodul-nrf24l01-grundlagen.html
also nichts eigenes, wollte erstmal die Kommunikation so hin bekommen.
/SS ist im moment auch nicht beschaltet..

von Max H. (hartl192)


Lesenswert?

MSN schrieb:
> /SS ist im moment auch nicht beschaltet..
Den PIN wirds aber brauchen...

von MSN (Gast)


Lesenswert?

M. H. schrieb:
> Den PIN wirds aber brauchen...

und womit verbinde ich den?

von Max H. (hartl192)


Lesenswert?

Mit einem IO deines µCs. Des schaltest du während du Daten über SPI an 
den nRF sendest auf low.

von MSN (Gast)


Lesenswert?

der code benutzt die arduino MIRF lib, ich schätze mal das ist darin 
irgendwie geregelt.. die \CS leitung vom nRF24L01+ ist ja mit einem pin 
des atmega verbunden (dem in der lib als standart definierten pin 
13[PD7] des mega 8) nur am \SS pin des hardware SPI liegt nichts an.. es 
ist ja nicht so als hätte ich mir hier was wirres ausgedacht, sondern 
ich versuche ein funktionsfähiges beispiel zu reproduzieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

MSN schrieb:
> wiederstand
Was ist das schon wieder?

> hab bereits versucht einen pullup oder pulldown wiederstand von 10k oder
> 2,2k an die sck leitung zu hängen,
Willst du nicht einfach mal versuchen, zu verstehen, was SPI eigentlich 
ist? Und dann ist klar, dass du einen Master brauchst, der den Takt 
ausgibt und mit einem Slave kommuniziert. Wer ist in deinem System der 
Master? Wer der Slave? Und wer hat ergo für den Takt zu sorgen?

MSN schrieb:
> der code benutzt die arduino MIRF lib, ich schätze mal das ist darin
> irgendwie geregelt..
Das hört sich nach überlegtem und koordiniertem Vorgehen an. Was sagt 
denn die Doku zu dieser Bibliothek?

von dummy (Gast)


Lesenswert?

>nur am \SS pin des hardware SPI liegt nichts an..

Dort muss auch nichts anliegen. Er muss aber
auf jeden Fall als Ausgang definiert werden.
Egal ob er angeschlossen wird oder nicht.

von Kaj (Gast)


Lesenswert?

Tut mir leid, wenn ich das jetzt so sage aber:
LIES DIE DATENBLÄTTER DER MIKROCONTROLLER!

In dem Kapitel "SPI" steht alles was du wissen musst.

von MSN (Gast)


Lesenswert?

Lothar Miller schrieb:
> überlegtem

Lothar Miller schrieb:
> MSN schrieb:
>> wiederstand
> Was ist das schon wieder?

das ist etwas was hier im forum vorgeschlagen wird, und nicht meine 
idee..

>> hab bereits versucht einen pullup oder pulldown wiederstand von 10k oder
>> 2,2k an die sck leitung zu hängen,
> Willst du nicht einfach mal versuchen, zu verstehen, was SPI eigentlich
> ist? Und dann ist klar, dass du einen Master brauchst, der den Takt
> ausgibt und mit einem Slave kommuniziert. Wer ist in deinem System der
> Master? Wer der Slave? Und wer hat ergo für den Takt zu sorgen?

ich habe verstanden was SPI ist, natürlich hat der mega8 für den takt zu 
sorgen, offensichtlich tut er das aber nicht.

> MSN schrieb:
>> der code benutzt die arduino MIRF lib, ich schätze mal das ist darin
>> irgendwie geregelt..
> Das hört sich nach überlegtem und koordiniertem Vorgehen an. Was sagt
> denn die Doku zu dieser Bibliothek?

die lib konfiguriert den mit \CS verbundenen pin als output und zieht 
ihn vor SPI kommandos auf low danach wieder auf high

nach wie vor ist mein problem allerdings die SCK leitung...

von Max H. (hartl192)


Lesenswert?

Bist du dir sicher, dass der µC als SPI Master konfiguriert ist?

von MSN (Gast)


Lesenswert?

ích hab \SS als ausgang deklariert, helfen tut das allerdings nicht..

von Cyblord -. (cyblord)


Lesenswert?

MSN schrieb:
> ích hab \SS als ausgang deklariert, helfen tut das allerdings nicht..

Schön, aber wenn der SS Eingang ist UND auf Low, dann haut es dir sofort 
das SPI Master Bit raus und der µC war die längste Zeit SPI Master.
Also der muss erstmal Ausgang sein.


> Bist du dir sicher, dass der µC als SPI Master konfiguriert ist?

Eben.
Sind die entsprechenden Bits in den SPI Registern gesetzt?

Sind die Ports für MISO,MOSI und SCK auf die korrekte Richtung 
eingestellt?

von MSN (Gast)


Lesenswert?

auf dem arduino funktioniert die selbe initilisierungs routine.. daher 
glaube ich nicht, dass es daran liegt..

von MSN (Gast)


Lesenswert?

die SPI lib kann nur master mode..

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
Noch kein Account? Hier anmelden.