2016年4月30日土曜日

SOPのピン列の幅のバリエーション

半導体のパッケージというのは難しいものです。DIPは問題はないのですが、各社が独自の寸法で出していたり、同じ形なのに会社によって名前が違ったりします。ピンピッチが1.27mm(50mil)で両側にリードピンが出ているSOPパッケージ(SOICとも呼ぶ)ですが、これのピン列とピン列の幅が会社によってバリエーションがあります。EAGLEのライブラリを作るときに出来るだけパッケージは統一したかったのでこの機会に調べることにしました。
上の図のように各会社のSOPのAとBの2つの寸法を表にしました。

今まで通常の幅とワイド幅があると思っていたのですが、3種類の幅があるのですね。結局ライブラリとしては
  • 狭い(6.2mm):8、14、16pin
  • 通常(7.8mm):14、16、18、20、24pin
  • 広い(10.4mm):16、18、20、24、28pin
を用意すれば良いようです。

2016年4月23日土曜日

DCard基板動作確認1

DCardの試作基板が届きました。
マイコン、周辺部品、スピーカー、LEDx210コとかつけないといけないのですが、とりあえずマイコンとLEDを一部付けて動作確認をして見ました。

恒例のLチカ
実は基板の一部がUSBコネクタ(っぽいもの)になっています。それのテスト
ちなみに今回の基板の厚さは標準の1.6mmですが、USBにしっかり刺さるためには2.0mm必要です。次回製作分より2.0mm基板にする予定です。

2016年4月14日木曜日

mbed rtosについて

自作mbed+rtosの組み合わせが半端なく便利
いくつか注意点があるので防備録に
・Serialは基本的に使えないものと考える
Serialを使ってそれまで動いていたプログラムも、mbed rtosのライブラリをインポートしただけで(includeを書いていなくても)動かなくなる。RawSerialに書き換える必要がある。
・Mail=Queue+MamolyPoolで基本的にMailを使う
rtosの説明を見るとQueueがいわゆるFIFOの役割をしてくれるように見えますが、こいつはデータのアドレスしか保管してくれず、本体はMemoryPoolでallocする必要があります。
基本的にMailを使いましょう。
Mailのキューにはアドレスが入る関係上、キューの個数x約7Byteのメモリーを使います。あまり大きなキューは使わないようにしましょう。
・waitという名前じゃなくても待つ関数がある。
例えばMailのget関数はMailのキューにデータが来るまで待ちます。waitっぽい名前じゃなくても待機動作をするやつがあるのでリファレンスで確認しましょう。
getは何も無ければスルーする関数かと思った。
・classメンバを割り込みで登録するとき
name.attach(this, &class::func);
・グローバル領域でthreadを作ってはいけない。
新規threadの作成は必ずmain関数(rtos的に言えばmain thread)内で作っていかなければならない。
グローバル領域で作製するとプログラムをクラッシュさせる。

2016年4月10日日曜日

USBコネクタの形状

たまに下の写真のように基板自体がUSBコネクタとして挿入できるボードがあります(写真はCQ出版社のページから)。それを自分も作りたくUSBコネクタの寸法について調べていたのですがなかなか見つかりません。

「USBコネクタ 外形」とかで検索しても出てこなかったのですが単純にUSBの規格書(http://www.usb.org/developers/docs/usb_20.zip)に載っていて、それで解決しました。
概要を言うとコネクタの幅は12mm、奥行きは約12mm
内側の2つの端子の間隔は2mmで、外側の2つは7mm
板の厚さは2.0mm
2.0mmの厚さの基板は発注すると高いが仕方が無い。
詳しくはusb_20.pdfの99ページで

DCardプロジェクト 基板を発注

良いねたが思いついたので Make faire Tokyoに出展することを目標に製作しようと思っています。
基板のデータをEAGLEで作成したのでFusionPCBに注文しました。

内容についてはこれからブログに書いていこうと思います。

2016年4月1日金曜日

自作mbedと使えるLPCマイコン

mbedクローン

最近自分で作った基板でmbedを動かしているのですがそれについていくつか書きます。

最小構成は以下の図のようになります(画像のみで表示すすると詳細まで見えます)。
必要なのは
  • 電源
    回路図では12Vからレギュレーターで取っていますが、3.3Vなら何でもかまいません。ただLPC1768はちょっと繊細なようでパスコンは必須です。
    3.3V側には1uFを入れています。
  • クロック(12MHz)
    mbedのシステム的に12MHzでないと不都合がありそう。他のクロックでも動作や書き込みは可能ですが、多分waitあたりがずれるかと。
  • リセットIC
    やはり繊細なようでプルアップのみでは動かなかった気がする。私は秋月で売っているTCM809Rを使っています。
  • 書き込み用コネクタ
    TX0(P0_2)、RX0(P0_3)がつながっている必要があります。リセット解除時にISPピン(P2_10)がHiがオープンなら通常動作、Loなら書き込みブートローダーが起動します。これらのピンも引き出しておくと便利です。引き出しているなら基板上にこれ2つを操作するスイッチをつける必要はありません。
またmbed上では例えばシリアルポートを設定するときにSerial name(p9, p10);のようにmbedで引き出されているピンしか定義できないように見えますが、拡張したときも考えているのかSerial name(P0_2, P0_3);のようにダイレクトにピンを指定しても使えます。mbedで引き出されていないピンでも使用することが出来ます(参考:https://developer.mbed.org/users/screamer/code/mbed/file/667d61c9177b/PinNames.h)。
ちなみにNCで無接続にできます。

使えるICについて

今回 mbedLPC1768(青mbed) のクローンを作製していますが、LPC1768以外にも使えるICはあります。
1768の代わりに使えるLPC176xファミリを以下に示します。
  • LPC1769 機能は1768と同じだが最高クロック速度が120MHzに高速化(他は100MHz) 
  • LPC1768 標準のもの
  • LPC1767 USBとCANが削られたもの
  • LPC1766 フラッシュメモリが512→256kBに削られたもの
  • LPC1765 フラッシュメモリが512→256kBに削られ、Ethernetが削られたもの
  • LPC1763 フラッシュメモリが512→256kBに削られ、Ethernet、USB、CANが削られたもの
使えないものは
  • LPC1764 SRAMが64→32kBに削られたいるために起動しない。
LPC1764だとプログラムの書き込みは正常に出来るのだが、プログラムが起動しない。
国内だとLPC1768で最安で1000円台です。
Aliexpressという中国の通信販売サイトを使えば1つ600円ほどで買うことが出来ます。
LPC1758という80pin版があるみたいです。データシートを見たところ引き出しているピンが間引かれているだけで中身のチップは同じもののよう。これでも動作するかも。今後動作確認をする予定。

書き込み

書き込みはhttps://developer.mbed.org/users/okini3939/notebook/flash-program/を参考にしました。
ただ手元の環境でやって見たところ自動でRTS、DTRピンを使って自動でブートにかける機能は正常に動きませんでした。別途リセットスイッチが必要みたいです。
後日自作のUSBシリアル変換基板で書き込んだら自動リセット、自動ブートがかかりました。接続を間違えていたのかな?