2020/01/11(土)TinyBasic-51をThe Macroassembler ASへポーティング
私は普段アセンブラはcygwin上でThe Macroassembler ASを利用している。そこでオリジナルのTB51.ASMをMetalink ASMバージョンに書き換えたTB51ML23.ASMをさらにAS用に書き換えてみた。自分の環境で再コンパイルが出来ると色々と触れるから。
2020/01/05(日)Intel D8751Hの書き込み
少し前に中古のIntel D8751Hを幾つか入手しました。しかし半数が書き込み不良となります。イレーズ後に書き込みを実施すると途中でエラーとなる、又は全く書き込めずに最初のアドレスでエラーとなる。古いチップだからイレーズも書き込みも出来なくなるのかなという程度の認識でした。
しかし、年末にそういうデバイスに詳しい友人から「古いチップは長めにイレーズしないと途中で書き込みに失敗する」という情報を得ました。これは朗報で自分で試してみると確かにイレーズ時間が短いと、ブランクチェックがOKでも書き込み途中でエラーが発生する事を確認できた。8751は一時間のイレーズが必要なのかも。恐るべし。
2019/07/21(日)ArduinoISPでAT90S2313を書き込む方法
AT90S2313は古いチップだがこれを使う用事があって、ArduinoとArduinoISPなるプログラムを使えば良いハズ。だが、ATTiny2313なら書き込めるがAT90S2313では反応しない。
ArduinoISPを修正
ここまで丸二日掛かったが面倒なので結論だけ書いて置く。417行目あたりのreset_tagetをtrueからfalseへ修正するだけ。AT90S2313とATTiny2313のみで動作確認。
- 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)
この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]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