マイコンを使った電子回路の基本動作を体験できる回路をブレッドボードで作ってみた。
フォトトランジスタに手をかざすなどして、光センサへの入力を変えてやると、それに応じて音やLEDの点滅間隔が変化する。
部品リスト
回路図
※実験用の回路なので、VCCやAVCCに接続すべきコンデンサやコイルを省略してある。
ファームウェア(AVR GCC対応のソースコード)
// ATTINY26
// ADC0 : A-D Convertor Input
// PB3(OC1B) : Speaker
// PB5 : LED1 1:ON 0:OFF
#include <avr/io.h>
#define led_on() PORTB |= (1<<PB5)
#define led_off() PORTB &= ~(1<<PB5)
#define buz_on() PORTB |= (1<<PB3)
#define buz_off() PORTB &= ~(1<<PB3)
void wait(volatile long i)
{
while (i-- > 0);
}
int adconv(void)
/* AD Convertor */
{
int adata;
ADCSR |= (1<<ADEN) | (1<<ADSC); // A-D convertor enable,
ADMUX = (1<<ADLAR); /* ADLAR=1, ADC0 SingleEndedInput */
while ( !(ADCSR & (1<<ADIF)) );
adata = ADCH;
ADCSR &=~(1<<ADIF);
return adata;
}
int main(void)
{
int adc, i;
// Initialize I/O Port
DDRB = (1<<PB3) | (1<<PB5);
DDRA = ~(1<<PA0);
while (1)
{
adc = adconv();
led_on();
for ( i = 0; i < (adc>>1); i++) {
buz_on(); wait(adc);
buz_off(); wait(adc);
}
led_off(); wait(adc * 100);
}
return 0;
}
組み立て解説書、回路図、ファームウェア(ソースとバイナリ)一式は、添付ファイル
"attiny26-opt-buz-led-marker.zip"を参照のこと。