PICマイクロコントローラーの配線方法は?


8

私はPICマイクロコントローラーと電気工学の世界にまったく新しいので、気楽に行ってください:)

とにかく、私はPIC 16f627をプログラムして、プッシュボタン(トリガーボタン)が押されたときに3つのLEDをオンにし、別のプッシュボタンが押されたときにシャットダウンシーケンスを開始しました(基本的に、各LEDは5秒の遅延で次々にオフになります)。押された(リセットボタン)。私はこれをVellemanのK8048 PICプログラマ/実験ボードでテストしています。ピンRA0およびRA2はそれぞれトリガーおよびリセットプッシュボタンの入力であり、ピンRB0、RB1、およびRB2はLEDの出力ピンです。

実験ボードでの作業は素晴らしいですが、これを実際の回路に移動したいと思います。問題は、どこから始めればよいかわからないことです。3つのLED(それぞれ3.3ボルト)、いくつかの押しボタン、およびワイヤを購入し、次の回路を構築しました。

回路

(恐ろしい回路図のため申し訳ありません)

私が作成した回路では、最初にテストして、LEDが3個の1.5ボルトAAバッテリーで動作するかどうかを確認しました。

しかし、これは機能せず、私は完全に迷っています。参考までに、PICのコードを示します。そのMikroCを使用してCで書かれました。実験ボード上で動作するので問題ないと思います

void main() {
    TRISB.RB0 = 0;
    TRISB.RB1 = 0;
    TRISB.RB2 = 0;
    PORTB.RB0 = 0;
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    CMCON = 0x07;
    TRISA = 255;

    for(;;){
            if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
                         delay_ms(5000);
                         PORTB.RB0 = 0;
                         delay_ms(5000);
                         PORTB.RB1 = 0;
                         delay_ms(5000);
                         PORTB.RB2 = 0;
            }
            if(PORTA.RA2 == 1){
                         PORTB.RB0 = 1;
                         PORTB.RB1 = 1;
                         PORTB.RB2 = 1;
            }
    }
}

どんな助けでも大歓迎です。ありがとう!


3
フリージングをご利用ください。それは..無料ですあなたのための仕事の90%を行い、そして読み、あなたの模式図を簡単に役立ちます
イグナシオバスケス-エイブラムス


7
10日間アカウントを持っていると、これがShahmeerの最初の質問であると私は思います。「このようながらくたを私たちに捨てる」ことの言い訳です。確かに、イグナシオが上手に尋ねるアプローチは、新しい人を怒らせるよりも前向きな反応を得る可能性が高くなります。
ajs410 2012

5
@ ajs410-私たちは皆、これがOlinのわいせつであることを知っています。私はいつも彼の言い回しに同意するわけではありませんが、彼の原則に同意します。OPが恐ろしい(彼自身の言葉) "回路図"について謝罪するという事実は、彼がそれが大丈夫ではないことをよく知っていることを意味します。では、なぜ彼はまだこのことを投稿しているのですか?私にとっては、EDAで作成する必要はありません。むしろ、鉛筆と鉛筆の絵が見たいと思います。
stevenvh 2012

2
彼は新しいです。ここにいる他の多くの新しいメンバーと同じです(私も含まれています)。彼に休憩を与えなさい。Shahmeer、Fritzingを試してみてください。それは素晴らしくて使いやすいです、そしてあなたがあなたの質問をよりよく説明するのを助けます。別のメモとして、私はイグナシオの言葉の選択に強く反対します。
capcom 2012

回答:


11
  1. まず、電圧源(バッテリー、DC電源など)から駆動する場合、LEDとの直列抵抗が常に必要です。
    これは、LEDが非線形IV曲線を持っているためです。その後、LEDは非常に急激に上昇するため、電圧のわずかな変化で電流が大きく変化するため、この方法で電流を安定した値に設定することはほとんど不可能です。
    正しい値の直列抵抗を使用することにより、LEDを損傷するほど電流が上昇しないようにします。
    抵抗値を計算するには、LEDの順方向電圧(Vf)を知ってから、電源電圧からVfを差し引き、必要な電流で除算する必要があります。たとえば、5V電源、2V Vf、15mAの場合:

    (5V-2V)/ 0.020A =200Ω(これは標準値の220Ωで十分です。これがない場合は、20mAから5mAの範囲で150Ωから600Ωの範囲を目指してください)
    これは典型的な5mmまたは3mm LEDを想定しています20mAの最大動作電流の。

  2. 回路図では「3 x 1.5Vバッテリー直列」と表示されていますが、バッテリーは実際には並列に接続されているように見えます。この画像の下の図のように、バッテリーを端から端まで接続する必要があります。

    並列接続と直列接続

  3. マイクロコントローラのVddとグランドの間にデカップリングコンデンサが必要です。詳細については触れません(ここで検索してください。この問題については多くの良い答えがあります)が、基本的には、マイクロコントローラーに、電源が迅速に対応できない高周波電流需要に対して低インピーダンスのローカルエネルギーリザーブを提供するためのものです。足りる。
    理想的には、電源ピンとグランドピンの両端にできるだけピンの近くに1つ(100nFまたは1uFのセラミックが標準)を配置する必要があります。

  4. 水晶が存在しない場合は、内部発振器を使用していることを確認してください。コードには構成ビットの設定が表示されません。省略した場合は、マイクロコントローラーが正しくセットアップされていることを確認するために、それらを追加する必要があります。CCSマニュアルには、これを行う方法が記載されているはずです。また、構成ビットで、ウォッチドッグタイマーがオフに設定されていることを確認してください。オフになっていると、マイクロが継続的にリセットされます(定期的にWDTクリアコマンドを呼び出さない限り)。

  5. あなたが正しい方法でLEDを持っていることを確認してください。

  6. MCLRピンがハイに接続されていることを確認してください。そうでない場合、PICはリセット状態に保持されます(構成ビットでMCLRをオフにしない限り)。これは通常、抵抗がVddに設定されており、値は約10kΩです。データシートのリセットセクションにこの例があります。(これについて言及してくれたajs410に感謝)


コメントをたくさんありがとう、彼らは本当に役に立ちました。ただし、これらすべては別にして、PICを他の方法で接続する必要がありましたか。
Shahmeer Navid 2012

2
もう1つは、ボタンが押されていないときにピンが論理Lowになるようにするために、おそらくボタンピンにプルダウン抵抗が必要であることです(内部プルダウンがオンになっている場合を除いて、PICはプルアップしか使用できないと思います)。回路図のようなもの(例:非標準シンボル、ピン番号/名前なし)を確認するのは難しいです。PCB/回路図キャプチャソフトウェア(例:Eagle [非商用で人気/無料])、Kicad [人気/無料]、Diptrace [安い]、Altium [££££]など)、将来的にはそれを使用します。
Oli Glaser 2012

1
6. MCLRピンのプルアップ抵抗を忘れないでください。または、可能であれば、内部プルアップを使用する構成ビットを設定します。
ajs410 2012

2

私はあなたの立場にいる誰かのためにジョン・カトリスによるO'Reillyシリーズの本「Designing Embedded Systems」を強くお勧めします。「Electronics 101」の章があり、実用的な構造で、すぐに機能的な速度に到達できます。


2
  1. 5Vを超えないようにしてください。PICが5Vの電圧レベルを超えてやけどする可能性があります。9VバッテリーまたはAC / DCアダプターとLM7805などのリニア電圧レギュレーターを使用して、回路に5Vを生成できます。配線方法:

    http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html

  2. ほとんどの人が言ったように、MCLRピンにシリアル抵抗を供給することを忘れないでください。プルアップ構成を使用して、PICをリセットできます。スキーマへのリンクは次のとおりです。http//www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php

  3. 必ずLEDの前にシリアル抵抗を使用してください。鉛が燃えるのを防ぎ、電力消費を減らします。3.3V LEDの場合、220または330オームで十分です。


2

ボタン機能はシンプルです。ボタンを押すと、2つの接点が結合されて接続されます。それでも、それほど単純ではありません。問題は、電気的寸法としての電圧の性質、および機械的接触の不完全性にあります。つまり、接触が行われるか切断される前に、機械的接触の不均一性の結果として、またはボタンを押す速度の違いの結果として振動(振動)が発生する可能性がある短い期間があります(これは、ボタンを押す人に)。この現象に与えられる用語はSWITCH(CONTACT)DEBOUNCEと呼ばれます。プログラムの作成時にこれを見落とすと、エラーが発生したり、プログラムがボタンを1回押すだけで複数の出力パルスを生成したりする可能性があります。これを回避するために、コンタクトのクローズを検出するときに小さな遅延を導入できます。これにより、ボタンのプッシュが単一のパルスとして解釈されます。デバウンス遅延はソフトウェアで生成され、遅延の長さはボタンとボタンの目的によって異なります。この問題は、ボタンの両端にコンデンサを追加することで部分的に解決できますが、適切に設計されたプログラムの方がはるかに優れています。誤検出が完全になくなるまでプログラムを調整できます。下の画像は、ボタンが押されたときに実際に何が起こるかを示しています。誤検出が完全になくなるまでプログラムを調整できます。下の画像は、ボタンが押されたときに実際に何が起こるかを示しています。誤検出が完全になくなるまでプログラムを調整できます。下の画像は、ボタンが押されたときに実際に何が起こるかを示しています。

続きを読む:http : //romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR


1

他の人が書いたものに加えて、たとえば「PORTB.RB0 = 1;」のように、個々のPIC出力ピンに割り当てないでください。代わりに、バイトサイズの変数でビットを変更し、その変数をポートに書き込みます。

あなたはどちらか

  • 信じてくれよ、
  • 「read-modify-write」の問題について読んでください、または
  • 結果に苦しむ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.