Monday, December 4, 2023

Arduino-Based FM Receiver

This project is of an FM radio based on Philips TEA5767 digital radio-receiver module. The radio receiver uses I2C interface with Arduino UNO development board. The TEA5767 module offers such features as stereo or mono outputs, radio station scanning. -- By Madhuram Mishra

- Advertisement -

Programming steps

The program for this fm receiver circuit performs the following functions:
1. Initialising the TEA5767 module
2. Writing the data to TEA5767 module
3. Reading the TEA5767 module values
4. Displaying information on the LCD screen
5. Scanning available FM channels
6. Increasing or decreasing the frequency by a unit defined value of particular MHz.

The source program is well commented, which can be seen by opening the file in Arduino software.

Writing data to TEA5767

The useful details about writing the byte and reading the byte can be obtained from page numbers 13 through 16 of the datasheet (Rev.5).

- Advertisement -

This is used to start I2C communication with the TEA5767 module
The address of TEA5767 is 0x60 during writing
The address of TEA5767 is 0x61 during reading
This is used to send data to the I2C device byte by byte
The significance of various bytes in TEA5767 is also mentioned on page numbers 13 through16 of its datasheet. The data byte sequence for the write mode is shown in Fig. 4; the remaining detail can be found in the datasheet.

Bitwise operators used for programming the first two bytes of TEA5767 are explained below:
Bitwise operators
& (bitwise and)
| (bitwise or)
^ (bitwise xor)
~ (bitwise not)
<< (bitshift left) >> (bitshift right)

Since structures of the first and the second bytes are different, different bitwise operators are used.

Read mode

In read mode, we have to note the following changes:
1. When a station is found in search mode, as instructed during write operation, the ready flag (RF) in first byte is set to 1. That is, RF=1
2. The values of signal strength level in 4th byte
3. Stereo or mono reception in 3rd byte

For reading the values from TEA5767, the following method is used in the code by creating a buffer as follows:
Buffer [i]= (); (); is used to read the values of all the five bytes in Read mode.

Displaying values on LCD screen

The task of displaying values is performed by reading the values of bytes of the TEA5767 in read mode.
1. The available frequency is displayed on LCD screen by reading first byte stored in buffer(0); this value is stored in buffer during read operation
2. If search mode is high, a scan is displayed on the screen
3. The signal strength is stored in the 4th byte which can be obtained by reading the buffer(3)
4. The reception type is displayed on screen by reading the buffer(3).


  1. What about turning it into an airtraffic receiver. Does the TEA5767 go above 108MHz?
    The datasheet does no say that but does anyone tried it?
    It would be great if it could be told to tune from 108-118MHz in 50kHz steps (i a not shure about this channel spacing).
    I hava an analog FM receiver modfied for this but would it be great to have a digital one?
    If it’s not possible with this chip then what else to use? I think it’s a great project that is not yet done (i found none in google)


Electronics News

Truly Innovative Tech

MOst Popular Videos

Electronics Components