ATMELのAT-Tiny26,ATmega,R8Cなどのワンチップマイコン,C言語,JAVAなどのプログラミング言語の入門のためのページです.サンプルプログラムを中心に紹介します.他にもLinixや数学ソフトなどの紹介も行います.

このブログを検索

あなたは FC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンターFC2無料カウンター 番目のお客様です.

2008年7月8日火曜日

ATMELのATTiny26入門


ワンチップマイコンは,計算処理を行うALU(演算論理装置),メモリ,プログラムを格納するROM,IOポートなどが一つのチップに納められています.
最近では,フラッシュROM内蔵のものが多く出回っておりプログラムが簡単に何度でも書き換え可能なので,初心者へのしきいが低くなっています.
アナログコンパレータやADコンバータを持ったものもあり,色々な応用が考えられます.
プログラムメモリやデータメモリとは別に,EEPROMを持っているものが多くあります.EEPROMはデータが不揮発性ですから,あらかじめ必要なデータを入れておいたり,実行中に得られたデータを保存しておいたりする利用が考えられます.
消費電力は非常に小さく,LEDを光らせるような簡単なものなら,充電電池だけでも丸1日以上連続動作が可能です.
ワンチップマイコンを使うためには,マイコンのデータシートを入手し,構成図を見て全体の概要を理解する必要があります.特に汎用レジスタ,プログラムメモリ,データメモリ(RAM),IOレジスタ, EEPROMなどについて理解する必要があります.
ATMEL社のAT-Tiny26は,ADコンバータ付き,EEPROM付き,最大16MHz動作などの特徴を備えた優れものです.クロックも外部発振と内蔵発振器を選べます.
以下に,AVRISPmkIIを使ったTiny26の利用法について説明します.

AT-Tiny26は,最大16MHz動作のATTINY26L-16Pと最大8MHz動作のATTINY26L-8Pの2種類があります.
必要なもの
Windowsパソコン,AVRISPmkII,AT-Tiny26
パソコンに必要なソフトをインストールする.
AVRStudioとサービスパックをインストールする.これらはAVRISPmkIIのパッケージにCDとして付いています.ATMELのページからもダウンロードできます.アセンブラのプログラミングだけでよいのならこれで十分です.
C言語でプログラミングしたい場合には,フリーソフトのWINAVRをインストールします.

プログラムの編集とビルド
AVRStudioを起動し,マイコンをTiny26に選びプロジェクトを開きます.アセンブラまたはソースファイルのプログラムを編集し,ビルドします.ビルドが成功すると○.hexというファイルができます.

プログラムの書き込み手順
AVRISP-mkIIをPCに接続します.
AVRISP-mkIIのISP端子とマイコンのSCK,MISO,MOSIなどを接続し,マイコンの回路に電源を入れる.
ProgramAVRのメニューから,マイコンとの接続を確認し,Flash>Programで○.hexをマイコンに書き込みます.

FUSEの設定
FUSEの設定で,マイコンの発振周波数の設定や内部発振と外部発振の切り替えを設定します.

AVRISP-mkIIのISP端子とマイコンとの接続をはずし,実行したい回路にマイコンをセットし,電源を入れれば,マイコンが動くはずです.

簡単なアセンブラプログラムの例
PA0,PA1,PA2,PA3に接続したLEDを順次点灯させる.
.INCLUDE "tn26def.inc"
RJMP RESET
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RESET: LDI R16,RAMEND
OUT SP,R16
LDI R16,0XFF
OUT DDRA,R16 ;PA=OUTPUT
MAIN: LDI R21,0X00
OUT PORTA,R21
RCALL TIME
LDI R21,0X01
OUT PORTA,R21
RCALL TIME
LDI R21,0X02
OUT PORTA,R21
RCALL TIME
LDI R21,0X04
OUT PORTA,R21
RCALL TIME
LDI R21,0X08
OUT PORTA,R21
RCALL TIME
RJMP MAIN
TIME: LDI R24,5
LOOP1: LDI R23,100 ;1ms x 100=100ms
LOOP2: LDI R22,100 ;1000ns x 10 cycle x 100=1ms
LOOP3: NOP
NOP
NOP
NOP
NOP
NOP
NOP
DEC R22
BRNE LOOP3
DEC R23
BRNE LOOP2
DEC R24
BRNE LOOP1
RET

簡単なCプログラムの例
PA0に接続したLEDを点滅させる.

#include <avr/io.h>

void wait(int x);

int main( void )
{
DDRA=0xff; /* PortAをすべて出力に設定する */

for (;;) { /* 無限ループ */
PORTA=0x00; /* PA0 off */
wait(80); /* wait関数(waitルーチン)実行 */
PORTA=0x01; /* PA0 on */
wait(80);
}
}

/* ********** サブルーチン ******************* */
void wait(int x){ /* 時間稼ぎ */
int i,j;
for(i=1;i<x;i++){
for(j=1;j<20000;j++){
j=j; /* dummy */
}
}
}


その他
EEPROMデータの読み込み
EEPROM>ReadでマイコンのEEPROMデータを読み込みファイルに保存することができます.

ATtiny26の最近の状況(2008-10-15追記)
秋月ではATtiny26の扱いをやめました.何故?一方で秋月ではAVRISPmkIIを4000円で売り出しています.今から始める人は,AVRISPmkIIを使ったプログラミングがおすすめだと思います.
ATMELではATtiny26の上位チップとしてATtiny261,ATtiny461,ATtiny861を出しています.
AVRISPmkIIを使ってATtiny861は書き込みができました.C言語のプログラムでしたら
ATtiny26ののものが,ほとんどそのまま使えるはずです.