マイコン工作実験日記

Microcontroller を用いての工作、実験記録

Serendipitous Circles

2017-07-23 20:16:24 | Weblog
当初はSTM32F446のUVCがまっとうに動くよになったら、DCMIを使ってカメラをつなげてUSBカメラを作ってみようと企んでいたのですが、High speedが安定動作せずに作業が停滞している間に、カメラを繋げようという意欲が萎えてしまいました。

文字表示はできたので、今度は簡単にグラフィックス表示をしてみようと考えて、512x512ドットのモノクロ表示のグラッフィック表示機能を追加してみました。このサイズなら 512/8*512 = 32KB のRAMをフレームバッファとして使うことで表示が行えます。モノクロ表示で、それなりに楽しめる題材を考えていたら、その昔 BYTEマガジンに掲載されていたプログラムを8ビットマイコンで動かして楽しんでいたことを思い出しました。

Serendipitous Circlesという記事なのですが、今でもアーカイブにて読みことができます。素晴らしい!! 楕円上の座標を導出する差分方程式をベースとした簡単なアルゴリズムを使っているのですが、始点の座標を変えたり、わざと演算オーバフローを発生させることで描画する座標をラップさせたりすることで、簡単な演算で思いもよらない描画結果を楽しめます。基本的な処理は
int16_t xpos, xpos;

xpos = initial_x;
ypos = initial_y;

while (1) {
  plot(xpos, ypos);
  xpos = xpos - ypos /2;
  ypos = ypos + xpos /2;
}

と、するだけです。画面の大きさは512ドットしかありませんので、上位の9ビットの値を使ってプロットしてやります。例えば、(0x6000, 0)を初期値として上記の処理を繰り返すと、画面中央を原点とした次のような楕円を描くことができます。

同じ演算結果を、今度は画面の左下を原点として表示し、はみ出した部分は画面上でラップして表示してやると、次のように楕円を4隅に分割して描くことができます。

また始点座標を大きくとってやると、16ビット演算のオーバフローが頻繁に発生し、その結果が画面上でのラップ表示として反映され、予想もしないような結果を得ることができます。

その他詳しくは 元記事を参照していただくこととして、デモ動画を作成したので、こちらをご覧ください。



  • このデモではプロットする際にXORを使っています。そのため、演算結果の座標が以前プロットした点と同じ座標になった場合には、その点が点滅することになります。画像がチラチラしたり、時には円が回っているように見えたりすることもあって面白いです。画像の大半が消えかけそうになることもあります。
  • 動画はQuick Cameraというアプリでカメラからの画像を表示している様子をキャプチャしたものです。最初はMacbookの FaceTimeカメラでボードとUSB PHYを撮影していますが、途中でカメラ入力をこのボードで動いているUVCカメラに切り替えることでデモ画像に切り替わっています。
  • いくつかのパターンを順番に表示していますが、全て中心となる演算は同一です。(X, Y)の初期値、原点の取り方、演算結果の表示ビット位置を変化させることで、表示パターンが変化しています。
  • 演算で使用する係数を変えてやれば、結果の画像にも変化が生じます。BYTE MagazineのApril 1978に、いくつかの例が紹介されている記事が掲載されています。

コメント
この記事をはてなブックマークに追加

High speed を確かめる - その5

2017-07-21 21:49:26 | Weblog
どうも動きが不安定で頓挫状態だったUSB High speedを確かめる実験ですが、ちょっとしたことがきっかけで動きが安定してきました。

コネクタや配線の接触不良を疑って、コテを当ててみたり、ハンダを盛り直してみたりしていたのですが、全く改善は見られませんでした。コネクタ部分に指を触れると画面表示ができるようになることに気がついたので、調べて見たらPHYのRESET端子に指を触れた状態で動かし始めると、画面表示ができることが判明。そこで、試しにPHYのRESET端子に 0.01uFをつけて見たら安定して動くようになりました。

使用しているPHYであるUSB3300のRESET端子は正論理であり、USBの初期化前に一度だけパルスを加えているだけです。これまでカラーバー表示では問題なく表示できており、文字表示をしようとするとうまく動かなかったことを考えると、初期化時というよりは動き始めてからRESETが誤って発生していたのではないだろうかと想像しています。どうしてこのような問題が発生しているのかわかりませんが、ひとまずコンデンサを追加しただけで、文字表示は安定して動くようになりました。

