公式サイトにmbedの動作クロックが書いてないような気がするので調べてみました。
mbedはNXPのLPC1768というARM Cortex-M3をCPUとして使っています(NXPのユーザーズマニュアル pdf)。
mbedの回路図(pdf)を見ると12MHzがX1に入力されています。この12MHzをPLLで逓倍してメインクロックとして使っています。
ユーザーズマニュアル(以下umと略記)のp.37にPLLの出力周波数の式が書いてあります。
(1) Fcco = (2×M×Fin)/N
FccoはPLLの出力周波数
MはPLL0CFGのMSEL0フィールド+1
NはPLL0CFGのNSEL0フィールド+1
FinはPLLCLKINの周波数(um p.27によると12MHz)
MとNを知るためにはPLL0CFGレジスタの内容を読まないといけません。umのp.32によると番地は0x400fc08cです。下位15ビットがMSEL0でビット23-16の8ビットがNSEL0です。以下のコードを使ってPLL0CFGを読み出しました。
読み出した結果は
0000000b
なのでMSEL0 = 0x000b、NSEL0 = 0x00です。つまりM=12、N=1です。上の式に代入してみると288MHz(= 2 * 12 * 12MHz / 1)がPLL0の出力周波数になります。
CPUの動作クロックはCCLKという名前です。um p.50の図10を見るとPLL0の周波数をCPU Clock Dividerで分周してcclkを作っています。分周のパラメータはCCLKCFGというレジスタで設定するようです。
um p.51にCCLKCFGの設定が載っています。アドレスは0x400fc104で下位8ビットのCCLKSELに1を足した値で分周するようです。つまり
(2) cclk = Fcco / (CCLKSEL + 1)
です。CCLKCFGを読み出してみると
00000002
でした。つまり3分周していることになります。上で求めたFccoの288MHzを(2)式に代入するとcclkは96MHz(= 288MHz / 3)ということになります。
一応、100MHzまで動作することのできるCPUですが、外部クロックが12MHzなので、可能な最高速である96MHzで動作しています。
外部クロックが12MHzなのはUSBの関係だと思います。
mbedはNXPのLPC1768というARM Cortex-M3をCPUとして使っています(NXPのユーザーズマニュアル pdf)。
mbedの回路図(pdf)を見ると12MHzがX1に入力されています。この12MHzをPLLで逓倍してメインクロックとして使っています。
ユーザーズマニュアル(以下umと略記)のp.37にPLLの出力周波数の式が書いてあります。
(1) Fcco = (2×M×Fin)/N
FccoはPLLの出力周波数
MはPLL0CFGのMSEL0フィールド+1
NはPLL0CFGのNSEL0フィールド+1
FinはPLLCLKINの周波数(um p.27によると12MHz)
MとNを知るためにはPLL0CFGレジスタの内容を読まないといけません。umのp.32によると番地は0x400fc08cです。下位15ビットがMSEL0でビット23-16の8ビットがNSEL0です。以下のコードを使ってPLL0CFGを読み出しました。
int main(){ printf("%08x", *(unsigned *)0x400fc08c); }
読み出した結果は
0000000b
なのでMSEL0 = 0x000b、NSEL0 = 0x00です。つまりM=12、N=1です。上の式に代入してみると288MHz(= 2 * 12 * 12MHz / 1)がPLL0の出力周波数になります。
CPUの動作クロックはCCLKという名前です。um p.50の図10を見るとPLL0の周波数をCPU Clock Dividerで分周してcclkを作っています。分周のパラメータはCCLKCFGというレジスタで設定するようです。
um p.51にCCLKCFGの設定が載っています。アドレスは0x400fc104で下位8ビットのCCLKSELに1を足した値で分周するようです。つまり
(2) cclk = Fcco / (CCLKSEL + 1)
です。CCLKCFGを読み出してみると
00000002
でした。つまり3分周していることになります。上で求めたFccoの288MHzを(2)式に代入するとcclkは96MHz(= 288MHz / 3)ということになります。
一応、100MHzまで動作することのできるCPUですが、外部クロックが12MHzなので、可能な最高速である96MHzで動作しています。
外部クロックが12MHzなのはUSBの関係だと思います。
mbedでaitendoのSPI液晶に出力してみました(2)の続きになります。
aitendoのAD-12864-SPIのページからダウンロードできるデータシートにはST7605のデータシートを参照しろと書かれています(p.4)。しかし、ST7605はぐぐっても見つかりません。STはSitronixという会社の製品であることを表しているらしく、Sitronixの製品ページを見ているとST7605は、どうもST7565の間違いみたいでした。ST7565じゃないかなと思った主な理由は65x132という解像度がちょうどAD-12864-SPIと一致していたからです。
データシートのp.53を見るとSerial Clock Periodは400ns(min)でした。つまりSPIの速度は2.5MHz(max)ということになります。また、リセットのタイミングも0.5usで十分のようです(p.54)。
日本語出力してみました。
フォントは美咲フォントという8x8の漢字フォントです。fontx2という形式のものを変換しました。
fontx2の形式については、hamayanさんの記事「FONTX形式ファイルの解析」を参考にさせていただきました。
mbedのプロジェクトはこちらになります。
aitendoのAD-12864-SPIのページからダウンロードできるデータシートにはST7605のデータシートを参照しろと書かれています(p.4)。しかし、ST7605はぐぐっても見つかりません。STはSitronixという会社の製品であることを表しているらしく、Sitronixの製品ページを見ているとST7605は、どうもST7565の間違いみたいでした。ST7565じゃないかなと思った主な理由は65x132という解像度がちょうどAD-12864-SPIと一致していたからです。
データシートのp.53を見るとSerial Clock Periodは400ns(min)でした。つまりSPIの速度は2.5MHz(max)ということになります。また、リセットのタイミングも0.5usで十分のようです(p.54)。
日本語出力してみました。
フォントは美咲フォントという8x8の漢字フォントです。fontx2という形式のものを変換しました。
fontx2の形式については、hamayanさんの記事「FONTX形式ファイルの解析」を参考にさせていただきました。
mbedのプロジェクトはこちらになります。
mbedでaitendoのSPI液晶に出力してみましたの続きになります。
お約束のねぎミクです。
いつもは携帯で撮った動画をgooブログの画像置き場にアップロードしてたんですが、サイズに制約があるので、かなりひどい画質でした。今回はデジカメで撮ってYouTubeにアップロードしてみました。
ディザリングしたおかげでドットの密度で中間色が表現できる(?)ようになりました。
ソースはこちら(NegiLCD)になります。
8x8のfontを出力してみました。
やはり横長な感じです。
ソースはこちら(FontTest)になります。
リソースに余裕があるというか、mbedだと気軽にsprintfが使えるのがうれしいです。
このLCDの制御関連でいくつかできることが増えてくると、やはりまとめてクラスにしたくなってきます。うーん、C++かあ(遠い目
お約束のねぎミクです。
いつもは携帯で撮った動画をgooブログの画像置き場にアップロードしてたんですが、サイズに制約があるので、かなりひどい画質でした。今回はデジカメで撮ってYouTubeにアップロードしてみました。
ディザリングしたおかげでドットの密度で中間色が表現できる(?)ようになりました。
ソースはこちら(NegiLCD)になります。
8x8のfontを出力してみました。
やはり横長な感じです。
ソースはこちら(FontTest)になります。
リソースに余裕があるというか、mbedだと気軽にsprintfが使えるのがうれしいです。
このLCDの制御関連でいくつかできることが増えてくると、やはりまとめてクラスにしたくなってきます。うーん、C++かあ(遠い目
「aitendoのSPI液晶」の続きになります。
最近買った、mbedを使ってAD-12864-SPIに出力してみました。
拡大
mbedではSPI出力できるのが、p5,p6,p7の組か、p11,p12,p13の組のどちらかです。今回はp11,p12,p13を使いました。
接続は以下の通りです。
最初の列が液晶モジュールのピン番号、次がmbedのピン番号、3番目が信号名です。信号名を見ても分かるように、この液晶は出力専用のデバイスということになります。
ソースコードは、mbedのサイトに公開しました。aitendoからダウンロードできるユーザーマニュアルにサンプルコードが載っていて、ほとんどそのままです。電子ボリュームだけ調整していますが、00~3fに指定できるうちの00くらいにしないと濃すぎで見えませんでした。
ユーザーマニュアルにはコントローラICの名前もないうえに、タイミングチャートは記号の表す時間が書いてないので、どのくらいのスピードまで動くのか不明な状態です。少なくとも試してみた1MbpsのSPIくらいは平気で動くみたいです。
とりあえず、やたら小さいので8x8ドットの文字とかは読むのがたいへんそうです。信号線の数が5本と少ないのと、SPIも8ビットなので、小さなマイコンで動かすのにも便利です。
VRAMを作るとすると、サイズは1kバイト(=128*64/8)になります。mbedだと余裕で、このくらいのメモリはもてます。タイマー割り込みで定期的に転送なんてのもあり(のはず)です。
バックライトLEDですが、液晶モジュール上に30Ωの電流制限抵抗R6が実装されているので、8ピンをそのままVddに接続しても平気です。今回は100Ωの抵抗をさらに直列につないでいます。100Ωの両端は0.436Vだったので、4.36mA流れていることになります。
最近買った、mbedを使ってAD-12864-SPIに出力してみました。
拡大
mbedではSPI出力できるのが、p5,p6,p7の組か、p11,p12,p13の組のどちらかです。今回はp11,p12,p13を使いました。
接続は以下の通りです。
1 p21 #CS1 ... 10kΩでプルアップ 2 p22 #RESET ... 10kΩでプルアップ 3 p23 A0 ... 0:コマンド 1:データ 4 p13 SCK 5 p11 MOSI 6 Vdd ... 3.3V 7 Vss 8 LED_A ... 100Ωを介してVddに接続
最初の列が液晶モジュールのピン番号、次がmbedのピン番号、3番目が信号名です。信号名を見ても分かるように、この液晶は出力専用のデバイスということになります。
ソースコードは、mbedのサイトに公開しました。aitendoからダウンロードできるユーザーマニュアルにサンプルコードが載っていて、ほとんどそのままです。電子ボリュームだけ調整していますが、00~3fに指定できるうちの00くらいにしないと濃すぎで見えませんでした。
ユーザーマニュアルにはコントローラICの名前もないうえに、タイミングチャートは記号の表す時間が書いてないので、どのくらいのスピードまで動くのか不明な状態です。少なくとも試してみた1MbpsのSPIくらいは平気で動くみたいです。
とりあえず、やたら小さいので8x8ドットの文字とかは読むのがたいへんそうです。信号線の数が5本と少ないのと、SPIも8ビットなので、小さなマイコンで動かすのにも便利です。
VRAMを作るとすると、サイズは1kバイト(=128*64/8)になります。mbedだと余裕で、このくらいのメモリはもてます。タイマー割り込みで定期的に転送なんてのもあり(のはず)です。
バックライトLEDですが、液晶モジュール上に30Ωの電流制限抵抗R6が実装されているので、8ピンをそのままVddに接続しても平気です。今回は100Ωの抵抗をさらに直列につないでいます。100Ωの両端は0.436Vだったので、4.36mA流れていることになります。
「スイッチサイエンスさんにmbedが」の続きになります。
もう来ちゃいました。はやーい
こんな箱に入ってました。
箱を開けてみました。
左下はmbedシール、左上はプラスチックのmbedカード、左中は厚紙のmbedカードです。もちろん、CD-ROMなんて入ってません。
近影
実は裏側にも部品が実装されてます。
CPUです。
最初にすることは、USBでつなぐことです。すぐにドライバがインストールされてUSBドライブになります(マスストレージクラス)。ストレージの大きさは2Mバイトです。
次にすることはアカウントの登録です。USBドライブを開くとMBED.HTMがあるのでダブルクリックすると、mbed.orgのユーザー登録のページに飛びます。ユーザー登録をするとコンパイラが使えるようになります。ついでにユーザーのホームページもできて、ブログを書いたり、プログラムを公開できるようになったりします。知の結集というか、その場で作って動いたものをどんどん集めていく場所を提供しています。
ちなみに、私のページはこちらになります。中身は何もありません。
さて、さっそくLチカです。
まずは、mbedのドライブをエクスプローラで開きます。
でもって、こちらからダウンロードした実行ファイルをドラッグ&ドロップでコピーします。
コピーしたのでファイルが増えてます。
でもって、リセットボタンを押すとLチカがはじまります。
うーん、驚異の最速Lチカボードですね。
もう来ちゃいました。はやーい
こんな箱に入ってました。
箱を開けてみました。
左下はmbedシール、左上はプラスチックのmbedカード、左中は厚紙のmbedカードです。もちろん、CD-ROMなんて入ってません。
近影
実は裏側にも部品が実装されてます。
CPUです。
最初にすることは、USBでつなぐことです。すぐにドライバがインストールされてUSBドライブになります(マスストレージクラス)。ストレージの大きさは2Mバイトです。
次にすることはアカウントの登録です。USBドライブを開くとMBED.HTMがあるのでダブルクリックすると、mbed.orgのユーザー登録のページに飛びます。ユーザー登録をするとコンパイラが使えるようになります。ついでにユーザーのホームページもできて、ブログを書いたり、プログラムを公開できるようになったりします。知の結集というか、その場で作って動いたものをどんどん集めていく場所を提供しています。
ちなみに、私のページはこちらになります。中身は何もありません。
さて、さっそくLチカです。
まずは、mbedのドライブをエクスプローラで開きます。
でもって、こちらからダウンロードした実行ファイルをドラッグ&ドロップでコピーします。
コピーしたのでファイルが増えてます。
でもって、リセットボタンを押すとLチカがはじまります。
うーん、驚異の最速Lチカボードですね。
以前、Sirius506さんのマイコン工作実験日記で見かけたmbedがスイッチサイエンスさんに入荷しています(リンク)。本家のmbed.org。
インターネットコムの記事「ARM と NXP、マイクロコントローラ搭載システム開発ツール「mbed」を発表」
プロトタイピングツールということで、Coretex-M3の載ったArduinoみたいなものです。開発ツールがブラウザで動くのと、ストレージクラスを使ってるっぽいので、書き込みがファイルコピーでできてしまうっぽいのがユニークな点です。
CPUはNXPのCortex-M3、LPC1768(100MHz動作、ROM 512k、RAM 64k)です。もったいないくらいの高性能CPUです。現在LPC2368バージョンも開発中みたいです。(11/25追記 LPC2368は旧バージョンです。)
回路図も見れます(テクニカルリファレンス)
クックブックのページに色々なレシピが載っていて、いい感じです。
ピン配置を見るとethernetにもつながるようです。
試しに登録しようとしましたが、mbedを持っていないと駄目みたいでした。
digikeyとmouserでも入手可能ですが、現在品切れです。11/25 追記 チップワンストップにもあります。
しまったあ、MTM04で買っておけばよかったあ・・・って、最近衝動買いが多すぎです。
インターネットコムの記事「ARM と NXP、マイクロコントローラ搭載システム開発ツール「mbed」を発表」
プロトタイピングツールということで、Coretex-M3の載ったArduinoみたいなものです。開発ツールがブラウザで動くのと、ストレージクラスを使ってるっぽいので、書き込みがファイルコピーでできてしまうっぽいのがユニークな点です。
CPUはNXPのCortex-M3、LPC1768(100MHz動作、ROM 512k、RAM 64k)です。もったいないくらいの高性能CPUです。
回路図も見れます(テクニカルリファレンス)
クックブックのページに色々なレシピが載っていて、いい感じです。
ピン配置を見るとethernetにもつながるようです。
試しに登録しようとしましたが、mbedを持っていないと駄目みたいでした。
digikeyとmouserでも入手可能ですが、現在品切れです。11/25 追記 チップワンストップにもあります。
しまったあ、MTM04で買っておけばよかったあ・・・って、最近衝動買いが多すぎです。