• 締切済み

PIC16F193x データシートについて

www.microchip.jp/docs/41364B_JP.pdf でダウンロードしたデータシートです。 データシート通りピンアサインすると誤動作します。 実際に使用しているPICは16F1938です。 一般的にピン機能番号(Rxは~)反時計回り(CCW)に番号付されていますが、上記データシートによると一部その規則に沿っていません。 PIN9/10は時計回りに番号が振られRA7/ RA6となっています。 実際、RA6(PIN10)に出力しましたが、データシートで示すRA7(PIN9)が反応します。 同様に RA7に出力すると、データシートで示すRA6が反応します。 それほど新しいPICではないのに、データシートが間違っているようなことは あるのでしょうか? 間違っていても修正されないのでしょうか?

みんなの回答

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.1

データシートは間違っていません ポート制御に、 RA6 = 1; RA7 = 0; としてませんか? LATA6 = 1; LATA7 = 0; に書き換えてみて下さい (2)連続出力命令による誤動作対策 http://www.picfun.com/pic22.html

関連するQ&A

  • PIC12F683からパソコンへのシリアル通信

    PIC12F683 を使って、簡単な電圧ロガーを作ろうとしているのですが、 パソコンへの送信が正常に行われません、わかる方がおられたらどこが悪いのかご指摘願います。 PICの書き込み、PICからのデータ受信に用いているパソコン(のマザーボード)は、G45GCMX-S2です。 参考にさせていただいているサイトは、 http://www8.plala.or.jp/InHisTime/page005.html#PIC-002 なのですが、上記サイトのソースプログラム http://www8.plala.or.jp/InHisTime/PIC-001/DataLogger2.c には何の手も加えず、動作させております。 また、PIC->PCへの接続端子の接続が正常である事も、テスターで確認しております。 (回路から、PCのCOM1(DSUB-9pin)へ接続。) コンパイル(MikroC 8.88)、hexの書き込み(RCDライタ)までうまくいくのですが、 ブレッドボードに組んで、電源を入れてもGP5の電圧に変化が無い、という状況です。 (LEDを点滅させるプログラムを書き込んだ場合は問題なく動作しています。) 実際の各端子は Vdd 1pin : 5V GP5 2pin : open (※ この端子の電圧に変化が無い) GP4 3pin : open GP3 4pin : 5V CPP1 5pin : open AN1 6pin CH1 : open AN0 7pin CH0 : open Vss 8pin : GND となっています。テスターで測ると 2pinは2.3Vで一定、 レベル変換用のトランジスタのコレクタは3.4V一定です。 念のためレベル変換回路 (http://www8.plala.or.jp/InHisTime/img2022.jpg の右上、C1815の部分。) 単体の動作確認はしています。 ハイパーターミナルその他のソフトで通信しようと試みたのですが、 反応が無いため、ピンの電圧を測ってみたところ、パソコンへの送信出力ピンの電圧が 変化していないので、これは正常じゃないのでは無いか?と思い、 詳しい方のアドバイスをいただこうと投稿しました。 上記のソースであれば、1秒ごとに出力電圧に反応があるかと思いますが、無反応です。 説明がややこしくなりましたが、わかる方がおられましたらよろしくお願いします。

  • PICデーターシートおよぼLED接続について

    いつも勉強させて頂いております。 PICについて勉強し始めなため、基礎的なことについて質問 させて頂きます。 PICとLEDを直列につなげてLED発光を制御する回路作ろうと 考えています。 つまり、PICとLEDの間にTrやAMPを入れないと言うことです。 手始めにPICのデーターシート(今回は16F84A)を調べたら、 DC Characteristics欄に以下記述がありました。 ●IDD=4.5mA(MAX)の条件にVDD = 5.5V。(データーシート53ページ) ●VOL=0.6Vの条件にIOL = 8.5 mA, VDD = 4.5V。(データーシート56ページ) 具体的なデーターシートは参考欄に記載します(URLにて)。 以下に具体的な質問します。 [質問A] IDDとはPIC電源に入力する電流定格と認識しているのですが、 この認識は合っていますか? [質問B] 質問Aで認識に間違いない場合、電源入力IDDより出力電流IOL が多いのはなぜでしょう? また、そもそもVDDを一定にせずデーターシートに記載される のはなぜでしょう? [質問C] 今回使用する赤色LEDはIF=20mAを予定しています。 IDD=4.5mA、IOL = 8.5 mAでは計画に無理があるでしょうか? [質問D] 質問Cで無理がある場合、IDD=4.5mA(MAX)値超えて設定して良 いものでしょうか? ちなみに、Maximum current into VDD pin=100mAです。 以上、質問量多いので、解る範囲でお答え頂きたく思います。 また、初心者なため初歩的な認識違いあったかもしれません。 ご容赦下さい。 PIC16F84A LED http://blog.goo.ne.jp/toko0131/e/6b373d5fd089f47cd5c4c69bea7d9067 http://akizukidenshi.com/catalog/g/gI-00562/

  • 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;

  • PIC12F683のソフトウェアUARTはタイマ割り込みとか使っている?

    PIC12F683で、 http://www.picfun.com/P12F/p12f02.html このサイトにあるように、PIC12F683にはハードウェアUARTモジュール機能がないので、ソフトウェアでこれを実現するために #use RS232(BAUD=9600, XMIT=PIN_A2, PCV=PIN_A3)というのを やればprintf関数でUARTデータを出力できるとのことですが、 この機能を宣言した場合にはPIC12F683のタイマ割り込み機能はどれか1つ占有されたりするのでしょうか? その場合、開けておかなければならないタイマは0,1,2のどれになるのでしょうか?

  • PICでアナログデータのままCプログラミング

    PICでアナログデータのままCプログラミングをしたいのですが、うまいやり方が見つかりません。 僕は、今課題研究で地震計の製作をしています。 3軸加速度センサを用いて、X軸、Y軸、Z軸の出力をそれぞれRAに入力して、それを足したものが○以上だったらLEDを1個、○以上だったらLEDを2個、○以上だったらLEDを3個光らすという感じのプログラムを作ろうと考えています。 震度は、1、2、3、4、5弱、5強、6弱、6強、7と、できれば9段階にしたいと考えています。 現在、PIC16F84aを使っているのですが、データがPICに入ると中のA-D変換器によってデジタルデータに変換されてしまい、プログラムで扱うときには「1」か「0」で扱うことになってしまいます。 よって、入力データをたすにしても、「0」と「1」と「2」と「3」のどれかにしかならず、震度4までしか作れません。 とりあえず、震度4まででも地震計をつくろうと思い、ハードもプログラムも組んだのですが、なぜかうまくいきません。 そこで、アナログデータのままプログラミングできるPICを探してみたのですが、見つかりません。 具体的にはこんな感じにしたいです。↓ if(RA2>=3.4) RB0=0b1; わかりにくい質問ですみません。 今日登録したばかりで語彙力もないのでわかりにくいとは思いますが、どうかお許し下さい。 どなたか、良いアイデアがある方、回答をよろしくお願いします。

  • データシートの見方

    データシートの見方 双方向バスバッファのデータシートについて教えて下さい。 http://www.semicon.toshiba.co.jp/docs/datasheet/ja/LogicIC/TC74LCX244F_TC74LCX244FT_ja_datasheet_071019.pdf 上記のICを使用しているのですが、その中で『出力電流』について 1ページ目の真ん中あたりにある IoH IoL = 24mA という数値ですが、この24mAは1ポートで使用できる電流値のことなんでしょうか? 8ポートの総和のことでしょうか? 教えて下さい。 よろしくお願いします。

  • 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

  • C言語でプログラミングし、PICマイコンでLEDを制御する

    現在PICを使ってLEDを制御する事を勉強しています。 3つのLEDを3秒間隔で点灯させ、それを無限に繰り返すプログラムを考えてみました。LEDは一つのポートに一つのLEDを割り振るのではなく、ICを使って制御しています。 これを発展させ、待ち時間の3秒間にRA2ポートに入力があるとLEDの点灯をその場所で停止させ、もう一度RA2ポートに入力するとループが再開するといった内容にしようと考えていますが、調べてもどうすればいいのか分かりません、分かる方は教えて頂けないでしょうか # include <16f84a.h> # fuses HS, NOWDT, NOPROTECT # use delay(clock=20000000) int flag, sec, count; main() //main関数の開始宣言 { set_tris_a(0x10); set_tris_b(0x10); #use fast_io(a) //port_aの高速処理を行う設定 #use fast_io(b) //port_bの高速処理を行う設定 while(1){ //無限ループのwhile文の宣言 output_low(PIN_A0); //RA0の出力 output_low(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED1が点灯 delay_ms( 3000 ) ; //3秒待つ   output_high(PIN_A0); //RA0の出力 output_low(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED2が点灯 delat_ms( 3000 ) ; //3秒待つ        output_low(PIN_A0); //RA0の出力 output_high(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED3が点灯 delay_ms( 3000 ) ; //3秒待つ }

  • PICの相補PWMについて

    PICの相補PWMについて タイトルのとおりPICの相補PWMというのがさっぱり分かりません。 PICのデータシートやプログラムの参考にと購入した本を読むと、相補PWMというのはPWMの1周期の中でペアになっているピンが、それぞれ逆位相の波形を出力する機能だと思うんですが合っているでしょうか? また合っている場合、PICのデータシートに乗っていた回路(添付画像)、多分これはモータ駆動の回路だと思うんですが、これだとモータはPWM1周期の間に正転と逆転を繰り返して動かないような気がするんですがどうなのでしょうか? どなたか教えていただけないでしょうか。 よろしくお願いします。

  • pic32mxのデータ幅

    初めてPIC32MXでプログラムを走らせようとしています。 MPLAB X IDEとXC32を使っています。 PIC18F等の8ビットCPUの経験はあります。 PIC32MXはアドレス幅32ビットデータ幅32ビットだと思ってプログラムを作り始めました。 デバックするところになって分からないことが出てきました。 XC32におけるint型のデータ幅は32ビット、unsigned char型は8ビットです。 プログラムで変数を定義するとunsigned char型は偶数アドレス、奇数アドレスそれぞで定義されます。 int型の配列を定義すると、偶数番地アドレスを先頭として4バイト単位で割り当てられます。 これは、PIC32MXがバイトアドレッシングCPUで4バイトアライメントということだと思います。(違ったらご指摘下さい。) 実際MPLAB X IDEでデータメモリを参照すると1アドレス1バイトデータで表示されます。 質問は、 PIC32MXは32ビットアドレス空間(実際に持っているROM、RMAサイズは別として) のCPUではあるが、メモリ幅は、8ビットというのではないだろうか? というものです。PIC32MXの内部レジスタ関連は32ビットなので32ビットCPUだとは思いますが、データシートにある「 32 ビットのネイティブデータ幅」という意味がわかりません。 実際のメモリ空間は、アドレス範囲 x 8ビットということでいいのでしょうか。 御教授いただけましたら幸いです。