<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

PIC(9) mikroBASIC

2008年06月30日 | PIC・マイコン
                                                   日記@BlogRanking
今回は、mikroBASIC を使ってのいろいろな入出力の方法を纏めておく。

LED点滅:
  mikroBASIC 標準の delay_ms(500) と、
  PORTC.0 = 1 - PORTC.0 で、OK。

LCD表示:
  mikroBASIC 標準の LCD(4-bit interface) Library でOK。

RS232C通信:(対向はPCでもPICでも)
  mikroBASIC 標準の USART Library でOK。

I2C通信:(こちらがマスターの場合)
  mikroBASIC 標準の I2C Library でOK。
   RTCのアドレスは、$A2(読取)、$A3(書込)
   EEPROMのアドレスは、$A4(読取)、$A5(書込)

CdSでADC:
  mikroBASIC 標準の ADC Library を使う。
  22kohm との電圧分割では、0.62V~3.3V となった。
  3.1k~42.7kohm の変化(0.6k~1000kohm にはならなかった)。

赤外線リモコン受信:
  CCPのcapture モードでパルス長を計る。
  PPM(Pulse Position Modulation)の仕様は、これがよい。
  それと、これも参考になる。
  わたしは、PCのTVボード付属のリモコンで遊んでいる。
  家のエアコン用リモコンは仕様が違うようだ。

PS/2・KB入力:
  mikroBASIC 標準の PS/2 Library でOK。
  但し、割込は使えなくなる。
  こんなのもある。(PICが PS/2・KBになる。)
  やってみたものの1つ。

PS/2・マウス入力:
  通信プロトコルは、The PS/2 Mouse/Keyboard Protocolが親切。私にも理解できた。
  ここに、「The PS/2 Mouse Interface」なども載っている。
  とりあえず、割込なし wait 方式で作った。
  ここにある「TB055 Source Code - PS/2 to USB Mouse Translator」
  は、割込方式によるマウス入力である。
  これもやってみたいものである。

これらで3月が過ぎ去ったのである。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

PIC(8) 回路図

2008年06月30日 | PIC・マイコン
                                                日記@BlogRanking
 各種 PIC デバイスを、mikroBASIC 及び C18 コンパイラで実験できた。
今度は、LCDに表示し、PCなしでも動くようにしたい。

 3ヶ月ぶりにアキバに行き、LCDと、40ピンの 16F877A を買った。
ついでに、赤外線受光素子、CdSセル、RTC、EEPROM も買った。

 ブレッドボードを整理し、16F877A に変えたので、先ずは、
(MPASMでアセンブルし)tiny bootloader ファームを書き込んだ。

で、テストは例によってLEDの off/on である。言語は、mikroBASIC。
次は、RS232CによるPCからの受信/返送信。
これらは、16F873A 用のソースを流用してOK。

 いよいよ、LCDを繋ぐ。ハンダ付けをしてと。
データは4ビットモードで十分。RWは使わず GND 固定。
mikroBASIC の LCD lib の説明に RW ピンのことが補足で書いてあった。
コントラストは・・・DIODE で GND に落としての輝度固定とした。
これは、Web検索で見つけた回路である。
いよいよ、本番。Mikroelektronika 社のサンプルでOKOK。


 こんな文章ばかりの blog では殺風景なので、回路図を入れることにした。
やはり、水魚堂さんのエディタでしょう。「水魚堂さん」ありがとう御座います。
ついでに、BLUEさんの lib もDLしPIC分を改造させていただきました。

やっと、回路が書けるようになりましたので、以下に載せます。
PIC16F877A で一通り実験するための、わたし的評価ボードです。



お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

PIC(7) USB・HID/CDC

2008年06月29日 | PIC・マイコン
                                             日記@BlogRanking
 今度は、「HIDクラス」に挑戦した。
結局はマイクロチップ社のサンプルソースをDLするのだが。

その1:スタンダード(2ボタン)マウスエミュレータ
(マウスカーソルが円を描くように動くもの)

その2:インテリマウス化
(3ボタン目の追加)

その3:スクロールのエミュレーション

その4:KBのエミュレーション

PIC18F2550 を、これらUSBデバイス化するファームウェアを作るには、
「pic18Fusb.online.fr」が非常に参考になったのだが、
この Wiki は削除されたよう(フランス語はチンプンカンプンです。)

これらソースをC18でコンパイルし、tiny bootloader で書き込んで、
PICを、PCに繋ぐと、自動認識し、エミュレーションしてくれた。


 さらに、HID汎用デバイス用のファームウェアは、
「Jan Axelson's Lakeview Research」のUSBのページの中のHIDsのページ
からDLして、汎用デバイスクラスと同じ機能のものを作った。

PC側は、デバイスドライバは不要だが、
デバイスにアクセスするための関数定義は、インクルードファイルを用いた。


 さらにさらに、CDCクラスのファームウェアも、
マイクロチップ社のサンプルソースをDLする。
これを、汎用デバイスクラスのものと見比べながら修正した。

inf ファイルは添付されているので、それを使い、
PCソフトは、以前に作ってあったCOMxのIO用のものを若干修正して用いた。


 これで、PIC18F2550 をUSBデバイス化し、PCから通信することは、
3種類のクラス(汎用、CDC、HID汎用)とも一応完了した。
2月はこれで終わった。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

PIC(6) USB・Gen

2008年06月29日 | PIC・マイコン
                                                日記@BlogRanking
さて、目標であったUSBデバイスへ挑戦する。

先ずは、mikroBASIC 組み込みの USB HID Library を使ったサンプルプログラムを
コンパイルしてみたが、demo版の制限でダメでした。

ネットであちこち探しまくっていたが、なんのことは無い、本家でよかったのだ。

マイクロチップ テクノロジー ジャパン社のHPにある、「PIC関係のリンク」に載っている
「USBコントローラ内蔵のPIC18F2550の使用例」が、ピッタリであった。

 早速動かしたいところだが、その前に、C18 コンパイラが必要だ。
C言語は知らないけど、何とかなるだろうと、インストールしMPLAB に登録した。

上記HPからDLしたものからクロック数の変更だけで、コンパイル/リンクし、
tiny bootloader で書き込み、添付のテストプログラムを動かした。

 Microchip社のUSBブートローダでなくても、tiny bootloader でも共存可能だ。
(当たり前の話だけど。リンカースクリプトが読めれば。
 マイクロチップ社のUSBブートローダは0番地から常駐し、
 ターゲットプログラムは 0x800 からになる。
 一方、tiny bootloader はROMの最上位番地に常駐する。)

で、このUSBデバイスは、デバイスクラスの分類では「汎用」なので、
デバイスドライバ(inf ファイルと、sys ファイル)が必要であり、
PCでプログラミングするなら、DLL が必要になる。

 その他のデバイスクラスとしては、CDC、HID、Mass Storage がある。
HIDクラスはさらに、「マウス」「KB」「汎用」に分かれる。

デバイスドライバなどの要否は、
       inf      sys     DLL
 汎用    要     要     要 : 上記の通り。
 CDC   要     不要 : システム標準でOK。(serial on usb)
 HID
  マウス  不要 : システムが入力デバイスで使用。(直接入力不可?)
  KB    不要 : システムが入力デバイスで使用。(直接入力不可?)
  汎用   不要   不要   不要*
   (訂正:* kernel32、hid.dll を使うので、宣言(ヘッダーファイル)は必要。)

 それで、このサンプルUSBデバイスを ActiveBASIC プログラムでアクセスしてみたい。
 同梱されていた、柏野政弘さん作のドライバでは、どうしても上手くいかない。
1回目はOKで、2回目はライト(PC->PIC)出来るが読み込みでストールする。

 悪戦苦闘の末、MICROCHIP社のmchpusb.sysなるデバイスドライバにすることにした。やっと、PCソフトも完成し、
PCからPIC(USB・汎用デバイス)への出力・入力が完成した。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

PIC(5) 18F2550

2008年06月28日 | PIC・マイコン
                                             日記@BlogRanking
 これまでで、PIC16F は5種類入門できた(カナ)。
16F84A、12F683、16F648A、16F873A、16F88。

 再度、tiny bootloader の補足をしておく。

1.16F873A:tinybld16F873A.asm があったので、このままASMした。
 実はバグがあって、ターゲットプログラムが書き込まれないので悩んだ。
  bcf EECON1,EEPGD
 となっている行は間違いで、正しくは
  bsf EECON1,EEPGD
 である。 tinybld16F873.asm では正しい。

2.16F88:tinybld16F88_i8MHz __19200.HEX があるので、このまま使っている。


で、今度は 18F2550 に移ることにした。

 先ずは、tiny bootloader ファームウェアの準備であるが、
幸い、tinybld18F2550usb _20MHz_115200.HEX があったので、
このまま使うことにして、AKI-PICライタで書き込んだ。

 mikroBASIC のプログラムは、16F873A で作った、
PS/2・KB入力--232CでのPC出力 を移植した。
といっても修正することはほとんど無い。
chip 指定と config 指定。これは、IDEで。
ソースでは、全ピンデジタルとするため、ADCON1 指定と、
232Cでのボーレートを変えたので、Usart_Init のパラメータ変更。
以上でコンパイル&ゴー。 ---> 見事に文字化け。

相当悩んだ末、config ワードの問題と判明。
tiny bootloader のサンプルでは、
 PLLDIV_5_1L
 CPUDIV_OSC3_PLL4_1L
 USBDIV_2_1L
 FOSC_HSPLL_HS_1H
となっていた。これは、20MHzセラロックを用いたとき、
動作クロックは24MHzということである。
 --> mikroBASIC ソースを修正して。完動。

ここまでくれば、手持ち6chipとも使えるナ。

この後、16F873A で、
 マブチモータを、モータードライバ TA7291P 経由で正転・逆転制御。
制御入力はPS/2・KB -> OK。

PS/2・マウス入力--232CでPCへ出力 -> OK。

そうこうしているうちに、1月が過ぎ去った。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking