日記
030204
Debian Linux AVRで開発の検討
http://ww2.tiki.ne.jp/~maro/AVR/
秋月で売っている品種
AT90S2313-10PC 20pin 10MHz F2K R128 E128 reg32 ¥370-
AT90S1200-12PC 20pin 12MHz F1K R32 ¥200-
AT90S1200A-12PC 20pin 12MHz F1K R32 ¥220-
AT90S8535-8 40pin 8MHz F8K R512 ¥800- (10bit-A/D)
AT90S8515-8PC 40pin 8MHz F8K R512 ¥700-
AT90S4433-8PC 28pin F4K ¥600- (6ch-10bit-A/D UART PWM etc)
AT90S4414-8PC 40pin 8MHz F4K R512 ¥600-
AT90S2323-10PC 8pin 10MHz F2K R128 E128 reg32 ¥380-
対象PIC
PIC16F84A-20/P 18pin 20MHz F1K R68 E64 ¥380-
PIC12C509A-04/P 8pin 4MHz P1K R41 ¥150-
あんまし値段は変わんないねー。C言語で開発出来る
というAVRが素敵に見えるねぇ〜。(笑
030328
SoftwareDesign 2003.4
p.202 みついわ AT90S2313用LED点滅プログラム
Debian環境で開発出来るか検証
# apt-get install gcc-avr
むー。なんか全然猿真似コンパイルが出来ない。
一旦、purgeする。
しょうがないのでいつもの手でrpmからdebを生成して
installしてみる。rpmはみついわさんのとこからget
http://www.linet.gr.jp/~mituiwa/h8/gcc-j.html
# dpkg -i avr-binutils_2.13-2_i386.deb
# dpkg -i --force-overwrite avr-gcc_3.2-2_i386.deb
(みついわH8-gccパッケージのファイルと重複があるので)
# dpkg -i avr-libc_20020203-2_i386.deb
あー。コンパイル出来た。良く考えたら標準deb-packageの際に、
avr-libcパッケージをinstallしていなかった。これを入れて
おけばコンパイル出来たと思われると、もう、このままで
進めちゃうけどね。(^^;
$ avr-gcc -mmcu=at90s2313 -o list2.elf list2.c
$ avr-objcopy -O ihex list2.elf list2.hex
書き込みtoolのinstall
# apt-get install avrprog
(setuidで誰でも使える方を指定した)
実機が無いのでなんだが以下の方法でいけそうだ。
$ avrprog -w < list2.hex
ダメならみついわさんのavrwriteを使わせて頂こう。(笑
あぁ。いい勉強になった。次はほんまもんで動作検証だね。
いずれやろう。(^^;
030521
AVRの開発とか資料漁りしてみたり。
む。AT90S2313-10PCは電源範囲(+4V〜+6V)がPICより上だね。
-4なら+2.5V〜なんだけど秋月に売ってない。
電池駆動しにくいね。(;_;)
昼休みに秋月に買物しに行く。
AT90S2313-10PC
IC-Soket-20pin
セラロック10M
DSUB25♂
千石で単4x2の電池ホルダーも買う。あ、基板買ってないや。
会社のあまりをもらうか。(A^^;;
開発の参考になりそうなHP
[ASM言語]
http://www.sendai-ct.ac.jp/~ckuma/micom/
[C言語]
http://www.t3.rim.or.jp/~temple/hardware.html
http://homepage3.nifty.com/mujirushi/ews/wt/index.html
[DEVICE-PDF]
http://gd4-082139.gd.icnet.ne.jp/%7Ehero/hero.htm
[AVR-GCC]
http://ww2.tiki.ne.jp/~maro/AVR/index.html
取り合えずPIN配などを記載。ISP部は基板側はpin-header
で、pin5は折るみたい。ケーブル側はXH6でいいかな。
AT90S2313-10PC
1 /RESET ISP-1
2 PD0(RXD)
3 PD1(TXD)
4 XTAL2
5 XTAL1
6 PD2(INT1)
7 PD3(INT2)
8 PD4(T0)
9 PD5(T1)
10 GND ISP-5,6
11 PD6(ICP)
12 PB0(AIN0)
13 PB1(AIN1)
14 PB2
15 PB3(OCI)
16 PB4
17 PB5(MOSI) ISP-4
18 PB6(MISO) ISP-3
19 PB7(SCK) ISP-2
20 VCC(4〜6V)
ISP-Cable
LPR AVR
2 SCK
3 MOSI
4 /RESET
12 MISO
18-25 GND
030522
いろいろと参考になりそうなHPを発見
http://yuki.sakura.ne.jp/hw/mp3player.html
MMC/SDカードのFATファイルを読み出しで利用している。
AVR-GCCで開発している。はっきし言って凄いカモ!!
参考にさせてくれーい。\(^^)/
030618
秋月でATtiny26Lが¥280ーで売っている。
動作電圧範囲が2.7〜5.5Vと電池でも動かせる。うーん。
まだ、AT90S2313-10PCを使用していないがはっきし言って
こっちの方が使いたい。(^^;
取り合えず、DataSheetを入手して使い勝手の考慮をしてみよう。
ひょっとしたらLinuxでは開発出来ないとかない為に?
030620
あぁ。勘違いAT90S2313-10PCにADCは内蔵されていない。
内蔵されているのはアナログコンパレータだった。
ATtiny26LだとADが11chもあるけど、UART機能が無い?
特殊なシリアル機能があるからこれで実現するのかな?
みゅー。AT90S2313-10PCの使い道をどうしようかなぁー。
http://www.toshu-ltd.co.jp/gaki/electronics/AVR/AVR.html
によるとADがあってUARTが使えるのは、
AT90S8535 (DIP-40) ¥800-
AT90S4433 (DIP-28) ¥600-
AT90S2323 (DIP-8) ¥380-
AT90S2343 (DIP-8) ¥380- (内蔵CR発振あり)
むー。4433が無難かなぁー。でも、一番普及してそうなのは、
8535みたいだなぁ。
030819
AT90S2313-10PCでの利用方法として、また、赤ちゃん玩具を
思い付く。と、言ってもふつーな玩具です。
ボタンが何個かあり、それを押すと、光りと音で反応するだけ。
AVRの最初としては妥当かも。(笑
030914
DesignWaveより、ソフトCPUとしてAVRが利用している記事が
あり、そこよりOPENCORES.ORG
http://www.opencores.org/projects/avr_core/
に行ってみた。VHDLで書いてあるんだけど、最初どこに置いて
あるのかが全然不明だった。どうやらCVSで管理している様だ。
多分以下の方法でげっとできそう。
$ export CVSROOT=:pserver:cvs@cvs.opencores.org:/home/oc/cvs
$ cvs login (password = cvs)
$ cvs -z9 co AVR_Core ← 最初のげっと
$ cvs -z9 update -d -P ← げっとごに最新に更新する場合
030919
DesignWave 2003.10 を読んだら、今度は、ATmega103を使用
したくなってきた。
その前に、AT90S2313-10PCで、動かせよ。< 俺
031007
昼休みに秋葉(千石)で買物。(^^)
・3端子レギュレータ TA7805F +5V 1A ¥70- x3
刻印面を見ながら、左からIn,Gnd,Out
・ユニバーサル基板(片面ベーク) ¥70- x3
・9V角型電池 ¥70- x1
これで後は半田付けすればAVRの開発ターゲットが完成
ターゲットの表面的な部品レイアウトは以下の様にする。
L0 L1
L2
L3 L4
SW0 SW1 SW2 SW3
CPUのピン配は以下の通りとする。
AT90S2313-10PC
1 /RESET i /res, ISP-1
2 PD0(RXD) o nu
3 PD1(TXD) o nu
4 XTAL2 - XTAL2(10MHz)
5 XTAL1 - XTAL1
6 PD2(INT1) i sw0
7 PD3(INT2) i sw1
8 PD4(T0) i sw2
9 PD5(T1) i sw3
10 GND - ISP-5,6
11 PD6(ICP) o Buzzer
12 PB0(AIN0) o led0
13 PB1(AIN1) o led1
14 PB2 o led2
15 PB3(OCI) o led3
16 PB4 o led4
17 PB5(MOSI) i nu, ISP-4
18 PB6(MISO) o nu, ISP-3
19 PB7(SCK) o nu, ISP-2
20 VCC(4〜6V) - +5V
nu = not use
031016
手書きで回路図をババソと描いて、
targetの半田付けをおもむろに開始する。 20:05
まずはISPケーブルから手をつける。
target基板は部品を並べた所で時間切れとした。
また後日。(^^;
と、思ったがLEDとSWを残して全部半田付けした。
また後日。(^^; 22:49
031017
targetの半田付け(昨日の続き)
完了。今日はここまで。
次はプログラムを組む作業だ。ちゃんと動作するところ迄いこう!
031018
$ avr-gcc --target-help
としたら対応CPUに
atmega103 があるのでソフトCPUの ATmega103 の開発に使えそうだ。
以前使えないかと思っていた ATtiny26L も attiny26 とあるので
これも使えそう。よいよい。(^^)v
以下の様なfileを作成してみる。
file : led_bl.c
/*
AT90S2313用LED点滅プログラム
*/
#include <io.h>
/* 単なる時間待ち */
void wait( void )
{
volatile long cnt;
for ( cnt = 0; cnt < 100000; cnt ++ );
}
/* Main-Routine */
int main( void )
{
outp( 0x43, DDRD ); /* out:o,in:i,(ioiiiioo) -> (0100_0011) */
outp( 0xbc, PORTD ); /* inputピンをpullupにする 1011_1100 */
outp( 0x3f, DDRB ); /* out:o,in:i,(ioiooooo) -> (0101_1111) */
outp( 0xa0, PORTB ); /* inputピンをpullupにする 1010_0000 */
/* 偶数bitのLEDのみを点灯(LEDは負論理制御) 0001_0101*/
outp( inp( PINB ) | 0x15, PORTB );
while( 1 ) {
/* LEDの状態を反転させる */
outp( inp( PINB ) ^ 0x1f, PORTB ); /* 0001_1111 */
/* 時間待ち */
wait();
}
}
file : Makefile
CC_AVR = avr-gcc
OC_AVR = avr-objcopy
SYSNAME = led_bl
PROGS = $(SYSNAME).hex
OBJS = $(SYSNAME).c
CLEANFILES = $(SYSNAME).hex $(SYSNAME).elf
DISTS = Makefile *.c *.h
all : $(PROGS)
$(SYSNAME).hex : $(SYSNAME).elf
$(OC_AVR) -O ihex $(SYSNAME).elf $(SYSNAME).hex
$(SYSNAME).elf : $(OBJS)
$(CC_AVR) -mmcu=at90s2313 -o $(SYSNAME).elf $(SYSNAME).c
clean :
rm -f $(CLEANFILES)
write:
avrprog -w < $(SYSNAME).hex
dist:
rm -f $(CLEANFILES)
tar zcvf $(SYSNAME)-`date +%Y%m%d%H%M`.tgz $(DISTS)
んで、make迄は確認出来た。
後でtargetに焼いて動作確認しよう。
なんかtargetだと何を示しているか不明になっちゃうので、名称を
付ける事にした。プチビー。
プチって押してビーって音がしたりする予定だから。(笑
ノートPC(penpen)に開発環境をいんすとーる
# apt-get install gcc-avr avrprog avr-libc
HEX-fileまで生成できた。
んー。でも、AVRには焼けないや。パラレルがECPだからかな?
また、月曜にでもやろう。
031020
調べたらISP書き込みのケーブルがみついわバージョンと
avrprogバージョンで違う事が発覚。生憎、みついわさんのHP
ではAVRが消えて?いる様なのでケーブル配線を変更して、
avrprogで書き込み出来る様に方針を決定する。
ISP-Cable (avrprog対応)
LPR AVR
16 INIT 1 /RESET
1 STROBE 2 SCK
11 BUSY 3 MISO
2 DATA0 4 MOSI
18-25 GND 6 GND
後で半田付けし直そう。
031021
ISPケーブルをavrprog用に修正し、ブザーで結線も確認。
次回はISP書き込みを試すぞ。
031022
AVRにプログラムを焼いてみる。
penpen:~/usr/src/avr/tst01$ make write
avrprog -w < led_bl.hex
Chip signature bytes: 0x1e 0x91 0x01 0x20
Chip identification: AT90S2313 - 2048 bytes program; 128 bytes eeprom
Writing program memory
Writing successfull.
で、電源をoff,onし直したらLEDがピカピカとブリンク
しだした。よし!今日は勝ち組みのままで帰ろう。(^^)v 22:55
031027
アセンブラのソースしかないけどとても参考になりそうなHPを
発見した。
http://www.apony.com/elec/index.html
特に、「AT90S1200を内部RC発振回路有効化ボードの製作」
が良いです。他のHPにもあるけど、これが標準的というか、
ユニバーサル基板が綺麗に見えたのがいかった。(笑
最初の割り込みプログラムをmakeする。
Timer0のOverFlow割り込みについて勉強した。
約1ms周期で割り込みが掛かるプログラムを組む。(10MHzの
クロックからだとうまく作れない?)
実機でdebugをしたいが今日は早帰りの日なので、後日する事
にしてやめとく。
031028
「Timer0のOverFlow割り込み」の動作確認
あれ?AVRに書き込みが出来ない。なぜ?(T_T)
どうやら、1度書き込みをしたAVRに再度書き込みたい時は、
EraseをしてAVRの中を綺麗にしておかないといけない様だ。
penpen:~/usr/src/avr/tst02$ avrprog -e
Chip signature bytes: 0x1e 0x91 0x01 0x20
Chip identification: AT90S2313 - 2048 bytes program; 128 bytes eeprom
Erasing chip... done.
$ avrprog -w < led_bl.hex
Chip signature bytes: 0x1e 0x91 0x01 0x20
Chip identification: AT90S2313 - 2048 bytes program; 128 bytes eeprom
Writing program memory
Writing successfull.
ふむ。書き込み出来た。(^^)
led_bl.cのファイルは以下の通り
#include <io.h>
#include <interrupt.h>
#include <sig-avr.h>
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
#define TRUE 1
#define FALSE 0
BYTE f_1s;
WORD wTime1sec_cnt;
#define PRESET_1MS ( 256 - 10 )
/*!
Init Timer0
Timer0は8bitタイマのOverFlowでの割り込みを使用する。
CK=10MHzなので1024分周してCNT0=10だと約1ms周期で
割込起動出来る。
*/
void tmr0_init( void )
{
/* preset CNT0 */
outp( PRESET_1MS, TCNT0 );
/* set prescaler CK/1024 */
outp( 5, TCCR0 );
/* enable TMR0 interrupt */
outp( inp( TIMSK ) | BV( TOIE0 ), TIMSK );
/* Init 1sec起動用flag */
f_1s = FALSE;
wTime1sec_cnt = 1000;
}
/*!
interrupt function (timer0 OverFlow)
*/
SIGNAL( SIG_OVERFLOW0 )
{
/* preset CNT0 */
outp( PRESET_1MS, TCNT0 );
/* 1秒起動用処理 */
wTime1sec_cnt --;
if ( wTime1sec_cnt == 0 ) {
f_1s = TRUE;
wTime1sec_cnt = 1000;
}
/* LEDの反転 */
outp( inp( PINB ) ^ 0x01, PORTB ); /* 0000_0001 */
}
/*!
Main-Routine
*/
int main( void )
{
/* Init Port */
outp( 0x42, DDRD ); /* out:o,in:i,(ioiiiioi) -> (0100_0010) */
outp( 0xbd, PORTD ); /* inputピンをpullupにする 1011_1101 */
outp( 0x5f, DDRB ); /* out:o,in:i,(ioiooooo) -> (0101_1111) */
outp( 0xa0, PORTB ); /* inputピンをpullupにする 1010_0000 */
/* タイマ割り込みの設定 */
tmr0_init();
/* enable grobal interrupt */
sei();
while( 1 ) {
if ( f_1s == TRUE ) {
/* 1秒毎に処理する */
f_1s = FALSE;
cli();
outp( inp( PINB ) ^ 0x10, PORTB ); /* 0001_0000 */
sei();
}
}
return 0;
}
031029
「UART受信割り込み」の勉強
file : uart_echo.c (関数部だけの抜粋)
/*!
Init UART
9600bps 8bit-Data 1stop-bit Non-parity
CK=10MHzなのでUBRR=64(0.2%誤差)
受信割り込みを使用する
*/
void uart_init( void )
{
/* enable RxInt, RxD, TxD */
outp( BV( RXCIE ) | BV( RXEN ) | BV( TXEN ), UCR );
/*9600bps at 10MHz*/
outp( 64, UBRR );
}
/*!
interrupt function (UART 受信割り込み)
*/
SIGNAL( SIG_UART_RECV )
{
/* echo back */
outp( inp( UDR ), UDR );
/* LEDの反転 */
outp( inp( PINB ) ^ 0x02, PORTB ); /* 0000_0010 */
}
031030
昼休みに、プチビーの基板もろもろをケースに組み込んだ。
ケースは天下のダイソー様で購入した白濁した様な半透明な
タッパーケース。うーん。りーずなぶるで加工がしやすい。(笑
取り合えず写真しておいた。(デジカメは知合いのを借用)
http:pict/20031030a.jpg
http:pict/20031030b.jpg
http:pict/20031030c.jpg
AT90S2313-10PCでの基本プログラムが完了したので、
次回からはFPGAでSoft-CPUへも並行で行こうかと思う。(^^;
031104
プチビー仕様をざっと決めてみる。
sleep-Modeにて待機
ボタンを押すと起床
Opening-Messを出してその後動作
動作はボタン毎に任意の動作が割り当てられている
動作1-押している間、全点灯と鳴る
動作2-押し離しで、LEDが順番に点灯して鳴る
動作3-押し離しで、対角のLEDが左右点滅しながら鳴る
動作4-押し離しで、右から左に流れる様にLEDが光、鳴る
ボタン待ち30秒でTimeOutしてsleep-Mode
よし、後はmakeだ。いつやろうかなぁー。(^^;
031106
ISE WebPACK 6.1i ではLinuxは対応していない事が発覚。
SoftCPUをやろうとしたらWindows2000かXPの環境がいるのかぁー。
なかなか進まないなぁー。
031107
ATmega103のPDF読み終り。SoftCPUで使用するCORE部分では、
AT90S2313とのプログラム的な差異はなさそうです。
今までの勉強は生きるみたいです。安心。(^^;
031109
プチビーのmakeする。
大体出来たかな。後はKEY入力処理系を実装したら完成だ。
031115
プチビーのmakeが完了した。 26:28
debugは全然してません。これから。(笑
031120
プチビーのdebugをする。んー。時間管理がうまくいかない。
変数の操作に問題がありそうだ。もうちょい頑張れば出来るかな?
031122
プチビーのdebugをしつつ、sleep動作も実装してみる。
これで要求仕様分のmakeは済んだ。
後はdebugして完成させるだけだ。
031125
ピチビーのdebug
んー。なんかKEY判定がへんてこ。bugっているのかなぁー。
031127
ピチビーのdebugを会社の昼休みにする。
K_mon_Systemを使用してモニタ・デバッグし出す。キー判定は
良さそうです。でも、キーのキューバッファの挙動が変。
今回新規にババソと書いた部分だ。う。ここで時間切れ。
また今度。(^^;
退社後にdebug
BUGは2個あった。
キーのキューバッファの初期が余分にされていてキー判定が
変になっていた。更に、ブザー制御の際にSW入力用のPullUp
データを変更してしまい。SW入力が勝手に入った症状が発生。
やっと、ピチビー完成。
今思うとブザーの駆動電位は9V電池直接でよかったがまぁ
動作しているという事で、ご愛敬。開発終了。(^^;
自宅に持ち帰りテスター(娘)に渡す。
さて、遊んでくれるかな?(笑
031129
プチビー
妙に電池寿命が短い様だ。電池交換した。
やはり、+9V->+5V部のレギュレータが常時動作しているのが
まずいのだろう。電池直結(単3x3=4.5V)で動作出来る回路に
するべきだったか?
031207
プチビーの電池交換する。
1W持たないのは製品としては良くないな。1個70円の電池でも、
頻繁に替えるのはいくない。
電源部の改造をするか。CPUは4.0〜6.0Vにて動作するので、
単3電池で直接駆動するとすると4本の6Vが一番素直だよね。
現在の3端子レギュレータの所の回路を削除し電池と直結の回路
にし、更に電池ホルダーを単3電池4本か単3電池2本を2組での
構成で組込を検討してみよう。
(ケースに電池をどう入れるか検討がついていない為)
031210
プチビー改造
昼休みに、9V電池から単3 x 4=6V電池構成へ改造する。
後ちょいのところで時間切れ。うーん。45分で食って作業は
厳しいな。(+_+)
夕方の休みにちょい半田付けする。んー?電池ホルダがしょぼくて
接点不良がある。ちょっと擦って様子みかな?
時間切れで終了。
残りは退社後かな。
退社後に最終動作確認する。
電池は単3x3の構成になった。4本だと6Vを越えてしまうので。(^^;
これで一旦、娘に渡す。
今度は1W以上持つとは思う。さて、どのくらいで電池交換か?
http:pict/20031210a.jpg