過去の質問を見ましたが、解決策が見つからなかったため質問させていただきました。

PCにMPLABX IDEをインストールし、PICkit3を接続してマイコン(PIC18F4553)に書き込み、デバッグをしたいと思っています。

MPLABX IDEでコンパイルは正常に行えましたが、書き込みが出来ない状態です。
MPLABXの画面にPICkit3のシリアル番号は出てきていますが、connection failedと出ており、書き込む以前にPICkit3との接続がうまく行っていないのではないかと思っています。

なお、一緒にインストールされたswitcherも念のため操作してみましたが、こちらもエラーメッセージが出て切り替えも正常に出来ていません。

ちなみに、PICkit3 programmerではマイコンへの書き込みは行えました。ただし、programmer終了時にはエラーメッセージが出ています。マイコンの動作は正常でしたので書き込み動作自体は出来ているようです。

接続するUSBポートは全て試しています。マウスとPICkit3しか使っていない状況です。

何度か再インストールもしてみましたが、同じ結果です。
PICkit3使用で、気を付けなければいけないこと、原因と疑われるようなこと、がありましたらご教授お願いします。

よろしくお願いいたします。

「PCとPICkit3の接続」の質問画像

A 回答 (6件)

質問に回答させていただきます。



>恥ずかしながらPICkit3のOS切り替えが必要というのが目からウロコだったのですが、
>このOS切り替えは基本中の基本、当たり前のことなのでしょうか?

PICKit2とはチップも違いますので、PICKit3はそういう仕様だと思ってます。
あまりこの点についてはネットでも書かれているところは少ないので、PICKit3 Programmerを使っている人はあまり居ないのかもしれません。
(私はロジアナを使いたいときだけProgrammerを使ってますが)

PICKit3 Programmerに付属のアプリケーションマニュアルPDFより抜粋

「Revert to MPLAB mode - the PICkit 3 cannot operate in the Programmer Application and MPLAB IDE modes simultaneously.
Selecting this option returns the PICkit 3 to bootloader mode so that the MPLAB IDE can update the PICkit 3 with compatible firmware.」

とありますように同時には動作させることは出来ないとあります。
PICKit3ファームをMPLABで更新可能なブートローダモードへ戻す、ということなので、ブートローダの仕様が異なっているためでしょう。
(PICKit2ProgrammerアプリとPICKit2用のOSをそのままベースにしてPICKit3用に改良した為、新旧2つの方式に切り替えて対応できるブートローダが載っているのかなと想像してますが)

>またOS切り替えはProgrammerからは行えましたが、MPLABX IDEからは行えないのでしょうか?
>(MPLABを使用する際には、OS切り替えのためだけにProgrammerの実行が必須?)

面倒ですがそうなってしまいます。
PICKit3 Programmerアプリによる書き込みは、既にアップデート対象から外れており、メーカはMPLAB X IPEを推奨しています。そのためMPLABでそういう機能がサポートされることは無いと思います。(MPLAB X IPEは、そのまま使えるプログラマです)

既にご存じのように、ボタンを押しながらUSBへ繋ぐと元のブートローダに戻ります。
(私もアプリからしか操作出来ないと思ってましたが、後に知りました)

>そもそも通常出荷時は、どちらのモードになっているものなんでしょうか?

出荷時は、MPLABモードですので、最初にPICKit3 Programmerを立ち上げた際は、
画面上に「OSをダウンロードしてください」とのメッセージが表示されます。

MPLABモードとありますが便宜上、そう呼んでいるものと思います。PICKit3においてはMPLABで認識できる状態が標準のブートローダで、Programmerが対応しているブートローダはあくまで特殊なモードということになりますので。
    • good
    • 1
この回答へのお礼

ご丁寧に教えていただきありがとうございます。
おかげ様で理解が深まりました(まだまだ浅いと思いますが)。

私の場合、最初にMPLABで繋がらず、じゃあという事でPICkit3 Programmerを試してみたのですが、
元々(何故か)ProgrammerModeになっていたか、
最初MPLABに繋がらなかったのは他の理由で、PICkit3 Programmerを試した時に、OSを切り替えてしまって深みにはまったか、
どちらかが原因のようですね。

いずれにせよ、やっと先に進むことができそうです。
どうもありがとうございました。

この場をお借りしますが、他のご回答者の方々も色々とコメントいただきましてありがとうございました。

お礼日時:2013/09/26 20:01

時間が経ってるため、既に解決してるかもしれませんが。

。。

お礼の回答にて「ProgrammerからPICKit3を選択」とのことですが、これが
MPLABの「Programmer」メニューから「PICKit3」を選択したという事と解釈した上で

>PK3Err0033: 4 bytes expected, 0 bytes received
のメッセージが出ると言うことでしょうか?

基本確認ですが、PICKit3はPICkit3 Programmerアプリを使うときと、MPLAB(X)上でデバッガ
(+プログラマ)を使うときで実行するダウンロードされ、起動するOSが別物ですが、モードの切替
を正しく行った上でしょうか?

