testAdc.lua 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. --[[
  2. 8. Air8000内部ADC接口为12bits 外部直流分压为0-3.4V
  3. 9. Air8000内部具有2个ADC接口,ADC0 -- AIO3 ADC1 -- AIO4
  4. 10. 特殊通道, CPU内部温度Temp -- adc.CH_CPU 主供电脚电压 VBAT -- adc.CH_VBAT
  5. 11. 设置分压(adc.setRange)要在adc.open之前设置,否则无效!!
  6. ]]
  7. local testAdc = {}
  8. -- adc.setRange(adc.ADC_RANGE_1_2) -- 关闭分压
  9. adc.setRange(adc.ADC_RANGE_MAX) -- 启用分压
  10. local rtos_bsp = rtos.bsp()
  11. function adc_pin() -- 根据不同开发板,设置ADC编号
  12. if rtos_bsp == "EC618" then --Air8000开发板ADC编号
  13. -- 默认不开启分压,范围是0-1.2v精度高
  14. -- 设置分压要在adc.open之前设置,否则无效!!
  15. -- adc.setRange(adc.ADC_RANGE_3_8)
  16. return 0,1,255,255,adc.CH_CPU ,adc.CH_VBAT
  17. else
  18. log.info("main", "define ADC pin in main.lua")
  19. return 0,1,255,255, adc.CH_CPU ,adc.CH_VBAT
  20. end
  21. end
  22. local adc_pin_0,adc_pin_1,adc_pin_2,adc_pin_3,adc_pin_temp,adc_pin_vbat=adc_pin()
  23. function testAdc.dotest()
  24. if adc_pin_0 and adc_pin_0 ~= 255 then adc.open(adc_pin_0) end
  25. if adc_pin_1 and adc_pin_1 ~= 255 then adc.open(adc_pin_1) end
  26. if adc_pin_2 and adc_pin_2 ~= 255 then adc.open(adc_pin_2) end
  27. if adc_pin_3 and adc_pin_3 ~= 255 then adc.open(adc_pin_3) end
  28. if adc_pin_temp and adc_pin_temp ~= 255 then adc.open(adc_pin_temp) end
  29. if adc_pin_vbat and adc_pin_vbat ~= 255 then adc.open(adc_pin_vbat) end
  30. -- 下面是循环打印, 接地不打印0也是正常现象
  31. -- ADC的精度都不会太高, 若需要高精度ADC, 建议额外添加adc芯片
  32. while true do
  33. if adc_pin_0 and adc_pin_0 ~= 255 then --adc0
  34. log.debug("adc", "adc" .. tostring(adc_pin_0), adc.read(adc_pin_0)) -- 若adc.get报nil, 改成adc.read
  35. end
  36. if adc_pin_1 and adc_pin_1 ~= 255 then --adc1
  37. log.debug("adc", "adc" .. tostring(adc_pin_1), adc.get(adc_pin_1))
  38. end
  39. if adc_pin_temp and adc_pin_temp ~= 255 then
  40. log.debug("adc", "CPU TEMP", adc.get(adc_pin_temp))
  41. end
  42. if adc_pin_vbat and adc_pin_vbat ~= 255 then
  43. log.debug("adc", "VBAT", adc.get(adc_pin_vbat))
  44. end
  45. sys.wait(1000)
  46. end
  47. -- 若不再读取, 可关掉adc, 降低功耗, 非必须
  48. if adc_pin_0 and adc_pin_0 ~= 255 then adc.close(adc_pin_0) end
  49. if adc_pin_1 and adc_pin_1 ~= 255 then adc.close(adc_pin_1) end
  50. if adc_pin_2 and adc_pin_2 ~= 255 then adc.close(adc_pin_2) end
  51. if adc_pin_3 and adc_pin_3 ~= 255 then adc.close(adc_pin_3) end
  52. if adc_pin_temp and adc_pin_temp ~= 255 then adc.close(adc_pin_temp) end
  53. if adc_pin_vbat and adc_pin_vbat ~= 255 then adc.close(adc_pin_vbat) end
  54. end
  55. return testAdc