2019/07/21(日)ArduinoISPでAT90S2313を書き込む方法

AVR

AT90S2313は古いチップだがこれを使う用事があって、ArduinoとArduinoISPなるプログラムを使えば良いハズ。だが、ATTiny2313なら書き込めるがAT90S2313では反応しない。

ArduinoISPを修正

ここまで丸二日掛かったが面倒なので結論だけ書いて置く。417行目あたりのreset_tagetをtrueからfalseへ修正するだけ。AT90S2313とATTiny2313のみで動作確認。

GitHub ArduinoISP.ino

- reset_target(true);

- pinMode(RESET, OUTPUT);

- SPI.begin();

- SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));

+ reset_target(false);

+ pinMode(RESET, OUTPUT);

+ SPI.begin();

+ SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));

とするだけである。

avrdude

C:\arduino-1.6.13\hardware\tools\avr>bin\avrdude -C etc\avrdude.conf -c avrisp -p 2313 -P com3 -b 19200

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9101 (probably 2313)

avrdude: safemode: Sorry, reading back fuses was unreliable. I have given up and

exited programming mode

avrdude done. Thank you.

2015/08/23(日)BASCOM AVRでWS2812 Rainbow LEDを点灯させる(ATtiny2313)

AVR

このWS2812なるLEDはシリアルパルスでLow/Highを送るのだが、その幅が0.8usや0.4usという極小幅なのでBASCOM AVRでは不可能。そこでWS2812へパルス出力部分だけをインラインアセンブラで記述した。レインボーなパターン部分をBASICで記述出来るのは素晴らしい。

パターンを出すメインルーチン

Do

Wr = Rnd(255)

Wg = Rnd(255)

For I = 0 To 255 Step 2

Wb = I

Gosub Ws2812

Waitms 20

Next I

For I = 255 To 0 Step -2

Wb = I

Gosub Ws2812

Waitms 5

Next I

Loop

簡単にい書いたのでポートはPIN:9(PORTD:5)に決め打ちしているけれど、見れば簡単に変更出来る位小さく作った。

BASICのソースリストはws2812.bas

2015/08/22(土)Arduino UNO を ATmega168Pへ装換

AVR

[AVR]Arduino UNO のCPUをATmega168Pへ交換してみた。

UNOを購入したが,家にはATmega168Pの在庫があるので,それを活用出来るか試してみた。

ATmeaga168Pのヒューズビット

EXTENDED 0xF8

HIGH 0xDF

LOW 0xFF

-Boot Flash size=1024, start=$1C00

-BootRST

-Ext.Crystal OSC 8.0-

ATmega168Pへ書き込むbootloader

\hardware\arduino\bootloaders\optiboot\optiboot_atmega168.hex

ATmega168PのLockBits

0xCF

-LPM and SPM prohibited in Boot Selection

Arduino-IDEにUNO168を登録

arduino\hardware\arduino\boards.txtの以下の行を追加

##############################################################

uno168.name=Arduino Uno168

uno168.upload.protocol=arduino

uno168.upload.maximum_size=14336

uno168.upload.speed=115200

uno168.bootloader.low_fuses=0xff

uno168.bootloader.high_fuses=0xdd

uno168.bootloader.extended_fuses=0x00

uno168.bootloader.path=optiboot

uno168.bootloader.file=optiboot_atmega168.hex

uno168.bootloader.unlock_bits=0x3F

uno168.bootloader.lock_bits=0x0F

uno168.build.mcu=atmega168

uno168.build.f_cpu=16000000L

uno168.build.core=arduino

uno168.build.variant=standard

##############################################################

Arduino IDEの使い方

ツール→マイコンボードの一覧に Arduino Uno 168 があるのでそれを選択する。書き込めるプログラムメモリ領域が小さいので大きなサイズのプログラムは実行できない。

内部発信器8MHzモードでもOK

ATmega168Pのヒューズを書き換えた後、boards.txtの以下を書き換える事で問題なく利用が可能。(要するにクロックが半分になる。これによってIDEとの通信速度も半分になるだけの事)。fuseビットの定義は未検証。

uno168.upload.speed=57600

uno168.build.f_cpu=8000000L

uno168.bootloader.low_fuses=0xc2

uno168.bootloader.high_fuses=0xdd

uno168.bootloader.extended_fuses=0x07

2003/07/27(日)AVR Monitor AVRとシリアル通信

AVR
20030727_0.jpg

AVRのチップには何かと面白い機能が満載だ。しかし、まだ全てを把握していない為、何度も「プログラム修正」→「書き込み」→「テスト」を繰り返しているとこの作業が面倒になってきる。そこで、シリアルの回路を先に作って、PCとRS-232Cで接続して任意のポートにデータを書き込める簡単なモニタープログラムを作ってみた。

PC側の画像 ソースは例のavr-gccで作成。これはブレッドボード上の画像