PICkit3 Programmerでは認識するとのことですので、上記のエラーメッセージを見る限り
PICkit3 Programmer用のOSが動作したPICKitへMPLABから接続を試みてる感じがします。

PICkit3 Programmerアプリ上でモードをMPLABモードに戻してもダメでしょうか?
(Tools > Revert To MPLAB Mode)

MPLABモードではPICkit3 Programmerは動作しませんし、PICkit3 Programmerモード
(Tools > Download PICKit OS)にするとMPLABからの認識はできません。


また、確認でAKI-PICの場合PWR LEDが実装されてますが、書き込みの際、全く点灯しなければ
単純にチップ電源が供給されていないことになります。
その場合はMPLABのPower設定でPICKit3から供給するようにするか、USBを繋ぐなどして
Tagetの電源を入れた上で書き込み&デバッグをする必要があります。

この回答への補足

ご回答いただきましてありがとうごいます。
まだ解決していませんでしたが、そろそろ閉じないといけないかな、、と思っていたところです。

結論から申しまして、ご指摘いただいたOS切り替えでMPLABX IDEから書き込みできました!

ご回答いただいた、ProgrammerのToolでRevert to MPLAB modeを選択した後、
MPLABX IDEを起動⇒ビルド・書き込みで、正常に動作しました。

どうもありがとうございました。
お礼方々、後学の意味で以下質問させてください。

恥ずかしながらPICkit3のOS切り替えが必要というのが目からウロコだったのですが、
このOS切り替えは基本中の基本、当たり前のことなのでしょうか?
改めて、秋月の添付資料やPICkit3ユーザーマニュアル等を見返してみましたが、
そのような記載が見当たらなかったのですが、、、。

またOS切り替えはProgrammerからは行えましたが、MPLABX IDEからは行えないのでしょうか?
(MPLABを使用する際には、OS切り替えのためだけにProgrammerの実行が必須?)
(あ、たった今、MPLAB modeへの復帰が「ボタン押しながらUSB接続」でも出来ました。。)
そもそも通常出荷時は、どちらのモードになっているものなんでしょうか?

どうぞよろしくお願いいたします。

補足日時:2013/09/25 22:08
    • good
    • 0

ハードウエアが正しくセッティングされているかどうか確かめてみましょう。


PICkit3 と 基板を接続し電源を入れる。

ファームウエアを最新にするために、
Programmer -> PICkit3 を選択
Programmer -> Settings -> Configuration -> Manual Download を実行

電源の設定をする。
Programmer -> Power を選択
□Power Terget circuit from PICkit 3 のチェックを外す。
Voltageの表示が適切になっていることを確認。

リコネクトして見る。
Programmer -> Recconect を選択
Outputウインドーに
PICkit 3 detected
....
....
PICkit 3 Connected
Target Detected
Device ID Revision = xxxxxx
と出ればOK、出ない場合は、Program タブの Hold In Rest をクリックしてから、再度レコネクトを実行してみてください。
これでうまくいかないようであれば、PICkit 3 または基板の不良が考えられます。
その場合は、PICkit 3 を別のPICマイコンに接続して様子を見るなどが必要でしょう。
Outputウインドーに出たメッセージ全てをそのままに示してください。
    • good
    • 0
この回答へのお礼

ご回答いただきましてありがとうございます。お返事が遅くなり申し訳ありません。
別のPCで試してみました。結果は同じでしたのでご報告させていただきます。

<ProgrammerからPICkit3を選択した時のoutputウィンドウ>
PICkit 3 detected Connecting to PICkit 3...
PK3Err0033: 4 bytes expected, 0 bytes received

Failed to properly connect to PICkit 3

<ファームウェアを手動ダウンロードした時>
Downloading Firmware...
PK3Err0038: Failed to initialize PICkit 3.

Failed to properly connect to PICkit 3

PK3Err0075: Unable to set power.

<Powerにチェックを入れた時に出てきた警告メッセージ>
Voltage Caution
CAUSION:Check that the device selected in MPLAB IDE (pic18F4553) is the same one that is physically attached to the debug tool. Selecting a 5V device when a 3.3V device is connected can result in damage to the device when the debugger checks the device ID.
ここでOKとしても次に見るとチェックが消えています。
<Powerにチェックを入れた時に出てきたOutputウィンドウのメッセージ>
PK3Err0075: Unable to set power.

ずっとMPLABX IDEを使用していましたので、エラーコードが出てきていませんでしたが、
エラーコードから原因が特定できる可能性があるのでしょうか。

PICkit3もしくは基板の不良が考えられますが、PICkit 3 v3.10というプログラミングツールでは、
正常に書き込み出来ています。(プログラム終了時にエラーは出ますが、書き込み自体は終了している)
(ちなみにMPLAB IPEではconnecting errorが出ます)
書き込み後、基板単体でプログラミングした通りの動作を確認しています(LEDのON/OFFプログラムですが)。

コメントいただけましたら幸いです。
どうぞよろしくお願いいたします。

お礼日時:2013/09/14 17:39

