RDA 5807m radyo modülünü ve i2c'yi öğrenemye çalışıyorum kodları anlamadım :(
  • 5807m Datasheet ; http://www.electrodragon.com/w/images/5/5f/RDA5807M_datasheet_v1.pdf

    #include < Wire.h>

    unsigned char frequencyH = 0;
    unsigned char frequencyL = 0;

    unsigned int frequencyB;
    double frequency = 0;

    void setup()
    {
    Wire.begin();
    frequency = 103.4 ; //starting frequency
    setFrequency();
    Serial.begin(9600);
    }

    void loop()
    {

    }

    void setFrequency()
    {
    frequencyB = 4 * (frequency * 1000000 + 225000) / 32768;
    frequencyH = frequencyB >> 8;
    frequencyL = frequencyB & 0XFF;
    delay(1000);
    Wire.beginTransmission(0x60);
    Wire.write(frequencyH);
    Wire.write(frequencyL);
    Wire.write(0xB0);
    Wire.write(0x10);
    Wire.write((byte)0x00);
    Wire.endTransmission();
    delay(1000);
    }

    Hazır bulduğum böyle bir kod var setFrequency fonksiyonunun nasıl çalıştığını ve hesaplamaları anlamadım anlatabilecek biri var mı ?

  • <code>
    </code>
    HTML etiketleri arasına yazarsanız tam çıkar.
  • Bu modülü aliexpress'de oldukça uygun fiyata görmüştüm. RDS özelliği iyi çalıışıyor mu?. Harici anten gerektiriyor mu? Ben de almayı üşünüyorum bu modülden
  • Frekans bilgisi 2 bayttan oluşmakta. Düşük (Low - L) amlamlı bayt sonra yüksek (High - H) anlamlı bayt'lar ayrı ayrı hesaplanıyor. frequencyB ile yüksek anlamlı bayt'ı hesaplamak için 8 bit sağa kaydırarak doğru yerine yerleştiriyor. Düşük anlamlı baytı için ise 0B11111111 ile ve'lenmekte. yani yüksek anlamı bayt sıfırlanıp sadece son 8 bit alınıyor. Sonra da Wire protolü ile frekans değiştirme komutu ve frekans bilgisi gönderilmekte.
  • Hocam her şeyini çözdüm ben bunun seekp up frekans ayarı vs ayrıca bu entegre diyim artık, 2 tane mod var biri tea5767 biri de rda5807 2 farklı dahatasheet den yaralanarak kullanabiliryorsun bunu anlamam zaman aldı biraz.
    RDS'nin nasıl işlediğini çözemedim o yüzden decode yapamadım.
  • Arkadaşlar ben daha tea5767 ile bir radyo yapmıştım. Şimdi de RDA5807 ile çalışmak istiyorum. RDS kod çözümünü nasıl yaptınız. Ben kodu çözemedim.
  • S.a Arkadaşlar,
    RDA5807 ile net de bulunan uygulamaları denedm ama hışırtıdan başka birşey gelmiyor. çalıştıran arkadaş varmı? nerde hata yaptığımı bulamadım.
  • şuradaki
    https://funprojects.blog/tag/rda5807/
    ilk kodu deneyin anten bağlayın IR led koduna gerek yok test kodunu deneyin çalışması lazım çalışmıyorsa i2c bağlantılarını kontrol edin
    aşağıdaki kod turkiye standartında değil tr de frekanslar 88-108 arasındadır atlama frekansı 10mhz olması lazım b elkı senkron olamadığın için sadece gurultu geliyordur

    // Define an FM station to listen to

    freq = 1079; // 107.9 MHz our local FM station
    freqB = freq - 870; // chip needs to have freq offset from lowest freq (870)
    freqH = freqB>>2; // you need to break the offset freq into 2 parts (hi/low)
    freqL = (freqB&3)<<6; // Shift channel selection for matching register 0x03<br />


    birde şu var ama karışmış biraz ayıklayamayabilirsin kodu.
    https://www.hackster.io/taunoerik/fm-radio-with-frequency-display-df5bd9
  • Hocam bahsettiğiniz kod aşağıd bunu TR standartlrına çekmek için ne yapmak gerekiyor.
    Band değiştirmeyi bulamadım.
    //Band Select. 00 = 87–108 MHz (US/Europe), 01 = 76–91 MHz (Japan), 10 = 76–108 MHz (world wide), 11 = 65 –76

    //Band Select. 00 = 87–108 MHz (US/Europe) sanırım bu ayarlı olması lazım ama nasıl ayarlayacağız?

    [img]https://i.ibb.co/zRk53FD/FM-Band.jpg[/img]

    #include < Wire.h>

    int freq;
    int freqB;
    byte freqH, freqL;

    void setup()
    {
    Wire.begin();

    // Initialize the RDA5807M chip

    Wire.beginTransmission(0x11); // Device address is 0x11
    Wire.write(0x02); // Register address 0x02
    Wire.write(0xC0);
    Wire.write(0x03); // Initialize the settings
    Wire.endTransmission(); // stop condition
    delay(500); // wait 500ms

    Wire.beginTransmission(0x11); // Device address is 0x11
    Wire.write(0x02); // Register address 0x02
    Wire.write(0xC0);
    Wire.write(0x0D); // Setup the radio for communications
    Wire.endTransmission();
    delay(500);

    // Define an FM station to listen to

    freq = 1079; // 107.9 MHz our local FM station
    freqB = freq - 870; // chip needs to have freq offset from lowest freq (870)
    freqH = freqB>>2; // you need to break the offset freq into 2 parts (hi/low)
    freqL = (freqB&3)<<6; // Shift channel selection for matching register 0x03<br />
    Wire.beginTransmission(0x11);
    Wire.write(0x03);
    Wire.write(freqH); // write High freq byte
    Wire.write(freqL + 0x10); // write Low freq byte
    Wire.endTransmission();

    // The volume is from 0-F and its the first bytes, leave all the bytes (0x84D0 - 0x84DF)

    Wire.beginTransmission(0x11);
    Wire.write(0x05);
    Wire.write(0x84); Wire.write(0xD1); // set volume to 1
    Wire.endTransmission();
    }

    void loop()
    {

    }
  • standart değerler turkiye frekanslarına uygunmuş. siz i2c adresi doğrumu onu da bir öğrenin sisteme bağlı başka i2c cihazlar bağlıysa onları kullanmayın şimdilik. i2c den cihaza bağlanamamışsanız da kanal seçemezsiniz.
  • Hocam,
    https://www.hackster.io/taunoerik/fm-radio-with-frequency-display-df5bd9
    Bu vermiş olduğunuz yerdeki kodları ve http://arduino.vom-kuhberg.de/index.php
    Burdaki kodlarıda denedim, seriportdan ses açma/kısma yada kanal değiştirme komutlarını gönderince hışırtı kısılıyor ve açılıyor,I2C çalışıyor gibi ama neden ses alamadım bilmiyorum. denediğim frekanslarda da radio yayını var başka radyo ile denedim.
  • ben de hiç denemedim teoriden ihtimalden gittim aklıma başka bir şey gelmedi. çözüm bulursanız yazarsanız sevinirim

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.