日記


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