PICマイコンでデバッグを行う時には、発振回路が正常に動作していないとデバッグ出来ない事が有ります。



発振のコンフィギュレーション(OSCILLATOR CONFIGURATIONS)の設定はどうなっていますか?
型番がAE-USBPIC44であれば、HSを選択する必要が有ります。
(INTIO1またはINTIO2 でもデバッグは可能です)
    • good
    • 0
この回答へのお礼

ご回答いただきましてありがとうございます。

現在、プログラムは製品付属のサンプルプログラムを使用しています。
ご指摘の点ですが、下のようになっていました。
#pragma config PLLDIV = 5 // (20MHz crystal)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS

試しにFOSCをHSにしてトライしてみましたが、同じ結果でした。

下記、状況を補足させていただきます。

なお、PICkit3にターゲットを接続していた場合と、ターゲットを接続しない(PICkit3のみUSB接続)場合で書き込み動作してみましたが、
どちらもconnection failed(メッセージは前記同様)になります。
ターゲットが間違っている場合は、Target device was not found. といったメッセージが出るようですが、
これは出ません(ターゲット未接続状態での結果なので別問題かも知れませんが)。

またPICkit3のStatusLEDは、見ている限りbusy等の点灯(点滅)がありません。
programmer使用時は点灯、点滅していました。

どうぞよろしくお願いいたします。

お礼日時:2013/09/11 21:38

エラーメッセージをきちんと補足して欲しいのですが、状況から見ますとPICkit3とターゲットとの間で不具合があるのではないかと思われます。


書き込めた後のエラーならベリファイ時の問題、ターゲットからの読み込みが正常にできていないのではないでしょうか。
PB6とPB7に何か接続していませんか?

この回答への補足

再度レスいただきありがとうございます。

エラーメッセージは、
Connecting to programmer...
The programmer could not be started: Could not connect to tool hardware: PICkit3PlatformTool, com.microchip.mplab.mdbcore.PICKit3Tool.PICkit3DbgToolManager
と出ています。

書き込み時の画面をググってみますと、
Connecting to programmer...
の後に、Firmware・・・といったファームウェアのバージョンか何かを示すメッセージが出るようですが、
ここまで行かず、上記のような接続できなかったというエラーになっています。

PB6,7には何も繋がっていません。コネクタの4,5ピンと接続されているだけでした。

本日、最新のMPLABX IDE(V1.9)で再インストールしましたが、同じ結果でした。

なお、試しにPICkit3を接続せずに書き込みしてみると、何に書き込むのか、という画面が出てきます。
PICkit3を接続しているとこの画面は出ないので、一応認識はされているみたいです。

やはりターゲット側なのでしょうか。
何かお気づきの事がありましたら、お教えください。どうぞよろしくお願いいたします。

補足日時:2013/09/10 19:34
    • good
    • 0

RESETピンやその他のICSP用のピンに大きなコンデンサや負荷が接続されていませんか?

    • good
    • 0
この回答へのお礼

早々のご返事ありがとうございます。

ご指摘の点ですが、回路は秋月電子のマイコンボードを使用しています。
(型番はAE-USBPIC44(PIC18F4553)です)
記載してなくて申し訳ありません。

回路図上では、ICSPコネクタは1ピンが100Ωを介してマイコンのVpp端子およびリセットボタン、
2ピンが電源ライン、3ピンがGND、4ピンがマイコンのPGD端子、5ピンがマイコンのPGC端子につながっており、6ピンは未使用です。

programmerでは(取りあえず)書き込み出来たことから、ボード側ではなく、PCの設定の設定に問題があると思っていましたが、ボード側の不具合が原因ということも考えられるのでしょうか。

お礼日時:2013/09/09 21:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPIC のデータEEPROMに書き込みができません

お世話になります。
PICのデータEEPROMへの初歩的な書き込みができずに悩んでいます。
ご経験のある方、私の誤りについてご教示いただければありがたく思います。

PICについてはいくつかの種類でプログラムを書いていますがEEPROMのデータ領域は初めてです。
各種のサイトでは簡単らしいのですが・・・

当方の試験作業は次のとおりです。

対象チップ PIC16F819
パソコン Windows-XP
書き込み装置 PIC-kit3
書き込みソフト MP-LAB IDE V8.83
プログラム言語 HI-TECH C V9.83
電源 Pic-Kit3から5Vで供給
確認方法
・MP-LAB- View- EEPROM- のFillmemoryにより、EEPROMにすべてFFH/00Hのいずれもが書き込めることを確認の上、256バイトすべてにFFH
・下記プログラムを走らせる
(実行後1秒後に1回書き込み(十進15番地に十進20の例)、以降ランプの点滅。ランプの状態でひとまずの動作の正常は確認)
・MP-LAB- View- EEPROM- により確認・・(全部FFHのまま(泣))

そのほか、チップを新品に交換したり、書き込み時間をEEIFで検査するアルゴリズムにしてみたり、いろいろやってみましたが、壁にぶつかっています。
よろしくお願いいたします。

#include<htc.h>
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000
#endif

