Advertisement
Guest User

Raspberry Pi picoでSPI接続のADT7310をMicroPythonで使う

a guest
Feb 8th, 2021
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. from machine import Pin
  2. from machine import SPI
  3. import utime
  4.  
  5. MISO = Pin(16) # GPIO16 (21番ピン)
  6. CS = Pin(17) # GPIO17 (22番ピン)
  7. SCK = Pin(18) # GPIO18 (24番ピン)
  8. MOSI = Pin(19) # GPIO19 (25番ピン)
  9.  
  10. class test_ADT7310:
  11.  
  12. def __init__(self):
  13. self.ss=CS
  14. # クロック125kHz SPI_MODE3 MSBFIRST
  15. self.spi01=SPI(0,baudrate=125000,polarity=1,phase=1,bits=8,firstbit=SPI.MSB,mosi=MOSI,miso=MISO,sck=SCK)
  16.  
  17. def spi_cs_on(self):
  18. self.ss.value(0)
  19.  
  20. def spi_cs_off(self):
  21. self.ss.value(1)
  22.  
  23. def start(self):
  24.  
  25. self.spi_cs_off()
  26. buff=bytearray([0xff,0xff,0xff,0xff])
  27. self.spi_cs_on()
  28. self.spi01.write(buff)
  29. self.spi_cs_off()
  30. utime.sleep(0.1)
  31.  
  32. while (1):
  33.  
  34. # 16bit 1-shot
  35. buff=bytearray([0x08,0xa0])
  36.  
  37. # 13bit 1-shot
  38. #buff=bytearray([0x08,0x20])
  39.  
  40. self.spi_cs_on()
  41. self.spi01.write(buff)
  42. self.spi_cs_off()
  43.  
  44. read_wait_time = utime.ticks_ms()
  45. read_wait = 23
  46. utime.sleep(0.01*read_wait)
  47.  
  48. count001 = 0;
  49. while True:
  50. # ステータスレジスタの読み込み
  51. utime.sleep(0.01)
  52. buff=bytearray([0x40])
  53. self.spi_cs_on()
  54. self.spi01.write(buff)
  55. status_reg = bytearray(self.spi01.read(1,0x00))
  56. self.spi_cs_off()
  57. count001 += 1
  58. if count001 >= 500:
  59. break
  60. if ((status_reg[0] >> 7) & 1) == 0:
  61. break
  62.  
  63. status_str = "status=0x{0:02x}, count001={1:d}, {2:d} ms".format(status_reg[0], count001, (utime.ticks_ms()-read_wait_time))
  64. #print(status_str)
  65.  
  66. buff=bytearray([0x50])
  67. self.spi_cs_on()
  68. self.spi01.write(buff)
  69. temp_raw = bytearray(self.spi01.read(2,0x00))
  70. self.spi_cs_off()
  71.  
  72. # 16bitの計算
  73. temp = (temp_raw[0]*256+temp_raw[1])
  74. if temp >= 32768:
  75. temp - 65536
  76. temp = temp / 128
  77. print("temp : {0:.4f} degC".format(temp))
  78.  
  79. # 13bitの計算
  80. #temp = (temp_raw[0]*256+temp_raw[1])/8
  81. #if temp >= 4096:
  82. # temp - 8192
  83. #temp = temp / 16
  84. #print("temp : {0:.4f} degC".format(temp))
  85.  
  86. utime.sleep(5.0)
  87.  
  88. if __name__=="__main__":
  89. test_adt7310_03 = test_ADT7310()
  90. test_adt7310_03.start()
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement