(Kaimunantai - Universal circuit board – AVR - no.1)
AVRマイコンを使った電子回路の製作の練習ができるキットを開発した。
ユニバーサル基板を使った電子工作をやりやすくするために、ほぼ原寸大の組立て説明図と、プログラム開発の手順の説明書が用意されている。
A/D変換のポートやI2C ( TWI ) のポートは未使用で、今後の拡張性を残している。
AVRマイコン Atmel AT Mega 168P
ユニバーサル基板 Sunhayato ICB-93SG
LED(3原色) OSTB5131A-ID
カーボン抵抗器 10kΩ x 1個, 150Ω x 1個 , 0Ω x 2個
スズめっき線 0.5mm
バッテリースナップ 電池ボックス 単3x3本用
ICソケット 28ピン、300mil幅
積層セラミックコンデンサ 0.1uF x 3個
圧電サウンダ PKM13EPYH4000-A0
スライドスイッチ
タクトスイッチ
6ピンヘッダ
皿ネジ、ナットΦ3mm
スペーサ
起動すると、短い間、音が鳴りLEDが点滅する。その後、押しボタンスイッチを押すとLEDが点灯し、押しボタmスイッチを離すとLEDは消灯する。
#include <avr/io.h>
static inline void wait(volatile unsigned long i)
{
while (i-- > 0);
}
static inline void ledOnOff(void)
// LED light ON / OFF
{
PORTD ^= (1<<PD0);
}
static inline void ledOn(void)
// LED light ON
{
PORTD |= (1<<PD0);
}
static inline void ledOff(void)
// LED light OFF
{
PORTD &= ~(1<<PD0);
}
static inline void buzOn(void)
// Buzzer ON / OFF
{
PORTB ^= (1<<PB0);
}
static inline void initIo(void)
// initialize I/O ports.
{
PORTD |= (1<<PD2); // PD2 weak pull up enable
DDRD = 0b11111011; // PD2 as Input, others Output
DDRB = 0b11111111; // PORTB as Output
}
static inline int isSwitchOn(void)
// if Switch-ON -> return TRUE, else return False
{
return ( !( PIND & (1<<PD2) ) );
}
/*
* Main
*/
int main(void)
{
volatile int i;
initIo();
// Buzzer
for (i = 0; i < 2000; i++) {
ledOnOff();
buzOn(); wait(10);
}
while (1) {
if ( isSwitchOn() ) {
ledOn();
} else {
ledOff();
}
}
return 0;
}
# AVR-GCC Makefile
PROJECT=kaimu-ua1
SOURCES=$(PROJECT).c
CC=avr-gcc
OBJCOPY=avr-objcopy
MMCU=atmega168
TARGETDEV=m168p
CFLAGS=-g -O2 -mmcu=$(MMCU) -Wall
$(PROJECT).hex: $(PROJECT).out
$(OBJCOPY) -j .text -j .data -O ihex $(PROJECT).out $(PROJECT).hex
$(PROJECT).out: $(SOURCES)
$(CC) $(CFLAGS) -I./ -o $(PROJECT).out $(SOURCES)
program: $(PROJECT).hex
sudo avrdude -p $(TARGETDEV) -P usb -c avrispmkII -e -U flash:w:$
(PROJECT).hex
clean:
rm -f $(PROJECT).out
rm -f $(PROJECT).hex