- ベストアンサー
PIC出力時に5Vから0Vにならず、0Vから5Vにならない問題
- PICマイコンの出力をプログラム上で1から0に変えると、5V->0.6V~2.1Vになり、0から1に変えると、0V->1V~2.3Vになる問題が発生しています。
- ピンの設定、プログラムを簡単に確認しましたが、出力の切り替え時に問題が起きているようです。
- デジタルテスターで測定すると、発振しているような症状があり、周波数は86.3kHzです。なぜ発振しているのかは分かりません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- mimazoku_2
- ベストアンサー率20% (1886/9016)
- mimazoku_2
- ベストアンサー率20% (1886/9016)
- angkor_h
- ベストアンサー率35% (551/1557)
関連するQ&A
- PICのプログラムカウンタについて
プログラムカウンタでポートAに4bitの2進数を入力して、変換された2進数のデータをポートBに出力させることはできたのですが、 ポートCにも違うデータを同時に出力させたいのですが、どういった命令文を作ったらいいでしょうか? 例えば、ポートAが「HLHL」の入力の時にポートBでは「HLLH」、ポートCでは「LLHL」を出力させる方法です。 言語はアセンブラ、マイコンはPIC16F886です。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- マイコンの汎用ポートで-5Vを出力する方法
5Vで動作中のマイコン(H8orPIC)のポート出力(とGND)をケーブルで接続された外部に出力する際0Vまたは5Vが出力されると思います。これを0Vまたは-5Vで外部に出力するには、ポート出力の後どの様な回路が必要なのでしょうか?
- 締切済み
- その他(趣味・娯楽・エンターテイメント)
- 電子工作 PIC PIC16F84A アセンブラ
PIC16F84Aを使用して1番ピン及び2番ピン及び3番ピンが一瞬でも0Vになり、 5秒経過、6番ピンから3秒間出力、始めに戻る。 こんなようなプログラムを作りたいと思っていますが、 なにぶんPIC初心者なものでどうプログラムしたらよいか全くわかりません。 ピン入力に順序は関係なく全て0Vならカウント開始です。 5秒のカウント精度は低くても問題ありません。 5秒カウント中に1、2、3番ピンのいずれかが一瞬でも5Vになったらカウントを中止し、 始めに戻ります。 5秒カウントの6番ピンのステータスは0Vです。 6番ピン出力中は、1~3番ピンの監視は不要です。 6番ピンからの3秒出力の後は出力をやめ始めに戻ります。 開発言語はアセンブラです。
- ベストアンサー
- その他(ホビー・玩具)
- PIC16f88でLEDの点灯をしたいのですが、
PIC16f88でLEDの点灯をしたいのですが、 9番ピン(RB3)だけLEDが点灯しません。 #include<htc.h> __CONFIG(UNPROTECT & DEBUGEN & MCLRDIS & PWRTEN & WDTDIS & HS); void main() { PORTB = 0xff; TRISB = 0x00; } 上記のプログラムでBポートをすべて出力にしてLEDを光らせているつもりです。 書き込みを行い試してみたところ、6,7,8番は点灯してくれました。 いろいろと調べてみたのですが、PWM設定(CCP1)と関係があるのでしょうか? また何かしらの設定が必要でしたら、教えていただけると助かります。
- 締切済み
- C・C++・C#
- PICマイコン、水晶発振子の異常
カテ違いかも知れませんがマイコンおよび電子回路についての質問です。 水晶発振子が異常発信しMCLRによるリセット後、正常に発振します。 マイコン:PIC16F887 水晶発振子:VT-200-F コンフィグは以下のように設定 __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _LP_OSC __CONFIG _CONFIG2, _WRT_OFF & _BOR21V OPTION_REGは以下のように設定 movlw B'01011000' ; 7.ポートBのプルアップ:無効 ; 6.ポートBの割り込みエッジ ; 5.TMR0のクロック源:内部命令サイクル ; 4.TMR0のカウントするクロックエッジ ; 3.プリスケーラ:WDTに割り当て ; 2.1.0.プリスケーラ初期値(未使用) movwf OPTION_REG 13ピン(CLKIN)と14ピン(CLKOUT)に水晶発振子を接続。 それぞれに15pFのコンデンサを接続。 40ピン(RB7)にLEDを接続(TMR0で割込みが発生したタイミングで点灯消灯を繰り返します。) 1ピンはMCLRとして利用 で、計算上の割込みタイミング(プリスケーラなし) (1/(32.768/4))*256=31.25ms なのですが40ピンのHI、LOWタイミングをオシロで観測したところ 実測値は以下のとおりでした。 電源接続直後:256.7us 1ピンでのリセット後:31.37ms(ほぼ計算通り) 電源接続直後は必ず上記のようになり1ピンでリセットすると正常に発振し始めます。 コンデンサの容量が合っていないのかと思いいくつか試してみました結果は同じでした。 水晶発振子も変えてみましたがやはり結果は同じでした。 コンデンサの足も切って短くしてみましたがこれも結果は変わりませんでした。(この程度の距離は関係ない?) 回路はブレットボード上です。 マイコンが壊れているのでしょうか? 今までもっぱらセラロックや水晶発振器を使っていて今回初めて水晶発振子を使ってみてこのような事象に遭遇しました。 どのようにしたら正常発振するか詳しい方、ご教示いただけたら幸いです。
- ベストアンサー
- その他([技術者向] コンピューター)
- PIC12F629の発振
PIC12F629を外部に某社のセラロックを使って XTモードで4MHzで発振しています。 (今回は内部発振は精度上使えません。) しかしCLKOUTの出力スィングは01.7V しかありません。 ただしプログラムは正常に動作しています。 同様のことをPIC16F84Aでやると CLKOUTの出力スィングは04Vあります。 CLKOUTの出力スィングが小さいことは 問題ないのでしょうか。 ただPIC12F629をHSモードにするとスィングは 05VありますがCLKOUTの波形の 歪は大きくなります。 プログラムは正常に動作しているといっても試作の 3セットだけなので量産したときのことを かんがえるとやや不安です。 どう考えたらよいかアドバイスください。
- ベストアンサー
- 電子部品・基板部品
- PICで入力ポートの内容を出力ポートにコピーしたい
PICのプログラムをアセンブラで組んでいるのですが、 どうにもシンプルな書き方ができなそうなのでお知恵をお貸しください。 例えば、 ポートAが入力、それ以外のポートは出力になっているとします。 ・ポートAの0番のオンオフを、ポートBの2番へコピー出力。 ・ポートAの1-3番のオンオフを、ポートCの4-6番へコピー出力。 という感じで、Aのオンオフ状況を、各出力ポートにコピーするということをしたいです。 どのようにしたらスマートに書けるでしょうか? ちなみに各出力ポートに関して、コピーする前に一旦全てオフにする、 というようなことはできません。
- ベストアンサー
- その他(パソコン)
- 【pic】ビットを取り出して、足し算、出力
問 PORTB に信号を入力する。この信号のうち、上位4ビットと下位4ビットを取り出し、それぞれを足し算して、PORTAに出力するプログラムを作成せよ。以下を参考にせよ。 参考 #include <pic.h> void main(void) { int x, y, z; TRISA = 0x00; TRISB = 0xFF; for(;;) { x = (0b11000000 & PORTB) >> 6; y = (0b00111000 & PORTB) >> 3; PORTA = x; } } ということで、実際に作っては見たのですが、あっているかどうかも不明です。特に苦手な分野ですので詳しい解説の方よろしくお願い致します。 自身で書いてみたプログラム↓ #include <pic.h> void main(void) { int x, y, z; TRISA = 0x00; TRISB = 0xFF; for(;;) { x = (0b11000000 & PORTB) >> 4; y = (0b00111000 & PORTB) << 0; z = x + y; PORTA = z; } }
- 締切済み
- その他(学問・教育)
- PIC12F629のMCLRピンが出力に?
PIC12F629でリレーをON/OFFしています。 使用ピンはGP1とMCLRのみです。 動作中にCPUに約0.8Aぐらい流れCPUが発熱(手で触れないほど)するトラブルが発生しました。 このときはMCLRピンは電源(+5V)に直結してあります。 対策としてMCLRピンから抵抗1KΩを経て+5Vへ接続することにより解決しました。 理由としての予想ですが リレーのノイズにより入力専用のMCLRピンが出力になり0出力され +5Vから(抵抗がないので)大電流が流れこんだ・・・ と思うのですが。 入力専用のMCLRピンが出力になるという仮定がへんですが 私には、そうしないと説明がつかないような気がします。 「正しい解釈(?)」を教えてください。
- ベストアンサー
- 電子部品・基板部品
- PIC 16F887 を使い7SEG を動作させたいのですが上手く行き
PIC 16F887 を使い7SEG を動作させたいのですが上手く行きません。 不具合の可能性が、回路が悪いのか、プログラムなのか、わかりません。 添付の画像は不鮮明だと思いますがご了承ください。 動作は、入力によって7SEGの表示をかえます。 マイコンは、PIC16F887(40ピン)で外部オシレータ、リセット等は付けてません。 11ピン 32ピンを5V 12ピン、31ピンをGNDに接続しました。 入力は1ピン~6ピンを10Kプルアップで使用し、6ピン(RA4)は使いませんが、10Kでプルアップしました。 1ピンはフォトカプラ入力ですが、2ピン~5ピンは直接駆動です。 出力は、7SEG(アノードコモン)を4つを動作させるため、40ピン、39ピン、30ピン、29ピンをトランジスタ2SA1015(PNP型)でスイッチングします。 7SEGの表示はPICダイレクトとしました。 マイコンを付けずにジャンパワイヤーで7SEGの動作確認をしまし点灯を確認しました。 以上をでプログラムを書き、電源を入れましたが全く動きませんでした。 マイコンピン配線のマズさなのか、プログラムの可能性なのかご教授、アドバイス宜しくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- パソコンからスキャンする方法がわからない
- MFC-9340CDWを使ってスキャンするための手順が知りたい
- 無線LANで接続しているMFC-9340CDWのスキャン設定について教えてください
お礼
回答ありがとうございます。 確かにすごく頷けるのですが、ループにはしていません。 まったくその通り、ループしてしまっているかのような挙動なんですけどね・・・。 そういえば、以前16F84AというPICマイコンを使っていた時に、例えば RA1 = 1; RA5 = 0; というふうに連続してピンの出力を切り替えると、うまく動作しなかったので、 RA1 = 1; DelayMs(10); RA5 = 0; と、すこしDelayで待ってあげると正常に動作したことがありました。 それを思い出し、試しに LATAbits.LATA = 0x00; DelayMs(10); LATAbits.LATA = 0xff; と、Delayを入れたところ、なんと今度はDelayの部分でプログラムが止まって(?)しまいました。 止まってしまったというか、まるで止まったかのような挙動を見せました。 つまり0x00のまま変わらないのです。 逆も同じで LATAbits.LATA = 0xff; DelayMs(10); LATAbits.LATA = 0x00; だと0xffのままになります。 ただこの場合、出力が発振するような挙動は見せなくなりましたが。 まったく理解ができません。。。 おそらくプログラム的に何かがおかしいのだと思うのですが。。。 また何かわかったことがありましたらご教授お願いします。
補足
回答と補足が逆になってしまってすみません! 原因が分かりました! なんと! unagi-pie様のおっしゃる通り、ループしていることが原因で発振していたようです! ですが、私はwhile文やfor文などのループするようなプログラムは組んでいません。 しかし、お礼で書いた「Delayを挟むと発信しなくなるが、出力が変わらなくなる」というのも、よくよく考えれば、 LATAbits.LATA = 0x00; DelayMs(10); LATAbits.LATA = 0xff; だと0x00の時間がかなり伸びて、0xffの時間が相対的に短くなり、結果的に0x00のままであるように見えているのだと気づきました。 そこで、このよくわからないループを意地でも止めるべく、 int i; if(i==0) { LATAbits.LATA = 0x00; DelayMs(10); LATAbits.LATA = 0xff; i++; } このようなプログラムにしてみました。 これならループしても2回目はifの条件を満たさなくなるのでスルーされます。 その結果、発振せず無事に出力が変わるようになりました! 素晴らしい! それにしてもなぜループされるんでしょうかねぇ・・・ プログラムが終わると自動的にリセットでもかかるんでしょうか?