chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

お越しいただきありがとうございます。

このブログでは主に以下の内容を記載しています(自分の記録用)。

  • 何か作った話(自分は何かを作るために生きている..できたらクスっと笑えるものや、アートと絡みたい)(長続きせず、飽きるのが問題)
  • 音楽(AerophoneやDTM(FL-Studio))を勉強しようと思ったが、音楽はレッスンが続けられないので、、絵に転向しようとしたが、DTMに戻った(が、悶々とするだけで何も作っていない)。テクノ音楽を作れるよう、オンライン教材やソフト(AbletonLive等)に投資中。でもLLMに追い越されて、プロンプト入力したら勝手に音楽作ってくれる時代らしい。
  • 趣味のロードバイク(坂道をひーこら走ると結構大変な人生(笑)と重なる。。その後、定年・再雇用でメインタスクからはずれて仕事のストレスがほぼゼロで最近は全く走っていない。。いかん)

記事が渾然一体となってカオス状態ですが、マイコンのプログラムも、ちゃりで走るのも、料理するのも、自分の中ではそれぞれが繋がっているので、カオスな日常をそのまま反映させています。リンクや引用はご自由にどうぞ。質問等ありましたらコメントに書いてください。微力ながら自分の分かる範囲で回答します。
とにかく、、人に「あほやなぁ」と言われる事に精進するのが我が人生。へこんでも創造の力で進みたい

■2025年目標
今年は音楽(EDM)とAI(ミニマムなLLM、エッジAI(tiny ML))に全振りする(時間、お金、そして情熱?)。

■スターを付けてくださる方へのお礼
古い記事を見つけて時々スターを付けてくださる方がおられます。わざわざお越しくださりありがとうございます。不明な点があればコメント欄に書いておいていただけると、回答できるかもしれません。

RP2350 PiZeroボードにPSRAMを実装->RAM領域が8MBに増量

背景:PIOを整理している中で、RP2350では高速にシリアル転送するためのHSTXという周辺回路が追加されているのを知った。HSTXは汎用シリアル出力回路らしいが、主な用途としてDVI出力を想定しているらしい*1。自分もRP2350でDVI信号を生成して、デジタルTVにグラフィックパターンを出してみたいと思うようになった。
課題:先日購入した、WaveshareのRP2350 PiZeroはHDMI端子が付いているものの、HSTXに接続されていないことが分かった。PiZeroボードでもDVI信号は出せるがPIO+OverClockによる荒業ソリューションである(RP2040アーキを前提としたソリューション)。せっかくのHSTXを活かせていない。Adafruit社のHDMI端子付きボード(Feather RP2350)*2を買おうかと思ったけど、DVI信号を出力するには、メイン基板にフラットケーブルでHDMI基板を接続する必要がある。フラットケーブルが不安だしちょっと大げさな感じがする*3
取り組み:WareshareのRP2350 PiZeroを再利用する。HDMIブレークアウトボードを使って、HSTXにつながっているGPIOとHDMIを接続する。これにより少しの追加パーツでHSTXからDVI信号が出力可能になる。
結果:工夫なしに640x480を表示したいので、フレームバッファ用にPSRAM追加した。結果、RAMサイズ8MBにはなった。PSRAMを見えるようにするため、Adafruit Metro用のCircuitPythonをインストールした。次は、HDMIブレークアウトボードを買って、ボードに接続、DVI出力に対応したCircuitPythonでサンプルコードを書いて信号出力してみる。
詳細:
PSRAMが後付けできるRP2350 PiZero

追加のPSRAMのためのパターンは用意されているのでここにPSRAMをはんだ付けする

今回追加した8MBのPSRAM(Adafruiが販売する、Generic 64 Mbit Serial Pseudo SRAM - PSRAM - 3.3V 133 MHz)

なぜ品番が削られている。かすかにEspressif社のマークが見えるが。
シルク印刷とICのドットマーク(1番ピン)を確認、カプトンテープで仮止めしてからはんだ付けする*4。1番ピンだけハンダ付けして、微調整しながら対角の5番ピンをハンダづけする。片方のピンだけ溶かすと大きくずれることなく微調整しやすい。

ハンダ付けが終わったところ。ピンのピッチが広い方なので楽と言えば楽だが。。他のパーツも乗っていて混みあっている。

電源を入れてMicroPython側からRAM領域がどう見えるのかを確認する。

