Hallo zusammen, ich möchte gerne einen RFM12 direkt ohne Mikrocontroller an einen Raspberry Pi anschließen. Leider meldet sich der RFM12 nicht zurück, wenn ich den Status abfrage. Ich benuzte dazu die übliche C-Lib (http://www.airspayce.com/mikem/bcm2835/) Der selbe RFM12 funktioniert an einem AVR und anscheinend auch am Raspberry, denn wenn ich das mit dem rfm12b-linux Kernelmodul und den Beispielen probiere (https://github.com/gkaindl/rfm12b-linux), wird zumindest ein anderer Status zurückgeliefert, als wenn ich keinen RFM12 angeschlossen habe. Um den Fehler jetzt möglichst einzugrenzen, habe ich es jetzt mal per BitBanging auch mit der o.a. Lib versucht. Der unten stehende Code sollte immer wieder den Status abfragen und ausgeben. Ich bekomme leider nur Nullen. Was mach ich falsch? Vielen Dank [c] #include <bcm2835.h> #include <stdio.h> #define SDI RPI_GPIO_P1_19 #define SDO RPI_GPIO_P1_21 #define SCK RPI_GPIO_P1_23 #define NSEL RPI_GPIO_P1_26 int main(int argc, char **argv) { if (!bcm2835_init()) return 1; bcm2835_gpio_fsel(SDI, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(SDO, BCM2835_GPIO_FSEL_INPT); bcm2835_gpio_fsel(SCK, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(NSEL, BCM2835_GPIO_FSEL_OUTP); uint8_t i; while (1) { bcm2835_gpio_write(SDI, LOW); bcm2835_gpio_write(SCK, LOW); bcm2835_gpio_write(NSEL, HIGH); delay(500); bcm2835_gpio_write(NSEL, LOW); delay(500); for(i=0;i<16;i++) { bcm2835_gpio_write(SCK, HIGH); usleep(100); if(bcm2835_gpio_lev(SDO)) printf("1"); else printf("0"); fflush(stdout); bcm2835_gpio_write(SCK, LOW); usleep(100); } } return 0; } [\c]
Mhh, irgendwie klappt die Formatierung des C-Codes nicht. Was hab ich denn da schon wieder falsch gemacht?
Christian schrieb: > Mhh, irgendwie klappt die Formatierung des C-Codes nicht. Was hab ich > denn da schon wieder falsch gemacht? [/c] und nicht [\c]
Peter K. schrieb: > [/c] und nicht [\c] Danke, leider kann ich das als Gast nicht mehr ändern. Vielleicht sollte ich mich doch endlich mal anmelden.
Christian schrieb: > ich möchte gerne einen RFM12 direkt ohne Mikrocontroller an einen > Raspberry Pi anschließen. Leider meldet sich der RFM12 nicht zurück, > wenn ich den Status abfrage. Das machst du woran genau fest? Oder anders ausgedrückt: Was erwartest du, was er melden sollte? Ja, das sollte man schon wissen, bevor man ihn etwas fragt! Davon abgesehen: Der RFM12 ist ziemlich zickig bezüglich seines PowerOn-Verhaltens. Geht nSEL zu früh nach dem PowerOn auf Low (oder ist gar bei PowerOn bereits auf Low), dann kommt nur Mist bei der Statusabfrage und daran ändert sich auch nichts mehr bis zum nächsten Powercycle. Also dafür sorgen, daß er bei PowerOn (des RFM12!) auf nSEL sicher High sieht und sich daran auch in den nächsten 100ms (oder waren's 1000? Hab's vergessen) nix mehr ändert. Und noch einen: Du benutzt doch hoffentlich eine 3,3V-Version des RFM12, oder? > Ich bekomme leider > nur Nullen. Das wäre fast korrektes Verhalten! Nur bei der allerersten Statusabfrage solltest du genau ein Bit der 16 (nämlich das als zweites gelesene) auf High sehen, alle folgenden Abfragen sollten immer für alle Bits Low liefern. Jedenfalls so lange, bis du den RFM12 mal irgendwas sinnvolles machen lassen hast, also ein anderes Kommando ausgeführt hast als die Statusabfrage. Sehr praktisch zum reinen Prüfen der Funktionsfähigkeit der SPI-Kommunikation ist deshalb der externe Interrupt des RFM12. Der ist standardmäßig nach dem PowerOn aktiv. Nachdem der nInt-Eingang des RFM12 mal kurz auf Low gezogen wurde, sollte also auch im Statuswort ein Bit gesetzt sein (nämlich das als fünftes gelesene) und das immer für genau eine Statusabfrage. Ja, es lohnt sich, Datenblätter zu lesen. Hättest du das getan, hättest du das alles auch allein wissen können...
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.