色々と報告したいことが積もっているので、雑記ということで記事にさせていただきます。
STM32とかのコード公開について
決して飽きたわけではありませんよ。近いうちに[要出典][いつ?]コードを出していく予定です。というか、説明面倒くさ...おっと誰か来たようだ
実際のところですが、色々とマイコン沼にハマりすぎているため出来ていないというのが実情です。すみませんね。「遅ぇよ!」って言う人はコメントください。多分やる気になります。
サークル内ゼミでのシェル芸特論が内部でも外部でもやや好評だった
先の記事でこの内容は上げたのですが、サークルの先輩からも「よかった」「おもしろかった」と好評でして(こう文字にすると小並感溢れますね)、ガチ目のネタ特論という立ち位置で上手く発表できたと思います。発表フォーマットとかはさておいて。
その後ブログにアップしたんですけど、まぁまぁ反響がありました。上田さんにツイートをRTされたり、シェル芸人の方から「とても素敵」とお褒めの言葉をいただくなど、個人的にテンション爆上げでした。この特論は第一に自己満足、第二にこういう世界があるんだよという紹介を目的としていましたので、目的は果たせたかなぁと。
無闇矢鱈と弄ったマイコン - Parallax Propeller, PICAXE
僕のようなマイコン狂にとって秋月のサイトは悪魔です。見れば見るほどそちらに興味が行き、気づいたら財布の黄熱病患者が減っているという由々しき事態ですよ全く。
んで、今回いじった(実質触れただけ)なのが見出しにもあるこの2つです。
Propeller は他のマイコンとは異彩を放つ言わば変態マイコンで、どこが変態かというとなんと8コアのコアが内蔵されているという、まあある意味オバケマイコンですね。値段は720円。コア数考えるとめちゃ安いぞこれ。
しかもビデオ出力の機能(既にAPIとして実装されている??)もあり、ROMの中にはフォントが最初から埋め込まれているという。どっちかって言うとビデオ志向なんですかね。Macでは Propeller IDE(Spin というアセンブラもどきの独自言語)、Simple IDE(Spin、C言語、アセンブラ対応)の2つのIDEがあって、僕の場合は何故かよりによって Propeller IDE しか書き込みに成功しませんでした。はぁ。
しかもデータシートをみると「シリアル通信にて書き込まれたユーザープログラムはRAMに読まれます」ですって!?ROMじゃないのか、と思ったら実際そうで、なんと一度リセットしたら全てがおじゃんになるという謎仕様。癖が強い。
それじゃどうするのよって感じなのですが、実は外付けでEEPROMを付けることによって、プログラム書き込み時にPC-->Propeller-->EEPROMという謎経路を伝ってプログラム書き込みが行われるらしい。そんでリセット時にPropellerがプログラムの書き込まれているEEPROMを探して、それを読み込みつつ実行、と言った風になる模様。なんか微妙だ...
ちなみに書いたコードはこれだけ。適当さが滲み出てきますねぇ。
PUB toggle
dira[5]~~
repeat
!outa[5]
waitcnt(1_000_000_ + cnt)
(このシンタックスハイライト、spin 対応してるんだ...)
続いてPICAXE。文字通りPICに何か細工をしたマイコンで、読みは繋げて「ピカックス」と言うらしいです。え?「今どきPICかよ」??そうですよねぇ。しかもこのマイコン、BASICでプログラミングできるようになっているんです。まさにオワコンxオワコンの最強コンビ(各方面から怒られそう)。
フレームワークとして組み込まれているわけなんで、時代錯誤的な高電圧を加える必要はゼロ。いい感じです。Macでは AXEpad というIDEを使って、独自のBASICで書いていきます。
ググってわかったんですが、これって最適化してくれないらしいですね。まあBASICだしこんなもんか。僕は Visual Basic .NET を行きた男なので、普通のBASICには興味ありません。だから普通にdisる感じになっているというわけですね。
実はこのマイコンにも癖があって、なんとデフォでRS-232C規格に対応していると言うところ。え?普通TTLレベルだろ!?って思いますよね。謎のおせっかいしてしまってるんですよね。時代錯誤(これも各方面から怒られそう)。レベル変換IC使っても良いんですが、如何せん面倒くさいので簡易的に 74HC04 の HEXインバータをかましています。このマイコンは Propeller よりもやる気があって、ひとまず LEDボヤァを実装した次第です。
symbol interval = 15
symbol on_time = b0
symbol off_time = b1
main:
FOR on_time = 1 TO interval
off_time = interval - on_time
high B.1
pause off_time
low B.1
pause on_time
NEXT
FOR on_time = 1 TO interval
off_time = interval - on_time
high B.1
pause on_time
low B.1
pause off_time
NEXT
GOTO main
思ったことは、どちらも癖が強い。
Atmel Sam ちゃんが扱いづらい件
WMMCの某部員が提案していた Atmel 社の ARM マイコン、Atmel Sam。当然僕は噛みつかないわけはなく、早速秋月で購入、aitendoで手頃な変換基板を買いはんだ付けしました。当然 ARM なので OpenOCD が使え、書き込みがとてもスムーズに出来ます。Atmel Studio は Mac では使えないので、arm-none-eabi-gcc を使って頑張って make しました。
進捗としてはLチカが出来たくらいです。デフォでクロックが 1MHz と遅いのでなんとか分周を解除して(多分)8MHzに出来ました。続いて48MHzに逓倍できる機能があったのでしようと思ったら...
**Brickしました。**
なんか分かりませんが、クロック設定でミスると一切反応がなくなるらしいのです。現にSWDでinit処理をしようとしても知らんぷり決めるんですよ。これで Sam ちゃんを3つダメにしてしまいました。1,500円以上の大出費。つらい。いや、そこはフェイルセーフ的にSWD反応するようにしとけよ!って思うのですが、普通こんなもんなのですか?僕自身マイコン沼にハマっていますが、弄った種類的にはそれ程ではないのでよく分かりません。STM32 弄ってクロック設定ミスっても普通に SWD 書き込み出来たけどなぁ...
というわけでミスった悪魔のコードを掲載します。危険シェル芸的な。
void sys_init(void) {
// Switch to 8MHz clock (disable prescaler)
SYSCTRL->OSC8M.bit.PRESC = 0;
SYSCTRL->OSC8M.bit.FRANGE = 1; // 6M < OSC8M freq < 8M
SYSCTRL->DFLLCTRL.bit.RUNSTDBY = 1; // disable stand-by and run clock
SYSCTRL->DFLLCTRL.bit.ENABLE = 1; // 絶対にこれをポーリングしてしてはいけないぞ
while(!SYSCTRL->PCLKSR.bit.DFLLRDY); // wait for DFLL48M ready
/* GCLK->GENCTRL.bit.SRC = 0x07; // clock = DFLL48M */
// Enable interrupts
asm volatile ("cpsie i");
}
そんで、モチベが下がったのでしばらく弄らないことにします。あと、データシートを予習してからこのマイコンは弄ったほうが良さそうなので、他の誰かが情報を出してからにしたいと思います。はい。