Waveshareがリリースしているファームの場合、PSRAMを貼り付けただけで認識されて、メモリは8MBまで拡張された。

MicroPython v1.29.0-preview.349.gaf38ee165f.dirty on 2026-06-09; Waveshare RP2350B Board with RP2350
>>> import gc
>>> gc.mem_free()
8680896
>>> gc.mem_free()/1024
8477.219
>>> gc.mem_free()/1024/1024
8.278336

MicroPythonの公式サイトで配布されているAdafruit Feather用ファームを焼いてみた。PSRAMは認識されていない。ハード構成が違うから?

MicroPython v1.29.0-preview.467.g964803ab74 on 2026-07-03; Adafruit Feather RP2350 with RP2350
Type "help()" for more information.
>>> import gc
>>> gc.mem_free()
473408
>>> gc.mem_free()/1024
462.09376

Feather用のCircuitPythonを入れてみる。やはりPSRAMは認識されず。

Adafruit CircuitPython 10.2.1 on 2026-05-13; Adafruit Feather RP2350 with rp2350a
>>> import gc
>>> gc.mem_free()
433008
>>> gc.mem_free()/1024
422.6407

Waveshare用にもポーティングされており、これを試してみる。認識されず。

Adafruit CircuitPython 10.2.1 on 2026-05-13; Waveshare RP2350-Plus with rp2350
>>> import gc
>>> gc.mem_free()
433280

AIに相談すると、PSRAMを認識するには、ソースで定義されたCSピンとボード上のPSRAM用CSピンが合っている必要があるとの回答。だから、回路図を見てどのピンがCSか、そのCSとCircuitPythonのソースの定義が合っているのかを確認する必要がある。
Waveshareの場合は、PSRAMのCSはGPIO47がPSRAMのCSに割り当てられている。

ちなみに、、AdafruitのFeather RP2350用ソースでは、GPIO8が割り当たっていた。普通に使ってしまいそうな若い番号なのだが。。

#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO8)

https://github.com/adafruit/circuitpython/blob/main/ports/raspberrypi/boards/adafruit_feather_rp2350/mpconfigboard.h
回路図を見ると、確かにGPIO8であった

https://learn.adafruit.com/assets/132211

各社ボード向けポーティングにおいて、PSRAM_CHIP_SELECTがどう設定されているかを調べるため、GitHub上のCircuitPythonリポジトリを落としてgrepした。基本的にGPIO8が使われているようだが、adafruitのmetro rp2350というボードと、PimoroniのPGA2350というボードはPSRAMのCSがGPIO47であった。

$ grep -i  PSRAM_CHIP_SELECT  *2350*/mpconfigboard.h
adafruit_feather_rp2350/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO8)
adafruit_feather_rp2350_adalogger/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO8)
adafruit_metro_rp2350/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO47)
challenger_rp2350_bconnect/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO0)
challenger_rp2350_wifi6_ble5/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO0)
pimoroni_badger2350/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO8)
pimoroni_pga2350/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO47)
sparkfun_pro_micro_rp2350/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO19)
sparkfun_thing_plus_rp2350/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO8)
weact_studio_rp2350b_core/mpconfigboard.h:#define CIRCUITPY_PSRAM_CHIP_SELECT (&pin_GPIO0)

試しに、AdafruitのMetro RP2350用ファームを入れてみる。Metro用ファームを使うことでPSRAMが認識された。

Adafruit CircuitPython 10.2.1 on 2026-05-13; Adafruit Metro RP2350 with rp2350b
>>> import gc
>>> gc.mem_free()
8264896
>>> gc.mem_free()/1024/1024
7.881806

多分、picodviを使うことで、 HSTXからDVI信号が出ると思われる。当面は、Metroのふりして動かすか。。

>>> help('modules')
__future__        builtins          math              terminalio
__main__          busdisplay        memorymap         tilepalettemapper
_asyncio          busio             microcontroller   time
_bleio            codeop            micropython       touchio
_pixelmap         collections       msgpack           traceback
adafruit_bus_device                 countio           neopixel_write    ulab
adafruit_bus_device.i2c_device      digitalio         nvm               ulab.numpy
adafruit_bus_device.spi_device      displayio         onewireio         ulab.numpy.fft
adafruit_pixelbuf epaperdisplay     os                ulab.numpy.linalg
aesio             errno             paralleldisplaybus                  ulab.scipy
analogbufio       floppyio          picodvi           ulab.scipy.linalg
analogio          fontio            pulseio           ulab.scipy.optimize
array             fourwire          pwmio             ulab.scipy.signal
atexit            framebufferio     qrio              ulab.scipy.special
audiobusio        gc                rainbowio         ulab.utils
audiocore         getpass           random            usb
audiodelays       gifio             re                usb.core
audiofilters      hashlib           rgbmatrix         usb.util
audiofreeverb     i2cdisplaybus     rotaryio          usb_cdc
audiomixer        i2cioexpander     rp2pio            usb_hid
audiomp3          i2ctarget         rtc               usb_host
audiopwmio        imagecapture      sdcardio          usb_midi
audiospeed        io                select            usb_video
binascii          jpegio            sharpdisplay      vectorio
bitbangio         json              storage           warnings
bitmapfilter      keypad            struct            watchdog
bitmaptools       keypad_demux      supervisor        zlib
bitops            locale            synthio
board             lvfontio          sys
Plus any modules on the filesystem
>>> import picodvi
>>> dir(picodvi)
['__class__', '__name__', 'Framebuffer', '__dict__']

普段はMicroPython を使っていますが、CircuitPythonでは、新機能の充実ぶりが素晴らしい。。ソースが全て公開されているのもありがたい。機能多すぎてどう使うのか分からないモジュールがてんこ盛りになっている。

■参考URL
Adafruit Feather RP2350 with HSTX Port and 8MB PSRAM : Adafruit Industries, Unique & fun DIY electronics and kits
circuitpython.org
circuitpython.org
Overview | Using DVI Video in CircuitPython | Adafruit Learning System

*1:RP2040時代に力業でDVI出力するソリューションが話題になったそうだ。自分は知らなかった

*2:Adafruit Feather RP2350 with HSTX Port and 8MB PSRAM

*3:フラットケーブルでHDMI基板を接続する方式は、HSTXを汎用高速シリアルと位置付け、いろんなボードを取り換えることで、DVI以外の用途にも適用できるようするコンセプトだと理解しました

*4:カプトンテープが古いのか粘着力低し。気休め程度の働き

RP2350を使ってDVI信号を出したい

背景:PIOを調べていて生成できるクロックの上限は75MHzと理解した*1。もっと高い周波数のシリアルを出せる方法として、HSTXというハードが搭載されるのを知った。HSTXはDVI信号を出力するためにRP2350で追加されたと知り、DVI信号を出してみたいと思った。WaveshareのHDMIコネクタのついた評価ボード(RP2350-PiZero Development Board)を買った。
アプローチ:Waveshareマイコンのデモで、DVI出力サンプルが提供されており、これを動かしてみる。最終的には、MicroPythonからDMA/HSTXレジスタを操作してDVI出力させたい
取り組み:

まずは、、DVI信号(TMDS)がどうなっているのかを理解する。仕様書を読み解かず、生成AIに丸投げなので、裏を取った方がいいけど、、とりあえず、640x480の画像を出したければ以下のようなパターンで信号を作ればよいと*2


同期用固定パターンの10bit列

画像領域は、1ピクセル RGB(8bitx3)で構成され、色ごとに8bit->10bitにTMDSエンコードをすると。10bitエンコードした状態で、クロック、B、G、Rの4つのバッファを作っておいて、4chのDMAで4つのバッファからHSTXに連続転送したら、DVI信号が出力されて絵が出るはず。
DMAとHSTXさえ動けばあとはマイコンは何もしないと思われ、MicroPythonでも制御レジスタを直接操作したらDMA/HSTXのハードを制御しつつグラフィック描画できるのでは??と期待。ただ、640 x 480 x 2byte x 4 の領域が確保できるのか?? MicroPython だとこのサイズは無理そうな気がするが。。リングバッファにするなら、アライメントも考える必要がある。

■追記
いろいろ調べるうちに理解が深まり、WaveshareのRP2350-PiZero Development BoardではHSTXからDVI信号が出せないことが分かった。そもそもピン配置が違うのであった。Waveshareの評価ボードはオーバークロックしたPIOによるDVI信号ソリューションで動かすのが前提で設計されているらしかった。以下はHDMI端子の接続情報

HSTXはGPIO12-19に出力されており、HDMI端子はこれらのピンと接続されている必要がある。
RP2350の仕様書より

