FlashAir로 D/A 컨버터 MCP4922를 제어해 보았다
신년 초반의 전자공작 초는, FlashAir로 D/A 컨버터를 제어해 보았습니다.
FlashAir W-03의 Lua 스크립트 실행 환경
"FlashAir W-03 시리즈에서는 SD 카드에서 Lua 스크립트를 실행할 수 있습니다. Lua 스크립트를 사용하면 FlashAir의 GPIO 기능을 사용하여 소프트웨어 SPI를 통해 SPI 장치를 제어할 수 있습니다.
지금까지, IO 익스팬더 MCP23017 이나 IO 익스팬더 MCP23S17 를 제어해 보았습니다만, 이번은, FlashAir로 D/A 컨버터 MCP4922를 제어해 보겠습니다.
구성
필요한 것은 다음과 같습니다.
필요한 것은 다음과 같습니다.

SD 카드 슬롯
SD 카드 슬롯은 무엇이든 상관 없습니다만, 이번은 SD 카드의 1번, 2번, 7번, 8번 핀을 꺼낼 수 있을 필요가 있습니다.
FlashAir과 MCP4922 연결
"FlashAir와 MCP4922의 연결은 아래 표와 같이 연결됩니다."

CONFIG 파일 설정
FlashAir의 SD_WLAN 폴더에 있는 CONFIG 파일에 다음 옵션을 추가합니다. IFMODE는 FlashAir의 GPIO 모드를 켭니다. LUA_RUN_SCRIPT는 FlashAir의 전원을 켠 직후 지정된 Lua 스크립트를 시작하는 설정입니다.IFMODE=1
LUA_RUN_SCRIPT=/mcp4922sample.lua
※SD_WLAN 폴더와 CONFIG 파일은 불가시 속성 파일이므로 주의해 주세요.
Lua 스크립트 파일
"FlashAir의 루트 폴더에 다음 코드를 포함하는 텍스트 파일 (mcp4922sample.lua)을 복사하십시오.
이 코드에서는 MCP4922의 VOUTA와 VOUTB의 출력을 서서히 올려가도록 하고 있습니다. 연결된 LED는 번갈아 점차 밝아집니다.
이번 시도한 MCP4922는 SPI 접속 대응이지만, 간단하게 접속할 뿐만 아니라, 제어하기 위해서는 LDAC 핀의 HIGH/LOW를 제어할 필요가 있습니다. SPI로 16비트 데이터를 전송한 후, LDAC 핀을 로우로 함으로써 VREFA 또는 VREFB에 걸려 있는 전압에 기초하여 기입한 값(0~4096)에 따라 VOUTA 또는 VOUTB의 출력값이 변화한다. 합니다.
MCP4922에 송신하는 16비트의 데이터는 다음과 같이 되어 있습니다.
15비트:VOUTA/VOUTB의 선택(0:VOUTA, 1:VOUTB)
14비트:VREF 입력의 버퍼 제어 유무(0:없음, 1: 있음)
13비트:출력 게인의 선택(0:VREFA/B의 2배, 1:VREFA/B의 1배)
12비트:셧다운 제어 유무(0:아날로그 출력 있음, 1:아날로그 출력 없음)
11~0비트: 출력값 지정(4096단계: 0x000[0]~0xFFF[4095])
또한, 사실은 FlashAir의 SPI용 Lua 스크립트 함수인 fa.spi 함수를 사용하여 제어하고 싶었습니다만, 잘 작동하지 않고, 우선 이번에는 fa.pio 함수를 사용하여 제어하고 있습니다. fa.pio 함수는 그대로는 사용하기 어려우므로 @Seg_Faul 님이 공개하고 있는 라이브러리 FlashAir의 PIO를 Arduino 스타일로 처리 를 이용하고 있습니다. pioduino.lua를 다운로드하여 mcp4922sample.lua와 같은 폴더에 넣으십시오.
mcp4922sample.lua-- FlashAirでD/AコンバータMCP4922を制御する
require("pioduino")
MCP4922_OUTA = 0
MCP4922_OUTB = 1
DA_SDI = 0 --0x01 SD-pin 2
DA_SCK = 1 --0x02 SD-pin 7
DA_CS = 2 --0x04 SD-pin 8
--DA_SDO = 3 --0x08 SD-pin 9 --未使用
DA_LDAC = 4 --0x10 SD-pin 1
function MCP4922DataSend(value)
digitalWrite(DA_SDI, value)
digitalWrite(DA_SCK, HIGH)
digitalWrite(DA_SCK, LOW)
end
function MCP4922CommandSend(outab, value)
--コマンドデータの出力
digitalWrite(DA_LDAC,HIGH) --LDACピンをHIGHに
digitalWrite(DA_CS,LOW) --CSピンをLOWに
--出力ピン(VOUTA/VOUTB)を指定
if (outab == 0) then
MCP4922DataSend(LOW) --VOUTA
else
MCP4922DataSend(HIGH) --VOUTB
end
MCP4922DataSend(LOW) --VREFバッファ制御なし
MCP4922DataSend(HIGH) --出力ゲインは1倍
MCP4922DataSend(HIGH) --アナログ出力あり
--12ビット分のデータを出力
for i=11, 0, -1 do
if (bit32.band(bit32.rshift(value, i), 0x01) == 1) then
MCP4922DataSend(HIGH)
else
MCP4922DataSend(LOW)
end
end
digitalWrite(DA_CS,HIGH) --CSピンをHIGHに
digitalWrite(DA_LDAC,LOW) --LDACピンをLOWに
end
pinMode(DA_SCK, OUTPUT)
pinMode(DA_SDI, OUTPUT)
pinMode(DA_CS, OUTPUT)
pinMode(DA_LDAC,OUTPUT)
digitalWrite(DA_SCK,LOW)
delay(1000) --ここでちょっと待たないと上手く動かない。
while(1) do
MCP4922CommandSend(MCP4922_OUTB, 0)
for cnt = 0, 4000, 100 do
MCP4922CommandSend(MCP4922_OUTA, cnt)
delay(100)
end
MCP4922CommandSend(MCP4922_OUTA, 0)
for cnt = 0, 4000, 100 do
MCP4922CommandSend(MCP4922_OUTB, cnt)
delay(100)
end
collectgarbage("collect") --定期的にお掃除
end
요약
이상으로, FlashAir에서 fa.pio 함수를 사용해 D/A 컨버터 MCP4922를 제어할 수 있었습니다.
이제 FlashAir에 아날로그 출력을 추가할 수 있었습니다. 한층 더 응용의 폭이 크게 퍼지네요.
참고 자료
DA 컨버터 MCP4922(SPI)를 이용하여 D/A 변환을 실시한다
MCP4922 데이터시트
FlashAir의 PIO를 Arduino 스타일로 처리
FlashAir Developers Lua 함수 참조
Reference
이 문제에 관하여(FlashAir로 D/A 컨버터 MCP4922를 제어해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ayasehiro/items/1b03a24b463b67f31c32
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
LUA_RUN_SCRIPT=/mcp4922sample.lua
"FlashAir의 루트 폴더에 다음 코드를 포함하는 텍스트 파일 (mcp4922sample.lua)을 복사하십시오.
이 코드에서는 MCP4922의 VOUTA와 VOUTB의 출력을 서서히 올려가도록 하고 있습니다. 연결된 LED는 번갈아 점차 밝아집니다.
이번 시도한 MCP4922는 SPI 접속 대응이지만, 간단하게 접속할 뿐만 아니라, 제어하기 위해서는 LDAC 핀의 HIGH/LOW를 제어할 필요가 있습니다. SPI로 16비트 데이터를 전송한 후, LDAC 핀을 로우로 함으로써 VREFA 또는 VREFB에 걸려 있는 전압에 기초하여 기입한 값(0~4096)에 따라 VOUTA 또는 VOUTB의 출력값이 변화한다. 합니다.
MCP4922에 송신하는 16비트의 데이터는 다음과 같이 되어 있습니다.
15비트:VOUTA/VOUTB의 선택(0:VOUTA, 1:VOUTB)
14비트:VREF 입력의 버퍼 제어 유무(0:없음, 1: 있음)
13비트:출력 게인의 선택(0:VREFA/B의 2배, 1:VREFA/B의 1배)
12비트:셧다운 제어 유무(0:아날로그 출력 있음, 1:아날로그 출력 없음)
11~0비트: 출력값 지정(4096단계: 0x000[0]~0xFFF[4095])
또한, 사실은 FlashAir의 SPI용 Lua 스크립트 함수인 fa.spi 함수를 사용하여 제어하고 싶었습니다만, 잘 작동하지 않고, 우선 이번에는 fa.pio 함수를 사용하여 제어하고 있습니다. fa.pio 함수는 그대로는 사용하기 어려우므로 @Seg_Faul 님이 공개하고 있는 라이브러리 FlashAir의 PIO를 Arduino 스타일로 처리 를 이용하고 있습니다. pioduino.lua를 다운로드하여 mcp4922sample.lua와 같은 폴더에 넣으십시오.
mcp4922sample.lua
-- FlashAirでD/AコンバータMCP4922を制御する
require("pioduino")
MCP4922_OUTA = 0
MCP4922_OUTB = 1
DA_SDI = 0 --0x01 SD-pin 2
DA_SCK = 1 --0x02 SD-pin 7
DA_CS = 2 --0x04 SD-pin 8
--DA_SDO = 3 --0x08 SD-pin 9 --未使用
DA_LDAC = 4 --0x10 SD-pin 1
function MCP4922DataSend(value)
digitalWrite(DA_SDI, value)
digitalWrite(DA_SCK, HIGH)
digitalWrite(DA_SCK, LOW)
end
function MCP4922CommandSend(outab, value)
--コマンドデータの出力
digitalWrite(DA_LDAC,HIGH) --LDACピンをHIGHに
digitalWrite(DA_CS,LOW) --CSピンをLOWに
--出力ピン(VOUTA/VOUTB)を指定
if (outab == 0) then
MCP4922DataSend(LOW) --VOUTA
else
MCP4922DataSend(HIGH) --VOUTB
end
MCP4922DataSend(LOW) --VREFバッファ制御なし
MCP4922DataSend(HIGH) --出力ゲインは1倍
MCP4922DataSend(HIGH) --アナログ出力あり
--12ビット分のデータを出力
for i=11, 0, -1 do
if (bit32.band(bit32.rshift(value, i), 0x01) == 1) then
MCP4922DataSend(HIGH)
else
MCP4922DataSend(LOW)
end
end
digitalWrite(DA_CS,HIGH) --CSピンをHIGHに
digitalWrite(DA_LDAC,LOW) --LDACピンをLOWに
end
pinMode(DA_SCK, OUTPUT)
pinMode(DA_SDI, OUTPUT)
pinMode(DA_CS, OUTPUT)
pinMode(DA_LDAC,OUTPUT)
digitalWrite(DA_SCK,LOW)
delay(1000) --ここでちょっと待たないと上手く動かない。
while(1) do
MCP4922CommandSend(MCP4922_OUTB, 0)
for cnt = 0, 4000, 100 do
MCP4922CommandSend(MCP4922_OUTA, cnt)
delay(100)
end
MCP4922CommandSend(MCP4922_OUTA, 0)
for cnt = 0, 4000, 100 do
MCP4922CommandSend(MCP4922_OUTB, cnt)
delay(100)
end
collectgarbage("collect") --定期的にお掃除
end
요약
이상으로, FlashAir에서 fa.pio 함수를 사용해 D/A 컨버터 MCP4922를 제어할 수 있었습니다.
이제 FlashAir에 아날로그 출력을 추가할 수 있었습니다. 한층 더 응용의 폭이 크게 퍼지네요.
참고 자료
DA 컨버터 MCP4922(SPI)를 이용하여 D/A 변환을 실시한다
MCP4922 데이터시트
FlashAir의 PIO를 Arduino 스타일로 처리
FlashAir Developers Lua 함수 참조
Reference
이 문제에 관하여(FlashAir로 D/A 컨버터 MCP4922를 제어해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ayasehiro/items/1b03a24b463b67f31c32
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
DA 컨버터 MCP4922(SPI)를 이용하여 D/A 변환을 실시한다
MCP4922 데이터시트
FlashAir의 PIO를 Arduino 스타일로 처리
FlashAir Developers Lua 함수 참조
Reference
이 문제에 관하여(FlashAir로 D/A 컨버터 MCP4922를 제어해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayasehiro/items/1b03a24b463b67f31c32텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)