Forum: Mikrocontroller und Digitale Elektronik Idiotenfragen, u.a. wo ist beim RFM12 "CS"?


von Simon S. (-schumi-)


Lesenswert?

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-

von g457 (Gast)


Lesenswert?

> 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

von Simon S. (-schumi-)


Lesenswert?

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-

von Mobius (Gast)


Lesenswert?

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

von Simon S. (-schumi-)


Lesenswert?

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 :-)

von slashbrain (Gast)


Lesenswert?

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