2014/03/22

AVR開発環境インストールからLED点滅まで(AVRマイコンボード)

 AVRの開発環境として通常は"Atmel Studio"を使うと思いますが、ここではdebianで使える物を選択してみました。Linux用のCコンパイラを探してみたところ、avr-gcc + avr-libcが使えるようです。debinの場合、以下のコマンドでインストールできます。
# apt-get install gcc-avr
# apt-get install binutils-avr
# apt-get install avr-libc
# apt-get install avrdude

LED点滅プログラムについて


 ATmega168/328マイコンボード回路図を見るとマイコンのPB5端子の先にLEDが接続されています。PB5にHを出力すればLEDが点灯します。このLEDを点滅するプログラムを書いてみます。

リスト1 blink_LED.c

/*
 * LED 点滅プログラム
 *
 *  K-04590 (ATMEGA168/328用マイコンボード)
 *
 */
#include <avr/io.h>
#include <util/delay.h>

#define PB5_LED   5             // H: LED ON | L: LED OFF

int main(void) {

  DDRB   = _BV(PB5_LED);        // Port B bit 5の方向を出力に設定
  PORTB |= _BV(PB5_LED);        // Port B bit 5にHを出力(LED点灯)

  while (1) {
    _delay_ms(500);             // 0.5秒待つ
    PORTB ^= _BV(PB5_LED);      // Port B bit5を0/1反転
  }
}
 0.5秒毎にLED点灯、LED消灯を繰り返すプログラムです。_delay_ms()や_BV()はavr-libcで定義されています。詳細は"AVR Libc Home Page"に説明があります。

F_CPUについて


 _delay_ms()を使うには事前にマクロ"F_CPU"を定義しておく必要があります。F_CPUにはCPUのクロック周波数を設定します。ソースコードの中に書いても良いのですが、ここではMakefileの中に定義しました。マイコンのクロック周波数は1MHzです。これは工場出荷時はクロックソースとしてマイコン内蔵オシレータ(8MHz)が選択されており、さらにCKDIV8オプションが設定されているため、1MHz(=8MHz÷8)になっているためです。したがってF_CPU=1000000を設定します。

リスト2 Makefile

PROG=blink_LED
OBJS=${PROG}.o
MCU=atmega168p
F_CPU=1000000UL # internal 8MHz clock & CKDIV8 fuse bit enabled
#--------

ELF=$(PROG)
IHEX=$(PROG).ihex

CC=avr-gcc
CFLAGS=-g2 -O1 -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Wall
LDFLAGS=-g2 -mmcu=$(MCU)
OBJCOPY=avr-objcopy

all: $(IHEX)

$(IHEX): $(ELF)

$(ELF): $(OBJS)

%.ihex: %
        $(OBJCOPY) -j .text -j .data -O ihex $< $@

clean:
        -$(RM) $(ELF) $(IHEX) $(OBJS)

flash:
        sudo avrdude -c avrispmkII -P usb -p atmega168p -U flash:w:$(IHEX)

.PHONY: all clean
 Makefileを書くのは正直苦手で適当に書いています。(すみません)

リスト3 コンパイル&マイコン書き込み

$ make
avr-gcc -g2 -O1 -mmcu=atmega168p -DF_CPU=1000000UL  -Wall   -c -o blink_LED.o blink_LED.c
avr-gcc -g2 -mmcu=atmega168p  blink_LED.o   -o blink_LED
avr-objcopy -j .text -j .data -O ihex blink_LED blink_LED.ihex

$ make flash
sudo avrdude -c avrispmkII -P usb -p atmega168p -U flash:w:blink_LED.ihex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e940b
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink_LED.ihex"
avrdude: input file blink_LED.ihex auto detected as Intel Hex
avrdude: writing flash (166 bytes):

Writing | ################################################## | 100% 0.05s

avrdude: 166 bytes of flash written
avrdude: verifying flash memory against blink_LED.ihex:
avrdude: load data flash data from input file blink_LED.ihex:
avrdude: input file blink_LED.ihex auto detected as Intel Hex
avrdude: input file blink_LED.ihex contains 166 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.05s

avrdude: verifying ...
avrdude: 166 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

$
 debianマシンにAVRISPmkII経由でAVRマイコンボードを接続し、"make flash"と入力すればマイコンにプログラムが書き込まれます。

2014/03/11

AVRマイコンボードを購入しました

 秋月電子で「ATmega168/328マイコンボードキット」と「Atmel AVRISPmkII」を購入しました。合計で5,300円です。
 このマイコンボードはブートローダを書き込むとArduino互換ボードとして使えるようですが、まずはそのままで遊ぼうと思っています。

搭載されるマイコンのスペック
メーカAtmel
品番ATmega168P-20PU
Flash16kbytes
EEPROM512bytes
RAM1kbytes
Speed0-20MHz @ 4.5V~5.5V (※1)
0-10MHz @ 2.7V~5.5V
Power2.7V~5.5V (※2)
動作温度-40℃~85℃
※1:マイコンボードでは外部X'talとして16MHz品と20MHz品の2種類が入っており、
   好きなほうを実装できます。私は20MHz品を実装しました。
※2:マイコンボードでは5Vに接続されています。

★気づき点

・マニュアルの回路図にミス?がある
 コネクタX4の3pin(M8RXD)、1pin(M8TXD)の飛び先がない。→実際はATMEGA168の2pin、3pinに接続されているようです。(参考:eJackino回路図)
