PIC リンク集 改

2010-10-04 :  PIC・マイコン
当ブログのカテゴリ「PIC・マイコン」に関しては、記事が増えていません。
久々に、過去記事等を見返していたところ、
左欄の「リンク」に載せている、「PIC リンク集」は、2008-07-14 と、古くなっています。
記事中のリンク先も変わっている(切れている)ようです。

そこで、以下に up to date 版をまとめます。
(リンク切れサイトは削除しました)
----------------------------------------

PIC に関するリンク集です。

言語
mikroBasic
Great Cow BASIC
Swordfish BASIC
SDCC
C18
PIC Micro Controller Languages(言語大全)

ツール
MPLAB(本家)
Tiny PIC bootloader(ICSP)

ベンダ
Microchip 社(本家、チップ仕様)
マイクロチップ テクノロジー ジャパン(事例)

ショップ
秋月電子通商(チップ、ライタ)
ハーフマット(ライタ)

参考サイト
PS/2 プロトコル
YS電子工作ラボ(C18)
Lakeview Research(USB)
PIC18F2550(USB)使用例
水魚堂オンライン(回路図エディタ)
トランジスタ技術(雑誌)
HEXファイル仕様
赤外線リモコン仕様
バケさん(ActiveBasic、USB-IO)
千秋ゼミ[Swordfish UBS(PIC18)]


----------------------------------------

PIC 関連については、
参考で貼り付けている「gooあしあと」のキーワードにも散見されます。
何かの参考になりましたら、幸いです。     


見ていただきありがとうございました。
お帰りに投票して頂けると嬉しいです。 ⇒ blogram投票ボタン

日記@BlogRanking    


