作ったり遊んだり

趣味の記録。電子工作やキューブなど。

(進捗)アナログシンセ、BareMetalラズパイなど

今日の進捗

  • MP3プレイヤー完成
  • ステップシーケンサのトライ
  • アナログシンセ実験完了
  • BareMetalラズパイ UART実装
 

MP3プレイヤー完成

 午前中に投稿したエントリの通り。お手軽簡単な割に実用性が高くて、良き。
 

ステップシーケンサの試作

 LEDとSW各12個を並べて、ステップシーケンサを作った。一定時間毎にステップが進み、SWを押してステップのON/OFFをして、ステップがONのときにMIDIノートオンが送信される、という単純なもの。AVRのタイマーを使ってマトリックススキャンとLEDの輝度調整(ON時間の調整)をする練習。
 
 写真等は無いですが、Githubにコードを上げています。今日作ったのはこのディレクトリの内容。
  
 ちゃんと動作したので、この機能の活用を考えたい。でも正直なところあまり画期的なアイデアは無いので、まず愚直なステップシーケンサに仕上げようと思う。
 
 

アナログシンセの実験完了

 LM358(単電源動作するOPAMP)が届いたので、先日の実験を再開。結果的に、LM358を使えば全ての回路が正しく動作した。回路は以下にあるVCA、VCO、矩形波三角波のオシレータの計4つ。
  
 随分昔にVCOを作った時は、すごく難しかった覚えあったので*1、こんなに汎用的な材料で簡単に安定動作するなんてビックリした。下の写真はVCOの波形。三角波矩形波もすごくきれい。

 
 ちなみに、動作原理についてはまだよく分かっていません。どなたか分かる方がいらっしゃれば、ぜひ理解のヒントなどを頂けると嬉しいです。
 
 今回ブレッドボードではなくPWBを起こして実験基板を作ってしまったので、部品をとっかえひっかえしながら計測ができなかった。回路原理を深く考える時は、ブレッドボードに組むのが良さそう*2。また今度時間のある時にやってみよう。
 
 

BareMetalラズパイ UART実装

 先日Lチカが終わったラズパイ、今日はUART(シリアル通信)を実装した。これも環境構築と同じで、本の通りにやっても成功せず苦労した。具体的には、
  • ラズパイは3.3V動作なので3.3VのシリアルI/Fが必要
  • 送信値と受信値が合わない
という問題に遭遇。前者は手持ちのレベル変換モジュールを使って解決。後者はESP8266で同じ動作をするハードを作ってオシロで波形を比較することで原因を発見。…と一言で書くと大したことは無いけど、ま〜苦労した。いくつか「おまえが原因か!」と得心したポイントがあったけど、一例を挙げると以下2枚の写真の違いとか(答えは脚注に書いておきます*3)。
 

f:id:moppii_o:20200711211250j:plain 

 
 結論として、Clock Managerの周波数が3MHzではないらしいことが根本的な問題だった。分かった後で本をよく読むと「elinuxのサイトによれば」と微妙な表現で書かれているし、自分が使っているボードの素性も微妙*4なので、仕方ない。なお同じ道を歩く人のため超具体的に書くと、僕のボードでは*UART0_IBRDを26に、*UART0_FBRDを8にすると、うまく通信できました(ボーレートが115200付近になりました)。
 

f:id:moppii_o:20200711211439p:plain

 
 UARTが使えれば、MIDIが使えるようになる。楽器には欠かせない要素なので、解決できてよかった。
 
 

蛇足(どうでもいい雑談)

 Twitterアカウントが一向に凍結解除されない。もう一回FAX送ってみようかな。でも中国在住だからIPアドレスとか不安定だし*5、また凍結されるんだろうか。うーん。
 

*1:約10年前に出た某シンセ自作本のVCOは温度補償抵抗が必要で大変だった

*2:今回は「絶対動作させること」を目標にしたのでPWBを作ってしまった

*3:下写真の波形の方が少し速い。ボーレートが合ってないから正しい値を受信できない。

*4:中国のタオバオで35RMBで買った身元不明品。

*5:VPNを使うので…。