i2c radio ansteuern

Dieser Beitrag bezieht sich auf das folgende Produkt: ELV FM-Receiver Modul mit Si4705, FM-RM1, Komplettbausatz

Artikel-Nr.: 68-14 09 84

Zum Produkt
zur Übersicht2 Beiträge Thema abonnieren Neue Antwort
Anzeigen  Sortieren 

i2c radio ansteuern

von ulrich_k » 12.04.2015, 22:42 

Hier einige Lösungen zum Ansteuern des I2C Radios:

[b]1. Initialisieren des Radios über das ELV I2C Modul
[/b]
Zeilen, die mit / beginnen sind Kommentare und dürfen
nicht gesendet werden

/C6 ist die I2C Adresse des Radios,
/diese Information fehlt in der Anleitung
/SC6 bedeutet "sende an I2C Adresse C6"
/das P am Ende ist das Stopzeichen für die I2C Kommandos
/nach dem SC6 folgt als nächsten Byte in /Hexadezimalschreibweise die Kommandonummer
/gefolgt von weiteren Parametern
SC6 01 D0 05 P
SC6 12 00 FF 00 00 00 P
SC6 12 00 11 00 00 01 P
SC6 12 00 15 00 00 01 P
SC6 12 00 15 01 00 01 P
SC6 12 00 15 02 FF 01 P
SC6 12 00 11 07 0000 P
SC6 21 0C P

/ lautstärke
SC6 12 00 40 00 00 1E P
sc6 80 0e p

[b]2. Einstellen eines Senders:
[/b]
In Borland Delphi 6 sieht es so aus:
form_radio.edit_sendername.text:='Delta Radio';
unit1.set_radiofreq ('100.40',sender);

/wobei SC6 wieder sende an i2c Adresse 6 kommando 20 ist
SC6 20 00 '+hexstr+' 00 P
/die Sendefrequenz muss von Dezimal nach Hexadezimal /umgerechnet werden

Beispiel:
/für Delta Radio will ich die Frequenz 100.40 MHz einstellen
/gesendet über die i2c Schnittstelle wird:
SC6 20 00 27 38 00 P
/wobei die eigendliche Frequenzangabe in den beiden
/Hexbytes 27 38 steht
/denn 27 38 in hex entspricht dezimal 10040
/in der Zahl 100 stecken die 100 MHz
/in der 40 die Nachkommastellen .40
/also: 100.40 MHz

/und in Borland Delphi wird die Wunschfrequenz übergeben:
/z.B. 100.40 MHz
/- den Punkt entfernen: 10040
/- in Hex umrechnen: 2738
/- für das senden ein Leerzeichen (Space einfügen): 27 38
/- für das Kommando die führenden Bytes SC6 20 00 einfügen und / an die Frequenz 00 P anfügen:
SC6 20 00 27 38 00 P

[b]3. Realisation mit i2c Display, i2c Clock und I2c-Radio
[/b]
Mittlerweile gibt es eine technische Lösung mit
implementierten I2C-Radio,I2C-Clock und I2C-Display.
Die Ansteuerung ist Lauffähig über Borland Delphi 6 unter
Windows XP und Windows 7. Der vollständige Sourcecode
liegt vor.
Es werden Sendername, Frequenz, Uhrzeit, Empfangsstärke
auf dem PC und am 4 Zeiligen Display angezeigt.
Der Empfang ist gut mit mittlerer Empfindlichkeit. Geplant
ist noch das automatisierte Aufzeichnen auf SD Karte.
ulrich_k
Beiträge: 4
Registriert
14.03.2015

AW: i2c radio ansteuern mit pic18f4550 und mikroc

von ulrich_k » 30.05.2015, 23:45 

Das I2C Radio lässt sich auch mit einem Mikrocontroller
ansteuern. Es gibt einiges zu beachten, das in der Dokumentation nicht erwähnt wird.
1. I2C Adresse: C6
2. Wählen sie eine möglichst niedrige I2C Rate. Nach jedem
Befehl der mit i2c Stop endet, muss eine kleine Pause
gemacht werden, damit die Befehle verarbeitet werden können.
Mit einem Delay von 100 ms funktioniert das System.
3. Nach der Initsequenz muss eine längere Pause von 200 ms gemacht werden.
4. Vor dem Ansprechen sollten keine anderen Aktivitäten auf dem I2c Bus sein (checken mit dem Oszilloskop). Werden falsche oder unvollständige Befehle gesendet, kann sich der System
"aufhängen" und alle nachfolgenden Befehle gehen nicht mehr.
5. wenn der Mute off nicht aktiviert ist, wird man nichts hören; gleichermassen gpio auf on stehen
6. Der erste Befehl sollte Powerup sein:
C6 01 D0 05
7. hier die vollständige Sequenz; auch wenn noch keine
Frequenz eingstellt ist sollte man ein Rauschen hören und
das Radio eingeschaltet sein


i2c1_init(20000);
delay_ms (100);

i2c1_start();
i2c1_wr (0xc6); // power on radio i2c
i2c1_wr (0x01);
i2c1_wr (0xd0); //0101 0101
i2c1_wr (0x05); //0101 0101
i2c1_stop();
delay_ms (200);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0xff); i2c1_wr (0x00);i2c1_wr (0x00);i2c1_wr (0x00); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x11); i2c1_wr (0x00);i2c1_wr (0x00);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x15); i2c1_wr (0x00);i2c1_wr (0x00);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x15); i2c1_wr (0x01);i2c1_wr (0x00);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x15); i2c1_wr (0x02);i2c1_wr (0xff);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x11); i2c1_wr (0x07);i2c1_wr (0x00);i2c1_wr (0x00); i2c1_stop(); delay_ms (100);
delay_ms (70);
// seek start
// i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x21);i2c1_wr (0x0c); i2c1_stop(); delay_ms (100);
// lautstärke
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x40); i2c1_wr (0x00); i2c1_wr (0x00);i2c1_wr (0x1a);i2c1_stop(); delay_ms (100);
delay_ms (70);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x80);i2c1_wr (0x0e); i2c1_stop(); delay_ms (100);
delay_ms (700);


// frequenzen
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x20);i2c1_wr (0x00);i2c1_wr (0x28); i2c1_wr (0xc8);i2c1_wr (0x00); i2c1_stop();
delay_ms (100);

set_radiofreq_to_dlf(); oldnr=10;
i2c1_init(20000);
delay_ms (100);

i2c1_start();
i2c1_wr (0xc6); // power on radio i2c
i2c1_wr (0x01);
i2c1_wr (0xd0); //0101 0101
i2c1_wr (0x05); //0101 0101
i2c1_stop();
delay_ms (200);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0xff); i2c1_wr (0x00);i2c1_wr (0x00);i2c1_wr (0x00); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x11); i2c1_wr (0x00);i2c1_wr (0x00);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x15); i2c1_wr (0x00);i2c1_wr (0x00);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x15); i2c1_wr (0x01);i2c1_wr (0x00);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x15); i2c1_wr (0x02);i2c1_wr (0xff);i2c1_wr (0x01); i2c1_stop(); delay_ms (100);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x11); i2c1_wr (0x07);i2c1_wr (0x00);i2c1_wr (0x00); i2c1_stop(); delay_ms (100);
delay_ms (70);
// seek start
// i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x21);i2c1_wr (0x0c); i2c1_stop(); delay_ms (100);
// lautstärke
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x12);i2c1_wr (0x00);i2c1_wr (0x40); i2c1_wr (0x00); i2c1_wr (0x00);i2c1_wr (0x1a);i2c1_stop(); delay_ms (100);
delay_ms (70);
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x80);i2c1_wr (0x0e); i2c1_stop(); delay_ms (100);
delay_ms (700);


// frequenzen
i2c1_start(); i2c1_wr (0xc6); i2c1_wr (0x20);i2c1_wr (0x00);i2c1_wr (0x28); i2c1_wr (0xc8);i2c1_wr (0x00); i2c1_stop();
delay_ms (100);

set_radiofreq_to_dlf(); oldnr=10;

[size=9][/size]
ulrich_k
Beiträge: 4
Registriert
14.03.2015
Anzeigen  Sortieren 
zur Übersicht2 Beiträge Neue Antwort