左欄の「blogram」ウィジットは、
本文末尾にある投票バナーと異なる機能(アクセスカウンタ機能)があったので、
表示時間が掛かりますが、復活させました。(汗;
なお、順序を若干並び替えました。
スポンサーサイト

USB TMC クラス?

2010-01-14 :  PIC・マイコン
ご訪問ありがとうございます。


或る測定器のデータ取り込みに関する話しです。

現在使っているものは、RS232C インタフェースのもので、
これを、USB・シリアル変換ケーブル(一例)で、USB に変換して、
PCに繋いでいる。(RS-232C ポートが無いPCなので)

今回の測定器は、インタフェースが、
  USB TMC(USB Test & Measurement Class)クラス
とありました。

USB のクラスについては、ブログを始めた頃に、
PIC(6) USB・Gen」で、以下のように纏めていました。

なお、プログラミングするには、さらに、宣言文(「ヘッダ」?)の要否がある。


それで、今回「TMC」クラスがあることを知りました。

ところで、TMC クラスって何?

USBTMCとは何ですか・・・」に書いてありました。
  GPIBのような通信をUSBデバイスと行うために、
  USBをベースに設計されたプロトコルです。
  ユーザーからは、USBデバイスはGPIBデバイスのように動作している
  ように見え、・・・
とのことですね。

つまり、PC等からみれば、
  CDC クラスは、RS232C と見え、
  TMC クラスは、GP-IB とみえる。
と云うことですね。

では、全部で幾つのクラスがあるの???
Approved Class Specification Documents 」に載っていました!

-----

CDC クラスについては、
PIC(7) USB・HID/CDC」や「78K0化(続き:新型PC化)」の如く、
「Active BASIC」で書けています。


TMC クラスについては、「Active BASIC」で書けるのかナ?

取り敢えず、C とか VB とか、かんとか、近いものを集めてみました。

GPIB/・・・/USBサンプルプログラム集(DL/AR/WT ...」(横河電機)
GPIBデバイスドライバ テストプログラムの一例」(プロエクシィ)
GP-IBによるPCへの測定データ転送」(京都大学 情報学研究科)
MCI サンプルプログラム一覧」(エムシーアイエンジニアリング)
GPIB制御プログラミング」(りーまん@関東以北)
Cプログラミング」(福井高専 電気工学科)

これらから、いろいろ勉強すれば(?)使えるものができるかな???

と云うことで、・・・・・          



見ていただきありがとうございました。
お帰りに投票して頂けると嬉しいです。 ⇒ 日記@BlogRanking

人気BlogRanking ⇒ 

P-NETBANKING ⇒ 

『mikroBASIC』

2008-09-16 :  PIC・マイコン
昨日までの累計アクセス数=15,355。 ご訪問頂きありがとうございます。         日記@BlogRanking


「あしあと解析」を見ましたら、以前、「PIC(14)言語比較」や「PIC(18)言語仕様」で書いた、
「mikroBASIC」についての検索が目立っていました。

改めて、コメントしたいと思います。

16F877A/873A、16F88、16F84A、12F683、16F648A(<紙>所有チップ)
などの14ビット系PIC向けには、お奨めできるBASICコンパイラだと思います。
体験版の制限はオブジェクトサイズが2KBまでですが、十分ではないでしょうか。

また、TinyBootloader(PIC(3)tiny bootloader)との相性がイマイチですが、
mikroElektronika製のブートローダもあります。

一方で、18F2550、18F452(<紙>所有チップ)などの16ビット系PIC向けには、
Swordfish BASIC がお奨めです。(もちろん、mikroBASIC も使えます。)

体験版の制限は、処理部分でなく使用するデータのサイズです。実質制限無し?

千秋ゼミ(Swordfish BASIC)が大変参考になります。

<紙>さんHP」に、PS/2マウス入力のプログラムを載せています。
(汚いでしょうが見てやって下さい。)


見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒ 日記@BlogRanking
どうぞ宜しくお願い致します。

『ColdFire』マイコン

2008-09-03 :  PIC・マイコン
昨日までの累計アクセス数=12,421。 ご訪問頂きありがとうございます。         日記@BlogRanking

ColdFire とは、Freescale Semiconductor社のマイコン MCF52233 で、
Interface誌(2008年)9月号(既にバックナンバーになってしまいましたが)
に付録としてその基盤がついている。

<紙>が PIC で遊んでいて、欲しいなと思った、PICNIC(LAN接続できるPICマイコン)
に相当するのではないかと思って、雑誌を買った。結構な値段であったが。


ColdFire は、Ethernet に接続できる。つまり、LANが利用できる。
MCF52233 には256KBのフラッシュROMが内蔵されているが、付録基盤では、
その半分の128KBに、C言語インタプリタ(SilentC)とHTTPサーバが書き込まれている。

PCとは、telnetやtftpでの接続と、webブラウザでの接続が出来る。

付録基盤では最低限、(パルストランス内蔵)RJ-45モジュラ・ジャックと
DC 3.3V 供給用のDCジャックが必要である。部品を追加で買って、ハンダ付けした。
これで、PICNIC価格の半分を超えてしまった。


PCとColdfireをHUB経由で接続した。(下図)



通常、<紙>PCはDHCPを使っているが、一旦 192.168.1.2 に固定して作業した。
Coldfireには、仮のIPアドレス 192.168.1.10 が設定されている。


先ずは、telnetで接続して(ハイパーターミナルかTeraTermを使う)、組込コマンドが使えることを確認した。
dir
type ファイル名
load [ファイル名]
save [ファイル名]
list [行番号]
・・・
が使える。

本文の記事に従って、MACアドレスを設定した。
次にwebブラウザで接続しIPアドレスを設定するのだが、そのまま(192.168.1.10)使うことにした。

記事に載っているサンプルのホームページ index.htm と、処理プログラム Main をtftpで書き込んで、
webブラウザで接続すると、「内蔵の『加速度センサ』のアナログ値をAD変換した」数値が表示された。

つまり、付録基盤には MCF52233 と加速度センサーが載っており、
また、マイコン MCF52233 はAD変換機能も内蔵しているということだ。

これに、64ピン・コネクタ等を付けると、ブレッドボードでの実験ができる。
ソフト開発には、Cコンパイラが“おまけ”で付いている。
でも、いつになったら遊べるかな?


見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒ 日記@BlogRanking
どうぞ宜しくお願い致します。

78K0マイコン:試行

2008-09-01 :  PIC・マイコン
昨日までの累計アクセス数=12,021。 ご訪問頂きありがとうございます。         日記@BlogRanking


以前、「78K0マイコン:ブートローダ」でブートローダを作りましたが、当時のテストは、
雑誌付録のプログラムで、基盤上のLEDを点滅させるモノでした。

78K0化(続き:新型PC化)」で設計した(エッ! ハイ、実は設計段階だったんです。)
モノを作るべく、製造段階に入りました。

78K0マイコン基盤に、(必須では無いが)「USB・Bレセプタクル」と、
これは必須である「28ピンDIP連結ソケット」をハンダ付けしました。

付属の開発ツール:CC78K0コンパイラとLK78K0リンカ等を用いて、
ポートP10、P11に繋いだLEDを点滅させるソフトを開発しました。

RAM上で動かすので、「RamStart.asm」とリンカ用「RAMAPP.dr」をプロジェクトにコピーして、
ソース上では、「trgbios.h」と「types.h」をインクルードするようにしました。(ソース全体は後ほど載せます。)

回路図は下図の通りです。

抵抗が、3K3 なのは、電流値を制限したためです。(暗いけど)


78K0マイコン用プログラムの仕様:
PCからUSB経由で1文字入力し、
文字が. ならば終了する。
文字がX ならば500ms毎、5回、P10ポートのLEDを点滅させる。
文字がx ならば250ms毎、10回、P10ポートのLEDを点滅させる。
文字がY ならば500ms毎、5回、P11ポートのLEDを点滅させる。
文字がy ならば250ms毎、10回、P11ポートのLEDを点滅させる。
それ以外は、無視する。
という単純なモノです。

テスト実行はOK。メデタシメデタシ。

見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒ 日記@BlogRanking
どうぞ宜しくお願い致します。



78K0マイコン用Cソースは以下です。(段付けの為、先頭に2B空白がある。)
----------------------- a.c ----------------------------------------------
#pragma sfr
#include "types.h"
#include "trgbios.h"
void waitus(U16 vvv){ // vvv us のWAITを行う(正確には1.4usくらい)
 while(vvv--) ;
}
void waitms(U16 ww){ // ww ms のWAITを行う
 while(ww--) waitus(740);
}
void task1(){
 U8 i;
 for ( i=0 ; i<10 ; i++ ){  waitms(500); // 500 ms 時間待ち
  P1.0 ^= 0x01; // LED のポートP10を点滅
 }
}
void task2(){
 U8 i;
 for ( i=0 ; i<20 ; i++ ){  waitms(250); // 250 ms 時間待ち
  P1.0 ^= 0x01; // LED のポートP10を点滅
 }
}
void task3(){
 U8 i;
 for ( i=0 ; i<10 ; i++ ){  waitms(500); // 500 ms 時間待ち
  P1.1 ^= 0x01; // LED のポートP11を点滅
 }
}
void task4(){
 U8 i;
 for ( i=0 ; i<20 ; i++ ){  waitms(250); // 250 ms 時間待ち
  P1.1 ^= 0x01; // LED のポートP11を点滅
 }
}
void main() {
 PM1.0 = 0; // LED のポートP10を出力用にする
 PM1.1 = 0; // LED のポートP11を出力用にする
 while(1) {
  char c = trg_getc(); // USB から1 文字取得
  if(c == '.') break; // 文字が. ならば終了
  if(c == 'X') task1(); // 文字がX ならば500ms毎 P10
  if(c == 'x') task2(); // 文字がx ならば250ms毎 P10
  if(c == 'Y') task3(); // 文字がY ならば500ms毎 P11
  if(c == 'y') task4(); // 文字がy ならば250ms毎 P11
 }
}

-------------------------------

ABV4(Active BASIC Ver.4)のアプリは、ブートローダ用のIO処理部分のみ載せる。
(段付けの為、先頭に2B空白がある。)
'
'
Dim ins$ As String, ots$ As String, j As Long, p As *Byte
'
' ======= 78K0 とのIO処理 ============
'
Do
 Input "コマンド=";ins$
 v=Len(ins$) : If v=2 Then *fin
 if v>0 Then p=StrPtr(ins$) : memcpy(buf,p,v)
 buf[v]=13 : v++ : buf[v]=0
 j=WriteFile(hComm, buf, v, VarPtr(k), ByVal 0) ' 書き出し
 Sleep(15)
 j=ReadFile(hComm, buf, 250, VarPtr(k), ByVal 0) ' 読み込み
 buf[k]=0 : ots$=MakeStr(buf)
 Print "受信文字列=";ots$
Loop
' ===================================================================

78K0化(続き:新型PC化)

2008-08-24 :  PIC・マイコン
昨日までの累計アクセス数=9,851。 ご訪問頂きありがとうございます。         日記@BlogRanking


PC1台化(続き:単純化)の結果、随分すっきりしたものになったが、ここでのPC(PCB)はパラレルポートが必須である。
だが、最近のPCにはパラレルポートが無いものが多い、特にノートPCでは。

(<紙>のメインマシンは、3年前に作ったペンティアム4HTだが、メインボードはintel社のD945Gで、)
(まだ、PS/2もシリアルポート/パラレルポートも付いている。さすがにISAバスは無いけど。)

そこで、パラレルポート無しでも使えるように、ということはUSBで動くようにアプリCを移植した。
ここで使ったのは、78K0マイコン:ブートローダで書いた、78K0マイコンである。
このためだけに、トラ技8月号を購入した。

アプリCを改造しアプリDにした。改造ポイントは、最初のアプリAと同じ serial on USB 方式でOK。
PCは新しい型のPC(PCA)でOK。
78K0マイコン用アプリは、USBからコマンドを入力しパラレルポートにパルスを出力するものを、
添付のC言語で新規に開発した。

HW構成は下図のようになる。



この78K0マイコン用ソフトでも、1マイクロ秒を作り出す方法で悩んだ。

そこで、C言語のアセンブラオブジェクトを出力するようにして、眺めていたら、
空のfor文で変数を2バイトとすると、1回当たり約1.4マイクロ秒くらいになるようだ。

なので、これで時間待ちループを作ることにした。1ミリ秒は約720回のループで作れる。
以上で、最近のPC(デスクトップでもノートPCでも)でも、USB経由で使えることになった。

見ていただきありがとうございました。お帰りに投票して頂けるとありがたいです。 ⇒ 日記@BlogRanking
どうぞ宜しくお願い致します。

ロータリーエンコーダの入力

2008-08-08 :  PIC・マイコン
昨日までの累計アクセス数=6,316。 ご訪問頂き、ありがとうございます。         日記@BlogRanking


ロータリーエンコーダには「インクリメンタル方式」と、「アブソリュート方式」の2種類があります。
インクリメンタル方式は、軸が一定量回転するごとにパルスを出力します。

1回転でいくつのパルスを出力するかを分解能と呼びますが、20パルスあたりから5000パルスあたりまであります。
軸が回転するたびにパルスが出るので、軸が何度動いたか、何回転したかといった情報は、
パルスの数を数えることによって得ることができます。

ただ単にパルスが出るだけでは、回転方向の判断が付きませんので、
以下に示すような2相のパルスを出力するように作られています。



右回転では、A相が先にハイからローに変化する。左回転では、B相が先にハイからローに変化する。
つまり、A相がハイからローに変化した時点でのB相の値を見れば回転方向がわかります。

秋月電子通商で売っているのは、インクリメンタル方式のものでした。

端子はA相、B相、GND の3ヶからなっており、見た目はボリュームのようなものです。
これは、1回転(360度)で24パルスです。また、クリック付きです。

そこで、PICとは、10kohm プルアップで、
A相 ---> RB0/INT ( H -> L で割込発生 )
B相 ---> RB7   と繋ぎ、



割込方式でプログラムを作りました。(mikroBASICで)
INT 割込発生時に、先ずB相をチェックしておき、
チャッタリングが収まるまで(1mS)待って、RB0(A相)がローだったら正しい変化時点と判定する。


割込処理ルーチン部分だけ載せます。
(段付けの為、先頭に2B空白がある)
' --------------------- mikroBASIC ソースの一部
sub procedure interrupt ' --- RB0/INT interrupt H->L
 If PORTB.7 = 1 Then
  rl_dir = "R" ' H : Right
 Else
  rl_dir = "L" ' L : Left
 End If
 Delay_ms(1) ' debounce
 If PORTB.0 = 0 Then ' true H->L
  get_data = 1
 Else ' not ( L->H ) Pass
  get_data = 0
 End If
 ClearBit(INTCON,INTF) ' clear INTF
end sub
' ---------------------
以上、お役に立ちましたら幸いです。

お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。

78K0マイコン:ブートローダ

2008-08-06 :  PIC・マイコン
昨日までの累計アクセス数=5,907。 ご訪問頂き、ありがとうございます。         日記@BlogRanking

78K0マイコンとは、トランジスタ技術8月号(まだ、最新号? 10日発売)の付録として付いている基板で、
PCから見れば、PIC(6) USB・Genで列挙した内の、CDCデバイスにあたります。
付録のままでも、PCにUSB(延長)ケーブルで繋いで使えます。

ちょっとしたプログラムを作れば、USB-IOもどきにすることができますね。

発売翌日の、JA1OHP さんのブログ小さなマイコンが雑誌の付録に付いてた ~ 動きました ~に刺激されて、
2週間遅れで買っていました。

活用例は、JJ1WKN さんのブログトラ技 付録 NEC 78K0 マイコン その1(続きあり)に詳しく載っています。

<紙>も、ツール(アセンブラ、Cコンパイラ、+α)をインストールして、
(最初に作ってみる)1秒毎のLED 点滅プログラムを CC78K0 コンパイラで作ってみました。

時間待ちとして、インラインアセンブラを使って NOP命令を入れてみたが、
リンカで .rel ファイルが無いとか出て悩みました。
結局、空の while ループで約1.4マイクロ秒が作れたので、それで誤魔化しています。

そして、トラ技BIOS対応のブートローダを作りました。(Active BASICで。)
プログラム名は、AB_78K0.abp です。(下記)

使い方は、CC78K0 でビルドした結果を a,hex とし、AB_78K0.exe と同じところに置く。
78K0 ボードを繋いでから、AB_78K0.exe を実行すると、a.hex が書き込まれて実行される。
というものです。
78K0 ボードは、COM8 と決めうちしています。(パラメータ化は可能ですね。)
a.hex の実行でUSB 通信する場合は、追加のコーディングをします。

AB_78K0.abp でのシリアルIO処理は、PC:PIC 接続[シリアル編]で作ったものを改造しました。


' ------------------------- AB_78K0.abp
#include "RS232Cdecl.sbp" ' RS232Ctest.sbp を含む
#prompt ' 無くてもいい
'
Dim hComm As HANDLE, a$ As String
Dim buf[255] As Byte, k As Long, v As Long
'
a$=GetOneselfFileNameStr() : a$=Left$(a$,Len(a$)-11)
ChDir(a$) ' 自分自身("AB_78K0.exe")のディレクトリへ
'
hComm=CommOpen("COM8",115200,8,0,1) ' オープンCOMポート=コネクト78K0
'
' ------------- トラ技BIOS 開始
buf[0]=13 : buf[1]=0 : WriteFile(hComm, buf, 1, VarPtr(k), ByVal 0)
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
'
' ------------- load   a.hex
buf[0]=&H6C : buf[1]=&H6F : buf[2]=&H61 : buf[3]=&H64 : buf[4]=13 : buf[5]=0
WriteFile(hComm, buf, 5, VarPtr(k), ByVal 0)
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
Open "a.hex" For Input As #1
While Not(Eof(1))
Input #1,a$
v=len(a$) : memcpy(buf,StrPtr(a$),v)
buf[v]=13 : v++ : buf[v]=0
WriteFile(hComm, buf, v, VarPtr(k), ByVal 0)
Wend
Close #1
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
'
' ------------- jmp f000
buf[0]=&H6A : buf[1]=&H6D : buf[2]=&H70 : buf[3]=32
buf[4]=&H66 : buf[5]=48 :buf[6]=48 : buf[7]=48 : buf[8]=13 : buf[9]=0
WriteFile(hComm, buf, 9, VarPtr(k), ByVal 0)
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
'
' ======= 78K0 とのIO処理は、ここに追加する ========
'
*fin:
CloseHandle(hComm) ' クローズCOMポート
End
'
' ----------------------------------------
Function GetOneselfFileNameStr() As String
Dim buf[255] As Byte, length As Long
length=GetModuleFileName(NULL,buf,MAX_PATH)
GetOneselfFileNameStr=ZeroString(length)
memcpy(StrPtr(GetOneselfFileNameStr),buf,length)
End Function
' ================================= End Prog. ==============
ReadFile はすべてダミー(バッファ・クリアの為)です。

お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。

ロータリースイッチの入力

2008-08-05 :  PIC・マイコン
昨日までの累計アクセス数=5,690。 ご訪問頂き、ありがとうございます。    日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。
やっと、アクセス数(IP)の累計で2千を超えました。

さて、ロータリースイッチ(SW)といっても、例えば1回路8接点のようなものではなく、
正確にはエンコードSWのことです。
例えば0~7の8通りの状態を3ビットで表現するようなSWのことです。

純粋なロータリーSWの値の読み取りでは8ビット必要ですね。
で、エンコードSWの状態をPICで読み取る場合、下図左のようにデジタルで入力すると3ビット必要となる。
しかし、AD変換機能のあるPICで、右のようにアナログ入力にすると1ビットでできる。



共通側に 22kohm を繋ぎ、1、2、4 側にそれぞれ 10kohm、22kohm、47kohm を繋ぐとすると、

1~7の場合の合成抵抗値は、
1:10-----10.00kohm
2:22-----22.00kohm
3:(22,10) -- 6.88kohm
4:47-----47.00kohm
5:(47,10) -- 8.25kohm
6:(47,22) --14.99kohm
7:(47,22,10)- 6.00kohm  となり、

これと共通部分の 22kohm との電圧分割比は、
0:1.000
1:0.313
2:0.500
3:0.238
4:0.681
5:0.273
6:0.405
7:0.214 となる。

PICのAD変換機能は10ビット以上あるが、8ビットで考えると
0:255
1: 80
2:128
3: 61
4:174
5: 70
6:103
7: 55  である。

これを並べ替えると
0:255
4:174
2:128
6:103
1:80
5:70
3:61
7:55  となり、
差の最小は3の場合と7の場合の差6である。

測定誤差は高々1(一定な電圧環境であれば8ビット分解能では誤差は無い?)であるから、
判定値を中間の値
58、65、75、92、115、151、224
とすれば、十分識別できることになる。

<紙>は、この方式で、電源ON又はRESET直後に値0~7を読み取り、
8種類のプログラムを起動するようなものを作ってみた。OK。メデタシメデタシ。

なお、エンコードSWには2種類あって、正論理のものと負論理のものがある。
この話しは、正論理(?)のものかな。


お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking

USB-IO

2008-07-24 :  PIC・マイコン
昨日までの累計アクセス数=3,884。 ご訪問頂き、ありがとうございます。    日記@BlogRanking
皆様のお引き立てにより、「60代~日記@BlogRanking」で7~8位になりました。
まことにありがとう御座います。

USB-IOとは、PCとUSBケーブル(ストレートなもの)で繋いで、
8+4の合計12ピンでデジタル入出力が可能な基盤である。
ただし、電流容量的にはPCのパラレルポート(2mA)より小さい(1mA)。(12の内4ピンでは 15mA とれる。)

USB-IO復活プロジェクトに経緯が載っているが、現在では、Km2Netテクノキットから
「もの」が販売されていて、バケさんのHPに両社製品についての試用レポートがある。

PC:PIC 接続[パラレル編](1)で述べたようなPCからパラレルポートを制御することが、
パラレルポートの無いPCで(USBで)行える。

<紙>が PIC18F2550 を含めて、PICを手にしたのは、この USB-IO に刺激されてのことである。
PIC18F2550 なら、PORTA(6)、PORTB(8)、PORTC(5) の合計19ピンが使える。
しかも、デジタルに限らずアナログ入力にすることもできる。
また、電流容量的に見てもPCのパラレルポートより大きく、10mA とれる。

USB-IO は、PCから見れば、PIC(6) USB・Genで列挙した内の、HIDデバイス(汎用)にあたる。
PIC(7) USB・HID/CDCで作った、USBデバイス化PIC(HID汎用)に対して、
各ポートの入出力を制御するPCからのコマンドを受け付けて、
PIC内で処理をするようなプログラムにすれば、PIC18F2550 を USB-IO もどきにすることができる。
まだ、C18の勉強が足りなくて手がだせていない。残念。

お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。(1日1回) ⇒ 日記@BlogRanking

PIC(18)言語仕様

2008-07-15 :  PIC・マイコン
                                             日記@BlogRanking
これまでに使ってみた言語について、PIC(14)で、
独断と偏見によるまとめを行ったが、追加のまとめを行う。
各言語については、PIC リンク集で、リンクしている。

Mikro BASIC(<紙>の略称:mB )
   IDE良くできている。ツールも便利
   大文字/小文字区別しない、 複文不可
   2進数:%11000011、 16進数:$C3、0xC3
   1文字:"A"、 文字列:"abc"
   Byte変数="A" 可

Great Cow BASIC( 略称:GCBC )
   バッチ処理プログラム
   大文字/小文字区別しない、 複文可
   2進数:b'11000011'、 16進数:0xC3
   1文字:"A"、 文字列:"abc"
   Byte変数="A" 可

Swordfish BASIC( 略称:SFBC )
   IDEは気が利いている
   大文字/小文字IDEが正してくれる、 複文不可
   2進数:%11000011、 16進数:$C3  (訂正:7月16日)
   1文字:"A"、 文字列:"abc"
   Byte変数="A" 可

SDCC
   バッチ処理プログラム
   大文字/小文字厳密に区別する、 複文可
   2進数:なし、 16進数:0xC3  (訂正:7月17日)
   1文字:'A'、 文字列:"abc"
   変数="A" 可

C18
   IDEは MPLAB
   大文字/小文字厳密に区別する、 複文可
   2進数:0b11000011、 16進数:0xC3
   1文字:'A'、 文字列:"abc"
   変数="A" 可

Active BASIC( 略称:AB  Windows ソフト用 )
   IDE良くできている
   大文字/小文字:予約語は区別しないがユーザ定義語は区別する、 複文可
   2進数:なし、 16進数:&HC3
   1文字:"A"、 文字列:"abc"
   変数=Asc("abc") と型区別する

自分用の備忘録だな。

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

PIC リンク集

2008-07-14 :  PIC・マイコン
                                              日記@BlogRanking
これまでの整理として、リンク集を作る。

言語
mikro BASIC
Great Cow BASIC
Swordfish BASIC
SDCC
C18
PIC Micro Controller Languages(言語大全)
Active BASIC(←これはWindows用です)

ツール
MPLAB(本家)
Tiny PIC bootloader(ICSP)

ベンダ
Microchip 社(本家、チップ仕様)
マイクロチップ テクノロジー ジャパン(事例)

お店
秋月電子通商(チップ、ライタ)
ハーフマット(ライタ)

参考サイト
PS/2プロトコル
Spency's PICBasic(Swordfish BASIC)
YS電子工作ラボ(C18)
Lakeview Research(USB)
PIC18F2550(USB)使用例
水魚堂オンライン(回路図エディタ)
トランジスタ技術(雑誌)
HEXファイル仕様1仕様2
赤外線リモコン仕様1仕様2
バケさん(ActiveBasic、USB-IO)
千秋ゼミ(Swordfish BASIC、UBW)

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

PIC(17)電源

2008-07-13 :  PIC・マイコン
                                                   日記@BlogRanking
PIC(4)で電源ラインを変更していたが、またまた電源ラインを変更することにした。
今度は、USBケーブルをバラして +5V とGND の2線を取り出し、直接ブレッドボードに挿している。

USB-232Cケーブルと合わせた概略回路図を示す。

これで、コネクタの抜き差し箇所が、PCへのUSBコネクタ1個のみとなった。


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

PIC(16)HEXパッチ

2008-07-11 :  PIC・マイコン
                                                   日記@BlogRanking

PIC(11)で説明したパッチ処理を、Active BASIC(V4)でコーディングしたものを示す。

mikroBASICのコンパイル結果の HEX ファイル名を指定すると、
Tiny Bootloaderの仕様にあった HEX ファイルに変換する。
(ファイル名の先頭に“_”をつけたファイルを作成する。)
(この EXE は同一ディレクトリにコピーしておいて実行する。)

(段付けのために、先頭に2B空白がある)
--------------------- < Patch-HEX.abp > ---------------------
#prompt
'
Dim f$ As String, a$ As String, b$ As String
'
Input "HEX file name(除く'.HEX')=";f$
Open f$+".HEX" For Input As #1
Input #1,a$
'
Print "First Line = ";a$
If Len(a$)<>43 Then Goto *err
If Left$(a$,9)<>":10000000" Then Goto *err
If Mid$(a$,14,4)<>"FF3F" Then Goto *err
'
Open "_"+f$+".HEX" For Output As #2
b$=Right$( Hex$( Val( "&H"+Right$(a$,2) ) + &HB3 ) , 2 )
a$=":100000008A01"+Mid$(a$,10,4)+Mid$(a$,18,24)+b$
'
Print "Chaged To -> ";a$
Print #2,a$
'
While Not(Eof(1))
 Input #1,a$
 Print #2,a$
Wend
Print "処理終了。"
Input "OK? ",a$
End
'
*err
Input "処理できません。";a$
End
'--------------------
汚いコーディングですが。

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

PIC:PIC 通信(2)I2C

2008-07-10 :  PIC・マイコン
                                              日記@BlogRanking
PIC:PIC間のI2C通信のコーディング例を示す。

Swordfish BASIC による Master の例。
---------------- <Swordfish BASIC> -- 18F -------------
I2C.Initialize // initialize I2C 100kHz

// send_I2C ----- 1Byte
I2C.Start ' issue start signal
I2C.WriteByte($D6) ' address of slave
I2C.WriteByte(aa) ' send data
I2C.Stop ' issue stop signal

// recv_I2C ----- 2Byte
I2C.Start
I2C.WriteByte($D7) ' address of slave
aa=I2C.ReadByte(I2C_ACKNOWLEDGE)
bb=I2C.ReadByte(I2C_NOT_ACKNOWLEDGE)
I2C.Stop
' ----------
これは、コンパイラ付属のサンプルと変わらないかも。


mikro BASIC による Slave の例。(受けた2バイトに1加えて返すもの)
(段付けのために、先頭に2B空白がある)
---------------- <mikro BASIC> ----- 16F --------------
Dim aa, bb, dummy As Byte
'
sub procedure I2Cslave_init
 SSPADD = $D6 ' Make our address D6 (7bit)
 SSPCON = $36 ' Set to I2C slave with 7-bit address
 TRISB.4 = 1 ' SCL (input)
 TRISB.1 = 1 ' SDA (input)
end sub
'
sub procedure WaitForPIR1SSPIFset ' Waits till interrupt flag is set
 do
 loop UNTIL TESTBIT(PIR1,SSPIF) = 1
end sub
'
sub function ReceiveByteI2C as BYTE ' Receives one byte via I2C
 SETBIT(SSPCON,CKP) ' Release clock
 WaitForPIR1SSPIFset
 RESULT = SSPBUF
 CLEARBIT(PIR1,SSPIF) ' Clear interrupt flag
end sub
'
sub procedure SendByteI2C(dim TByte as BYTE) ' Sends the TByte via I2C
 do
 loop UNTIL TESTBIT(SSPSTAT,BF) = 0 ' Wait for empty buffer
 NOP ' ???
 SSPBUF = TByte ' Put TByte in buffer
 NOP ' ???
 SETBIT(SSPCON,CKP) ' Release the clock. starts the transmission.
 WaitForPIR1SSPIFset
 CLEARBIT(PIR1,SSPIF) ' Clear interrupt flag
end sub
' ------------- Main -------------
I2Cslave_init
'
WaitForPIR1SSPIFset ' Wait for address match
dummy = SSPBUF ' Get rid of Address
aa = ReceiveByteI2C
bb = ReceiveByteI2C
Inc(aa)
Inc(bb)
SETBIT(SSPCON,CKP) ' Release clock
WaitForPIR1SSPIFset ' Wait for RepeatedStart
dummy = SSPBUF ' Get rid of Address
CLEARBIT(PIR1,SSPIF)
SendByteI2C(aa)
SendByteI2C(bb)
' ----------
mikro BASIC のフォーラムにあったものです。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking
おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク