简体   繁体   中英

Python using MCP3008 sample frequency

I am trying to make project of visible light communication. Currently I am using a classic LED as TX part and BPW21 photodiode with MCP3008 AD convertor as a RX part. Both of this part run on the RasPi4 withy python 3.7.3. However I have problem with receiving the bits using OOK modulation on RX part.

import busio
import digitalio
import board
import time
import adafruit_mcp3xxx.mcp3008 as MCP
from adafruit_mcp3xxx.analog_in import AnalogIn

spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
cs = digitalio.DigitalInOut(board.D5)
mcp = MCP.MCP3008(spi, cs)
channel_0 = AnalogIn(mcp, MCP.P0)

def evaluateSensorValue():

    bits = ""

    sensor_value = channel_0.value
    channel_voltage = channel_0.voltage

    if channel_voltage < 3.0:
        bits = "1"
        print("1")
    else:
        bits = "0"
        print("0")

while True:
    evaluateSensorValue()
    time.sleep(0.05)

I am reading input from the Channel 0 of MCP3008. However in such a low frequency of 20Hz, I am not able to "catch" all the bits. BPW21 has fast response time to light in 1.5 us fall and rise time. I thouht that MCP3008 will be fast enough to catch all the bits in frequency of 10 kHz, not only lower than 20 Hz. How can I make it way much faster on RX side to be able to receive data in higher frequencies? Thank you for any kind of help!

This answer is solved. The problem was in the very high sampling frequency of the AD converter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM