Advertisement
Guest User

Using SPI connection ADT7310 with MaixPy

a guest
Jan 18th, 2020
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.99 KB | None | 0 0
  1. from fpioa_manager import fm, board_info
  2. from Maix import GPIO
  3. from machine import SPI
  4. import utime
  5. import lcd
  6. import image
  7.  
  8. class test_ADT7310:
  9.  
  10.     def __init__(self):
  11.         self.img = image.Image()
  12.         self.img.draw_rectangle(0, 0, 320, 240, color=(255, 0, 0),fill=True)
  13.         lcd.init(freq=15000000)
  14.         lcd.display(self.img)
  15.  
  16.         fm.register(21,fm.fpioa.GPIOHS0)#cs
  17.         #fm.register(21,fm.fpioa.SPI1_SS0)#cs
  18.         fm.register(24,fm.fpioa.SPI1_D0)#mosi
  19.         fm.register(22,fm.fpioa.SPI1_D1)#miso
  20.         fm.register(23,fm.fpioa.SPI1_SCLK)#sclk
  21.        
  22.         self.ss=GPIO(GPIO.GPIOHS0,GPIO.OUT)
  23.        
  24.         self.spi01=SPI(SPI.SPI1,mode=SPI.MODE_MASTER,baudrate=125000,polarity=1,phase=1,bits=8,firstbit=SPI.MSB,mosi=fm.fpioa.SPI1_D0,miso=fm.fpioa.SPI1_D1,sck=fm.fpioa.SPI1_SCLK,cs0=-1)
  25.         #self.spi01=SPI(SPI.SPI1,mode=SPI.MODE_MASTER,baudrate=125000,polarity=1,phase=1,bits=8,firstbit=SPI.MSB,mosi=fm.fpioa.SPI1_D0,miso=fm.fpioa.SPI1_D1,sck=fm.fpioa.SPI1_SCLK,cs0=fm.fpioa.SPI1_SS0)
  26.  
  27.     def spi_cs_on(self):
  28.         self.ss.value(0)
  29.  
  30.     def spi_cs_off(self):
  31.         self.ss.value(1)
  32.  
  33.     def start(self):
  34.  
  35.         self.spi_cs_off()
  36.         buff=bytearray([0xff,0xff,0xff,0xff])
  37.         self.spi_cs_on()
  38.         self.spi01.write(buff, cs=SPI.CS0)
  39.         self.spi_cs_off()
  40.         utime.sleep(0.1)
  41.        
  42.         for count in range(63072000):
  43.  
  44.             # 16bit 1-shot
  45.             buff=bytearray([0x08,0xa0])
  46.  
  47.             # 13bit 1-shot
  48.             #buff=bytearray([0x08,0x20])
  49.  
  50.             self.spi_cs_on()
  51.             self.spi01.write(buff, cs=SPI.CS0)
  52.             self.spi_cs_off()
  53.        
  54.             read_wait_time = utime.ticks_ms()
  55.             read_wait = 23
  56.             utime.sleep(0.01*read_wait)
  57.  
  58.             count001 = 0;
  59.             while True:
  60.                 wait01 = utime.ticks_ms()
  61.                 while True:
  62.                     utime.sleep(0.01)
  63.                     if (utime.ticks_ms() - wait01) >= 10:
  64.                         break;
  65.                 # ステータスレジスタの読み込み
  66.                 buff=bytearray([0x40])
  67.                 self.spi_cs_on()
  68.                 self.spi01.write(buff,cs=SPI.CS0)
  69.                 status_reg = bytearray(self.spi01.read(1,0x00,cs=SPI.CS0))
  70.                 self.spi_cs_off()
  71.                 count001 += 1
  72.                 if count001 >= 500:
  73.                     break
  74.                 if ((status_reg[0] >> 7) & 1) == 0:
  75.                     break
  76.        
  77.             status_str = "status=0x{0:02x}, count001={1:d}, {2:d} ms".format(status_reg[0], count001, (utime.ticks_ms()-read_wait_time))
  78.             self.img.draw_rectangle(0, 0, 320, 240, color=(255, 0, 0),fill=True)
  79.             #self.img.draw_string(10,50,status_str,color=(255,255,255),scale=2,mono_space=False)
  80.             print(status_str)
  81.        
  82.             buff=bytearray([0x50])
  83.             self.spi_cs_on()
  84.             self.spi01.write(buff,cs=SPI.CS0)
  85.             temp_raw = bytearray(self.spi01.read(2,0x00,cs=SPI.CS0))
  86.             self.spi_cs_off()
  87.        
  88.             # 16bitの計算
  89.             temp = (temp_raw[0]*256+temp_raw[1])
  90.             if temp >= 32768:
  91.                 temp - 65536
  92.             temp = temp / 128
  93.             temp_str = "{0:.4f} Celsius".format(temp)
  94.             self.img.draw_string(10,100,temp_str,color=(255,255,255),scale=5,mono_space=False)
  95.             print("{0:.4f} ℃".format(temp))
  96.  
  97.             # 13bitの計算
  98.             #temp = (temp_raw[0]*256+temp_raw[1])/8
  99.             #if temp >= 4096:
  100.             #    temp - 8192
  101.             #temp = temp / 16
  102.             #print(temp)
  103.  
  104.             if ((count+1) % 1440) == 0:
  105.                 buff=bytearray([0xff,0xff,0xff,0xff])
  106.                 self.spi_cs_on()
  107.                 self.spi01.write(buff, cs=SPI.CS0)
  108.                 self.spi_cs_off()
  109.  
  110.             lcd.display(self.img)
  111.             utime.sleep(5.0)
  112.  
  113. if __name__=="__main__":
  114.     test_adt7310_03 = test_ADT7310()
  115.     test_adt7310_03.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement