Go Down

Topic: Si4703 FM-Radio (Sketch-Probleme) (Read 220 times) previous topic - next topic

4711engel

Aug 23, 2019, 03:54 pm Last Edit: Aug 23, 2019, 06:31 pm by 4711engel
Hi,
ich bin Anfänger und wollte mich mit einem neuen Projekt "FM-Radio mit Si4703" beschäftigen. Starten wollte ich mit einem Tutorial, das ich zum Thema mittels google gefunden habe:
https://www.instructables.com/id/How-to-use-the-Si4703-FM-Radio-board-with-RDS-Ardu/ 

Leider läuft dieses Tutorial bei mir nicht wie dort abgebildet.
Ich vermute mal, dass ich nicht die richtige library für das SI4703 eingebunden habe. Ich habe von Github folgende library verwendet:  Whiteneon/Si4703_FMRadio 
Mein Problem ist, dass nach Eingabe in die Kommandozeile und <SEND> keine Reaktion passiert.
Mit einzelnen Serial.println-Marken habe ich versucht den Fehler zu finden.  Es scheint ein Problem mit z.B. radio.powerOn();
radio.setVolume(0);
zu geben. Void loop() wird wohl gar nicht erst durchlaufen.

Hat jemand eine Idee?
Brauche ich eine andere library?

HotSystems

Im Artikel wurde doch angegeben, welche Library du verwenden sollst.
Hast du die auch genommen ?

Es ist ein schlechtes Tutorial, wenn keine Links vorhanden sind.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uwefed

#2
Aug 23, 2019, 05:04 pm Last Edit: Aug 23, 2019, 05:07 pm by uwefed
Code: [Select]
#include <Si4703_Breakout.h>
#include <Wire.h>

const int resetPin = 2;
const int SDIO = A4;
const int SCLK = A5;

Si4703_Breakout radio(resetPin, SDIO, SCLK);
int channel;
int volume;
char rdsBuffer[10];

void setup()
{
  Serial.begin(9600);
  Serial.println("\n\nSi4703_Breakout Test Sketch");
  Serial.println("==========================="); 
  Serial.println("a b     Favourite stations");
  Serial.println("+ -     Volume (max 15)");
  Serial.println("u d     Seek up / down");
  Serial.println("r       Listen for RDS Data (15 sec timeout)");
  Serial.println("Send me a command letter.");
 

  radio.powerOn();
  radio.setVolume(0);
}

void loop()
{
  if (Serial.available())
  {
    char ch = Serial.read();
    if (ch == 'u')
    {
      channel = radio.seekUp();
      displayInfo();
    }
    else if (ch == 'd')
    {
      channel = radio.seekDown();
      displayInfo();
    }
    else if (ch == '+')
    {
      volume ++;
      if (volume == 16) volume = 15;
      radio.setVolume(volume);
      displayInfo();
    }
    else if (ch == '-')
    {
      volume --;
      if (volume < 0) volume = 0;
      radio.setVolume(volume);
      displayInfo();
    }
    else if (ch == 'a')
    {
      channel = 930; // Rock FM
      radio.setChannel(channel);
      displayInfo();
    }
    else if (ch == 'b')
    {
      channel = 974; // BBC R4
      radio.setChannel(channel);
      displayInfo();
    }
    else if (ch == 'r')
    {
      Serial.println("RDS listening");
      radio.readRDS(rdsBuffer, 15000);
      Serial.print("RDS heard:");
      Serial.println(rdsBuffer);     
    }
  }
}

void displayInfo()
{
   Serial.print("Channel:"); Serial.print(channel);
   Serial.print(" Volume:"); Serial.println(volume);
}

Das Radio wird in setup auf die kleinste Lautstärke gestellt.
Wenn Du den obengenannte Sketch aus dem Tutorial nimmst dann wird im loop() gar nichts ausgegeben erst wenn Du irgend ein Komando vom seriellen Terminal zB der IDE schickst. Wobei für a und b Du die Frequenz Deiner Lieblingssender eintragen mußt.
Code: [Select]
  Serial.println("a b     Favourite stations");
  Serial.println("+ -     Volume (max 15)");
  Serial.println("u d     Seek up / down");
  Serial.println("r       Listen for RDS Data (15 sec timeout)");
  Serial.println("Send me a command letter.");


Grüße Uwe

DrDiettrich

Ich dachte, daß nach MW auch FM Radio (UKW) weitgehend abgeschaltet wurde?

4711engel

#4
Aug 23, 2019, 06:07 pm Last Edit: Aug 23, 2019, 06:30 pm by 4711engel
Quote
Wenn Du den obengenannte Sketch aus dem Tutorial nimmst dann wird im loop() gar nichts ausgegeben erst wenn Du irgend ein Komando vom seriellen Terminal zB der IDE schickst. Wobei für a und b Du die Frequenz Deiner Lieblingssender eintragen mußt.
Code: [Select]
 Serial.println("a b     Favourite stations");
  Serial.println("+ -     Volume (max 15)");
  Serial.println("u d     Seek up / down");
  Serial.println("r       Listen for RDS Data (15 sec timeout)");
  Serial.println("Send me a command letter.");


Grüße Uwe
Ja,
Ich habe schon bei a und b zwei Senderfrequenzen eingetragen. Nach Aufruf in serial monitor von a oder b wird der Sender aufgerufen und mit + oder - kann die Lautstärke über den SM geregelt werden. Im SM wird dann durch    void displayInfo()   dieses als feedback ausgegeben.  
Und genau dieses funktioniert nicht und es wird auch kein Sound über die Kopfhörer ausgegeben. Das liegt daran, dass die void loop () erst gar nicht durchlaufen wird.

Wo finde ich den die richtige library Si4703_breakout.h  ? In der Beschreibung hatte ich nichts gefunden und ich hatte keine Lust mich bei Codebender  anzumelden. Die sind rein kommerziell und wollen gleich 10€/Monat sehen. :o

Gruß Ulli
und danke für die bisherige Unterstützung

uwefed

Ich dachte, daß nach MW auch FM Radio (UKW) weitgehend abgeschaltet wurde?
Für Italien und Östereich (Bozen bis Innsbruck) kann ich sagen daß mein Autoradio vorgesten noch mit UKW funktionierte.
Grüße Uwe

uwefed

Quote
Das liegt daran, dass die void loop () erst gar nicht durchlaufen wird.
Dann schreib mal ein Serial.print("loop"); vor dem if in den loop()
Grüße Uwe

4711engel

#7
Aug 23, 2019, 06:20 pm Last Edit: Aug 23, 2019, 06:55 pm by 4711engel
Dann schreib mal ein Serial.print("loop"); vor dem if in den loop()
Grüße Uwe
Habe ich gemacht und der SM gibt kein Feedback. Nur:



Si4703_Breakout Test Sketch
===========================
a b     Favourite stations
+ -     Volume (max 15)
u d     Seek up / down
r       Listen for RDS Data (15 sec timeout)
Send me a command letter.

nach Eingabe von  a   im Kommandofeld und <SEND>




Das ist mein aktuelles "Testprogramm":

Code: [Select]
#include <Wire.h>
#include <Si4703_Breakout.h>

const int resetPin = 2;
const int SDIO = A4;
const int SCLK = A5;

Si4703_Breakout radio(resetPin, SDIO, SCLK);
int channel;
int volume;
char rdsBuffer[10];
char ch;

void setup()
{
  Serial.begin(9600);
  Serial.println("\n\nSi4703_Breakout Test Sketch");
  Serial.println("==========================="); 
  Serial.println("a b     Favourite stations");
  Serial.println("+ -     Volume (max 15)");
  Serial.println("u d     Seek up / down");
  Serial.println("r       Listen for RDS Data (15 sec timeout)");
  Serial.println("Send me a command letter."); 
  radio.powerOn();
  radio.setVolume(0);
 
  Serial.print("Ende setup");
 
}

void loop()
{   
 
 
  Serial.print("start loop");
 
 
 
  if (Serial.available())
  {
    ch = Serial.read();   
 
    if (ch == 'u')
    {   
      channel = radio.seekUp();
      displayInfo();
    }
    else if (ch == 'd')
    {
      channel = radio.seekDown();
      displayInfo();
    }
    else if (ch == '+')
    {
      volume ++;
      if (volume == 16) volume = 15;
      radio.setVolume(volume);
      displayInfo();
    }
    else if (ch == '-')
    {
      volume --;
      if (volume < 0) volume = 0;
      radio.setVolume(volume);
      displayInfo();
    }
    else if (ch == 'a')
    { 

Serial.print("a wurde ausgewaehlt");

   
      channel = 888; // radio1 
      radio.setChannel(channel);
      displayInfo();
    }
    else if (ch == 'b')
    {
      channel = 943; // RS2
      radio.setChannel(channel);
      displayInfo();
    }
    else if (ch == 'r')
    {
      Serial.println("RDS listening");
      radio.readRDS(rdsBuffer, 15000);
      Serial.print("RDS heard:");
      Serial.println(rdsBuffer);     
    }
  }

  Serial.print("Ende der loop");
 
}
void displayInfo()
{
   Serial.print("Channel:"); Serial.print(channel);
   Serial.print(" Volume:"); Serial.println(volume);
}

4711engel

#8
Aug 23, 2019, 06:28 pm Last Edit: Aug 23, 2019, 06:32 pm by 4711engel
Ich dachte, daß nach MW auch FM Radio (UKW) weitgehend abgeschaltet wurde?
Das hatte ich auch mal gehört. Aber durch das Ausscheren eines Bundeslandes beim DAB+ geht die Diskussion einer Abschaltung von vorn los.
Zusätzlich noch von unserem Heimat-Minister Seehofer die Bedenken wegen der Sicherheitsmeldungen im Krisenfall wenn das Internet tot ist.

Mein Radiowecker läuft noch.

HotSystems

Wo finde ich den die richtige library Si4703_breakout.h  ? In der Beschreibung hatte ich nichts gefunden und ich hatte keine
Google machts möglich, einfach mal googeln.
Z.B. hier.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

4711engel

Google machts möglich, einfach mal googeln.
Z.B. hier.

Danke, aber die habe ich aktuell (siehe meinen ersten Post) im Einsatz.

Gruß Ulli

HotSystems

#11
Aug 23, 2019, 09:58 pm Last Edit: Aug 23, 2019, 10:35 pm by HotSystems
Danke, aber die habe ich aktuell (siehe meinen ersten Post) im Einsatz.

Gruß Ulli
Ok, sorry, das hatte ich überlesen.

Bist du denn auf den Si4703 angewiesen, oder darf es auch ein anderer sein ?
Ich kann z.B. den TEA5767 empfehlen, der läuft bei mir seit ca. 2 Jahren als Radiowecker.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

4711engel

#12
Aug 24, 2019, 10:01 pm Last Edit: Aug 24, 2019, 10:06 pm by 4711engel
Ok, sorry, das hatte ich überlesen.

Bist du denn auf den Si4703 angewiesen, oder darf es auch ein anderer sein ?
Ich kann z.B. den TEA5767 empfehlen, der läuft bei mir seit ca. 2 Jahren als Radiowecker.


Das  macht ja nichts.
Ich hatte nur in meiner Kiste noch einen Si4703 liegen und habe dann nach einem einfachen Tutorial gesucht, das ein Anfänger wie ich nachbauen kann. Und da fand ich dieses und in der zweiten Stufe dann das Tutorial mit TFT:
https://youtu.be/6xBYTCAreNc

Scheint für mich lösbar zu sein.



Mich wurmt nur, dass ich nicht verstehe, warum es nicht läuft und auch die Authoren von Codebender_cc sagen nichts dazu.  Und deshalb möchte ich das Ding schon zum Laufen bringen. Nur so kann ich ja lernen.

Gruß Ulli

HotSystems

Das  macht ja nichts.
Ich hatte nur in meiner Kiste noch einen Si4703 liegen und habe dann nach einem einfachen Tutorial gesucht, das ein Anfänger wie ich nachbauen kann. Und da fand ich dieses und in der zweiten Stufe dann das Tutorial mit TFT:
https://youtu.be/6xBYTCAreNc

Scheint für mich lösbar zu sein.



Mich wurmt nur, dass ich nicht verstehe, warum es nicht läuft und auch die Authoren von Codebender_cc sagen nichts dazu.  Und deshalb möchte ich das Ding schon zum Laufen bringen. Nur so kann ich ja lernen.

Gruß Ulli
Ja ok, kann ich verstehen.
Nur schwer zu helfen, wenn damit keiner Erfahrung hier hat.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

OtmarK

Ich hab mal etwas rumgesucht und ein Video gefunden (ohne es anzusehen)
https://www.youtube.com/watch?v=4_OnRlltOQc

In der Beschreibung ist ein Link zu einer Lib von Sparkfun.
https://github.com/sparkfun/Si4703_FM_Tuner_Evaluation_Board
Ich weiß nicht, ob das dein Modul ist. Evtl. musst du noch die IOs anpassen.

Wenn das auch nicht klappt, gibts ja noch das Datasheet mit der Registerbeschreibung  :smiley-confuse:  :smiley-evil:

Go Up