__CONFIG(CP_OFF & BOREN_OFF & MCLRE_OFF & PWRTE_ON & LVP_OFF & WDTE_OFF & FOSC_INTOSCIO & DEBUG_OFF & CPD_OFF);

void main() {
OPTION_REG = 0b00000000; // output pullup
OSCCON = 0b01100100; // internal OSC 4MHz
TRISA = 0b11111110; // GP-A input RA7=output
ADCON1 = 0b10000111; // No AD all digital
TRISB = 0b00000000; // GP-B output
INTCON = 0b00000000; // no interrupt

RB1 = 0;    //Green Lamp off
RB3 = 0; //Red Lamp off
while (WR = 1) {
__delay_ms(1000);
}

EEADR = 15;
EEDATA = 20;
EEPGD = 0;
GIE = 0;
WREN = 1;
EECON2 = 0x55;
EECON2 = 0xaa;
WR = 1;
     RB1 = 1; // Green Lamp
__delay_ms(100);
     RB1 = 0;
    GIE = 1;
 WREN = 0;

EWWW:; // IDLE Lamp Red
RB3 = 1;
__delay_ms(400);
RB3 = 0;
__delay_ms(500);
goto EWWW;

}

お世話になります。
PICのデータEEPROMへの初歩的な書き込みができずに悩んでいます。
ご経験のある方、私の誤りについてご教示いただければありがたく思います。

PICについてはいくつかの種類でプログラムを書いていますがEEPROMのデータ領域は初めてです。
各種のサイトでは簡単らしいのですが・・・

当方の試験作業は次のとおりです。

対象チップ PIC16F819
パソコン Windows-XP
書き込み装置 PIC-kit3
書き込みソフト MP-LAB IDE V8.83
プログラム言語 HI-TECH C V9.83
電源 Pic-Kit3から5Vで供...続きを読む

Aベストアンサー

<Read EEPROM> コマンドを実行していますか? pic_eeprom -> MPLAB
また出力されたアセンブルリストを確認してみては

http://sdr-de-bcl.blog.so-net.ne.jp/2010-03-27
http://sfukuda.at.webry.info/201112/article_10.html

参考URL:http://www.robotsfx.com/robot/robohow/RoboHow106/RoboHow106.html

QPICシリアル通信での入出力送信方法

現在PIC勉強中の初心者です。
教えて頂きたいのですが、

現在PIC16F877Aを2台使用して相互間をシリアル通信で結び、
一台のPICからの入力12点を二台目のPICの出力12点に出力するプログラムを作成中です。
現在は通信で1点の入力をうけ1点の出力にだすところまでは何とかできました。

そこで調べても合理的で良いやりかたが見つからなかったのでよく御存じの方に教えて頂きたいのですが、
12点の入力をどのようなやり方でまとめ、シリアル通信で送り、どのようなやり方で展開し12点の出力を出すのか良いやり方がありましたら教えて下さい。
(入力はRA,RE,RC,RDを使い、出力はRB,RC,RDを使用してます)
(自分としては2進数でまとめて2つ送ったらわかりやすいのではないかと思っているのですが..)

Aベストアンサー

PICも含めて、いかなる組込みマイコンでシリアル通信を行う場合でも、その内蔵のシリアル通信機能を使えば、比較的簡単に「送信」する事は誰でも可能です。

問題は、シリアルデーターの2バイト以上の受信です。
(1)その内蔵のシリアル通信機能で、いつ来るか判らない「受信データー」を絶えず環視している必要が有る。->つまり割込処理とするか、あるいは絶えず受信のプログラムを優先的に動かしている必要があるという事です。

(2)内蔵機能であろうが、プログラムでのシリアル受信であろうが、1バイト以上連続して何バイトもデーターが送られて来る様な場合には、その間髪入れずに送られてくるバイトデーターを、取りこぼす事無く、次々と記憶する領域(バッファー)が必要となります。

PICの内蔵シリアル受信機能には、バイトバッファを2個持っています。つまり、2個までは連続したバイトデーターを取りこぼしする事無く自動で受信できますが、それ以上連続したバイトを受信すると、取りこぼしを起こすという事です。

今回は、2バイトで済むので、特に問題なく受信が可能と思いますが、あまりにも、通信のノイズに対する防御が無くて、今後のためにも、そのままの受信はお薦めできません。

詳しくは、下記サイトにPICでのシリアル通信で、割込型ソフトウエアFIFOバッファについて、やさしく詳しく教えています。

ご参照ください。これを知らないと、2バイト以上の受信が全てのマイコンで出来ません。
「パレットソフト」
http://www.palettesoft.co.jp/index.htm
HOME > 技術談話 > PIC microcontroller > シリアル通信

頑張って下さいね。

PICも含めて、いかなる組込みマイコンでシリアル通信を行う場合でも、その内蔵のシリアル通信機能を使えば、比較的簡単に「送信」する事は誰でも可能です。

問題は、シリアルデーターの2バイト以上の受信です。
(1)その内蔵のシリアル通信機能で、いつ来るか判らない「受信データー」を絶えず環視している必要が有る。->つまり割込処理とするか、あるいは絶えず受信のプログラムを優先的に動かしている必要があるという事です。

(2)内蔵機能であろうが、プログラムでのシリアル受信であろうが、1バイト...続きを読む

Q抵抗の1/2W、1/4Wの違いについて

 クルマのLED工作で抵抗を使おうと思っています。

 その時 抵抗には、〇Ω以外にも
1/2W、1/4W等の規格があるのですが、よくわかりません
調べてみたところ<電力消費>という
キーワードが分かりましたが他がサッパリ・・・・

・例えば (+)1/4W 430Ω LED (-)という場合
抵抗を 1/2W 430Ωでは、ダメなのですよね?
 1/2Wの場合 〇Ωになるのでしょうか?

・また、1/2W、1/4Wは、単純に大きさ(太さ、長さ)で
判別がつくのでしょうか?

Aベストアンサー

抵抗が焼ききれずに使用できる or 性能を保証できる電力です。

例えば1kΩの抵抗に24Vの電圧を与えると、抵抗はP=V*I=(V^2)/R=0.576Wの電力を熱として消費します。
1/2W抵抗は0.5Wまでしか持たないので1W抵抗を使用することになります。
一瞬でも定格を越えるとダメなので、通常は余裕を持って考えます。

>・例えば (+)1/4W 430Ω LED (-)という場合
>抵抗を 1/2W 430Ωでは、ダメなのですよね?

定格を満たしているため問題ありません。

>・また、1/2W、1/4Wは、単純に大きさ(太さ、長さ)で
>判別がつくのでしょうか?

大抵の場合大きさで分かります。長さも太さも違います。
同一シリーズであれば確実にワット数の大きいほうがサイズがでかいです。
(1/2W>1/4W)

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1314083328

QPICはアセンブラとC言語のどちらにすればよいですか

PICマイコンをはじめるにあたって、アセンブラかC言語、どちらにしようか迷っていたところ、下記の知恵袋で「まだ、C言語に手を出していないのであれば、絶対にアセンブラーから学んで下さい。」

ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1386032198

と、書いてありました。実は以前よりC言語を勉強していたのですが、どちらにすればよいですか?
詳しくは上のサイトを見て頂きたいのですが、この知恵袋の回答者の方が言う「構造体・ポインター」の直前、アドレス・バイトとビット付近で現在つまずいていて、PICとまとめてC言語の書籍で補おうとしていたのですが、タイミングとしてはちょうど良いでしょうか?

C言語のレベルとしては、プログラミングで必ず出てくる、文章表示と繰り返し・条件分岐・論理演算くらいしかわかりません。

C言語とアセンブラ、現在の自分にどちらの方が適当かご教示ください。

Aベストアンサー

「繰り返し・条件分岐・論理演算」が分かっているならとりあえずプログラミングの入門は済んでいるようですね。この辺でアセンブラに手を出すのは面白いと思います。

ただ、アセンブラを学ぶにあたってPICマイコンは最悪です。
kabasanさんも「苦行以外の何物でもなく」とおっしゃっていますが、PICのアーキテクチャ(構造)は最近の流行から外れており、非常に癖があります。
私もPICはよく使っていますが、パズルとしての楽しさを求めてアセンブラを書いているように思います。
癖の詳細については割愛しますが、ざっと言うと「レジスタが1つのみ」「命令とデータのアドレスが別」「命令数が35個などと少ない」あたり。
なおこれはPICのうち、ベースライン・ミッドレンジ・Enhancedミッドレンジ・ハイエンド(PIC18)に当てはまります。
他の、PIC24・PIC32については上記の癖はありませんが、これらのPICはマイナーなので、あえてそれらを選ぶ理由はないように思います。
(PICを選ぶ理由は情報の多さと入手性のよさが主なので)

命令セットが素直なマイコンとしては、AVRマイコンが良いでしょう。PICに比べて情報が少ないのが難点ですが。
またARM(特にThumb命令セットのCortexM0(+)あたり)もよいですが、こちらも情報が少ないですし高性能なゆえの難解さがあります。
マイコンにかぎらずアセンブラを学びたいならx86という手もなきにしもあらず。命令セットは非常に複雑ですが、その分かゆいところに手が届く便利さがあります。情報が多いのも嬉しいところ。

「繰り返し・条件分岐・論理演算」が分かっているならとりあえずプログラミングの入門は済んでいるようですね。この辺でアセンブラに手を出すのは面白いと思います。

ただ、アセンブラを学ぶにあたってPICマイコンは最悪です。
kabasanさんも「苦行以外の何物でもなく」とおっしゃっていますが、PICのアーキテクチャ(構造)は最近の流行から外れており、非常に癖があります。
私もPICはよく使っていますが、パズルとしての楽しさを求めてアセンブラを書いているように思います。
癖の詳細については割愛しますが、...続きを読む

Qプルアップ抵抗値の決め方について

ほとんどこの分野に触れたことがないので大変初歩的な質問になると思います。

図1のような回路でプルアップ抵抗の値を決めたいと思っています。
B点での電圧を4.1Vとしたい場合について考えています。その場合、AB間での電圧降下は0.9Vとなります。

抵抗値×電流=0.9Vとなるようにプルアップ抵抗の値を決めるべきだと考えていますが、この抵抗に流れる電流が分からないため、決めるのは不可能ではないでしょうか?

抵抗値を決めてからやっと、V=IRより流れる電流が決まるため、それから再度流れる電流と抵抗を調節していって電圧降下が0.9Vとなるように設定するのでしょうか。どうぞご助力お願いします。



以下、理解の補足です。
・理解その1
ふつう、こういう場合は抵抗値を計算するためには、電圧降下と抵抗に流れる電流が決まっていることが前提だと考えていました。V=IRを計算するためには、この変数のうち2つを知っていなければならないからです。
また、例えば5V/2Aの電源を使った場合、マイコン周りは電源ラインからの分岐が多いため、この抵抗に2A全てが流るわけではないことも理解しています。

電源ラインからは「使う電流」だけ引っ張るイメージだと理解しているのですが、その「使う電流」が分からないため抵抗値を決定できません。(ポート入力電流の最大定格はありますが…)


・理解その2
理解その1で書いたように、抵抗値を計算するためには、電圧降下と抵抗に流れる電流が必要だと理解しています。図2を例に説明します。Rの値を決めたいとします。
CD間の電圧降下が5Vであることと、回路全体を流れる電流が2Aであることから、キルヒホッフの法則より簡単にRの値とそれぞれの抵抗に流れる電流が分かります。今回の例もこれと同じように考えられないのでしょうか。

ほとんどこの分野に触れたことがないので大変初歩的な質問になると思います。

図1のような回路でプルアップ抵抗の値を決めたいと思っています。
B点での電圧を4.1Vとしたい場合について考えています。その場合、AB間での電圧降下は0.9Vとなります。

抵抗値×電流=0.9Vとなるようにプルアップ抵抗の値を決めるべきだと考えていますが、この抵抗に流れる電流が分からないため、決めるのは不可能ではないでしょうか?

抵抗値を決めてからやっと、V=IRより流れる電流が決まるため、それから再度流れる電流と抵抗を調...続きを読む

Aベストアンサー

NO1です。

スイッチがONした時に抵抗に流れる電流というのは、最大入力電流や最大入力電圧
という仕様から読めば良いのでしょうか。
→おそらくマイコンの入力端子の電流はほとんど0なので気にしなくてよいと思われます。
入力電圧は5Vかけても問題ないかは確認必要です。

マイコンの入力電圧として0Vか5Vを入れたいのであれば、抵抗値は、NO3の方が
言われているとおり、ノイズに強くしたいかどうかで決めれば良いです。
あとは、スイッチがONした時の抵抗の許容電力を気にすれば良いです。
例えば、抵抗を10KΩとした場合、抵抗に流れる電流は5V/10kΩ=0.5mAで
抵抗で消費する電力は5V×0.5mA=0.0025Wです。
1/16Wの抵抗を使っても全く余裕があり問題ありません。
しかし、100Ωとかにしてしまうと、1/2Wなどもっと許容電力の大きい抵抗を
使用しなければいけません。
まあ大抵、NO3の方が書かれている範囲の中間の、10kΩ程度付けておけば
問題にはならないのでは?

QPIC 16F84A でLEDが点滅しない

どんな事をしても、LEDが点滅しません何が原因なのかわかりません。何方か教えて頂けませんか。
環境は、Windowos8 MPLAB X IDE XC8 PICkit3  Pickit3対応ICSP書き込みアダブターです。

PICは PIC16F84A を使用しています。ソースコードは下記のようにしてあります。

 #include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = ON // Watchdog Timer (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (Power-up Timer is disabled)
#pragma config CP = OFF // Code Protection bit (Code protection disabled)
#define_XTAL_FREQ 20000000

void main(void) {
TRISA = 0x00;
PORTA = 0x031;
TRISB = 0x00;
PORTB = 0x00;

while (1)
{
PORTA = 0x02;
Delay_ms(1000);
PORTA = 0x01;
Delay_(1000);
}
}

------------回路  PIC16F84A      ------------

  18  RA1-----1Kオーム----- (K)LED(A)----←  5V   
  17  RA0----- 1Kオーム-----(K)LED(A)----←  5V  
  16  OSC1----
            セラロック20MHZ -------- GND
  15  OSC2----
  14 VDD---------------← 5V
   4  MCLR--------------← 5V
5 VSS----------------- GND

 
コンパイルも、書き込みもできましたが駄目でした。いろいろ試みましたが成功しません。

コンフィギレーションに決定的な間違いがあるのではないか?疑っております。

よろしくお願いいたします。

どんな事をしても、LEDが点滅しません何が原因なのかわかりません。何方か教えて頂けませんか。
環境は、Windowos8 MPLAB X IDE XC8 PICkit3  Pickit3対応ICSP書き込みアダブターです。

PICは PIC16F84A を使用しています。ソースコードは下記のようにしてあります。

 #include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = EXTRC // Oscillator Selection bits (RC...続きを読む

Aベストアンサー

No5です。

ああ、すみません、「高速クリスタル」と書いてしまいましたが、クリスタル(水晶)発振子とセラミック発振子で設定に違いはありません。
セラロックでも(周波数が3.5MHz以上なら)同じくHSです。

このHSという名前ですが、
まずそもそもPIC16F84Aでは、FOSCの選択肢として
・RC RC発振器
・HS 高速クリスタル/セラミック発振子 (3.5MHz以上)
・XT クリスタル/セラミック発振子
・LP 低出力クリスタル
の4つがあります。
これはデータシートに載っている名前なのですが、C言語では「RC」に対して「EXTRC」という別の名前を使っているようですね。
PICのC言語には詳しくないのですが、どこかに「HS」に対応するC言語での名前が載っていませんか?

なお「FOSC_INTOSCIO」は内蔵クロックが搭載されたPIC専用の設定ですね。16F84Aには内蔵クロックはありません。

Q三端子レギュレータに付けるコンデンサ

三端子レギュレータ7805を使用するのに、あるHPで「入力、出力側にそれぞれ1つずつ0.1μFのコンデンサを付ける」というのを見た事があるのですが、別の本には入力側には22μF、出力側には100μFを取り付けるとありました。
どちらが正解なのでしょう?また、2つの違いは何でしょう?
目的に応じて使い分けたりするのでしょうか?

Aベストアンサー

どちらも正しく、どちらも間違っています。
本に書いてあるから、ではなく、設計によって違ってきます。
つまり、入力電圧、入力のリップル含有率、出力電流、出力に求めたいリップル含有率、出力のリアクタンス分・・・などなど
それによって計算します。
それから、リップル率によってコンデンサに流れる電流を求め、そこから発熱を求め、それに耐えられるコンデンサを選びます。
また、入力電圧と出力電圧の差、出力電流、リップル率、使用状態の周囲温度などから、レギュレータの発熱を計算し、熱抵抗を求めて、放熱板を決定します。
かなり面倒な計算なので、おおよその回答を言いますと、7805は出力が5V1Aの定格ですから、最大0.8Aまで使うとし、入力はAC6Vの全波整流として、入力も出力も100μFの電解コンデンサと0.1μFのプラスチックコンデンサを並列接続したもので、いけると思います。
ただし、0.1μFのコンデンサはレギュレータの足に直結します。
100μFのコンデンサは回路中についていればどこでも良いです。

入力はAC6Vの全波整流で、出力電流を0.8A取ると、レギュレータで約1.6Wを消費しますので、周囲温度を30℃まで使うとして、ジャンクション温度を80℃にしたければ、熱抵抗は25℃/W程度の放熱板が必要です。
これ以外の入力電圧や、出力電流の場合は再計算が必要です。

どちらも正しく、どちらも間違っています。
本に書いてあるから、ではなく、設計によって違ってきます。
つまり、入力電圧、入力のリップル含有率、出力電流、出力に求めたいリップル含有率、出力のリアクタンス分・・・などなど
それによって計算します。
それから、リップル率によってコンデンサに流れる電流を求め、そこから発熱を求め、それに耐えられるコンデンサを選びます。
また、入力電圧と出力電圧の差、出力電流、リップル率、使用状態の周囲温度などから、レギュレータの発熱を計算し、熱抵抗を...続きを読む

QPICでのI2C通信でのマスタ、スレーブの切り替え

現在PIC18F2550同士で、I2C通信を行いたくアセンブラでプログラミングをしておりますが、教えていただきたい点があります。

・マスターとスレーブは動作中に入れ替えることはできないのでしょうか?
RS等から任意の信号を与えると、マスタとスレーブが切り替わるようなことがしたいのですが、どの書籍をみてもそのような事ができるとは書いてなく困っております。

・PICだけでなくI2C通信を行うことのできるマイコンorCPU(プログラミングが簡単で高速動作できる)はあるのでしょうか?あればお教えいただきたいです。

以上よろしくお願いいたします。

Aベストアンサー

>4つぐらいのPICを全てRS232CでPCと繋ぎ、また各PICをI2Cで繋ぎたいと考えております。そして、PICメモリ内のデータをI2Cで4つの PICとやり取りしたいと考えた時、I2Cではマスタとマスタのデータ送受信はできないと思いました。そのため、マスタとスレーブの入れ替えが必要かと思いました。

たしかにマスタ間は通信できません。通信できるのはマスタとスレーブ間だけです。しかし、この仕様だと4つが同時にマスタ要求する可能性があることを考えるとかなり難易度が高いですが大丈夫ですか?
マスタがスレーブ間のデータをマスタ経由で再転送仕組みにするほうが圧倒的に楽です。速度的に許されるなら検討してみてください。
スレーブA→マスタ→スレーブBって感じでデータを受け渡します。スレーブ間は必ずマスタを経由するので、効率は悪いですが制御は圧倒的に楽です。

>お完全に知識不足および情報不足で申し訳ありません。PIC18Fシリーズより高速であればよいのですが・・・。8bitや16bitなどのbitの違いが私にはわかっていません。もっと学習する必要がありますね。

簡単にプログラムを組むならC言語でI2Cライブラリを使ったほうが圧倒的に楽です。C18というコンパイラを検討してみてはどうでしょうか?
http://www.picfun.com/mccframe.html

とりあえず高速化なら環境のさほど変わらない同じマイクロチップ社のPIC24FかdSPICを使えばC言語とI2Cのライブラリもあるので楽に組めると思います。
速度的には、コンパイラの最適化なしでもPIC18Fの数倍は楽に出ると思いますが、コンパイラの最適化が期限付きなので、必要ならコンパイラのライセンスを購入してください。
http://www.picfun.com/
でPIC(16bit)を参照のこと。

>4つぐらいのPICを全てRS232CでPCと繋ぎ、また各PICをI2Cで繋ぎたいと考えております。そして、PICメモリ内のデータをI2Cで4つの PICとやり取りしたいと考えた時、I2Cではマスタとマスタのデータ送受信はできないと思いました。そのため、マスタとスレーブの入れ替えが必要かと思いました。

たしかにマスタ間は通信できません。通信できるのはマスタとスレーブ間だけです。しかし、この仕様だと4つが同時にマスタ要求する可能性があることを考えるとかなり難易度が高いですが大丈夫ですか?
マスタがスレーブ...続きを読む

Qmakeコマンドのエラーについて(

UNIX(Linux)系のOSやC言語には不慣れなのですが、よろしくお願いします。

普段はWindows7(Home Ed.)を利用しているのですが、
いくつかのlinux系のソフトを利用する際にcygwinも利用しています。


==========================================================
cygwinにソフトウェアをインストールしようとする際に、
ときどき遭遇するエラーなのですが

仮にsoftware.tar.gzというソースファイルからインストールしようとして、

> gunzip -c software.tar.gz | tar xvf -
> cd software
> ./configure
> make
.....
make: *** [all-recursive] error

というエラーが生じて、makeが通らない時があります。
=========================================================


これまで何度か、どういうエラーなのか調べようとする度に挫折し、
何回かやり直している内に、たまたまmakeがすんなり通って
インストールできてしまったりしていたので、
なんとなくうやむやにしていました。

そもそも、この"all-recursive"に全くピンとこないのですが、
これはどういった場合に生じるエラーを示しているのでしょうか?
recursive(再帰的な)だから、関数かなにかの呼び出しに失敗している、
とかそういうことなのでしょうか?


エラーの内容はケースバイケースだし、
漠然とした質問になって申し訳ないのですが、
ちょっとしたアドバイスでもいいので、ご回答をお願いします。

UNIX(Linux)系のOSやC言語には不慣れなのですが、よろしくお願いします。

普段はWindows7(Home Ed.)を利用しているのですが、
いくつかのlinux系のソフトを利用する際にcygwinも利用しています。


==========================================================
cygwinにソフトウェアをインストールしようとする際に、
ときどき遭遇するエラーなのですが

仮にsoftware.tar.gzというソースファイルからインストールしようとして、

> gunzip -c software.tar.gz | tar xvf -
> cd software
> ./configure
> make
...続きを読む

Aベストアンサー

お腹痛いのに、一生懸命違うところを診察しているようなものですかね。

make[2]: *** [tvsetf.o] Error 1
この行より上全部じゃないですか?
WARNINGとかも出てますしね。

仰るとおりケースバイケースではありますが、例えば自分で作ったプログラムでの話ならばプログラムのミスが考えられますが、どこかの出来合いのフリーウェアをmakeしてエラーで落ちる場合は、環境が整っていない場合があります。(○○がインストールされていないとか…)

その辺は全てconfigureやmake時に出てくるメッセージをちゃんと見ることです。

なぜ最後に出てくるall-recursiveだけに注目してるのか知りませんが、見なくてもいいものをずっと見ていても問題は解決しません。

QPICのI2C通信のプログラムについて

I2Cの同報機能を使いたいのですが、プログラムの書き方がよく分かりません。
後閑さんの電子工作の実験室も見たんですが、そこに書いてあったのは多分アセンブラのプログラムで、CCSを使っている自分には理解できませんでした。
CCSで同報機能は使えるのでしょうか?もし使えるのなら、プログラム例などをいただけると助かります。
ちなみに、使っているPICはマスターが16F873でスレーブが16F819です。
よろしくお願いいたします。

Aベストアンサー

後閑さんの電子工作の実験室にC言語のもあります。
http://www.picfun.com/c15.html
I2Cの同報機能は、送信する「スレーブのアドレス指定」を0にするだけで実現できますので、Cでも問題なく使えますよ。

同報では無いですが、I2C通信の参考に。
PICでI2C通信(PIC16F873)
http://homepage1.nifty.com/rikiya/software/316PICI2C.htm


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報