この前買ってきたaitendoの96*64のOLED(有機EL)を点灯させてみました。ベースボードも先日買ったAVR32のEVK1101です。でも、EVK1101をこういうのに使うのはアレかも。よーくEVK1101の回路図を見たら、空きポートが全くありませんw しょうがないので、取りあえず使いそうにないRS232CのCTSとRTSで使ってるポート(PB4,5)の0Ω抵抗を外して、コネクタ側で両方を直結するように変更。こういう用途にはSTK600を使うべきですね・・・。これでも足りないので、あとはI2CのSDAを拝借。
EVK1101に載っているのはAT32UC3B0256なんで、外部SRAM IFはないので、OLEDとの接続は必然的にSPIになります。UC3AだとSDRAMとかも繋がるメモリーインターフェイスがあるので楽ではありますが、ピン数が増えます。AVR32の場合、SPIのインターフェイスはDMAが使えるので、ちゃんと設計すればSPIでも結構早いのが作れると思いますが、今回は実験なのでお手軽設計。
このOLEDに載ってるSSD1332ではDC-DCコンバータ機能も載っているので、1つだけ使う分には外付けでDC-DCコンバータのICを付けなくても動作させることができます(Lとかの外部部品は必要)。今回は、本番で使うときには2個同時に動かすので使いませんから、外付けのDC-DCコンで供給するために使わないことにしました。
回路図はこれだけ。
まぁ、アプリケーションノートをみて書いてますのでアレですが、SSD1332のメーカーの出してるデータシートに載ってる回路とパネルメーカーの出してる回路は微妙に違います。が、端子機能を読んでみるとICメーカーの方が正しそうw しかも回路パラメータもなんか怪しい。うーん。
そんなわけで、一応、ICのデータシートに則って定数は決めてます。
パワーオンシーケンスは3.3Vが先で15Vは後です。オフは逆。そんなわけで、DC-DCコンにはFETでON-OFF機能はつける必要があります。もちろん、リセット時はオフになるように。まぁ、適当に作る分にはさほど問題ないですが、手順を考慮しておかないと、いきなりDDが死ぬときがあるので、ちゃんと作りましょう。でも、そういうことを気にする割には、DC-DCコンの出力波形見たら、200mVぐらいのリプル乗ってます。部品がありあわせなんで、ESRが低くなかったり耐圧が16Vだったりとwアレなので、ちゃんとしたコンデンサを最終段に入れないとだめですね。
制御ソフトはかなりお手軽。AVR32ではフレームワークが使えますので、取りあえずプロジェクトを作るときにテンプレートで作るモードで作って、あとで使う機能を追加していきます。そうすると、その追加機能のライブラリ関数が使えるようになります。今回は、SPI,GPIO,RTC,INTC,PMを使用。でも、普通に作るとなぜかGPIOの機能を入れるとビルドが通らないw いろいろ試行錯誤したら、プロジェクトでincludeの順位をGPIOを先にしておかないとビルドが通らないっぽい。なんじゃそりゃ?w
あとは、適当にフレームワークの関数をサンプルシーケンスにしたがって呼び出して終わり・・・のはずが、トラップ。横着してCSをずーっとLowに入れっぱなしだったんですが、これやると動きません。どうもC#/Dの切り替わりはCSも見てるようなので、CSをde-assertしてから切り替えないとまずそうです。一度でもde-assertすればちゃんと切り替わるみたい。ちなみにこのOLEDに書き込むデータはB5G6R5です。WindowsのbmpとはR,Bが逆なので注意。
そんなわけで、制御ソフトのサンプルを提示→ココ
ちょっと発色が悪いかな? アプリケーションノートに載ってるコントラストパラメータではなくて、ちゃんと調整する必要がありそうですね。
あとはEVK1101のSDカードスロットをつかえるようにしましょうか。実はこれもフレームワークにあるんですぐできる?(ぉ
あとは、先日買ったインターフェイスのARM7基板を組み立て。手持ちであったPARTNER-Jetとつなげてみましたが動きました。WinARM環境しか駄目ですが・・・。このICEってOCDのドライバがないから、あんまり汎用性は高くないのでアレですね。あと、JTAG Clockは自動設定だと駄目で、500KHzぐらいに強制設定する必要があります。あと、当たり前ですが内部フラッシュの書き換えはできないので、これはFlashMagic経由になるでしょうか。
主にドールや電子工作関連を中心にしたブログです。