TEA5767 FM receiver module

Hemi345

Senior Member
Hey All,

I've been tinkering with this TEA5767 FM receiver module and not having any luck getting it to receive anything but static. It seems I can read the registers fine, so I'm pretty sure I have everything connected correctly. I have 100uF and 0.1uF caps on both the PICAXE and FM module. The "typical" supply voltage is 3.3V, so I'm using a 3.3V regulator (with 10uF caps on input and output) for a steady 3.28V to both PICAXE and FM module. 4.7K pullups on the SDA and SCL lines. About 48" of bell wire for the antenna. I'll snap a photo of my circuit if you think it will help. Here's a rough schematic my circuit is based on.

Datasheet on TEA5767
Datasheet on FM module attached below.

Here's my code:
Code:
[color=Navy]#picaxe [/color][color=Black]08m2[/color]
[color=Navy]#no_data
#terminal 4800[/color]

[color=Blue]hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%11000000[/color][color=Black], [/color][color=Blue]i2cslow[/color][color=Black], [/color][color=Blue]i2cbyte [/color][color=Green];tea5767
;PLL word = (4*(93.3*1000000+225000))/32768[/color]
[color=Blue]pause [/color][color=Navy]100[/color]
[color=Blue]sertxd ([/color][color=Red]"Start"[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])[/color]
[color=Black]main:
      [/color][color=Blue]sertxd ([/color][color=Red]"99.1"[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      hi2cout [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Navy]$2F[/color][color=Blue])   [/color][color=Green];frequency High 99.1
      [/color][color=Blue]hi2cout [/color][color=Navy]1[/color][color=Black],[/color][color=Blue]([/color][color=Navy]$5C[/color][color=Blue])   [/color][color=Green];frequency Low  99.1
      [/color][color=Blue]hi2cout [/color][color=Navy]2[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00010000[/color][color=Blue])   [/color][color=Green];
      [/color][color=Blue]hi2cout [/color][color=Navy]3[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00010000[/color][color=Blue])   [/color][color=Green];
      [/color][color=Blue]hi2cout [/color][color=Navy]4[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%11000000[/color][color=Blue])   [/color][color=Green];     
      [/color][color=Blue]gosub [/color][color=Black]serOutTunerData
      [/color][color=Blue]sertxd ([/color][color=Red]"93.3"[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      hi2cout [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00101100[/color][color=Blue])   [/color][color=Green];frequency High 93.3
      [/color][color=Blue]hi2cout [/color][color=Navy]1[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%10011000[/color][color=Blue])   [/color][color=Green];frequency Low  93.3
      [/color][color=Blue]hi2cout [/color][color=Navy]2[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00010000[/color][color=Blue])   [/color][color=Green];
      [/color][color=Blue]hi2cout [/color][color=Navy]3[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00010000[/color][color=Blue])   [/color][color=Green];
      [/color][color=Blue]hi2cout [/color][color=Navy]4[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%11000000[/color][color=Blue])   [/color][color=Green];     
      [/color][color=Blue]gosub [/color][color=Black]serOutTunerData
      [/color][color=Blue]sertxd ([/color][color=Red]"96.1"[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      hi2cout [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00101101[/color][color=Blue])   [/color][color=Green];frequency High 96.1
      [/color][color=Blue]hi2cout [/color][color=Navy]1[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%11101110[/color][color=Blue])   [/color][color=Green];frequency Low  96.1
      [/color][color=Blue]hi2cout [/color][color=Navy]2[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00010000[/color][color=Blue])   [/color][color=Green];
      [/color][color=Blue]hi2cout [/color][color=Navy]3[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%00010000[/color][color=Blue])   [/color][color=Green];
      [/color][color=Blue]hi2cout [/color][color=Navy]4[/color][color=Black],[/color][color=Blue]([/color][color=Navy]%11000000[/color][color=Blue])   [/color][color=Green]; 
      [/color][color=Blue]gosub [/color][color=Black]serOutTunerData
      [/color][color=Blue]goto [/color][color=Black]main

serOutTunerData:
      [/color][color=Blue]pause [/color][color=Navy]100
      [/color][color=Blue]hi2cin [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Blue])
      [/color][color=Green];sertxd ("All: ",b0,",",b1,",",b2,",",b3,",",b4,13,10)
      [/color][color=Blue]sertxd ([/color][color=Red]"Byte1: "[/color][color=Black],[/color][color=Purple]bit7[/color][color=Black],[/color][color=Purple]bit6[/color][color=Black],[/color][color=Purple]bit5[/color][color=Black],[/color][color=Purple]bit4[/color][color=Black],[/color][color=Purple]bit3[/color][color=Black],[/color][color=Purple]bit2[/color][color=Black],[/color][color=Purple]bit1[/color][color=Black],[/color][color=Purple]bit0[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte2: "[/color][color=Black],[/color][color=Purple]bit15[/color][color=Black],[/color][color=Purple]bit14[/color][color=Black],[/color][color=Purple]bit13[/color][color=Black],[/color][color=Purple]bit12[/color][color=Black],[/color][color=Purple]bit11[/color][color=Black],[/color][color=Purple]bit10[/color][color=Black],[/color][color=Purple]bit9[/color][color=Black],[/color][color=Purple]bit8[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte3: "[/color][color=Black],[/color][color=Purple]bit23[/color][color=Black],[/color][color=Purple]bit22[/color][color=Black],[/color][color=Purple]bit21[/color][color=Black],[/color][color=Purple]bit20[/color][color=Black],[/color][color=Purple]bit19[/color][color=Black],[/color][color=Purple]bit18[/color][color=Black],[/color][color=Purple]bit17[/color][color=Black],[/color][color=Purple]bit16[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte4: "[/color][color=Black],[/color][color=Purple]bit31[/color][color=Black],[/color][color=Purple]bit30[/color][color=Black],[/color][color=Purple]bit29[/color][color=Black],[/color][color=Purple]bit28[/color][color=Black],[/color][color=Purple]bit27[/color][color=Black],[/color][color=Purple]bit26[/color][color=Black],[/color][color=Purple]bit25[/color][color=Black],[/color][color=Purple]bit24[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      pause [/color][color=Navy]2000
      [/color][color=Blue]return
      [/color]
Example output:
Code:
93.3
Byte1: [00][00][00][00][01][01][01][00]
Byte2: [01][00][01][00][01][00][00][01]
Byte3: [00][00][00][00][00][00][00][00]
Byte4: [01][01][01][01][00][00][00][00]
On page 30 of the TEA5767 datasheet, it gives a formula to calculate the PLL word. It's also here. I'm not trying to do this calculation in the code yet, so I have it hard set and looping through three stations, but I don't hear any change in the static noise as it changes. Also, using I2C_slow but have yet to try fast even though the device supports it. I have a 2nd TEA5767 module that I'll solder up when I get time just in case this one is a dud.
 

Attachments

hippy

Ex-Staff (retired)
Staff member
From your code it looks like you are setting both the PLLREF and XTAL bits which, according to table 16, is invalid.
 

matherp

Senior Member
I bought one of these some time ago to play with and as the code is available connected it up to an Arduino.

With a good quality quarter wave antenna on a ground plane I just managed to pick up a couple of stations. Basically the module is completely useless. If all you are getting is static it doesn't mean necessarily there is something wrong with your code
 

hippy

Ex-Staff (retired)
Staff member
The compilers can handle SYMBOL constant maths greater than 16-bit so you can use those to determine the values to write to the PLL registers, avoiding errors and having to calculate the actual byte values ...

Code:
Symbol freq        = 93300000       ; 93.3 MHz
Symbol freqVal     = freq    / 8192
Symbol freqVal.msb = freqVal / 256
Symbol freqVal.lsb = freqVal & 255

HI2cOut 0,( freqVal.msb )
HI2cOut 1,( freqVal.lsb )
 

Hemi345

Senior Member
I bought one of these some time ago to play with and as the code is available connected it up to an Arduino.

With a good quality quarter wave antenna on a ground plane I just managed to pick up a couple of stations. Basically the module is completely useless. If all you are getting is static it doesn't mean necessarily there is something wrong with your code
I'll have to try a better antenna too. After seeing pics of people tuning stuff in with nothing more than a jumper wire hanging off the antenna pin, maybe I was expecting that part to be too easy.

I fixed the PLLREF bit and still no dice. Thanks Hippy for the tip on the constants math. That really speeds up the dev process. I updated the code:

Code:
#picaxe 08m2
#no_data
#terminal 4800

hi2csetup i2cmaster, %11000000, i2cfast, i2cbyte ;tea5767

pause 3000

;(4*(93.3*1000000+225000))/32768
Symbol freq        = 93300000       ; 93.3 MHz
Symbol freqSmall  = freq / 100000 ;for terminal display
Symbol freqValue  = freq + 225000  ;for HSI
Symbol freqVal     = freqValue / 8192
Symbol freqVal.msb = freqVal / 256
Symbol freqVal.lsb = freqVal & 255

pause 100
sertxd ("Start",13,10)
main:
	sertxd (#freqSmall,13,10)
	hi2cout 0,(freqVal.msb,freqVal.lsb,$10,$10,$40)
	gosub serOutTunerData
	goto main

serOutTunerData:
	pause 1000
	hi2cin 0,(b0,b1,b2,b3,b4)
	sertxd ("Byte1: ",bit7,bit6,bit5,bit4,bit3,bit2,bit1,bit0,13,10)
	sertxd ("Byte2: ",bit15,bit14,bit13,bit12,bit11,bit10,bit9,bit8,13,10)
	sertxd ("Byte3: ",bit23,bit22,bit21,bit20,bit19,bit18,bit17,bit16,13,10)
	sertxd ("Byte4: ",bit31,bit30,bit29,bit28,bit27,bit26,bit25,bit24,13,10,13,10)
	pause 9000
	return
I'm power cycling the circuit after programming the 08M2 to make sure the i2c bus is reset.
I notice that when I would try to tune 93300000, as in the program above, the tuner turns on and I hear static after writing the bytes.
If I replaced the frequency with 96100000 and reprogram, the tuner doesn't turn on/un-mute/I don't hear anything.

I gave up for the night but then had a thought this morning on the way to work that I remembered reading that on power on, mute is set and all bits are set low. Maybe I'm not writing to the correct registers. The datasheet doesn't mention what the register addresses are... just 1st byte, 2nd byte, etc. So maybe I should be starting at 1 instead of 0?
 

hippy

Ex-Staff (retired)
Staff member
Maybe I'm not writing to the correct registers. The datasheet doesn't mention what the register addresses are... just 1st byte, 2nd byte, etc. So maybe I should be starting at 1 instead of 0?
Good thinking. Looking at the datasheet there is no address byte. You just need to send five bytes. No 0 or 1, just nothing. Try -

hi2cout ( freqVal.msb, freqVal.lsb, $10, $10, $40 )

Or -

hi2cout freqVal.msb, ( freqVal.lsb, $10, $10, $40 )


And sorry for forgetting about adding / subtracting the IF frequency in my SYMBOL example.

The bits you are setting / clearing all seem to be okay as best I can see.
 

Hemi345

Senior Member
Success! Taking out the address byte did it. Here's the code:

Code:
[color=Navy]#picaxe [/color][color=Black]08m2[/color]
[color=Navy]#no_data
#terminal 4800[/color]
[color=Blue]pause [/color][color=Navy]1000[/color]
[color=Blue]hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%11000000[/color][color=Black], [/color][color=Blue]i2cfast[/color][color=Black], [/color][color=Blue]i2cbyte [/color][color=Green];tea5767
;(4*(93.3*1000000+225000))/32768[/color]
[color=Blue]pause [/color][color=Navy]1000[/color]
[color=Blue]Symbol freq        [/color][color=DarkCyan]= [/color][color=Navy]96100000       [/color][color=Green]; 96.1 MHz[/color]
[color=Blue]Symbol freqSmall  [/color][color=DarkCyan]= [/color][color=Blue]freq [/color][color=DarkCyan]/ [/color][color=Navy]100000[/color] [color=Green];for freq in terminal[/color]
[color=Blue]Symbol freqValue  [/color][color=DarkCyan]= [/color][color=Blue]freq [/color][color=DarkCyan]+ [/color][color=Navy]225000[/color] [color=Green];for HSI[/color]
[color=Blue]Symbol freqVal     [/color][color=DarkCyan]= [/color][color=Blue]freqValue [/color][color=DarkCyan]/ [/color][color=Navy]8192[/color] [color=Green];32.768kHz / 4[/color]
[color=Blue]Symbol freqVal.msb [/color][color=DarkCyan]= [/color][color=Blue]freqVal [/color][color=DarkCyan]/ [/color][color=Navy]256[/color]
[color=Blue]Symbol freqVal.lsb [/color][color=DarkCyan]= [/color][color=Blue]freqVal [/color][color=DarkCyan]& [/color][color=Navy]255[/color]
[color=Blue]sertxd ([/color][color=Red]"Start"[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
pause [/color][color=Navy]2000[/color]
[color=Black]main:
      [/color][color=Blue]sertxd ([/color][color=Black]#[/color][color=Blue]freqSmall[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      hi2cout (freqVal[/color][color=Black].msb,[/color][color=Blue]freqVal[/color][color=Black].lsb,[/color][color=Navy]$10[/color][color=Black],[/color][color=Navy]$10[/color][color=Black],[/color][color=Navy]$40[/color][color=Blue])
      gosub [/color][color=Black]serOutTunerData
      [/color][color=Blue]goto [/color][color=Black]main

serOutTunerData:
      [/color][color=Blue]pause [/color][color=Navy]1000
      [/color][color=Blue]hi2cin ([/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Blue])
      sertxd ([/color][color=Red]"All: "[/color][color=Black],[/color][color=Purple]b0[/color][color=Black],[/color][color=Red]","[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Red]","[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Red]","[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Red]","[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte1: "[/color][color=Black],[/color][color=Purple]bit7[/color][color=Black],[/color][color=Purple]bit6[/color][color=Black],[/color][color=Purple]bit5[/color][color=Black],[/color][color=Purple]bit4[/color][color=Black],[/color][color=Purple]bit3[/color][color=Black],[/color][color=Purple]bit2[/color][color=Black],[/color][color=Purple]bit1[/color][color=Black],[/color][color=Purple]bit0[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte2: "[/color][color=Black],[/color][color=Purple]bit15[/color][color=Black],[/color][color=Purple]bit14[/color][color=Black],[/color][color=Purple]bit13[/color][color=Black],[/color][color=Purple]bit12[/color][color=Black],[/color][color=Purple]bit11[/color][color=Black],[/color][color=Purple]bit10[/color][color=Black],[/color][color=Purple]bit9[/color][color=Black],[/color][color=Purple]bit8[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte3: "[/color][color=Black],[/color][color=Purple]bit23[/color][color=Black],[/color][color=Purple]bit22[/color][color=Black],[/color][color=Purple]bit21[/color][color=Black],[/color][color=Purple]bit20[/color][color=Black],[/color][color=Purple]bit19[/color][color=Black],[/color][color=Purple]bit18[/color][color=Black],[/color][color=Purple]bit17[/color][color=Black],[/color][color=Purple]bit16[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      sertxd ([/color][color=Red]"Byte4: "[/color][color=Black],[/color][color=Purple]bit31[/color][color=Black],[/color][color=Purple]bit30[/color][color=Black],[/color][color=Purple]bit29[/color][color=Black],[/color][color=Purple]bit28[/color][color=Black],[/color][color=Purple]bit27[/color][color=Black],[/color][color=Purple]bit26[/color][color=Black],[/color][color=Purple]bit25[/color][color=Black],[/color][color=Purple]bit24[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
      pause [/color][color=Navy]7000
      [/color][color=Blue]return[/color]
No need to apologize Hippy, I really appreciate the help. I thought you were quizzing me to see if I would catch that. haha

Matherp, I think you must have received a dud. A short little jumper wire was all it took to tune a few stations even down in my basement. :cool: I hooked up the ~4ft of bell wire and picked up a couple more. I'm planning to integrate this project into an old 1940's Philco console radio to give it new life :)
 
Last edited:

hippy

Ex-Staff (retired)
Staff member
Excellent news. I will admit I looked at what you were sending and completely over-looked how you were sending.
 
Top