Hallo Community! Ich möchte gern 2 AVRs dazu bringen mit RFM12s zu kommunizieren: AVR1: Atmega 32 Auf Funk-AVR-Evaluationboard von Pollin drauf, Daten ein-/ausgabe via UART im Terminal Getaktet wird der AVR via 16 Mhz Quarz AVR2: Atmega32 Auf Steckbrett, 16*2 LCD für Datenausgabe Taktung: Entweder intern oder mit den 10 Mhz vom RFM, weis noch nicht Uart & LCD funzen schon mal. Jetzt zu meinen Fragen: 1. Hab mir mal den Quellcode für das RFM12 von Benedikt (Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module") geholt. Da steht in der rf12.c folgendes drin: >#define SDI 5 // PB5 >#define SCK 7 //PB7 >#define CS // ????? >#define SDO 6 //PB6 Welcher Pin am RFM12 ist CS? Alles Andere konnte ich finden 2. Die Jumper muss ich nur für SDI, SD0, SCK, CS (??) und VCC setzen, oder? 3. Gibt es irgendwo ein gutes Tutorial für das RFM12? Also so ne wunderschöne Step by Step Anleitung? Bin für jede Hilfe dankbar :-) -schumi-
> Welcher Pin am RFM12 ist CS? Alles Andere konnte ich finden CS -> Chip Select nSEL -> Not SELect Obacht, ersteres ist dem Namen nach active high, zweiteres (laut Name und laut Datenblatt) active low. Da der Code aber augenscheinlich für dem RFM12 geschrieben wurde nehme ich einfach mal an, dass da einer in der Namensgebung etwas nachlässig war. > 2. Die Jumper muss ich nur für SDI, SD0, SCK, CS (??) und VCC setzen, > oder? Depends. Zweckmäßig wär für alles was Du anschließen willst :-) > 3. Gibt es irgendwo ein gutes Tutorial für das RFM12? Also so ne > wunderschöne Step by Step Anleitung? Ja, das Datenblatt :-) Vorzugsweise gleich das vom Silicon Labs SI4420 (das ist der Tschipp der im RFM12 verbaut ist). HTH
Vielen Dank für deine Antwort! jetzt ist das ganze schon ein bischen klarer. >CS -> Chip Select >nSEL -> Not SELect nSEL ist mit PB4 verbunden -> "#define CS 4" Aber warum muss ich dann CS definieren und nicht gleich nSEL?? nSEL muss invertiert werden um CS zu erhalten. Wird das in Benedikts Software schon gemacht oder muss ich dass selbst nachtragen bzw. logik-IC dazwischen klemmen? Das Datenblatt werde ich mir bei der nächsten Gelegenheit zu Gemüte führen. Noch mal Danke für die Hilfe! -schumi-
Hi, Wenn du dir den Code von Benedikt zu Gemüte führst, wirst du schnell erkennen, dass CS (das define) schon in der Software active low gehandhabt wird. Als Beispiel kannst du dir die 1. Funktion rf12_trans anschauen, wo der 1. Befehl CS auf low zieht um das Modul auszuwählen. Das heißt, du musst nichts mit Gattern machen (wobei ich dir vor der Verwendung eines Inverters zu der Modifikation des Codes raten würde, ist einfacher ;) ). Eine ganz korrekte Namensnennung hätte das Signal, wie schon g457 gesagt hat, als nCS deklariert. gruß Mobius
Auch für deine Antwort ein Danke! Aktueller Stand: Jumper: SD0, NSEL, SCK, SDI, VCC gesetzt, sonst alles frei Einstellungen im Programm: >#define RF_PORT PORTB >#define RF_DDR DDRB >#define RF_PIN PINB >#define SDI 5 >#define SCK 7 >#define CS 4 //entspricht !NSEL >#define SDO 6 Ich hab noch ein paar mal Statusmeldungen via der beiden LEDs reingemacht und rausgefunden, dass das Programm anscheinend bei >void rf12_ready(void) >{ cbi(RF_PORT, CS); > while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready >} hängen bleibt, wenn ich die Funktion "send();" aufrufe... Werd mal Google und SuFu bemühen, für Tipps aber immer dankbar :-)
Hey Simon ich bekomme den selben Fehler wie du, hast du inzwischen eine Lösung gefunden? Gruß slashbrain
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.