CircuitPython 10行プログラミング Step2 (10) D-Aコンバータ

 Grand Central M4 Expressマイコン・ボードの#A0と#A1端子は、マイコン内蔵のD-Aコンバータを利用したアナログ出力です。

 こちらのページの解説を参照してのこぎり波を作りました。

# CircuitPython IO demo - analog output
import board
from analogio import AnalogOut

analog_out0 = AnalogOut(board.A0)
analog_out1 = AnalogOut(board.A1)

while True:
# Count up from 0 to 65535, with 64 increment
# which ends up corresponding to the DAC's 10-bit range
for i in range(0, 65535, pow(2,10)):
analog_out0.value = i
analog_out1.value = i

 sin波、cos波を作りました。あまり周波数を上げられません。

# CircuitPython IO demo - analog output
import board
from analogio import AnalogOut
import math
import time

analog_out0 = AnalogOut(board.A0)
analog_out1 = AnalogOut(board.A1)

av = 1
fsamp = 32000
f0 = 200
pi = 3.14

for n in range(50000):
s = av * math.sin(2.0 * pi * f0 * n / fsamp)
c = av * math.cos(2.0 * pi * f0 * n / fsamp)
fs = s*pow(2,15)+pow(2,15)
fc = c*pow(2,15)+pow(2,15)
if fs<65535 and fc<65535:
analog_out0.value = int(fs)
analog_out1.value = int(fc)

D-Aコンバータ

 Grand Central M4 ExpressのマイコンはATSAMD51です。データシートによると、D-Aコンバータは12ビット、1 MSPSの性能をもち、2チャネル搭載されています。

 最初の連載ではTinket M0マイコン・ボードを使いました。こちらのマイコンはATSAMD21E18で、データシートによるとD-Aコンバータは10ビット、350kspsが1チャネル搭載されています。

 CircuitPythonでは、物理的な分解能が異なっても2^16の分解能(16ビットの整数値)でプログラムを記述します。