これまで画面表示にはMacに標準でインストールされているPhoto Boothを使っていましたが、文字表示がミラー表示になってしまう上に、よく見るとVGA画面の上下が30ドット程度表示されないという問題があったので、代わりのアプリとして Quick Cameraという単純にUSBカメラの画像を表示するだけのアプリを使うことにしました。

コメント
この記事をはてなブックマークに追加

安さの理由

2017-07-17 11:27:47 | Weblog
秋月でPine A64に続いてNano Pi NEOの取り扱いも始まったようです。この安さですから、入手性が良くなったのは嬉しいニュースです。これらの製品にもWifi+Bluetoothのモジュールが用意されていたり、あらかじめ搭載したモデルが用意されていたりしますが、技適の関係で販売されないのがちょっと残念ですが。

それにしても、いくら中国製のSoCが安いからといって、 10ドルや20ドル程度の値段でこんなボードが作れたとしても儲かるわけがないとは誰もが不思議に思うところです。そうしたところが、 こんな記事を見つけました。この記事は Nano PiではなくてOrange Pi に関するものですが、内状は同じじゃないでしょうか。なんと販売価格はBOMコストでしかないんのですね。その他の経費と利益は補助金で得ているというビジネスモデルなんですね。驚き。
コメント
この記事をはてなブックマークに追加

High Speedを確かめる - その4

2017-06-11 13:21:40 | Weblog
USB High speedへの挑戦シリーズの4回目。アイソクロナス転送を使ってのUVCでカラーバーの表示は一応できたので、Full speedの時と同じように文字表示の実験をしてみました。今回はVGA解像度(640x480)を使っているので、YUV形式でのデータ量は1フレームあたり 640*480*2 = 600KB必要になります。STM32F446にはRAMは128KBしかありませんので、1画面分のフレームバッファーを用意することはできません。そこでRAM内には画面に表示される文字のコードと色情報だけを保持しておき、UVCのデータを送信する際に必要なラスタのビットイメージを生成してやることにしました。

処理を簡単にするために、1マイクロフレーム(125us)で1ラスタ送ることにすれば、毎秒 8000/480 = 16.66フレーム送れることになります。1ラスタには 640*2 = 1280バイトのデータが必要なので、1マイクロフレームで2トランザクションパケットを送信すればいいことになります。試しに、これをやってみたのでうが、ちっともMacの画面に画像が表示されません。試行錯誤しながらUSB PHYをつなげているコネクタのあたりをいじっていたら画面に表示ができました。




文字の表示が鏡文字になってしまっていますが、これは使用しているアプリ Photo Boothがもともと自撮り用のアプリになっているためです。それはいいとしても、なぜか意図したのとは表示されている色が違っています。コネクタをグリグリしてみても、色が代わることはありません。何度試してみても、コネクタ周りをいじらないとうまく表示しないし、色も違っています。テストバーの表示だけだったら、こんなことはなかったのですが。。。

どうも送信が安定していないようなので、1マイクロフレームで送信するパケットをひとつだけに変更してみました。それでもなかなかうまく表示ができません。やはり、コネクタをいじっていると何かの拍子に突然表示が現れます。

今度は意図した色で表示ができているようです。撮影ボタンを押して画面の表示をキャプチャすれば、文字の表示方向が正しくなった画像を取得できました。



どうにか文字は表示できたものの、全然動作が安定していません。コネクタの接触の問題なのかもしれませんが、カラーバーの表示であればいつも安定して表示できます。送信するデータの内容によってデータ化けがが生じてしまっているのではないでしょうか。PHYをつなぐワイヤ上にノイズが載っており、その影響で正しくデータが送られていないのではないかと想像しています。ユニバーサル基板でUSBハイスピードを実験するのは厳しいかな?


コメント
この記事をはてなブックマークに追加

J-Link EDU-mini

2017-06-09 15:18:41 | Weblog
今日見たらSEGGERのホームページが模様替えしていました。

このSEGGERが、新製品としてJ-Link EDU Miniを発表しています。機能的にはEDUと同じですが、小さくてケース無しです。お値段 $18と EDUの 1/3になったけど、ダウンロード速度が 1/5に制限されてしまっているのが、ちょっと残念なところ。JTAGも作るよりも買った方が安いものになりましたね。

使っているのはNXPのMK22あたりでしょうか。コネクタはハーフピッチの10ピンのようですが、製品付属のケーブルは20ピンらしい。なんでやねん。
コメント
この記事をはてなブックマークに追加