バケさんの電子工作 : LinuxでLCDを表示(汎用USB-IO) 前回、汎用USB-IOでLCDをLinuxから簡単に制御できるように関数ライブラリー(
usblcd.h)を公開しましたが。
半角カナも表示できるように手直しをしてみました。
usblcd.hまた、テストプログラムも少し実用的なものを作成してみました。
コマンド画面から表示させたい文字列を引数に与えて実行すると表示できるようにしてみました。
使い方;
usblcd "USB-IO de LCD!!"
これで1行目に表示されます。
usblcd "usb-io de LCD" "(^_^)/ by BAKE"
これで1行目に"usb-io de LCD"、2行目に"(^_^)/ by BAKE"が表示されます。 さらに、
usblcd " start " " usb-io de lcd" "2 page 1 line" "2 page 3 line" " E N D "
これで最初に" start " " usb-io de lcd"を表示して、
1秒後、"2 page 1 line" "2 page 3 line" を表示し
1秒後、" E N D "を表示して終了します。
usblcd.c
LinuxでLCDを表示(汎用USB-IO)
Linuxで汎用USB-IOが
Linux(FC5)で汎用USB-IOを使う で使えるようになりましたが、今度はLCDを簡単に制御できるように usblcd.h というヘッダーファイルを作成してみました。
LCDを初期化して使える状態にし
lcd_init(udev);
表示位置を指定して文字を出力
lcd_locate(udev,0,0);
lcd_text(udev,"Linux de USBLCD");
これで表示できます。
まず、ヘッダーファイル msubiobase.h の内容です。
これは変更ありませんが、使用されるUSB-IOにあわせて修正してください
musbiobase.h次に今回LCDのためのヘッダーファイル usblcd.h の内容です。
usblcd.hサンプルソースも作成してみました。
usblcd_test.c の内容です。
usblcd_test.cusblcd.husblcd.txt
掘り出し物

近くのパソコンショップでワゴンセールをしていたものです。
100円ショップだと300円するものと同じICがしかも正規のメーカー製?でMC型番でした。
なおかつ消費税込みの100円ポッキリでした。
なんとなく3個買ってしまった。
流れるウインカー基板 16連 ソフト
ただ単に左右をON/OFFするだけでは面白く無いので、明るさも制御出来るようにしようかと思っています。
ベースクロックかタイマー周期を上げて高速にON/OFFさせ、ON/OFFの比率を変えれば、明るさが変えられます。
専門的にはPWM制御の事ですね。
流れるウインカー基板 16連

プラス側の制御用にトランジスタを2個追加しました。
プログラムの対応はこれからになります。
流れるウインカー基板 LED16連

現在、予備基板で考え中の16連対応時のLED配線を考えてみました。
LEDは1連につき10個の設計です、ハザードでは左右一度に点くので余裕をもって10個になっています。
流れるウインカー基板 予備基板

せぃさんバージョン以外にもう1個作成しました、色々テストをするための予備基板です。
マイコンを抜き出ししやすいようにスペースを空けています。
LEDのプラス側も2系統制御して片側だけで8連にならないかと考え中です。
良く考えると左右とも同じパターンなのでプラス側をON OFFするだけで大丈夫なのではと思っています。
基板のサイズは変わらずトランジスタの追加だけで考えています。
頭の中ではバッチリなのですがどうかなぁ。
流れるウインカー基板をテストしているとウインカーの様にON/OFFさせるのがめんどくさくなり作ってしまいました。
パワーMOS-FETを使用しているので車やバイク(12V)でもしっかり使える本格的なものです。
タイトルのリンク先に詳しく製作記事が載っています。
ICやMOS-FETの説明が無いのでぐぐってデータシートを取り寄せて作成しました。
100kΩの抵抗を半固定にして4.7μFのコンデンサを10μFに変更して点滅速度を変更できるようにしてみました。
これでテストが楽になりました。

