出先でちょっとPIC焼きたいなあ、というときのため(だけではないが)に買った激安FHD液晶ノートPC、EZbook2であるが、pickit2が使えない。pickit3はMPLABからであれば焼けるがPICkit3 Programmerからは焼けない。どちらも、PICkit 2 not found. Check USB connections and use Tools->Check Communication to retry. のようなメッセージが表示される。
Windows10(64bit)はダメなのか??そんなことねーよな??どうしよう、、、MikroCで作ったHEXを焼くためだけにMPLABのプロジェクト化しないといけないのか???
ということで、いろいろ調べてみた。
pickit2はVID:04D8、PID:0033なので、ここらへんからDevice ManagerのHuman Interface Devicesを見ていくと、該当するUSB Input DeviceにDevice not migrated (デバイスは移行されませんでした。) のエラーが発生していた。イベントビュアにもERROR 441( Device .... could not be migrated)が記録されている。でも、なぜか、This device is working properly.(このデバイスは正常に動作しています。)なのだ。これが原因かどうかは判らないが、疑わしい、ということで、この解決方法を調査した。
。。。。どこにも回答がない。だれも解決できていない????
ということで、俺的解決方法を備忘メモとして残しておく。
まずは、以下の情報が表示されているとする。
デバイス USB\VID_04D8&PID_0033\5&28e25a0d&0&1 を移行できませんでした。
最後のデバイス インスタンス ID: USB\VID_04B4&PID_6022\5&28E25A0D&0&1
クラス GUID: {79046022-7904-7904-1980-198007056022}
場所のパス: PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(1)
移行ランク: 0xF000FFFFFFFF0023
存在: false
状態: 0xC0000719
で、これが出た場合、悪いのは04D8:0033のpickit2ではなく、 04B4:6022なのだ。よって、この場合は04B4:6022のデバイスを消せばいいのだが、デバイスマネージャで探しても見つからない。よってregeditで該当レジストリを消す。
具体的には、下記のレジストリを消せばいい。(ControlSet001の001は002などかもしれない)
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceMigration
\Devices\USB\VID_04B4&PID_6022]
これを消したら、次はまた別の原因でDevice not migratedエラーが出るかもしれないが、エラーが出なくなるまで繰り返すべし、と。
さてと、これでpickit2使えるかな。。。。。
!!!???
使えない!何も変わらない!!残念!!
Device not migratedは犯人じゃ無かった!!冤罪でした。
悔しいです!!
あまりに悔しいので、気合入れて20時間ぐらい調べて、ようやく原因が判明した。
まず、EZbook2でPICkit2が使えない原因であるが、これはWindows10でも64bitでもなく、このPCが大量のHIDインターフェース機器を内蔵しているからである。
こんな感じ。
で、なぜ大量だとダメかというと、PICkit2 programmerはHIDデバイス20個までしか対応していないから。もし21個HIDデバイスがあって、その21個目がpickit2だとすると、残念ながらPICkit2 programmer は、pickit2を発見することができない。
対処方法は、ただ一つ。ソースコードを書き換えてビルドする。
ソースコードはMicrochipのサイトからダウンロードできる。ビルドはVisualStudio Community版(無償)でOK
修正箇所はUSB.csの
for (int l_loop = 0; l_loop < 20; l_loop++)
というところ。まあ、次のように、200個くらいにすれば、まず大丈夫だろう。
for (int l_loop = 0; l_loop < 200; l_loop++)
ちなみに、大きくし過ぎると、アプリが起動しなくなるので、ほどほどに。
一応、こんな感じでビルドしたものを下記に置いときます(当然無保証)。こんなものでよければご自由にどうぞ。
Tuning Factory UNTRUST download site
Windows10(64bit)はダメなのか??そんなことねーよな??どうしよう、、、MikroCで作ったHEXを焼くためだけにMPLABのプロジェクト化しないといけないのか???
ということで、いろいろ調べてみた。
pickit2はVID:04D8、PID:0033なので、ここらへんからDevice ManagerのHuman Interface Devicesを見ていくと、該当するUSB Input DeviceにDevice not migrated (デバイスは移行されませんでした。) のエラーが発生していた。イベントビュアにもERROR 441( Device .... could not be migrated)が記録されている。でも、なぜか、This device is working properly.(このデバイスは正常に動作しています。)なのだ。これが原因かどうかは判らないが、疑わしい、ということで、この解決方法を調査した。
。。。。どこにも回答がない。だれも解決できていない????
ということで、俺的解決方法を備忘メモとして残しておく。
まずは、以下の情報が表示されているとする。
デバイス USB\VID_04D8&PID_0033\5&28e25a0d&0&1 を移行できませんでした。
最後のデバイス インスタンス ID: USB\VID_04B4&PID_6022\5&28E25A0D&0&1
クラス GUID: {79046022-7904-7904-1980-198007056022}
場所のパス: PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(1)
移行ランク: 0xF000FFFFFFFF0023
存在: false
状態: 0xC0000719
で、これが出た場合、悪いのは04D8:0033のpickit2ではなく、 04B4:6022なのだ。よって、この場合は04B4:6022のデバイスを消せばいいのだが、デバイスマネージャで探しても見つからない。よってregeditで該当レジストリを消す。
具体的には、下記のレジストリを消せばいい。(ControlSet001の001は002などかもしれない)
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceMigration
\Devices\USB\VID_04B4&PID_6022]
これを消したら、次はまた別の原因でDevice not migratedエラーが出るかもしれないが、エラーが出なくなるまで繰り返すべし、と。
さてと、これでpickit2使えるかな。。。。。
!!!???
使えない!何も変わらない!!残念!!
Device not migratedは犯人じゃ無かった!!冤罪でした。
悔しいです!!
あまりに悔しいので、気合入れて20時間ぐらい調べて、ようやく原因が判明した。
まず、EZbook2でPICkit2が使えない原因であるが、これはWindows10でも64bitでもなく、このPCが大量のHIDインターフェース機器を内蔵しているからである。
こんな感じ。
で、なぜ大量だとダメかというと、PICkit2 programmerはHIDデバイス20個までしか対応していないから。もし21個HIDデバイスがあって、その21個目がpickit2だとすると、残念ながらPICkit2 programmer は、pickit2を発見することができない。
対処方法は、ただ一つ。ソースコードを書き換えてビルドする。
ソースコードはMicrochipのサイトからダウンロードできる。ビルドはVisualStudio Community版(無償)でOK
修正箇所はUSB.csの
for (int l_loop = 0; l_loop < 20; l_loop++)
というところ。まあ、次のように、200個くらいにすれば、まず大丈夫だろう。
for (int l_loop = 0; l_loop < 200; l_loop++)
ちなみに、大きくし過ぎると、アプリが起動しなくなるので、ほどほどに。
一応、こんな感じでビルドしたものを下記に置いときます(当然無保証)。こんなものでよければご自由にどうぞ。
Tuning Factory UNTRUST download site
PR
2年前にチップが爆発してから採用を諦めていたデジタルアイソレータだが、でかい電解コンデンサーを付けてもノイズ起因の誤動作がどうも発生しているような気がしていて、再度SILICON LABSのDigital Isolatorにチャレンジしてみた。
まず以前購入したSi8440であるが、どうやら終息品のようで、今後はSi8640を使え、ということのようである。で、Si8640のデータシートを見ると、
みたいに書いてあるので、ただ、つなげればいいかな、と思って
こんな感じの接続をしてみる。その結果、寿命が数秒という悲惨な結果に。
数秒経ったら、「パン!」と音がしてチップに穴が開く。。。。。
でも、旧版のSi8440のデータシートには、
こんなサンプル回路が載っているので、これにあわせて
こんな感じにすれば、とりあえず壊れることは無くなった。動作も超安定している!電解コンデンサーつけなくても暴走しない!
たぶんチップベンダーからしてみれば、「ちゃんとデータシート読め」ということなんだろうが、英語がろくに読めない素人がそんなことするわけねーだろうが(怒)!!、と思う。
まず以前購入したSi8440であるが、どうやら終息品のようで、今後はSi8640を使え、ということのようである。で、Si8640のデータシートを見ると、
みたいに書いてあるので、ただ、つなげればいいかな、と思って
こんな感じの接続をしてみる。その結果、寿命が数秒という悲惨な結果に。
数秒経ったら、「パン!」と音がしてチップに穴が開く。。。。。
でも、旧版のSi8440のデータシートには、
こんなサンプル回路が載っているので、これにあわせて
こんな感じにすれば、とりあえず壊れることは無くなった。動作も超安定している!電解コンデンサーつけなくても暴走しない!
たぶんチップベンダーからしてみれば、「ちゃんとデータシート読め」ということなんだろうが、英語がろくに読めない素人がそんなことするわけねーだろうが(怒)!!、と思う。
2年前からいろいろいじっている車載マイコンであるが、何かときどき再起動している気がする。再起動したときのために変数をChip内蔵のEEPROMに記憶するようにしていたが、秒に数十回書き換えているとEEPROMの書換回数が許容をあっという間に超えそうなので、そこで値をSUNのワークステーションのようにNVRAMに書き込もうと思った。
NVRAM高いだろうなぁ、、と思って調べたら、やっぱり高い。と、いろいろ探していると、FRAM(FeRAMともいうらしい)というデバイスを見つけた。どうやら昔ながらのNVRAMは、もう時代遅れらしい。小容量でいいなら、EEPROMもフラッシュメモリーも、今後はこのFRAMに置き換えられていくのだろう。きっと。
で、このFRAMは国内では富士通が作っているようだ。富士通が作る書換可能な不揮発性メモリーということで、あの銘機BUBCOM80やバブルシステムを生み出す原動力となったバブルメモリーの末裔といえるだろう。で、この富士通のFRAMを最初は使おうと思ったが、車載で使える温度帯のものがなくて、仕方なくRamtron(Cypress)のFRAMにした。RamtronのやつはI2Cインターフェースがないので、仕方なくSPIインターフェースのやつを選んだ。それが、FM25040B、である。まあ富士通じゃないけど頭にFMが付いているし、まあいいか。
で、まず結線から。左がFRAM、右がPIC16F1827。
/CS ---- デジタル出力ポート
/WP ---- 5V
/HOLD ---- 5V
SCK ---- SCK1
SI ---- SDO1
SO ---- SDI1
VSS --- GND
VDD ---- 5V
AVRと違って、PICはINとOUTがクロスするので、ちょっと注意が必要。
で、コーディングであるが、主要なところだけ抽出すると、
前処理。ファイルの先頭やmainの前や頭に書く。
#define FRAM_CS PORTA.f2
// CS :RA2
// SCK:RB4
// SDI:RB1
// SDO:RB2
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
APFCON0=0b10000001;
APFCON1=0b00000001;
OSCCON=0b11110000; // 8MHz x 4
OPTION_REG=0b00000011; // 1:16 , RB pullup enabled
ANSELA = 0b00000011;
ANSELB = 0b11000000;
PORTA = 0;
TRISA = 0b11110011; // 1 ... input
PORTB = 0;
TRISB = 0b11000010;
PIR1=0;
unsigned short dummy;
unsigned char iscv_cnt;
unsigned char iscv_sts=1;
SPIの初期化は
FRAM_CS=1;
SPI1_Init();
メモリー読み出しは
FRAM_CS=0;
SPI1_Write(0b00000011); // Memory Read
SPI1_Write(0x00); // Address
iscv_cnt=SPI1_Read(dummy);
iscv_sts=SPI1_Read(dummy);
FRAM_CS=1;
メモリー書き込みは
FRAM_CS=0;
SPI1_Write(0b00000110); // Write Enable
FRAM_CS=1;
FRAM_CS=0;
SPI1_Write(0b00000010); // Memory Write
SPI1_Write(0x00); // Address
SPI1_Write(iscv_cnt);
SPI1_Write(iscv_sts);
FRAM_CS=1;
とりあえず、これで動いた。
SPI1_Initは初めに1回実行すればいいみたい。
SPI1_Write(0b00000110)は書き込み毎に毎回実行しなければいけないみたい。
次に書き込みにいくとオートロックされちゃってるみたいな感じ。
NVRAM高いだろうなぁ、、と思って調べたら、やっぱり高い。と、いろいろ探していると、FRAM(FeRAMともいうらしい)というデバイスを見つけた。どうやら昔ながらのNVRAMは、もう時代遅れらしい。小容量でいいなら、EEPROMもフラッシュメモリーも、今後はこのFRAMに置き換えられていくのだろう。きっと。
で、このFRAMは国内では富士通が作っているようだ。富士通が作る書換可能な不揮発性メモリーということで、あの銘機BUBCOM80やバブルシステムを生み出す原動力となったバブルメモリーの末裔といえるだろう。で、この富士通のFRAMを最初は使おうと思ったが、車載で使える温度帯のものがなくて、仕方なくRamtron(Cypress)のFRAMにした。RamtronのやつはI2Cインターフェースがないので、仕方なくSPIインターフェースのやつを選んだ。それが、FM25040B、である。まあ富士通じゃないけど頭にFMが付いているし、まあいいか。
で、まず結線から。左がFRAM、右がPIC16F1827。
/CS ---- デジタル出力ポート
/WP ---- 5V
/HOLD ---- 5V
SCK ---- SCK1
SI ---- SDO1
SO ---- SDI1
VSS --- GND
VDD ---- 5V
AVRと違って、PICはINとOUTがクロスするので、ちょっと注意が必要。
で、コーディングであるが、主要なところだけ抽出すると、
前処理。ファイルの先頭やmainの前や頭に書く。
#define FRAM_CS PORTA.f2
// CS :RA2
// SCK:RB4
// SDI:RB1
// SDO:RB2
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
APFCON0=0b10000001;
APFCON1=0b00000001;
OSCCON=0b11110000; // 8MHz x 4
OPTION_REG=0b00000011; // 1:16 , RB pullup enabled
ANSELA = 0b00000011;
ANSELB = 0b11000000;
PORTA = 0;
TRISA = 0b11110011; // 1 ... input
PORTB = 0;
TRISB = 0b11000010;
PIR1=0;
unsigned short dummy;
unsigned char iscv_cnt;
unsigned char iscv_sts=1;
SPIの初期化は
FRAM_CS=1;
SPI1_Init();
メモリー読み出しは
FRAM_CS=0;
SPI1_Write(0b00000011); // Memory Read
SPI1_Write(0x00); // Address
iscv_cnt=SPI1_Read(dummy);
iscv_sts=SPI1_Read(dummy);
FRAM_CS=1;
メモリー書き込みは
FRAM_CS=0;
SPI1_Write(0b00000110); // Write Enable
FRAM_CS=1;
FRAM_CS=0;
SPI1_Write(0b00000010); // Memory Write
SPI1_Write(0x00); // Address
SPI1_Write(iscv_cnt);
SPI1_Write(iscv_sts);
FRAM_CS=1;
とりあえず、これで動いた。
SPI1_Initは初めに1回実行すればいいみたい。
SPI1_Write(0b00000110)は書き込み毎に毎回実行しなければいけないみたい。
次に書き込みにいくとオートロックされちゃってるみたいな感じ。
職場が青山に移ってそろそろ1ヶ月。松屋も飽きてきた。。。週3牛丼はきつい。やはり週2までにすべきである。
それはさておき、新製品開発にむけてPIC18F25K50を使ってみた。2550より安いし外付け水晶振動子要らないし。
さて、回路については2550のやつから振動子を抜くだけでいいので楽だが、その他ちょっと面倒なことがあったので、備忘メモ。
1.やはりPICKIT2で書き込めない。そんなときは、PICKit2 problem to program PIC18f25K50/45K50 の下のほう(上に貼ってあるのはゴミ)に貼り付けてあるデバイスファイルをダウンロードしてPICKIT2のバイナリのあるフォルダーに上書きコピーすれがOK。
2.PIC18F2550のときはPICDEM FSUSB用のソースを流用するが、25K50のときはPICDEM FSUSB K50用のを使う。これって18F45K50用だけど、あまり気にしない。
3.最近のPICなのでアナログ入力対応ポートが増えているので、ANSELでデジタルに切り替える。
4.USBフレームワークだと、InitializeSystem();という関数がmainの中にあるが、この中で動作クロックの設定をしているので、なにかするときはInitializeSystem();関数の後にする。そうしないと異様に遅い。
と、まあこれくらいか。ちょっとはまるけど、まあたいしたことはない。
それはさておき、新製品開発にむけてPIC18F25K50を使ってみた。2550より安いし外付け水晶振動子要らないし。
さて、回路については2550のやつから振動子を抜くだけでいいので楽だが、その他ちょっと面倒なことがあったので、備忘メモ。
1.やはりPICKIT2で書き込めない。そんなときは、PICKit2 problem to program PIC18f25K50/45K50 の下のほう(上に貼ってあるのはゴミ)に貼り付けてあるデバイスファイルをダウンロードしてPICKIT2のバイナリのあるフォルダーに上書きコピーすれがOK。
2.PIC18F2550のときはPICDEM FSUSB用のソースを流用するが、25K50のときはPICDEM FSUSB K50用のを使う。これって18F45K50用だけど、あまり気にしない。
3.最近のPICなのでアナログ入力対応ポートが増えているので、ANSELでデジタルに切り替える。
4.USBフレームワークだと、InitializeSystem();という関数がmainの中にあるが、この中で動作クロックの設定をしているので、なにかするときはInitializeSystem();関数の後にする。そうしないと異様に遅い。
と、まあこれくらいか。ちょっとはまるけど、まあたいしたことはない。
今日は日本橋勤務最終日。。。
四谷行ったり蔵前行ったりしたこともあったけど、ここ6年ほど、ほぼ日本橋だった。。。。
ニコマル弁当も昨日が最後になりそうだ。。。ありがとう、ニコマル弁当。。。
来週からは青山勤務。。。青山にあるかな、半コイン弁当。。。
でも今日は最後なので、かなり贅沢して、もみじに行って来た。三越前近くのレトロビルの中にあったころは毎日行ってたけど、でかい薬屋のビルになっちゃって、新日本橋に移転してからはたまにしか行かなかったんだが。。。。
で、今日の注文は、定番の、とんかつカレーがけ。やっぱいいね、専門店じゃないカレーって。桶川ママカレーと通じるものがある。
と、それはさておき、秋月でも売っているUSB対応PICの18F27J53を使ってあるUSBガジェットを作成したのだが、特定のPC(タブレットが多い)でUSBデバイスとして認識しないことが発覚した。
まず、PIC18F27J53を使って下記のような回路を作った。
見てわかるとおり、AE-18F2550のパクリです。
18F27J53だとUSBでも内部クロックが使えるので、水晶振動子は消して、レギュレータは3.3Vのやつに変えたが、それ以外はまったく同じ。
で、これだと、じつは駄目なのだ。。。。。8割方のPCでは問題なく使えるのだが、2割程度のPCで認識できないのだ。。。。
じゃあどうすればいいか、だが、まずはチップの仕様書を良く読む。。。
すると、バスパワーなら、次図のように結線せよと書いてある。
わかるかな~
そう、VUSBをコンデンサー入れてGNDにつなぐだけじゃだめで3.3Vにプルアップしなければいけない。
これ、結構盲点かも。解決に丸3日かかったし。
四谷行ったり蔵前行ったりしたこともあったけど、ここ6年ほど、ほぼ日本橋だった。。。。
ニコマル弁当も昨日が最後になりそうだ。。。ありがとう、ニコマル弁当。。。
来週からは青山勤務。。。青山にあるかな、半コイン弁当。。。
でも今日は最後なので、かなり贅沢して、もみじに行って来た。三越前近くのレトロビルの中にあったころは毎日行ってたけど、でかい薬屋のビルになっちゃって、新日本橋に移転してからはたまにしか行かなかったんだが。。。。
で、今日の注文は、定番の、とんかつカレーがけ。やっぱいいね、専門店じゃないカレーって。桶川ママカレーと通じるものがある。
と、それはさておき、秋月でも売っているUSB対応PICの18F27J53を使ってあるUSBガジェットを作成したのだが、特定のPC(タブレットが多い)でUSBデバイスとして認識しないことが発覚した。
まず、PIC18F27J53を使って下記のような回路を作った。
見てわかるとおり、AE-18F2550のパクリです。
18F27J53だとUSBでも内部クロックが使えるので、水晶振動子は消して、レギュレータは3.3Vのやつに変えたが、それ以外はまったく同じ。
で、これだと、じつは駄目なのだ。。。。。8割方のPCでは問題なく使えるのだが、2割程度のPCで認識できないのだ。。。。
じゃあどうすればいいか、だが、まずはチップの仕様書を良く読む。。。
すると、バスパワーなら、次図のように結線せよと書いてある。
わかるかな~
そう、VUSBをコンデンサー入れてGNDにつなぐだけじゃだめで3.3Vにプルアップしなければいけない。
これ、結構盲点かも。解決に丸3日かかったし。