SwitchScienceには、抵抗とHDMI端子だけで構成されるDVI出力用の拡張ボードが販売されているようなので、これを買って、HSTXからの出力をデジタルTVに接続したらいいのだが、、フレームバッファのメモリが足りなさすぎる。多分分かっている人は、Pixel深度を調整したり、縦横方向にデータを複製して省サイズでなんとか表示させられるのだろうけど、自分はそこまで分かっていない。だったら、、最初から外付けPSRAMのついたAdafruitの方がトラブル少ないのではとも思える。ただ、、Adafruitの基板は、本体のボードと、HDMI端子のボードは別パーツになっていてその間はフラットケーブルでつなぐ構造になっています。ちょっと大げさというか、収まり悪いというか。。一枚のボードに収まっていたら悩まずに買うのだけど。
コストを抑えつつ、DVI出力する方法として、、今回購入したWaveshareのRP2350-PiZero Development Boardに、PSRAMをハンダ付けして、メモリを増やす。ボード上のHDMIは使わず、SwitchScienceが販売している拡張ボードを使ってDIV出力すると。この方法だと、HDMIボード(900円ぐらい)だけの追加で済む。

■参考資料、URL
DVIの仕様書
Digital Visual Interface DVI Revision 1.0

https://www.waveshare.com/wiki/RP2350-PiZero
サンプルコードはGithub ではなく、ZIPファイルをWikiページから直接DLするようになっている・・・
https://files.waveshare.com/wiki/RP2350-PiZero/RP2350-PiZero.zip

PSRAMを追加する解説動画
youtu.be

MicroPython RP2350 HSTX Demos · GitHub

*1:システムクロックは150MHzだけどset命令, またはsidesetでCLK出すとして、L/Hの2命令必要で、システムクロックの1/2になるから

*2:本当にフロントポーチ、バックポーチが今もあるのか不明。アナログ時代は必須だったけど、デジタル時代では減らす方に変わっているらしい

メモ:cmd.extしか使えないWindows環境でハッシュ値を計算

諸般の事情でcmd.exeしか使えない(power shellも不可)。この状況でハッシュ値(sha256 base64形式)を計算する方法
遠回りでしかないが、、そんな状況もあるということで。。

# certutilを使ってSHA256を生成
# 生成されるのは、SHA256をHEXダンプした形式(base64ではなくHEXダンプ)
$ certutil -hashfile test.txt  SHA256  >  test_hash.txt  

# file: test_hash.txt
# SHA256 ハッシュ (対象 test.txt):
# 259f34df2acdfdbe23fb8963e8f6e62dcefdb0cabe627d42064246118bb00e1f
# CertUtil: -hashfile コマンドは正常に完了しました。

#
#test_hash.txt には前後余計な説明があるのでこれを取り除く
#

# file: test_hash_stip.txt
# 259f34df2acdfdbe23fb8963e8f6e62dcefdb0cabe627d42064246118bb00e1f
#

# 上記はbase64形式ではなくHEXダンプ。。要求仕様に合わない
# base64形式にするため、HEXダンプ形式をバイナリに戻す
$ certutil -decodehex test_hash_strip.txt  test_hash.bin

# certutil encodeを使ってバイナリ形式(のハッシュ値)をBASE64形式に変換
$ certutil -encode  test_hash.bin   test_hash.txt

# file: test_hash.txt
# -----BEGIN CERTIFICATE-----
# JZ803yrN/b4j+4lj6PbmLc79sMq+Yn1CBkJGEYuwDh8=
# -----END CERTIFICATE-----

# test_hash.txtには余計な説明があるのでこれを取り除く

# file: test_hash.txt
# JZ803yrN/b4j+4lj6PbmLc79sMq+Yn1CBkJGEYuwDh8=

# base64形式のハッシュ値ができる

opensshが使えたら以下

$ openssl dgst -sha256 -binary test.txt | openssl enc -base64
JZ803yrN/b4j+4lj6PbmLc79sMq+Yn1CBkJGEYuwDh8=

cmd.exe環境のcertutilコマンドをこねくりまわしたbase64形式のSHA256ハッシュ値と、linux/WSL環境で作ったハッシュ値は一致する

RP2040/RP2350 PIO において仕様が変わった点

背景:RP2350になってPIOの一部仕様が変わっている。RP2350ではPIOが3つに増えたり、IRQ(4)-IRQ(7)がマイコンに通知可能になったり、PIOを超えて隣のPIOにIRQを送ったりできる。
取り組み:仕様変更点をMicroPythonから確認する(PIO ASMの仕様制限から確認できない点もある)
結論:

  • IRQ(4)~IRQ(7)もマイコン側に通知できるようになったと理解したが、MicroPythonでは対応しておらず、IRQ(4)を発生させても割り込みハンドラは呼び出されない。
  • 3つの目のPIOに対応済み、SM:11を指定するとエラーなく動作(本当にSM_11が動いているのか?までは未確認)
  • PIOを超えて隣のPIOにIRQを送るオプションに関して、PIO Assemblerの仕様では未対応

詳細:

RP2350ではIRQ4~IRQ7もマイコンに通知可能になったが、MicroPythonでも同じ動作になるか?

RP2350のDatasheetより

MicroPythonのIRQ仕様書

RP2350のPIO ASM IRQ命令仕様書

アセンブルすると、0xc004が生成される。indexのフィールドだけ使ってIRQ(4)を表現

>>> import rp2
>>> hex(rp2.asm_pio_encode('irq(4)',0))
'0xc004'

以下のコードではMicroPythonの割込みハンドラ(pio_intr_handler)が呼び出されない。多分、割り込みハンドラ用レジスタに登録していないのでは?と思われる(ソース読んでないので想像)

import time
import micropython
import machine
import rp2

GP_IN_PIN = 0
STATE_MACHINE_ID = 0

sm0 = None


def pio_intr_handler(intr_sm):
    micropython.schedule(pio_handler_scheduled, intr_sm)

def pio_handler_scheduled(intr_sm):
    print('IRQ from SM:', intr_sm)
    if intr_sm == sm0:
        print('--------------------')
        print('IRQ_SM0 is set')
    else:
        print('IRQ_SM0 is not set')    

@rp2.asm_pio()            
def only_irq():
    #irq(0)        # set IRQ(0) flag   ... OK
    irq(4)        # set IRQ(4) flag   ... OK??

def main():
    global sm0

    # to enable 2KHz to StateMachine, set systemclock to 125MHz
    machine.freq(125_000_000)
    sm0 = rp2.StateMachine(STATE_MACHINE_ID, only_irq, freq=2000)
    sm0.irq(handler=pio_intr_handler)
    sm0.active(1)
    time.sleep(10)
    sm0.active(0)

main()

MicroPython側では、IRQ0-3までしか割込みハンドラの対応をしてくれなさそうだ。抜粋したコードは以下。IRQ0-IRQ3までしか対応してないように思える。もし修正するなら、ここをIRQ4-IRQ7までの分を足して、新しい割り込みハンドラ(pio0_irq1)を作り、割り込みベクタテーブルに登録する必要があると思われる。(このままでは不可と分かったので目的は達成したとする(さすがにソースコードは改修しない MergeRequest 出したら喜ばれるのか??多分そうはならないだろう))

https://github.com/micropython/micropython/blob/master/ports/rp2/rp2_pio.c

PIOが3系統になって、SM(8)-SM(11)は使えるか?

以下のLチカプログラムにおいて、StateMachineを11番で指定、rp2.StateMachine()を実行、正常に動作した(LEDが点滅)。だから、、SM8-SM11は指定可能。

#
# test program blink with wait loop
#

import machine
from machine import Pin
import rp2

STATE_MACHINE_ID = 11

SET_BASE_PIN=1
machine.freq(125_000_000)  # set 125MHz to same RP2040

@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink_w_wait():
    set(pins, 1)             # PIN1 <- 1
    mov(x,y)                 # x <- y (0x0300)
    label('wait_loop_0')
    jmp(x_dec,'wait_loop_0') # while x--
    set(pins, 0)             # PIN1 <- 0
    mov(x,y)                 # x <- y (0x0300)
    label('wait_loop_1')
    jmp(x_dec,'wait_loop_1') # while x--


#
# get value from  scratch register [x] or [y] 
#
def get_from_scratch_reg(sm, x_or_y):
    sm.exec(f"mov(isr, {x_or_y})")
    sm.exec("push()")
    return sm.get()

#
#  set value to  scratch register [x] or [y] 
#
def set_to_scratch_reg(sm, x_or_y, val):
    sm.put(val)
    sm.exec("pull()")
    sm.exec(f"mov({x_or_y}, osr)")


sm = rp2.StateMachine(STATE_MACHINE_ID, blink_w_wait, freq=2_000, set_base=Pin(SET_BASE_PIN))
set_to_scratch_reg(sm, 'y', 0x0300)

#
# start StateMachine
#
sm.active(1)

■追記
RP2340 / MicroPython v1.28.0 on 2026-04-06 において、PIO(0)のState machine(1)において、IRQ(0)を発行しても割込みが発生しない。なぜ?
IRQ(1)にすると割込みが発生する。または、 irq(rel(0))でもOK。ステートマシンごとに使えるIRQが決まっている?? ソースから引用したstate_machine_objにおいて、SM番号と想定IRQを一意に決めてしまっている??

RP2350からDVI出力してみようと思いWaveshare社の評価ボード発注

背景:PIOを調べていて、最高クロックは75MHzと理解した。定格のクロックでPIOによるDVI出力は速度上は不可能。RP2350にはHSTXという高速シリアルIFが搭載されていて、これを使うとDVI出力が可能と知った
アプローチ:DVI(HDMI?)のコネクタが実装されているWaveshare社の評価ボードを買って、モニタ出力してみる
詳細:
MicroPython + PIOでサンプルコードを考えていた。PIOを使ってクロックLHLHLHL....LHを出力する場合、クロック信号を上げ下げするのに最低2命令必要(L->Hで1命令、H->Lで1命令)。だから、PIOが出力できる最高クロックは、システムクロック(150MHz)の1/2となる。オーバークロックしない限り、PIOで生成できるクロックは最高で75MHzまで。PIOの応用例としてDVI出力が紹介されていてあまり気にしていなかったのだけど、RP2040ではオーバークロックして対応していたらしい。一方、RP2350ではHSTXという高速シリアル変換モジュールが搭載されている。HSTXにシリアル変換させることで、マイコンコアは通常クロックのままで、DVI出力が出せる*1

一番素性の良いボードは、Adafruit Feather RP2350(HSTXポート/PSRAM 8MB搭載)と思うけど、かなり高い。一方、Waveshare社の評価ボード(RP2350-PiZero)はPSRAM未搭載だけど、ボードにDVIコネクタ(HDMIコネクタ?)が実装されているので拡張ボードやフレキケーブル不要で、ボード一枚で足りる。しかも安い。なお、メモリサイズが制約となって、640x480程度のドット絵しか出せないらしいが、RP2350でモニタ出力できたらいろいろ面白いかもと思って、Waveshare社の評価ボードを発注した。スイッチサイエンス等のパーツショップでは売り切れになっているので、Waveshare社に直接発注した。安い海外郵便を指定したので、3週間ぐらいかかりそう。

手間のかかることせずとも、SPI接続の液晶パネルは安く購入できて*2、320x240程度のグラフィック表示はできるので、なぜ自分はDVI(HDMI)出力に取り組むのか?というのは疑問なのだが、昔懐かしいドット絵がデジタルTVに出せるというノスタルジーと、作ってみたら便利さが分かるかもと思い、とりあえず画像が出る所までは進める予定。

表示できるのを確認したら、未実装のPSRAMも手はんだで追加したい。チップ単体は400円ぐらいらしい。マルツ経由でDigiKeyからAdafruit製のPSRAMが買えそうだ*3
→ 4つ買ってしまった。


ボードが届いてブートしてみた。初期ファームは焼かれていないように思える(USB/Serialは接続できるが無応答)。標準のRP2350用MicroPythonファームを焼いてみた。まぁこれは動く

MicroPython v1.28.0 on 2026-04-06; Raspberry Pi Pico2 with RP2350
Type "help()" for more information.
>>> help('modules')
__main__          asyncio/lock      gc                random
_asyncio          asyncio/stream    hashlib           re
_boot             binascii          heapq             rp2
_boot_fat         builtins          io                select
_onewire          cmath             json              struct
_rp2              collections       machine           sys
_thread           cryptolib         math              time
array             deflate           micropython       uasyncio
asyncio/__init__  dht               neopixel          uctypes
asyncio/core      ds18x20           onewire           vfs
asyncio/event     errno             os
asyncio/funcs     framebuf          platform

Wafeshare用にポーティングされているファームがあるようだったのでこれを焼いてみた。ブートメッセージはRP2350B/ Waveshare等と表示される。使えるモジュールは特に変わっていない印象。

MicroPython v1.29.0-preview.349.gaf38ee165f.dirty on 2026-06-09; Waveshare RP2350B Board with RP2350
Type "help()" for more information.
>>> help('modules')
__main__          asyncio/lock      gc                random
_asyncio          asyncio/stream    hashlib           re
_boot             binascii          heapq             rp2
_boot_fat         builtins          io                select
_onewire          cmath             json              struct
_rp2              collections       machine           sys
_thread           cryptolib         math              time
array             deflate           micropython       uasyncio
asyncio/__init__  dht               neopixel          uctypes
asyncio/core      ds18x20           onewire           vfs
asyncio/event     errno             os
asyncio/funcs     framebuf          platform
Plus any modules on the filesystem

■参考URL

Waveshare社サポートページ
https://www.waveshare.com/wiki/RP2350-PiZero
RP2350-PiZeroの回路図
https://files.waveshare.com/wiki/RP2350-PiZero/RP2350-PiZero.pdf

Generic 64 Mbit Serial Pseudo SRAM - PSRAM - 3.3V 133 MHz : Adafruit Industries, Unique & fun DIY electronics and kits
www.marutsu.co.jp

GitHub - Wren6991/PicoDVI: Bitbanged DVI on the RP2040 Microcontroller · GitHub

*1:不勉強のため、DVI信号とHDMI信号の違いがちょっと分からず

*2:といいつつ、安い液晶パネルは壊れやすい。半年ぐらい置いとくと動作がおかしくなったり

*3:Adafruitにも在庫ある。海外から買うと送料が高い

udemyの[Electric Music Production with Ableton Live [2025]]を買った・・・何本買うのか・自分

背景:DAWを使ってほっこりできるような曲を作りたい。Youtubeの解説は断片的でどう体系立って学んでいいのか分からず、結局有料のオンライン動画を何本か買ってきた
課題:Analog等のシンセだけに絞った有料のオンライン動画があり、それで勉強して、ひたすらキックとかBASSの音を作ってきた。大体いい感じと思えたので、キックとBASSを使って低音パートを作ってみようとした。単体だったらいいなと思えたキックの音がBASSと合体させると全く合わない(使えない)ことが分かった。だから、本当に必要な音とは何なのか?、マスタリングを経て一曲仕上げる工程を経験しないと判断できないと思った。やはりAbletonLiveの入門コースで、レイヤ作り、MIXING、MASTERINGまでを最低学んでからでないと、音作りすべきと分かった*1。だが、、教育用に割り切ったあまりにそっけない曲だと、講師のDAW操作に倣って自分でDAWを操作する段階で萎える(ワクワクしない曲を作り続ける気になれない)。それに、、はいここで配布したプリセットで音を入れましょうと言われると、途中のプロセスをすっ飛ばしており、作った気にならない
取り組み:UdemyのAbletonLive2025ではプリセットをはめるだけではなく、手を動かして曲を仕上げつつ、いろいろ深い所まで説明してもらえそうな期待感。講師の方の見識も得られる*2。このコースは続けられそうな気がする。作り上げる曲がどんなのか?がちょっと分からないのが不安だが。とにかく、曲を作って仕上げる後段の処理を学んで一曲作ってから、素材の音作りに戻る*3

講師の言葉

(意訳:回り道かもしれませんがプリセットは使わず、皆さんで作ります。)

■補足(ご参考)
Udemyの海外講師は英語で話しますが、scriptをOnにして、Chrome等の翻訳機能を使うと日本語スクリプトに翻訳できます。英語がよく分からなくても、字幕付きのような状態にできます。自分は英語ボロカスですが、、日本語訳を見ながら講義を聞くと、そんなこと言ってるのねと言う感じにはなります。

パーカッションの部で使われているパターン

■ご参考URL
Udemyのコース
www.udemy.com
時間帯によって値引きしている。自分が注文した時は値引きされていて¥1500。この値段なら十分安い。

■OperatorをKickとして使う説明動画
youtu.be
www.youtube.com
youtu.be

■Operator全般
youtu.be
youtu.be
youtu.be
www.youtube.com

*1: 生成AIに相談すると、テクノは、後段のフィルタによる仕上げが最重要とか言ってくるし

*2:講師の考えを述べながらレクチャーを進めるやり方に否定的な評価(★印)を付ける人もいます。。確かにAbletonLiveの操作だけを早く知りたい人には回りくどいのかも。講師からも、ショートカットで行きたい人にはこのコースは向かないと言ってる

*3:我流であれこれと手を出して迷走状態に陥っていたので、もう一度最初に戻って学びなおす意味もある