PIC16F84AのBポートのHレベル時の電圧について

このQ&Aのポイント
  • PIC16F84AのBポート(RB0-RB7)のHレベル時の出力ポート電圧について調査した結果、2.2Vぐらいにしかならないことがわかりました。
  • データシートを確認したところ、V_OH = Vdd-0.7という式が示されており、予定では4.3V程度の電圧が出るはずでした。
  • HブリッジICを利用したDCモータの正逆転を行う予定で、Hレベルが2.47Vでは困るため、対策が必要です。
回答を見る
  • ベストアンサー

PIC16f84AにおけるBポート(RB0-RB…

PIC16f84AにおけるBポート(RB0-RB7)のHレベル時の電圧について いつも参考にさせて頂いています。 PICマイコンによる工作で困っているので、お力添えをお願いします。 現在、PIC16F84Aを使ってスイッチを押したらLEDが点灯するプログラムを作っています。 プログラム通りにLEDは点灯するようになりましたが、 プログラムにより出力を「H」レベルに設定したときの出力ポート電圧が2.2Vぐらいにしかなりません。 (ソース電流となるようにPIC出力端子 --> LED --> 抵抗 --> GNDとつないでます) データシートを眺める限りでは、 V_OH = Vdd-0.7 となっているので、私の予定では4.3V程度が出る予定です。 ソース電流は25mAまで流せるはずなので、仮に電圧が5.0Vでも、 抵抗が330Ωなので制限には引っかかりません。 この回路を応用し、HブリッジICを利用したDCモータの正逆転を行う予定なので、 Hレベルが2.47Vでは困ります。(IC側から「H」レベルと認識されない?) ハードウェアは以下のように設計・製作しています。 Vdd=5.0V(スイッチング電源から) Vss=0V(=GND) 外部クロック=セラミック振動子(10MHz) RA0~RA4までにスイッチをつけ、入力ポートと設定 RB0~RB7までにそれぞれLED+抵抗(330Ω)をつけ、出力ポートに設定 ご教授お願いします。 このURLの回路図と基本的に同じです。(違いは入力ポートの抵抗値など) http://homepage3.nifty.com/mitt/pic/pic6_01.html

noname#230358
noname#230358

質問者が選んだベストアンサー

  • ベストアンサー
noname#230359
noname#230359
回答No.2

毎度JOです。 PICに限らずCMOS ICの出力は、25mAまで流せると言っても、V OUT-Hを保障する物では有りません 出力電流が増加すれば、出力電圧も低下します、 PIC16F84A 下記参照URL http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf データシートのP70に特性グラフが載っています、FIGURE 10-13: 電源電圧5V時 25mA流すと最悪時0.5Vまで低下します 今回の事例ですと、電源電圧5V LEDの順方向電圧が2V・抵抗値330Ωとすると5V時9mAの電流が流れます グラフから最悪値を読み取ると、3.8V程度になります、 この値は出力するポートの数、温度、などで変化します、 データシートには、必要な全ての情報が記載されています、最適な設計をする為 隅から隅まで見ましょう。 気になった事が一点 >>出力を「H」レベルに設定したときの出力ポート電圧が2.2V Rが330Ωで2.2Vは異常です、33Ωの間違いではありませんか??

参考URL:
http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf
noname#230358
質問者

お礼

ご回答ありがとうございます。 まずご指摘を頂いたあと、大きな勘違いに気づきました。 出力ポートを「H」にしたときの電圧を計測していましたが、 8個全てのLEDが点灯した状態でした。 (つまりRB0からRB7まで全て「H」の状態でした) プログラムを書き換えてRB0のみが「H」になるようにしたところ、 RB0-GND間電圧は4.5Vになりました。 おそらく、全ての出力ポートに電圧を出す必要があったため、 一ポートあたりが低下したのだと解釈しています。 それとR=330オームの件ですが、カラーコードが橙橙茶金なので正しいようです。(おそらく2.2Vという数字に対しての気になる点だとおもいますが、 全点灯の状態でしたので2.2V自体が当てにならない数字でした。) データシートの読み方も含め大変勉強になりました。 ありがとうございました。

その他の回答 (2)

noname#230359
noname#230359
回答No.3

[ソース電流は25mAまで流せるはず] というのは大きな間違いです。 これは絶対最大定格なので「これ以上流すと壊れますよ」 という意味です。 VOHは3mAのときにVDD-0.7Vとデータシート9.2の項目D090にあります。 それ以上流すときはTrを使うべきでしょう。 http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf

noname#230358
質問者

お礼

ご回答ありがとうございました。 ご指摘通り絶対最大定格ですから、いわゆる限界値ですね。 それとデータシートの読み方について勉強になりました。 D090の件ですが、-3mAとマイナスがついていたので、 読み取り方が分かりませんでした。 (ついでにRCモードの時のみと書いてあったので セラロックを使っている場合には当てはまらないものだと思っていました) これはそのまま3mAと解釈して良いのですね。 下の方へのお礼欄にも書きましたが、 LEDを8個全てつけていたからこその電圧低下だったようです。 また機会がありましたらよろしくお願いします。

noname#230359
noname#230359
回答No.1

それでは逆にどのようにすれば,正規の電圧が出ますか。 それが分かれば,もう少し進むのではないでしょうか。 簡単な回路なので,逆の発想をすることの方が,皆さんの 意見を集めやすいのではないでしょうか。 見る限り,URLの回路図は,抵抗値が倍かつ0.5S置きの ブリンギングとなっているようです。 その辺まで一緒にしたらいかがですか。

noname#230358
質問者

お礼

ご回答ありがとうございます。 質問は16F84Aはデジタル入出力のため、 「H」or「L」のどちらかになるはずで、 私の回路の場合は、「H」=4.3V 「L」=0V になると考えられるのに、なぜ2Vぐらいと中途半端な電圧に なるかを知りたいことになります。 質問が曖昧ですいません。 なお、 オームの法則から電圧・電流・抵抗の関係を考えると、 出力ポートを「H」にしたら電圧が4.3Vとなり、 挟んだ抵抗の値(これは固定なので)によって、 流れる電流の量が変わると考えられます。 参考URLの場合は抵抗値が倍ですので、私と同じ電圧が発生した場合、 流れる電流の量が半分になるだけではないでしょうか?

関連するQ&A

  • PIC16F1827のEEPROMへの書込み

    PCM V5.0(PIC用CCS社コンパイラ)を Mplab8.92に組込み、PICkit3を使ってプログラムしています。 PIC16F1827のEEPROMへの書込みがうまくいきません。 RAは入力ポートで固定してあります。 RBは出力ポートでLEDが接続してあります。 テストプログラムは一回のみの動作です。 実機で動作させると RAは固定してあるので当然(4)でLEDが点灯しますが、 実機からCPUを抜き取りMplab上でReadすると EEPROMのアドレス0,1,2は異なるデータであり 動作させるたびに違うデータが書込まれています。 しかし (1) a0=35h (2) a1=a6h (3) a2=93h と定数にすると EEPROMのアドレス0,1,2は正しいデータが 書込まれています。 Q1. a0,a1,a2をポート入力とする場合は CPU自体に何か設定する必要があるのでしょうか? それともプログラムに工夫が必要なのでしょうか? いままで使っていたPIC16F88では このようなことはなかったと思うのですが・・・。 ----- テストプログラム ----- a0 = RA; //(1) write_eeprom (0,a0); a1 = RA; //(2) write_eeprom (1,a1); a2 = RA; //(3) write_eeprom (2,a2); if (a0 == a1 && a1==a2) //(4) RB =255; else RB =0;

  • PICのアウトポートに一瞬電流が流れる

    PICマイコン初心者です。 電源投入時に、一瞬アウトポートに接続したLEDが点灯するのですが この場合、プルダウン抵抗を入れるとか、又はプログラムで何か処理をする必要が あるのでしょうか? アドバイスお願いします。 接続はアウトポートから330Ωの抵抗を通してGNDへつないでいます。

  • PICマイコンで工作

    初心者なのですが、PICマイコンでLCD表示に挑戦したいと思っています。 そこで皆さんにお聞きしたいのですが、プロットボード上にPIC16F873を利用して回路を作成したのですが、何も表示されずただ■■■■■■が表示されるのみです。 何が原因なのか全然わからないので皆さんのご意見をお聞きしたいのですが・・・。 よろしくお願いします。 LCD Vdd・・・5V Vss・・・GND Vo・・・・20KΩ可変抵抗 RS・・・・RB3 R/W・・・RB2 E・・・・・RB1 DB0、DB1、DB2、DB3・・・GND DB4・・・RB4 DB5・・・RB5 DB6・・・RB6 DB7・・・RB7 PIC MCLR/Vpp・・・5V Vss・・・GND OSC1・・12.8MHz VDD・・・5V このような感じです。 プログラムは以下のHPを参考にさせて頂きました。 http://speana-1.hp.infoseek.co.jp/lcd/lcd_4/lcd_4.htm

  • PICの出力できる電圧について

    PIC(16F88)のキャプチャモジュールを使い、対象物の周波数を得て、それをLCDに表示する工作をしています。SIMやstimulusでプログラムにはとくに問題がないことを確認しました。 つぎに、別なPIC(16F84A)で100Hzの実験用信号を先の16F88のCCP1(RB3)に入れて、16F88のプログラムの確認をしようと思ったのですが、うまくいきません。LCDには、ただ0Hzとだけ表示されます。なお、ここでもSIM等を使って、プログラム上での100Hzの出力は確認しました。 16F84Aからは、RB0とRB1から100Hzの出力をし、RB0を16F88のCCP1に直接入力し、RB1にはLEDにて出力の視覚での確認をしようとしています。 ここで使用する両PICには、それぞれ別々にTA4805Sで5Vをかけ、アースは共通にしました。 手持ちのアナログ電圧計で、16F84AのRB0とRB1の出力電圧を測ってみると、RB0はほとんど0Vであり、RB1はおおよそ4.5Vあり、LEDはちゃんと光ります。また、RB1のLEDをそのままに、RB0を開放すると、RB0は4.5Vありました。16F88側のCCP1(RB3)は入力に設定してあります。 PICの出力する電圧は、5Vくらいだとおもっていたのですが、どうしてこのようなことになるのでしょうか?どうすれば、CCP1に100Hzの実験用信号を送れるようにできるのでしょうか?電気にはまったく疎いので現在勉強中なのですが、どなたかよろしくおねがいいたします。

  • PIC16F84AのRBポート変化割り込みの使い方

    PIC16F84AのRBポート変化割り込みを使いたいのですが、三つ質問があります。 1.割り込み処理に入ったときに、「BCF INTCON,RBIF」としてもRBIFフラグが立ったままで、「RETFIE」で割り込みから戻った直後にすぐにまた割り込み処理に入ってしまいます。(MPLABのシミュレーション上でStimulusControlerでPINを変化させて実験)これの原因は何なのでしょうか?RBIFフラグはどのようにして解除したらよいのでしょうか? 2.RBポートは内部でプルアップせずに、外に抵抗をつけてプルアップしようと考えているのですが、その場合でも正しくシミュレーションできるのでしょうか? 3.RBポート変化割り込みは、LからHになった場合と、HからLになった場合の両方に反応するのでしょうか? 以上三つの質問に回答お願いします。

  • PICによるLED制御について

    大学の講義でPICのLED制御の課題がよくわかりません。 どなたか教えていただけないでしょうか? [問]  PIC16F84Aにおいて、動作を実現するプログラムを示せ。  メインルーチンでLED出力の点燈箇所を1秒ごとに巡回させる。   RA3=Low(OFF)のとき、左向きに巡回シフト(RLF命令)させる。   RA3=High(ON)のとき、右向きに巡回シフト(RRF命令)させる。  また割り込みルーチンによって、RA0~RA2の3ビットの値に応じて  点灯速度を変化させる(値が大きいほど速く)  ただし、ポートAは全て入力モード、ポートBはRB0以外を出力モードとし(RB0は割り込み用)、ポートBの初期出力を0000100*(LED出力の初期点燈位置は第3ビットのみ)とせよ。

  • マイコンPIC16F84Aについて質問です

    MPLAB(秋月)のライターを使用して PIC16F84Aにプログラムを製作したいのですがプログラムの組み方がわかりません 内容は、センサー5v~24vがオンしたらLEDが点灯する回路です。 動作確認をしたところ、センサーはオンオフしているのですが、LEDが点灯しません。 プログラムを組む時に、RB0がオンしたらRA0がオンする為の繋がりがイマイチわかりません。 c言語はわからないので、アセンブル命令で教えていただけないでしょうか? 初心者なので全くわかりませんがお願いします。

  • PIC アセンブラ ポートB 内部プルアップ抵抗の使い方

    PIC16F877Aを使っています。 プログラムを作り始めてかなりたってから ポートBにプルアップ用の抵抗があることを知りました。 それで使い方とか調べてみたんですが ポートBで内部プルアップを使う場合は RBを全部入力設定にしないといけない的な事を 書いてるページがありました。 これって、そうしないとPICが壊れてしまうって事でしょうか? RB0~RB3にタクトスイッチ(入力) RB4~RB7に7セグのカソード(出力) として入出力を混ぜて使いたいのですが スイッチ用にポートBをプルアップ抵抗ONにしても問題ないでしょうか?

  • PICのポートからの読み込みが正しくできない

    先月は16F648AのRA4出力が正しく出来ないを質問した者です。 またしてもお願いします 16F648AのRA1,RA0 にSW信号を抵抗でプルアップして入力、RA2はLEDを抵抗を通して直接駆動しています TRISA はこれに対応してXXXX X011 を設定していて プログラム中でRA1を押されたらLED ON, RA0が押されたらLED OFF となるようにテスト用プログラムを作りましたが SW信号を読み取れていないようです 17,18ピンの電圧を見るとSWの動きと正しくON/OFFしています 先月同様見落とししていることがあると思っていますが 正しい、多分正しいと思遺恨でいますこともあって解決できません お気づきの点がありましたら教えてください お願いするばかりですが宜しくお願いします

  • PIC16F84AのRA4ポートに流せる最大電流

    PIC16F84AのRA4(オープンドレイン)を使ってリレーを直接ON/OFFさせようと 考えていますが、RA4ポートは最大どのくらいまで電流を流せるのでしょうか。 自分なりに仕様書を見ましたが、RA4については記載が無かったと思います。 リレーは、コイル電圧が5V、電流40mAです。 よろしくお願いします。