VMA11 example library

Created this category, because a lot is to say about the VMA11.

I got the board working, it is a great receiver and amp. Very reasonable quality, and no noise from the processor. Very nice if you want to build your own featured FM radio.

The example program has settings for USA / Europe mixed up. Ideally, you should correct them in the library.

Depending on your region (USA, Europe, other parts of the world):

  • the FM band starts and ends on different frequencies. That is important for the auto-seek function to work correctly)
  • the channel separation is different (100kHz / 200kHz). That is important for the tuning. In the example it defaults to 200kHz, so you can only tune in frequencies that end on an even number (97.2 97.4 etc.). For Europe, that should be 100kHz, then you can also tune into 97.1 , 101.3 etc.
  • the de-emphasis time constant is 50µs in Europe. This is important for the Hi-Fi sound quality. Default in the library is 75µs.

I will try to find some time to change and update the library…

1 Like

Hi. I’m new to arduino - know how to upload code - control lights etc.

Have a vma11 and would like help to get this working - how do i wire it up to speakers for example and do they need their own power to be driven? Be good if there was a tutorial.

Apologies if I have missed something - have the libraries etc and can load ok. Spent money on the board age ago and still haven’t got it to emit sound at all. Thanks

There is a manual:

The board has an amplifier, so you simply connect two loudspeakers to the SPEAKER L and SPEAKER R connectors.

Let the MUTE jumpers in place (actualy, they are NOT_MUTE jumpers). So, jumper open = silence, jumper shorted = sound

If you are aware of electronics, then have a look at the datasheet of the radio chip that is used on the board:

And there is a application note from Silicon Labs, the chip manufacturer:

Also, as in my post above: there are errors in the demo library. These should be corrected if you want the radio to work.

Thanks for quick reply. Per your guidance and a lot of reading between the lines I have changed the library code of Si4703_Breakout_Modified.cpp to include Europe (where I am - UK) Thus
// use this for european (0.100) channel spacing
int newChannel = channels * 10; //973 * 10 = 9730
newChannel -= 8750; //9730 - 8750 = 980
newChannel /= 10; //980 / 10 = 98

and comment out the US default

I have then loaded the fm_rds_test.ino sketch and connected a speaker to check a signal - I hear noise! which is more than I did before so thank you for getting me this far - lol.

In the manual it indicates that some other connections should be made - ie you can’t just connect the shield - wire a speaker, load the sketch and you’re hearing radio. I apologies if I appear “a dummy” - that is probs because I am a newb and making mistakes. I am guessing I need to ground pins and make connections across the shield board to actually tune and get rds feedback.

I would appreciate any tips for howto. I have also realised I neeed to go through the arduino starter course all over again :smile:

Respect

There’s really not much more to do than plug the shield into a UNO and connect a speaker.
The power for the radio is pulled from the UNO board.
All the settings (tuning, volume) is done by software. No need for any other connections.

If you hear noise, that’s already a good indication that stuff is working.

I would suggest that you skip the RDS and stuff at the moment, try the attached basic sketch.
It initializes the radio chip, sets a volume level, and sets a frequency.
You should hear radio coming out of the speakers by then.
Adapt the volume and frequency values to tune into a strong local station.

When you get the board working with that elementary stuff, you’re ready to explore the rest of the features.

And here’s the sketch.

    #include <VMA11.h>
    #include <Wire.h>

    //define the radio
    int RESET_VMA = 2;
    int SDIO = A4;
    int SCLK = A5;
    VMA11 radio(RESET_VMA, SDIO, SCLK);

    void setup()
    {
      Serial.begin(9600);
      Serial.println("VMA11 basic");
      
      Serial.println("Power On");
      radio.powerOn();  //initialize the power-on sequence of the radio

      Serial.println("Volume");     
      radio.setVolume(5); //volume 0...31

      Serial.println("Frequency");     
      radio.setChannel(1013); //1013 = 101.3MHz
    }

    void loop()
    {

    }

Thanks again. Got it tuned in :slight_smile: