Simple test

Ensure your device works with this simple test.

examples/si4713_simpletest.py
 1# SPDX-FileCopyrightText: 2018 Tony DiCola for Adafruit Industries
 2# SPDX-License-Identifier: MIT
 3
 4# Simple demo of using the SI4743 RDS FM transmitter.
 5
 6import time
 7
 8import board
 9import digitalio
10
11import adafruit_si4713
12
13# Specify the FM frequency to transmit on in kilohertz.  As the datasheet
14# mentions you can only specify 50khz steps!
15FREQUENCY_KHZ = 102300  # 102.300mhz
16
17# Initialize I2C bus.
18i2c = board.I2C()  # uses board.SCL and board.SDA
19# i2c = board.STEMMA_I2C()  # For using the built-in STEMMA QT connector on a microcontroller
20
21# Initialize SI4713.
22# si4713 = adafruit_si4713.SI4713(i2c)
23
24# Alternatively you can specify the I2C address of the device if it changed:
25# si4713 = adafruit_si4713.SI4713(i2c, address=0x11)
26
27# If you hooked up the reset line you should specify that too.  Make sure
28# to pass in a DigitalInOut instance.  You will need the reset pin with the
29# Raspberry Pi, and probably other devices:
30si_reset = digitalio.DigitalInOut(board.D5)
31
32print("initializing si4713 instance")
33si4713 = adafruit_si4713.SI4713(i2c, reset=si_reset, timeout_s=0.5)
34print("done")
35
36# Measure the noise level for the transmit frequency (this assumes automatic
37# antenna capacitance setting, but see below to adjust to a specific value).
38noise = si4713.received_noise_level(FREQUENCY_KHZ)
39# Alternatively measure with a specific frequency and antenna capacitance.
40# This is not common but you can specify antenna capacitance as a value in pF
41# from 0.25 to 47.75 (will use 0.25 steps internally).  If you aren't sure
42# about this value, stick with the default automatic capacitance above!
43# noise = si4713.received_noise_level(FREQUENCY_KHZ, 0.25)
44print(f"Noise at {FREQUENCY_KHZ / 1000.0:0.3f} mhz: {noise} dBuV")
45
46# Tune to transmit with 115 dBuV power (max) and automatic antenna tuning
47# capacitance (default, what you probably want).
48si4713.tx_frequency_khz = FREQUENCY_KHZ
49si4713.tx_power = 115
50
51# Configure RDS broadcast with program ID 0xADAF (a 16-bit value you specify).
52# You can also set the broadcast station name (up to 96 bytes long) and
53# broadcast buffer/song information (up to 106 bytes long).  Setting these is
54# optional and you can later update them by setting the rds_station and
55# rds_buffer property respectively.  Be sure to explicitly specify station
56# and buffer as byte strings so the character encoding is clear.
57si4713.configure_rds(0xADAF, station=b"AdaRadio", rds_buffer=b"Adafruit g0th Radio!")
58
59# Print out some transmitter state:
60print(f"Transmitting at {si4713.tx_frequency_khz / 1000.0:0.3f} mhz")
61print(f"Transmitter power: {si4713.tx_power} dBuV")
62print(f"Transmitter antenna capacitance: {si4713.tx_antenna_capacitance:0.2} pF")
63
64# Set GPIO1 and GPIO2 to actively driven outputs.
65si4713.gpio_control(gpio1=True, gpio2=True)
66
67# Main loop will print input audio level and state and blink the GPIOs.
68print("Broadcasting...")
69while True:
70    # Print input audio level and state.
71    print(f"Input level: {si4713.input_level} dBfs")
72    print(f"ASQ status: 0x{si4713.audio_signal_status:02x}")
73    # 'Blink' GPIO1 and GPIO2 alternatively on and off.
74    si4713.gpio_set(gpio1=True, gpio2=False)  # GPIO1 high, GPIO2 low
75    time.sleep(0.5)
76    si4713.gpio_set(gpio1=False, gpio2=True)  # GPIO1 low, GPIO2 high
77    time.sleep(0.5)