MicroPythonで使うWio Terminal - machine.DAC

MicroPythonで使うWio Terminal - 目次

machine.DAC (D/Aコンバータ)の使用例

# Wio Terminal machine.DACのサンプル
# This code is provided under a CC0 Public Domain License.
# http://creativecommons.org/publicdomain/zero/1.0/
# 2022年6月19日 佐藤恭一 https://kyoutan.jpn.org

import time
from machine import DAC, ADC, Pin, Map, LCD

lcd = LCD()
lcd.fillScreen(lcd.color.BLACK)
lcd.setTextColor(lcd.color.WHITE)
lcd.setTextFont(6)
adc = ADC(Pin(Map.A0))

# DACを使用したアナログ出力
dac = DAC(Pin(Map.DAC0))  # DAC0 と DAC1 ふたつのDACがある
dac.resolution(12)  # resolutionで分解能を指定できる。初期値=最大値 12bit
dac.resolution(10)  # ADCと同じ 10bitに設定
# dac.reference(0)  # 0 初期値。値を増やすと出力電圧が上がるのだけど、法則がわからない。

dac = DAC(Pin(Map.DAC0), resolution=10, reference=0)  # 一行でも設定できる
# DAC0の出力をADC0で読み取ってみる
# DAC0(pin11)とADC0(pin13)をジャンパ線で接続する
for output in range(0, 1023, 20):
    dac.write(output)  # アナログ出力
    lcd.drawString(" {0:>04d} ".format(adc.read()), 0, 5)  # 上段計測値
    lcd.drawString(" {0:>04d} ".format(output), 0, 48)    # 下段出力値
    time.sleep_ms(100)


# PWMを使用したアナログ出力
# 分解能は 8bit (0 - 255)のみ。resolutionを指定しても無視される
dac0 = DAC(Pin(13))  # PWM0
dac1 = DAC(Pin(16))  # PWM1
dac2 = DAC(Pin(23))  # PWM2
dac3 = DAC(Pin(33))  # PWM3
dac4 = DAC(Pin(37))  # PWM4
dac5 = DAC(Pin(3))   # PWMピン以外では使えない(エラーにはならない)
dac0.write(127)
dac1.write(127)
dac2.write(127)
dac3.write(127)
dac4.write(127)
dac5.write(127)
# PWM出力なので、波形はオシロかロジアナで観測する
# アナログ値として使用するなら、ローパスフィルタを通す

"""
>>> help(DAC)
object <class 'DAC'> is of type type
  write -- <function>
  resolution -- <function>
  reference -- <function>
"""

DAC0, DAC1を使用したアナログ出力と、PWM0~PWM4を使用したアナログ出力が使用できます。

値を書き込むだけで簡単に使用できました。


PWMを使用したアナログ出力では、周期が 1.8kHzくらいでした。



このブログの人気の投稿

windowsで「インターネット接続の共有」の設定

月刊 I/O 記事リスト 1976~1989

X68000実機のROMを保存