AVRはじめました!
前から少し気になっていて、受験が終わったら一度やってみたいと思っていたマイコンのプログラミングを始めてみました。
完全に独学で、Webで見た情報を頑張ってかき集めてやっているので、自分のやっていることが正しいのかわからない暗闇の中歩いてる感じだったので、初めてLEDが自分の書いたコード通りに光った時は、とても感激して、中1のころに、はじめてC言語で"hello world"の表示を成功させたときのことを思い出しましたね。
とりあえず、今回は秋葉原でマイコン(AVR ATtiny2313 ATmega328P),ブレッドボード、ケーブル類、白色LED、抵抗、スイッチ、電源 を買ってきて、Webに上がってるソースコードの見様見真似と改変で↓のようなコードを書きとりあえずボタンを押すと数字が1増えて0x00〜0x0Fまでを数えて結果をLEDの2進数表記でそのまま返す簡単なカウンタ(?)をつくりました。
はてな記法の実験で乗っけます。
#include <avr/io.h> #include <util/delay.h> int main() { DDRD=0b00001111; DDRB=0b00000000; PORTD=0b00000101; PORTB=0b00000000; unsigned char f=0; while(1){ if((PINB&0b00000001)&&f) { if(PORTD!=0b00001111)PORTD += 0b00000001; else PORTD=0b00000000; f=0; _delay_ms(10);// ※1 }else if((PINB&0b00000001)==0&&(f==0)){ f=1; _delay_ms(10);//※1 } } return 0; }
今回は、ボタンを買うのを忘れてスイッチにしたからか ※1 の10ミリ秒待つ動作をしないと、ON→OFFへスイッチを動かすあいだに短い時間でなんどかHighとLowを繰り替えずみたいなので、短い時間は反応しないようにしてみました、正しい対処なのか、ボタンでもそのままなのかは完全独学で開始二日目なのでしりませんが、結果うまく行ったのでいいでしょう。今度アキバ行ったらボタン買って再トライしてみたいです。
あと、スイッチをOFFにした時入力端子がどこにもつながってないとHighでもLowでもない状態になっておかしなことになるので↓のように配線してみたらうまく行きました、自分で思いついただけなんで正しいかは(ryと思ってたら電子工作入門サイトに同じような配線があったのであってるみたいです。
[PIN]---------------[抵抗]-----------(VCC)
|________[スイッチ]________(GND)
抵抗ちっちゃ過ぎたりなかったりするとスイッチが入った時すごい電流流れるから気をつけなきゃですね(?)
回路図はPCで書くのめんどいし、すごい簡単なことしかやってないので需要がないでしょうから書きません、欲しい人いたらリプでもください♡(ぐぐったらあなたのほしい情報はあると思いますが)
親切な方が内部プルアップを使ったほうが楽と教えてくださいました
まとめてくださってるサイトを紹介して頂いたので載せておきます。
http://d.hatena.ne.jp/hijouguchi/touch/20100619/1276955729(hijouguchiの日記)