いつも汎用基板を使って電子工作をしていましたが、そろそろ基板も作成してみようかと思っています。
水魚堂さんのサイトでプリント基板編集ソフトウェアを公開されているので(詳細はタイトルをクリックしてね)これで勉強中です。
ためしに流れるウインカー基板をイメージだけですが作成してみました。
基板の表(半田面ではない)から見たイメージです。
結構簡単にできてしまいました。
オデッセイのオーナーから頼まれてドアロック連動ミラー格納ユニットを作成してみました。
タイトルをクリックすると製作の詳しい情報が見れます。
まず自分のムーブで試して上手く出来たので、依頼者の車にもつけました。
最初はもっとコンパクトにしようとWEBに載っているものより部品の配置を考えたつもりなのですが、上手く行かずヒューズを2回もとばしてしまった。
忠実に作り直して全く問題なしで動作しました。
ムーブの場合は常時電源がドアに来ていないのでヒューズボックスからとりました。
自分の車につけたユニットの写真制作の様子(みんカラの整備手帳)
依頼者と一緒に「なんちゃって高級車!!」といって喜んでいます。
冬までにキャンセルスイッチをつけたいと思っています、自分の住んでいるところは寒いところなので凍結して動かなくなる可能性があるので。
キャンセルスイッチはWEBにあるような完全な切替ではなく、ドアロックの信号線をスイッチで切るようにしたいと思っています、「信号が行かなければ普通の動作だけになる」これでいいと思っています。
流れるウインカー基板 せぃさんVer PG作成中

ウインカーSWの回路変更のプログラム修正をして動作確認しました。
とりあえずKAYOちゃんバージョンと同じ動きはできました。
パターン追加の要望があったので、その対応とせぃさんバージョンのウェイクアップを考えないといけませんね。
流れるウインカー基板 せぃさんバージョン 基板完成

流れるウインカー基板 せぃさんバージョン 完成です。
ウインカーSWの回路を変更しているのでプログラムも変更が必要です。
とりあえずKAYOちゃんバージョンと同じ動きをするところまで直したいと思います。
流れるウインカー基板 せぃさんバージョン 基板作成中

基板のパターンも決まり作成に着手しました。
両面スルーの基板は半田が反対側に流れて意外に使いにくかった、用途を考えて選択する必要があるようですね。
そんな感じで部品はつけたけどパターンの配線ができていません。
流れるウインカー基板 せぃさんバージョン 着手
第1作目(KAYOちゃんバージョン)が上手くできたので、2作目に着手しました。
こんどはせぃさんバージョンになります。
まったく同じでは面白くないのでバージョンアップを考えています。
今考えているのは。
・基板はガラスエポキシで両面スルー(ちょっと高級?)を使う。
・ウインカーSWの入力部にフォトカプラ-を使用する。
・基板の配線パターンの最適化。
・ワンタッチウインカー
(ちょんとSWを入れるだけで一定時間ウインカー動作する)
この機能は本人に確認しないといけませんね。
部品はほとんどそろったので基板の配線パターンの見直しをしています。
基板の配線パターンを考えるのはパズルみたいで面白いですよ。
きれいにパターンが出来た時には、ちょっとうれしいですね。
流れるウインカー基板 作成後記
今回、作成してみて一番はまったのが動作クロックですね。
内部クロックをF88ではプログラムで設定しないといけない。ということに気づかなかった。
プログラムの先頭に4MHzで動作させる場合は次のコマンドが必要です。
OSCCON = %01100100
当然、OPTIONレジスタの設定も必要です。
タイマー割り込み関係のみを抜き出してみました。
参考にしてください。
(空白に全角文字を使っているのでコピペには注意)
program F88WINKER
dim counter as word
’割り込み処理
sub procedure interrupt
'ここで割り込み処理を記述します。
inc(counter) ' Increment value of counter on every interrupt
TMR0 = 64
INTCON = $20 ' Set T0IE, claer T0IF
end sub
’初期処理
sub procedure init_rtn
OPTION_REG = $82 ' Assign prescaler to TMR0
counter = 0 ' Initialize counter
TMR0 = 64
INTCON = $A0 ' Enable TMRO interrupt
end sub
main:
OSCCON = %01100100 ' 内部クロックを4MHzに設定
init_rtn ’初期処理
while true
’メイン処理
if counter = 200 then ' if counter is 200, then
' ここで一定周期ごとの処理をする
counter = 0
end if
wend
end.
流れるウインカー基板 最終調整
ちょっと、修正して色んなパターンに対応できるようにしました。
・ウェイクアップ動作後、現在の設定パターンがわかるようにハザード動作をするようにした。
・モード切替時に、設定パターンがわかるようにハザード動作をするようにした。
・ON/OFF動作を続けて行うパターンも可能にした。
・パターンを3種類から6種類に増やした。
動作は下記の動画を参照してしてください(重いよ!30MB)
流れるウインカー基板 完成


一応完成です。
PICマイコンの内部クロックが最低速度で動いているのに気付かず、スピードが思うように出ずあせりました。
写真は回路図をおこすために記録としてアップしました。
流れるウインカー基板 スイッチ入力処理
複数のパターン処理対応も済み、スイッチ入力の処理に取り掛かっています。
スイッチ入力の骨組みが出来ました。
モード切替、ウインカー右、ウインカー左の入力の処理を作ればほぼ完成のところまできました。
スイッチ入力はチャタリングというものがあり、ONにしただけなのに接触不良当でON/OFFを繰り返す症状をいいます。
これがあるとPICマイコンは処理が早いのでその都度処理が走ってしまい、たとえばモード切替をしたつもりでも何回もボタンを押したことになり、正常に処理が出来ません。
短時間でのON/OFFは処理しないようにプログラムが必要です。
頭の中で一気に考えてコーディングしましたが、すんなり動きました。(良かった!)
週末には一度お披露目できるかも?
流れるウインカー基板 パターン処理
パターン処理も骨組みが出来ました。
複数パターンを考慮しスイッチ入力の処理をつければ全体的な骨組みが出来ます。
スイッチ入力が簡単なようで難しいのです、これはちょっと後回しにしています。
参考資料・・・
const ptntbl as byte[15] = ($00,$18,$3C,$7E,$FF,$E7,$C3,$81,$00,$00,$00,$00,$00,$00,$00)
const ptnctl as byte[15] = (1,2,3,4,5,6,7,0,0,0,0,0,0,0,0)
const ptntim as byte[15] = (2,1,0,0,0,0,1,2,0,0,0,0,0,0,0)
こんな感じでパターンの情報をもたせます。
ptntblの変数が実際のパターンを管理します。
上記の場合こんな感じで点灯します。
○○○○○○○○ $00 0番目
○○○●●○○○ $18 1番目
○○●●●●○○ $3C 2番目
○●●●●●●○ $7E 3番目
●●●●●●●● $FF 4番目
●●●○○●●● $E7 5番目
●●○○○○●● $C3 6番目
●○○○○○○● $81 7番目
以下繰り返し
データは16進でセットしています。
ptnctlが次のパターンを示しています。
1,2,3,4,5,6,7,0と順に7番目までセットすると次は0番目に戻りぐるぐる繰り返すように設定しています。
ptntimが時間(回数)です。設定された数値+1回セットします。
これを考慮して説明すると
○○○○○○○○ $00 0番目 2
○○○○○○○○ $00 0番目
○○○○○○○○ $00 0番目
○○○●●○○○ $18 1番目 1
○○○●●○○○ $18 1番目
○○●●●●○○ $3C 2番目 0
○●●●●●●○ $7E 3番目 0
●●●●●●●● $FF 4番目 0
●●●○○●●● $E7 5番目 0
●●○○○○●● $C3 6番目 1
●●○○○○●● $C3 6番目 1
●○○○○○○● $81 7番目 2
●○○○○○○● $81 7番目 2
●○○○○○○● $81 7番目 2
こんな感じになります。
メインの処理です、あくまでも参考です。
main:
init_rtn
while true
if counter > speed then ' if counter is speed, then
led = ptntbl[ptnstep]
inc(ptncnt)
if ptncnt>ptntim[ptnstep] then
ptnstep=ptnctl[ptnstep]
ptncnt=0
end if
counter = 0
end if
sw_chk
PORTB =led
wend
end.