• ベストアンサー

ATmega168マイコンを用いてプログラミングをしている途中で、PO

ATmega168マイコンを用いてプログラミングをしている途中で、PORTBにスイッチを接続しようと考えました。 そこでC言語を使用しているので、プログラムに、 「DDRB=0x00」と書き込んで、スイッチを押した事を判別する条件式も入れました。 それなのに実際に動作させるとスイッチを押しても反応しません。 自分なりに原因を探したのですが、プルアップとかその辺の事が関係してそうで、ポートの設定が上手くいってないんだと思ったのですが全く分かりませんでした。 どなたか、原因の説明又はポートの設定の説明をしていただけたら有難いです。 簡単な回路図を入れておいたので参考にしてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.1

その図では、SWオープン時のポートの論理は? Hi or Low?それとも不定? と考えれば、プルアップが必要なのがわかりますよね。 ↓参考 http://www.wdic.org/w/SCI/%E3%83%97%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97

nrumayu
質問者

お礼

めちゃくちゃ単純な事だったんですね・・・情けないです・・・ご協力有難うございます

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 初めてのマイコン

    こんにちは。 都内の理系の高校に通っている高校一年生です。 マイコンを使った電子工作ができるようになりたいと思います。 しかし、どこから勉強を始めていいものかさっぱりわかりません… ディジタル回路やアナログ回路は使ったことが何度もあるので、少々のことはできるのですが、 プログラミングの必要なマイコンについては、まったくわかりません… PICのようなマイコンが一般的なようですが、 他にも非常に多くの種類があると思います。 初心者が入るのにもっともとっつきやすく、 他のマイコンに対しても応用が利くマイコンって何でしょうか? (たとえば構造が似ているので、プログラムの大幅な変更が不要など) 教えてください。 また、参考になるサイトを教えてください。 初めてのマイコン という感じのキーワードで検索してみるのですが、 いまいちしっくり来るものがありません… マイコンについては何もわからないもので、 なんで、ひとつのピンが入力にも出力にもなるのでしょうか? ↑というレベルです… また、プログラミング言語は、まったくわかりません C言語が高校の一年で必修なのでそのうちやるのですが(たぶん2学期後半) それまでには少しくらいわかるようにはなっていたいです。 マイコンについての本も買ってみたいと思います。 本屋でいくつか立ち読みしてみたのですが… また、最近ではUSBに直接接続することのできるマイコンもあるようですね… そのようなものは、少々値が張りますが、 やはり使いやすいのでしょうか…? 長文失礼しました・・・

  • AVRマイコンでのアップダウンカウンターについて

    以下のプログラムはポートDの6番にタクトスイッチを付けてカウントアップさせるプログラムですが、 ポートDの5番にもう1つタクトスイッチを付けてカウントダウンさせたいのですがどのようにプログラムを 追加したら良いでしょうか? 変更前 #include <avr/io.h> int main( void ) { volatile uint16_t i; uint8_t cnt,s0,s1; cnt=0x0;    /* カウント値の初期値=0 */ s1=0b01000000; /* 最初は押されていない状態をセット */ DDRB=0xff; /* PortBをすべて出力に設定する PortDはデフォルトで入力設定 */ PORTD=0b01000000; /* 入力設定になっているポートにHを書くとプルアップされる */ for (;;) { /* 無限ループ */ PORTB=cnt; /* カウント値ををPortBに出力 */ s0=s1; /* 前回のデータを保存して */ s1=(PIND & 0b01000000); /* ポートBと01000000のandをとるとB6の0/1だけがs1に代入される */ if(s0>s1){ /* 前回=64(off) 今回=0(on)のときswが押されたと判断 */ cnt++; /* カウントをインクリメント */ } } } よろしくお願いします。

  • LEDを点灯するだけのプログラムなのに点滅する

    マイコン勉強中なのですが。 まず手始めにブレッドボード上で、AVR atmega88 を使ってとりあえずLEDを点灯させるプログラムを書き込んだのですが約1秒ごとに一瞬LEDが点滅するのですが、原因として考えられるもあるでしょうか? PORTB0に抵抗とLEDつけただけの単純な回路です。

  • FPGA?マイコン?

    FPGAとマイコンは何が違うのですか? FPGAはマイコンの中に入っている集積回路のことですか? マイコンはCPU・メモリ・ポートがあればマイコン? マイコンには必ずFPGAが入っているのですか? パソコンでC言語等で記述して、特定の動作をさせることができるのはFPGAのようなPLDがマザーボード上にあるからですか?

  • PICマイコンで、ピンが足りません。

    PICでちょっとした電子工作をしています。 18pinのPICを使い、スイッチの組み合わせを適宜変更し出力する回路としてを組んでいます。 PortA(8pinを全て入力/全ピンpullup) PortB(8pinを全て出力) スイッチが1~8まであり、例えば1のスイッチが押された場合、3のスイッチが押されたことにして出力するというような、 スイッチの組み合わせを変更する機能を持たせます。 このスイッチの入出力組み合わせを複数持たせることが今回の目的です。 ロータリースイッチを使い8種類の設定ができる用にするとして、割り当て設定用として新たに3ピンが必要です。 ですが、上記のようにPortAB共に全ピン利用しており、単純に割り当てることが出来ません。 これをどうにかして、利用済みのピンと共存させ18pinで済ませることができないでしょうか。 スイッチの組み合わせは、PIC起動したら変更されることがありません。 ですので、PIC起動時に一度だけロータリースイッチの状態を読めばいいことになります。 なお出力の先につながる回路は、プルアップされたアクティブローの入力端子です。

  • マイコンの為にバファーは

    シュミット回路で形成したシグナル(矩形波)をマイコン(AVRのAtMega8のスターターキット)に送らなければいけませんが、インペーダンスの違いとか、あるかも知れませんので、シュミット回路からの出力シグナルをバファリング(バッファ)するつもりで、ボルテージフォロア(電圧フォロア)をシュミット回路の出力部に取り付けました。 しかし、他の方に部品の無駄使い&無意味な事だと言われました。 シグナルを別のステージ(回路)に送るので、マイコン側のインペーダンスの違いがシュミット回路と大きく違ったら電流は流れなくなる可能性もあるので、付けましたが考え方は間違っていますか? いまいちバッファがマイコンと回路の間に付ける意味がないといわれて、何故なのか分かりません・・・バッファを付けない理由は何故か分かりますか?

  • H8マイコンが壊れた原因とその後

    大学での研究として、H8マイコンを使用しています。 H8マイコン(イエローソフトH8S/2633)を、周辺回路と組み合わせた瞬間に壊れてしまいました。 原因を探っていましたが、壊れた瞬間というのは、周辺回路とマイコンを組み合わせ、その後、周辺回路のシリアルポートをPCに接続した瞬間に変なにおいがしましたので、この時に壊れたと思います。 しかし、シリアルポートに接続したことが原因になることはあるのでしょうか?それとも他に何か原因があるのでしょうか? また、この壊れたマイコンのVSWとGNDがなぜか導通しています。 これは、壊れた瞬間に導通した可能性はありえるのでしょうか?それとも、初期不良か何かで導通していたのでしょうか?

  • スイッチ入力信号の分岐接続

    既存回路上の、あるLSIのスイッチ入力に接続されている信号を 他のマイコンのI/Oポートでも受けたいと考えています。 a接点のスイッチが、あるLSIにプルアップ抵抗なしで入力されています。 おそらく内蔵プルアップされているのではと思います。 この状態ではもちろん何の問題もありません。 このスイッチ入力の信号レベルを外部マイコンでも受けたく、このLSIの 入力端子の信号をそのままマイコンの入力ポートに接続しましたが、 信号レベルが中途半端になり誤動作してしまいます。 (マイコンへの信号はそのまま直結です) いったい何が悪いのか、教えていただけますでしょうか?

  • atmega328-puの書き込みに付いて。

    atmega328-puの外部と内部のclockの取り扱いについてお尋ねします。 先ずブートローダーを書き込んだり、書き込みに失敗すると外部クロックに切り替わり その後は書き込めなくなる様な説明が有りました。 このことは、二度目以降のブートローダーが書き込めなくなると言うことでしょうか 又、書き込みに失敗した時、そのavrは全く他の用途にも使えなくなり、マイコンとしての 機能を失ってしまうと言うことですか。 それでは、AvrIsp-MkIIの書き込み器を使って、外部クロック用の水晶発振素子等を取り付けて 新しくプログラムを書き込むことは可能ですか。 ブートローダーの解釈として、私が理解しているのは、ブートローダーと言うのは 書き込まれるマイコンが、書き込まれたプログラム通りに働かせる為のプログラム では無く、そのプログラムをAVRマイコンに読み込ませる為の導入プログラム と言うことで良いのでしょうか。 atmega328-puのマイコンに書き込むための説明に、ARDUINOよるブートローダーの書き込み方が沢山紹介されていますが、これはARDUINOのボードでプログラムを書き込んだりするとき スケッチと言うプログラムを作成してARDUINOに書き込みプログラムを走らせますが このスケッチを書き込む時に必要なソフトが、ブートローダーなのでしょうか。 では以前このOK-WAVEで教えていただいた回答内容では、AVRマイコンに書き込む為には AVRISP-MKIIの書き込み器を使えば、ブートローダーは必ずしも必要ないと言うように私は理解 したのですが、正しいのでしょうか。 例えばブートローダーを書き込んだATMEGA328-PUをaruduinoで私が書き込もうとする プログラムをスケッチに書いて書き込んだら、基本的には(動作クロック等は別として) 動作するのでしょうか。 すみません、色々調べたのですが基本的な事の疑問が、解けずにいますので 教えてください。

  • マイコン未使用端子の処理について。

    次の回路1、2の未使用端子の処理を考えた場合、 回路1ではport1を入力に設定すれば良いと思いますが、 回路2ではport2を  (1) 入力に設定する。  (2) 出力に設定し"L"レベル出力とする。   どちらの処理が良いのでしょうか(▽はLEDです)。 目的は消費電流の低減です。 通常、回路1でport1を出力で"L"レベルに設定した場合、 port1の電位とGNDで電位差が発生し電流が流れる可能性があるので、 推奨できないと思いますが、 回路2で考えた場合、多少の電差(LEDの順方向電圧以下)であれば、 LEDがハイインピーダンス状態となる(←ほんと??)ような気がするため、 電流はほとんど流れないと思って質問しました。。 回路1  | ̄ ̄ ̄ ̄|port1  |マイコン | ̄ ̄|  |       | 抵抗R1  |____|   |             GND  回路2  | ̄ ̄ ̄ ̄|port2  |マイコン | ̄ ̄|  |       |  ▽  |____|   |             抵抗R1              |              GND ※▽:LED

専門家に質問してみよう