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
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.
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..
Mit einem IO deines µCs. Des schaltest du während du Daten über SPI an den nRF sendest auf low.
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.
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?
>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.
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.
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...
Bist du dir sicher, dass der µC als SPI Master konfiguriert ist?
ích hab \SS als ausgang deklariert, helfen tut das allerdings nicht..
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?
auf dem arduino funktioniert die selbe initilisierungs routine.. daher glaube ich nicht, dass es daran liegt..
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.