FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

た、たりない、全然足りない・・・ ふと気がついた»

コメント

コメントの投稿













管理者にだけ表示を許可する

PIC SWITCH


ちょっと時間が空いてしまいましたが、久しぶりにPICの方を進めます。

今まではPICの出力を使ってLEDをつけたりしましたが、今回はスイッチをつかってPICに入力する方法を勉強してみました。

前回まではPORTBを出力として使っていたので、PORTAを入力として使います。
言うまでもありませんが、スイッチとは押したりすることで、回路をつなげたり、切り離したりするものですね。
では、どのようにしてPICにつなげるのでしょうか。

とりあえず、PICのPORTAのピンにスイッチをつけてさらにGND(0V)とつなげます。
こうすれば、スイッチを押したときにピンが0Vとつながるので、PICの端子に0という情報が伝わります。
pic_switch1.jpg

「じゃぁ、スイッチを押していないときはどうなるんだ?」

スイッチを押していないときはスイッチが開いているので端子はどこにもつながっていないことになります。どこにもつながっていないとはどういう状態なのでしょう?

「つながってないなら0Vだろ」

と普通なら考えますが、どうもそうじゃないらしいです。0Vか5Vかどちらかわからない状態なのです。
PICの外側だけみるとつながってないのに5Vとかまったく意味がわからないわけですが、中の回路の都合でそうなるらしいです。まぁ、深い話は省略しますww

ここで問題になるのは、どちらかわからないというあいまいな状態です。
デジタルの世界では0か1しかないので、スイッチを押している時0(0V)となってるのなら、押してない状態は確実に1(5V)でないと困ります。

ここで少し違和感を覚えた人もいると思います。
「え、スイッチを押したとき1で押してないとき0の方が、なんかしっくり来るなぁ・・・」
ですよねー。まぁ、どっちでもおkですが、今回は押してるとき0になる回路です。ちなみにこれを負論理とかアクティブ・ロー、押したとき1になるのを正論理とかアクティブ・ハイと呼びます。

本題に戻って、押していないとき端子に電流が流れ込むようにしなければなりません。
そうするためには次のようにします。
pic_switch2.jpg
ここでつけた抵抗をプルアップ抵抗といいます。
だいたい数kΩから十数kΩ程度のものをつければ大丈夫です。

ちなみにスイッチと抵抗の位置を入れ替えた場合、抵抗はプルダウン抵抗と呼ばれるようになり。
正論理の回路になります。
一般的にプルアップの方がよく使われているみたいですね。

スイッチを押すと下の図のように電流が流れます。PICの端子は0Vとつながるので入力は0になります。
pic_switch4.jpg

スイッチを放すと、PICの端子が抵抗を通して5Vとつながり、電流がPIC内に流れ込むため入力は1(ほぼ5V)となります。
pic_switch3.jpg


では、さっそくプログラムを



#include <pic.h>
#include "delay.h"
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);

void main(){
  TRISA = 0x01;
  TRISB = 0x00;
  PORTA = 0x00;
  while(1){
    if(RA0 == 0)
      PORTB = 0x01;
    else
      PORTB = 0x00;
  }
}



例のごとく赤くなっているところが今回のきもです。
スイッチをポートAの0番ピンにつなげて LEDをポートBの0番ピンにつなげています。

まず、TRISA = 0x01;
これを16進数から2進数にすると 00000001となります。
つまりTRISAレジスタの0番のみ1、それ以外は0となっています。
1の時は入力モード、0の時出力モードでしたね。
つまり、0番だけ入力として受け付けるということになります。
ちなみに、ポートAは0~4の五つしかないので00000001のうち赤くなっているところは無効です。無効ですが8桁づつ指令を出さなければならないので8桁で命令します。つまり左の三つは何を入れても問題ないです。

今回はポートAにスイッチが一つしあか付いてませんので、ポートAの他のピンはあまった状態です。
「ならわかりやすく TRISA = 0xff; で 全部入力にしとけばいいんじゃない?」
と思うかもしれませんが、基本的に使わないピンは出力にしておいた方が無難です。
なぜなら、入力モードにしておくと使ってないピンから予期しない信号が入って誤動作を起こす可能性が出てきてしまうからです。先ほど記したように、何もつながっていない=0Vではないのです。

出力モードならば、どこにもつながっていない限り問題はありません。
問題は無いのですが、念のため PORTA = 0x00; で、出力にしたピンを0V出力に初期化しておきます。

そして ifの括弧の中の RA0==0 ですが、まぁ ifについてはC言語の勉強になってしまうので省略するとして。RA0とはポートAの0番ピンという意味です。
つまり、ポートAの0番ピンの状態が0と等しいならば、という意味になります。
0と等しいとはつまりスイッチが押された状態ですね。

スイッチが押されたなら、PORTB=0x01 ポートBの0番ピンから5Vを出力せよ。
もし違うなら、PORTB = 0x00 でポートBのすべてを0V出力にせよ。

ということで、スイッチが押されたらLEDがつき、放れたらLEDが消えるという動作になります。




PIC SWITCH

[広告] アクセス解析


一票をお願いします。
スポンサーサイト

た、たりない、全然足りない・・・ ふと気がついた»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。