・USBシリアル(AE-UM232R)基板上のジャンパJ2は外しておいたほうが良いかも?

 マイコン基板の電源(5V)はUSB経由とACアダプタ経由を選択できるが、J2を接続し、PWR-SELをEXTに設定すると、USB経由の5VとACアダプタ経由の5Vが直結されあまりよくない。


2014/01/22

無線LAN USBアダプタを用いたdebian(wheezy)インストール

インターネット環境のない所でdebianのインストール作業を行ったので、そのメモです。

■方針


     
  • DVD ISOイメージからインストールする。  
  • 手持ちの無線LAN USBアダプタ(PCI GW-US54GXS)からiPhone(テザリング)に接続し、DVDにないもの、更新されたソフトウェアはDebianのミラーサイトから入手する。

■用意するもの


  • 無線LAN USBアダプタ PCI GW-US54GXS
  • USBメモリ (5GB以上)
  • USBメモリ(50MB以上)

■作業


(1)DVD ISOイメージの入手
ここの情報を参考に、DVD ISOイメージ(debian-7.3.0-amd64-DVD-1.iso)を入手します。

(2)USBメモリ(5GB以上)にISOイメージを書き込む

ここの情報を参考にUSBメモリにDVD ISOイメージを書き込みます。
# cp debian-7.3.0-amd64-DVD-1.iso /dev/sdb
# sync

(3)無線LAN USBアダプタのファームウェアを入手

debianのインストール中にPCI GW-US54GXSを使うにはファームウェアが必要なようです。ファームウェアを準備せずにインストールを始めると、途中で「zd1211/ad1211b_ubというファームウェアが必要」と言われます。
 ここを参考にファームウェアを入手します。
# wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/wheezy/current/firmware.tar.gz

(4)USBメモリ(50MB以上)にファームウェアを書き込む

# mount /dev/sdb1 /media
# cd /media
# tar xvf hogehoge/firmware.tar.gz
# cd /
# umount /media

(5)PCをUSBメモリから起動できるように設定する

BIOSまたはUEFIの設定メニューから起動デバイス選択メニューを選び、内臓HDDよりUSBメモリのほうが優先度が高くなるように設定します。詳しくはここを参照

(6)PCを起動する

PCのUSBポートに下記を接続し、電源投入する。
  • USBメモリ(ISOイメージ)
  • USBメモリ(ファームウェア)
  • 無線LAN USBアダプタ

(7)インストールする

PCの電源を入れてインストーラが起動したら画面の指示に従ってインストール作業を進める。
  • ネットワークインターフェースはwlan0を選択する
  • その前にiPhoneのテザリングをONにしておく。
  • iphoneのSSIDが見つかったら、WPA2を選択してパスフレーズを入力する
これ以外の作業は普通のインストール作業と同じです。 ちなみにiPhoneテザリング時の通信量は数十MB程度でした。

2014/01/06

Debianのアップグレード(squeeze→wheezy)

自宅サーバで稼働しているDebianをアップグレードしたので、そのメモです。

■前提条件


ハードウェア: Intel D510MO
OS: Debian squeeze amd64

■参考文献


以下の文献を参考にしました。
Debian 7.0 (wheezy) リリースノート (64 ビット PC 用)
 -第4章 Debian 6.0 (squeeze) からのアップグレード

■パッケージの最新化


バックアップする前にパッケージを最新化します。
# apt-get update
# apt-get upgrade

■バックアップ


必要なファイルをバックアップします。

■アップグレードの準備


telnet接続、X window systemからの操作はダメとのことなので、サーバにディスプレイとキーボードを接続して直接ログインします。(X windowはインストールしていない)

★文字化けするので環境変数LANGを変更しておく。
# export LANG=C
★システムの状態をチェックする。
# aptitude
→ "g"を押して更新&インストールする。
# dpkg --audit
# dpkg -l | pager
# dpkg --get-selections "*"
# aptitude search "~ahold"
# dpkg --get-selections | grep 'hold$'
→以下の状態がないことを確認
 ・未完了のパッケージ (Half-Installed)
 ・設定に失敗したパッケージ (Failed-Config)
 ・hold 状態
★proposed-updates セクション
 →/etc/apt/sources.list ファイルに proposed-updates セクションがないことを確認。

★非公式なソースとバックポートパッケージ
 →該当なしを確認

★APT の取得先 (ソース) の準備
  • /etc/apt/sources.listを編集。
  • squeezeのある行をコピーして、squeezeをwheezyに置換する。
  • squeezeのある行は先頭に#を付けて無効化する。

■パッケージのアップグレード


# script -t 2> upgrade-wheezy_1.time -a upgrade-wheezy_1.script
# apt-get update
# apt-get -o APT::Get::Trivial-Only=true dist-upgrade
→空きスペースあり。

# apt-get upgrade
# apt-get dist-upgrade (エラーで止まったので-fを付けて再実行)
# apt-get -f dist-upgrade

■カーネルと関連パッケージのアップグレード


# dpkg -l "linux-image*" | grep ^ii
→あった。

再起動
# sync
# /sbin/telinit 6

バーニングシップフラクタル

bsf.knit 今回は『バーニングシップフラクタル』についての備忘録です。 バーニングシップフラクタルとは? Wikipedia ...