'( ################################################################################ project: FM Radio - RDA5807M chip -------------------------------------------------------------------------------- name : RDA5807M_test05.bas copyright : (c) Chris Hirt, OE3HBW, Austria, JN87AQ, 2021 purpose : Controller for FM Radio with RDA5807M micro : ATmega644-20PU programmer : homebrew (STK200/STK300 emulation) compiler : MCS BASCOM-AVR 2.0.8.4 - 001 flash : 1% code build : V0.5 @ 03092021 (03. Sep. 2021) status : Test -------------------------------------------------------------------------------- ########################### HARDWARE ########################################### '----------------------------- uC ATmega644P 40 PDIP 20 MHz PIN 01 PB0 PORTB.0 T0 / XCK0 02 PB1 PORTB.1 T1 / CLKO 03 PB2 PORTB.2 INT2 / AIN0 04 PB3 PORTB.3 OC0A / AIN1 05 PB4 PORTB.4 OC0B / SS 06 PB5 MOSI ISP MOSI 07 PB6 MISO ISP MISO 08 PB7 SCK ISP SCK 09 /RESET ISP RST 10 VCC +5V 11 GND 0V 12 XTAL2 Quartz 16.0000 MHz 13 XTAL1 Quartz 16.0000 MHz 14 PD0 PORTD.0 RXD --> RS232 15 PD1 PORTD.1 TXD --> RS232 16 PD2 PORTD.2 INT0 / RXD1 17 PD3 PORTD.3 INT1 / TXD1 18 PD4 PORTD.4 OC1B / XCK1 19 PD5 PORTD.5 OC1A 20 PD6 PORTD.6 OC2B / ICP 21 PD7 PORTD.7 OC2A 22 PC0 PORTC.0 TWI SCL --> I2C Bus SCL RDA5807M 23 PC1 PORTC.1 TWI SDA --> I2C Bus SDA RDA5807M 24 PC2 PORTC.2 TCK --> LCD RS 25 PC3 PORTC.3 TMS --> LCD E 26 PC4 PORTC.4 TDO 27 PC5 PORTC.5 TDI 28 PC6 PORTC.6 TOSC1 29 PC7 PORTC.7 TOSC2 30 AVCC VCC +5V 31 AGDN GND 0V 32 AREF ADC REF 33 PA7 PORTA.7 ADC7 --> LCD DB7 34 PA6 PORTA.6 ADC6 --> LCD DB6 35 PA5 PORTA.5 ADC5 --> LCD DB5 36 PA4 PORTA.4 ADC4 --> LCD DB4 37 PA3 PORTA.3 ADC3 38 PA2 PORTA.2 ADC2 39 PA1 PORTA.1 ADC1 40 PA0 PORTA.0 ADC0 ----------------------------- LCD YL162-90 PIN 01 VSS GND 02 VDD +5V 03 V0 -2.5V ! 04 RS Register Select 05 R/W Read/Write --> GND 06 E Enable 07 D0 (Data 0, 4-Bit mod open) 08 D1 (Data 1, 4-Bit mod open) 09 D2 (Data 2, 4-Bit mod open) 10 D3 (Data 3, 4-Bit mod open) 11 D4 (Data 4) 12 D5 (Data 5) 13 D6 (Data 6) 14 D7 (Data 7) 15 Background Light + BL2 Background Light - ----------------------------- RDA5807M Modul RRD-102 V2.0 PIN 01 SDA 02 SCL 03 NC 04 NC 05 VDD 06 GND 07 ROUT 08 LOUT 09 RCK 10 Ant ################################################################################ ') '$PROG &HFF,&HD7,&HD9,&HFC 'Take care! Fuse Bits !!! $regfile = "m644pdef.dat" 'ATmega644P $crystal = 16000000 '16.0 MHz 'stack and framesize not optimized! $hwstack = 128 $framesize = 128 $swstack = 128 $lib "I2C_TWI.lbx" 'include TWI Lib; force BASCOM to use the hardware TWI '----- Config I2C -------------------------------------------------------------- Config SDA = PortC.1 'Configures a port pin for use as serial data SDA Config SCL = PortC.0 'Configures a port pin for use as serial clock SCL Config Twi = 400000 'TWI = I2C clock speed is 400 kHz '----- Config LCD -------------------------------------------------------------- Config LCD = 16 * 2 Config LCDmode = Port Config LCDbus = 4 Config LCDpin = Pin , Db4 = PortA.4 , Db5 = PortA.5 , Db6 = PortA.6 , Db7 = PortA.7 , Rs = PortC.2 , E = PortC.3 '----- Config Ports ------------------------------------------------------------ Config PORTD.7 = Output 'Port D.7 Output --> Buzzer '----- Config RDA5807M --------------------------------------------------------- 'Values of RDA5807M Datasheet RDA5807M V1.8 Aug. 2014 for FM Europe 'Writeable 16 Bit Register const RegH02 = &b0000_0000_0000_0000 'register H02 default value 'RegH02_DHIZ = 0 Audio Output high impedance 'RegH02_DMUTE = 0 Mute On 'RegH02_MONO = 0 Stereo 'RegH02_BASS = 0 Bass Boost disabled 'RegH02_RCLK_NCM = 0 Clock always supplied 'RegH02_RCLK_DIM = 0 Not direkt input mode 'RegH02_SEEKUP = 0 Seek down 'RegH02_SEEK = 0 Disable stop seek 'RegH02_SKMODE = 0 Wrap band limit 'RegH02_CLKMODE = 000 32.7680 kHz Quartz implemented 'RegH02_RDS_EN = 0 RDS/RBDS disabled 'RegH02_NEWMETHD = 0 New demodulation method disabled 'RegH02_SOFT_RST = 0 Soft-Reset disabled 'RegH02_ENABLE = 0 Power Up disabled const RegH03 = &b0000_0000_0000_0000 'register h03 default value 'RegH03_CHAN = 0000000000 Channel 0 (87 MHz, 87-108 MHz, 100 kHz Space) 'RegH03_DIRMODE = 0 Direct control mode disabled 'RegH03_TUNE = 0 Tune disabled 'RegH03_BAND = 00 Band select 87-108 MHz for FM Europe 'RegH03_SPACE = 00 Channel spacing 100 kHz for FM Europe const RegH04 = &b0000_1100_0000_0000 'register h04 default value 'RegH04_RSVD = 0 Reserved 'RegH04_STCIEN = 0 Seek/Tune complete interrupt disable 'RegH04_RBDS = 0 RDS mode only 'RegH04_RDSFIFO = 0 RDS FIFO mode disabled 'RegH04_DE = 1 Deemphasis = 50 us for Europe 'RegH04_RDSFCLR = 1 Clear RDS FIFO 'RegH04_SOFTMUTE = 0 Softmute disabled 'RegH04_AFCD = 0 AFC enable 'RegH04_RSVD = 00000000 Reserved (I2S, GPIO 1-3) const RegH05 = &b1000_1000_1000_1011 'register h05 default value 'RegH05_INTMODE = 1 Interrupt until RegH0C read 'RegH05_SEEKMODE = 00 Default seek mode (not RSSI seek mode) 'RegH05_RSVD = 0 Reserved 'RegH05_SEEKTH = 1000 Seek SNR default value == 71 dB 'RegH05_LNA_PORT = 10 LNAP (positiv) 'RegH05_LNA_IC = 00 LNA current 1.8 mA (MAX 3.0 mA) 'RegH05_VOLUME = 1011 DAC gain control (Volume 0-15 log) = 11 const RegH06 = &b0000_0000_0000_0000 'register h06 default value 'RegH06_RSVD = 0 Reserved 'RegH06_OPENMODE = 00 Open behind registers reading function 'RegH06_I2S = 0000000000000 I2S parameter const RegH07 = &b0100_0010_0000_0010 'register h07 default value 'RegH07_RSVD = 0 Reserved 'RegH07_THSOFTBL = 10000 Noise soft blend threshold (2 dB steps) 'RegH07_6550MODE = 1 Band 65-76 MHz (normal mode) 'RegH07_RSVD = 0 Reserved 'RegH07_SEEKTHOD = 000000 Mode disable (only with RSSI seek mode) 'RegH07_SOFTBLEN = 1 Softblend enable 'RegH07_FREQMODE = 0 Frequence setting normal const RegH08 = &b0000_0000_0000_0000 'register h08 default value 'FREQ_DRCT = Frequency in direct (expert) mode 'Read-only 16 Bit Register ----- 'RegH00 = &b1000_0101_0000_0100 CHIPID = &h5804 'RegH0A = &b0000_0100_0000_0000 'RegH0A_RDSR = 0 RDS/RBDS group not ready 'RegH0A_STC = 0 Seek/Tune complete flag (not complete) 'RegH0A_SF = 0 Seek succesfull 'RegH0A_RDSS = 0 RDS decoder not synchronized 'RegH0A_BLK_E = 0 RDS Block E not found 'RegH0A_ST = 1 Stereo indicator - Stereo; Mono = 0 'RegH0A_READCHAN = 0000000000 Read channel (10 Bit) 'RegH0B = &b0000_0000_0000_0000 'RegH0B_RSSI = 0000000 RSSI (0 - 127) logaritmic scale 'RegH0B_FM_TRUE = 0 Current channel is not a station 'RegH0B_FM_READY = 0 FM not ready 'RegH0B_RSVD = 00 Reserved 'RegH0B_ABCDE = 0 Block ID of register h0C, h0D, h0E, h0F 'RegH0B_BLERA = 00 RDS_DATA_0 - Null errors requiring correction 'RegH0B_BLERB = 00 RDS_DATA_1 - Null errors requiring correction 'RegH0C = &b0101_1000_0000_0011 'RDS Block A RDSA = &h5803 'RegH0D = &b0101_1000_0000_0100 'RDS Block B RDSB = &h5804 'RegH0E = &b0101_1000_0000_1000 'RDS Block C RDSC = &h5808 'RegH0F = &b0101_1000_0000_0100 'RDS Block D RDSD = &h5804 '---- Config RDA5807M chip I2C address ---- 'Device Address = h10 for sequential read/write mode 'Device Address = h11 for random access read/write mode 'Sequential read/write mode Const SEQ_WriteAdr = &h20 Const SEQ_ReadAdr = &h21 'Random Access read/write mode Const RND_WriteAdr = &h22 Const RND_ReadAdr = &h23 '--- FM Frequencies and BC stations at JN87AQ --- 'FMfreq = 88.2 MHz == BC Ö3 'FMfreq = 90.3 MHz == BC Ö1 'FMfreq = 92.4 MHz == BC FM4 'FMfreq = 95.8 MHz == BC Ö2 NÖ 'FMfreq = 102.9 MHz == BC Kronehit Const FM4freq = 92400000 'Test frequeny Const FM4Chan = 54 'Test channel '----- Declarations ------------------------------------------------------------ Dim hB As Byte Dim lB As Byte Dim regW As Word Dim ChipID As Word Dim TChanH As Byte Dim TChanL As Byte Declare Sub FirstTest() Declare Function I2CreadRegister(ByVal reg As Byte) As Word Declare Sub RDA5807M_readID() '####################### Main ################################################## Cls 'Clear display Cursor Off Noblink 'Hide cursor LCD "RDA5807M Test" I2Cinit 'Initializes the I2C SCL and SDA pins Waitms 50 Lowerline Call RDA5807M_readID() 'Read Chip ID LCD "ChipID = " ; Hex(ChipID) 'RDA5807M chip ID = &h5804 Wait 5 Cls Call FirstTest() 'RDA5807M in operation - radio listening test LCD "RDA5807M Radio" Lowerline LCD FM4freq ; " Hz " 'Show Testfrequency End 'of program '######################## Subs ################################################# Sub FirstTest() '--- Frequeny - Channel Conversion vice versa -------------- 'freq = (Space x CHAN) + LBL 'CHAN = freq - LBL / Space 'LBL = Lower Band Limit; freq, LBL and space in unit Hertz 'Example: freq = 99 MHz, Space = 100 kHz; LBL = 87 MHz ' CHAN = (99000000 - 87000000 ) / 1000000 = 120 ' Freq = (100000 x 120) + 87000000 = 99000000 'CHAN = 10 Bit value [15:6] (CHAN MAX = 2^10 - 1 = 1023) 'RegH03 CHAN HighByte = Shift CHAN , right , 2 'RegH03 CHAN LowByte = Shift CHAN , left , 6 '----------------------------------------------------------- TChanH = FM4Chan 'CHAN = 54 (b0011_0110) for 92.4 MHz Shift TChanH , right , 2 'TChan HighByte = RegH03 HighByte TChanL = FM4Chan 'CHAN = 54 (b0011_0110) for 92.4 MHz Shift TChanL , left , 6 'TChan LowByte TChanL = TChanL OR &b0001_0000 'TChan LowByte with Tuning enable Bit = 1 I2cstart I2cwbyte SEQ_WriteAdr 'Sequential write mode I2cwbyte &b1101_0010 'RegH02 High Byte I2cwbyte &b0000_0101 'RegH02 Low Byte I2cwbyte TChanH 'RegH03 High Byte I2cwbyte TChanL 'RegH03 Low Byte I2cwbyte &b0000_1010 'RegH04 High Byte Deemphasis 50us! I2cwbyte &b0000_0000 'RegH04 Low Byte I2cwbyte &b1000_1000 'RegH05 High Byte I2cwbyte &b1000_1111 'RegH05 Low Byte I2cstop End Sub Function I2CreadRegister(ByVal reg As Byte) As Word 'read from reg register I2cstart 'START condition I2cwbyte RND_WriteAdr 'RDA5807M address / random write mode I2cwbyte reg 'Register reg I2cstop 'STOP condition I2cstart 'START condition I2cwbyte RND_ReadAdr 'RDA5807M address / random read mode I2crbyte hB , ack 'read high Byte I2crbyte lB , Nack 'read low Byte I2cstop 'STOP condition regW = hb 'hb in word LSB Shift regW , left , 8 'shift to MSB regW = regW + lb 'lB in LSB I2CreadRegister = regW 'return register Word End Function Sub RDA5807M_readID() 'Read Chip ID ChipID = I2CreadRegister(&h00) End Sub '############################ End Of File ######################################