現在Raspi4にADC7924を接続してデータ取得を試みておりますが、取得データが常に0となっております。
部品の実装やピンアサインを確認しましたが特に問題はないと思われます。コードに問題があるとして、どこが誤っているかもしくは怪しそうかをご指摘頂きたく。
やっていること自体は単純です。
AD7924のレジスタに同じデータを2回繰り返し送信しています。1回目は読取チャンネル設定のためにデータ送信しています。
2回目のデータ送信時にAD7294から出力されるデータを読み取りprint文で表示しています。
このデータが常に0になっております。ADCの入力がGNDに落ちていない限りは出力値として0になることはほぼありえないので、コードに問題があると考えています。
Python
1import spidev 2import wiringpi as w 3import time 4import sys 5 6cs_pin = 22 7w.wiringPiSetup() 8w.pinMode(cs_pin, 1) 9w.digitalWrite(cs_pin, 1) 10 11spi = spidev.SpiDev() 12spi.open(0, 0) 13spi.max_speed_hz = 1000000 14spi.mode = 2 15 16w.digitalWrite(cs_pin, 0) 17time.sleep(0.1) 18spi.writebytes([0xFF, 0xFF]) 19w.digitalWrite(cs_pin, 1) 20time.sleep(0.1) 21 22WRITE = 0b1 << 11 23SEQ1 = 0b0 << 10 24PM1 = 0b1 << 5 25PM0 = 0b1 << 4 26SEQ0 = 0b0 << 3 27RANGE = 0b0 << 1 28CODING = 0b0 << 0 29 30def readADC(channel): 31 CH = channel << 6 32 data = WRITE | SEQ1 | PM1 | PM0 | CH | SEQ0 | RANGE | CODING 33 data0 = (data >> 4) & 0xFF 34 data1 = (data << 4) & 0xFF 35 send_data = [data0, data1] 36 print('send_data:{}'.format(send_data)) 37 38 w.digitalWrite(cs_pin, 0) 39 time.sleep(0.1) 40 spi.xfer2(send_data) 41 w.digitalWrite(cs_pin, 1) 42 time.sleep(0.1) 43 44 w.digitalWrite(cs_pin, 0) 45 time.sleep(0.1) 46 adc = spi.xfer2(send_data) 47 w.digitalWrite(cs_pin, 1) 48 49 adc_value = adc[0] << 8 | adc[1] 50 print('CH:%d %d' % (channel, adc_value)) 51 52 return adc_value 53 54if __name__ == '__main__': 55 try: 56 while True: 57 readADC(0) 58 readADC(1) 59 readADC(2) 60 time.sleep(0.2) 61 62 except KeyboardInterrupt: 63 spi.close() 64 sys.exit(0)
やったこととしては、レジスタ値を様々な値に変えてみましたが、変化なしです。
デバイスの実装不良かもと思い改めて半田付けしてみましたが、やはり変化なしです。
以上、宜しくお願い致します。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/19 06:26