MENU
カタログクリップ
本ページはプロモーションを含みます。

AVRのIOピンに押しボタンスイッチで入力する

2018 11/01
広告
電子工作
2014年1月21日2018年11月1日

スイッチが押されると、LEDがON/OFFとトグルする簡単なコードを書きました。

スイッチはPC5, LEDはPD4に接続してあります。
PC5はプルアップしてあり、スイッチによりGNDに短絡されると、割り込み(PCINT1_vect)が入り、PD4の出力がXOR演算でトグルされます。
初期化では、ポートのIN/OUT、1/0の設定、割り込み関係のレジスタの設定がなされます。

ポイントは、スイッチのチャタリングをソフトウェアで吸収することです。
スイッチを押したり/離したりするときのバタつきが納まるまで10ms待ちます。さらに、押している最中のバタつきを無視するために、「前は離されていて、今は押されている」というときのみボタンが押されたと判定します。押している最中のバタつきは、「前は押されていて、今は押されている」という状況になり、排除されます。
今回のように「押したらLEDをトグルする」という処理をするときにはこのような判定が必要ですが、「押している間だけLEDをON」という処理ならば、チャタリングで一瞬LEDがOFFになっても気づかないので、必要ありません。


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

volatile int8_t last;

SIGNAL(PCINT1_vect){
  _delay_ms(10);
  int8_t now = PINC & (1 << PINC5);
  if ((last != 0) & (now == 0)){
    PORTD ^= (1 << PORTD4);
  }
  last = now;
}


int main(void){
  //button: pc5(PCINT13)
  //led: pd4
  DDRB = 0xFF;//direction 1 out, 0 in
  DDRC = 0b11011111;//in: pc5
  DDRD = 0xFF;
  PORTB = 0x00;//off
  PORTC = (1 << PORTC5);//pullup: pc5
  PORTD = 0b00010000;

  last = 1;

  ///INT.
  PCICR |= 1 << PCIE1;//allow int. for pin group 1(8-14)
  PCMSK1 |= (1 << PCINT13);//PCMSK1 = 0x30

  sei(); // allow interrupts

  while(1){
  }
  return 0;
}

割り込みを有効にする前にlast = 1;としないと、ボタンを初めて押した時にボタンが効きません。初期化と同時に代入するのでも良いです。

電子工作
highlightjs

関連記事

  • 購入前に知っておきたいUSB接続・PC接続型デジタルオシロスコープの利点と欠点。スタンドアロン型との違いは。
    2018年8月9日
  • SWR値はどのくらいまで大丈夫?SWR値から分かる反射波電力の割合。
    2018年7月23日
  • アマチュア無線用SWR計の選び方とダイヤモンド・コメット・ダイワの製品一覧。おすすめは?
    2018年7月23日
  • OWONのデジタルオシロスコープSDS5032Eの基本的な使い方。
    2018年7月10日
  • PCXpresso NXP LPC1769の評価ボード(OM13000)にmbedのバイナリを書き込む方法
    2017年5月13日
  • L, Cを測ることを考える
    2014年8月10日
  • Raspberry piで大気圧と温度を記録してグラフにして他のPCからグラフを見る
    2014年7月26日
  • raspberry pi を使って何かするメモ。
    2014年7月26日
カテゴリー
  • コンピューター
    • gnuplot & eps
    • mac
    • matplotlib
    • wordpress
  • ホーム・家電
    • アイロン
    • オーディオ
    • オーラルケア
      • ジェットウォッシャー
      • 音波振動歯ブラシ
    • カメラ
    • カー用品
    • クリーナー
    • テレビ、レコーダー
    • ドアホン
    • メンズ美容家電
      • ラムダッシュ
    • ルンバ
    • 一覧比較
    • 工具
    • 浄水器
    • 温水洗浄便座
    • 炊飯器
    • 空気清浄機・加除湿機
    • 空調・季節家電
    • 美容家電
      • フェイスケア
      • ヘアケア
      • ボディーケア
    • 血圧計
    • 調理器具
    • 電子レンジ
  • 健康
  • 家事
    • パン
    • 料理
    • 育児
    • 食品
      • おせち
      • コーヒー
  • 書籍
  • 知識
  • 趣味
    • ペン字
    • ロードバイク・クロスバイク
    • 車
    • 鉄道模型
    • 電子工作
サイト内検索
最近の投稿
  • モナークHGとモナークM7の4つの違い。[ニコン双眼鏡]
  • ニコン モナーク M7とM5の4つの違い。[双眼鏡]
  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
  • RZ-760、GT-760、ST-760の違い。[ガス缶・CB缶]
  • RZ-730、RZ-730S、RZ-730SBK、RZ-730SWH、ST-Y450の違い。
  • TC-EA35WとTC-E123SBKの違いを比較。[スティッククリーナー]
  1. ホーム
  2. 趣味
  3. 電子工作
  4. AVRのIOピンに押しボタンスイッチで入力する
  • ホーム
  • プライバシーポリシー

© カタログクリップ
contact@beiznotes.org

目次