ATtiny402 備忘録
ATtiny402、まだ本格的には使っていませんが、
ちょいとメモを残しておきます。
8pinのだけじゃなくtinyAVR0系 AVR1系 AVR2系
についてもあれこれと。
・Arduino IDEでAttiny402が使える。
その後のMPLAB@Snap:Arduino IDEで使えるぞ
ただし、そのままではArduinoの環境で
動くようになるので、I/Oまわりを触ろうと
すると注意が必要。
・書き込み方法がUPDIに。
電源+GND+UPDIの3線だけでライタと接続。
ATmega328Pだと6線が必要。
しかし、UPDI線にスイッチをつないでもリセットはできない。
30kΩくらいでプルアップされている。
UPDI:PA0を出力にしても出力制御(H/L出力)はできない。
しかし、入力はできる(ようだ)。
この入力にパルスを与えた後はUPDI書き込みに
失敗するのでいったん電源を再投入。
・I/Oレジスタのアクセス方法が変わった。
Atmega328Pでは、ポートの入出力と初期H/L出力レベル、
それとプルアップの有無をまとめて指定できた。
ATtiny402では、VPORTに対して同様の操作はできるが、
プルアップ抵抗をオンするには別の命令で指定しなけれ
ばならない。
これまでは入出力とプルアップを同時に指定できた。
PORTB = 0b00110000; // out data, pull up
DDRB = 0b00001111; // portI/O
// |||||+---- PB0 out
// ||||+----- PB1 out
// |||+------ PB2 out
// ||+------- PB3 out
// |+-------- PB4 in (pull up)
// +--------- PB5 in (pull up)
ATtiny402だとプルアップは別命令で。
VPORTA.OUT = 0b11000000; // 出力データ
VPORTA.DIR = 0b01001100; // ポート入出力
// || |||+---- PA0 6pin in UPDI
// || ||+----- PA1 4pin in
// || |+------ PA2 5pin out
// || +------- PA3 7pin out
// |+---------- PA6 2pin out H出力
// +----------- PA7 3pin in 【pull upされない】
PORTA.PIN7CTRL = PORT_PULLUPEN_bm; // PA7 pull upは別命令で
出力にした入力ポートに1を書くと出力のH/Lが反転
する操作はこれまでと同じよう可能。
これはオシロで見るためのテスト的パルスを出すのに便利。
・さらばPROGMEM。 (PSTRやPGM_P、Fマクロ)
Atmega328PではROMに置いてあるデータを読み出すのに、
「LPM命令」しか使えなかった。
このため、PROGMEM、PSTR、PGM_P、Fマクロを駆使して
ROMエリアに固定データ(文字列を含む)を配置していた。
ATtiny402では、「LD命令」でRAMのデータだけでなくROMの
データも読めるようになり、LPMを使わなくてすむようになった。
これでPROGMEMから開放されるのだ!
・AD変換で変換データの累積ができる。
1回だけの10bit変換だけでなく、2、4、8、16、32、64回の
自動的累積加算が設定できるようになった。
64回にセットすると、10bitのAD値が64回加算され、最大値
で65472のデータが得られる。
ソフト的に加算平均しなくても、勝手に加算してくれる。
・どうしてもリセットしたいとき。
ウオッチドッグを使ってのリセット操作だろう。
プルアップ付きの入力ポート(これにPA0:UPDI線が使えれば
エエんだが、どうだか)にスイッチを付け、押されたらloop
を回してWDR命令の実行(このloop外のメインループでのWDR)
を阻止してリセット。
・RSTCTRL.SWPRでもリセットできる。
データシートのRSTCTRLを見ると、ソフトウェアリセット
の機能を持っている。
// Reset immdiately using software reset.
inline void ResetViaSoftware() {
_PROTECTED_WRITE(RSTCTRL.SWRR, 1);
}
これでリセット。
・PWM出力のデューティ、0でLを、maxでHを出力できる。
Atmega328Pの偽AnalogWriteとおさらば。
・delayやmillisのためにタイマーTCAを8bit分割モードで使っ
ている。(Arduino環境のとき)
このためTCAを16bitで使いたいときは、とうぜん、delay、
milllisは使えなくなる。
・RTC、PIT設定時の注意 《データシート 22.13~》
RTC.CTRLA、RTC.CNT、RTC.PER、RTC.CMP、RTC.PITCTRLA
これらのレジスタを操作する時は
RTC.STATUSおよびRTC.PITSTATUSレジスタにある
それぞれのbusyビットをチェック(0の確認)をすること。
さもないと、うまいこと動かない。
下記記事のように、RTCとPIT関連レジスタを触る
ときはビジー待ちをチェックのこと。
・RTC機能付ATtiny RTCとPITの初期化注意点
・ATtiny1614に時計用水晶発振子をつなぐ
・ATtiny402はタイマAとBの2種類だけだが、
ATtiny1614ではタイマDが増える。
周波数カウンタではタイマBとタイマDが
使えるのだが、両方ともキャプチャ信号が
計数する入力クロックで刻まれている。
このため、クロック信号が無い状態では
キャプチャできない。
周波数ゼロの状態を計られない。
・ATtinyを含め、AVRマイコンのデータシートなどの
情報はここ。
・AVR日本語情報サイト
・14pinのtiny1604,1614,1624を比較。
AVR0系:ATtiny1604のピン配列
AVR1系:ATtiny1614のピン配列
AVR2系:ATtiny1624のピン配列
・14pinのtiny1604,1614,1624,3224の価格(デジキー調べ)
ATtiny1604 SOP:@124
ATtiny1614 SOP:@145
ATtiny1624 SOP:@162
ATtiny1624 SSOP:@148
ATtiny3224 SOP:@159
ATtiny3224 SSOP:@169
ROM,RAMの大きな(32k/3k)ATtiny3224を買って
おくほうが幸せになれる。
UARTが2つ乗っているし。
・SSOP(0.65mm)はATtiny1624,3224だけ。
SSOPを使うと、秋月の
AE-TSSOP14 0.65mmピッチ表面実装用14ピン DIP変換基板
が使えて、狭ピッチ(14pin DIP幅)で配線できる。
・tinyAVR2系は、12bitのタイマTCDが無いかわりに、
2つのTCBを連結して、32bitタイマを構成できる。
これは楽しみ!
TCBのクロック入力はイベントで得ることができ、
tinyAVR1のようにタイマTCAからもらうことを
しなくてすむようになっている。 とデータシートから。
・タイマーTCA0は8bit分割モードで初期化されている。
これを16bitの標準モード(初期モード)に戻して使う
ときの注意点。
・tinyAVRマイコンのタイマーAとtakeOverTCA0()
takeOverTCA0()でリセットされて16bit標準モードには
なるけど、WO0出力の代替ポートがそのまま。
これもリセットしておかないと、16bitモードでWO0に
出力しすると本来のPA3ポートじゃなくPA7ポートに
パルスが出てしまう。
これは覚えておかないと!
・14ピンのATtiny3224、ピン配置にはイベント出力として
EVOUTA(PA2)とEVOUTB(PB2)の2つが記されているが、
EVOUTBが出力してくれない。
EVOUTBの代替ポートがピンの外なので、ひょっとしたら
最初から除外されているのかもしれない。
| 固定リンク
「AVRマイコン」カテゴリの記事
- ATtinyのデータシートに「1/1023」が出現(2025.09.26)
- ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと(2025.09.09)
- ATtiny402サンプル:I2Cで液晶表示 SCL周波数を設定できるようにしたら(2025.09.09)
- ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで)(2025.09.08)
- ATtiny402マイコン サンプル:I2Cで液晶表示(2025.09.05)
「ATtiny」カテゴリの記事
- 1Hzパルス発生回路改造(2026.03.12)
- 14ピンのATtiny3224のEVOUTB出力(2026.03.07)
- tinyAVRマイコンのタイマーAとtakeOverTCA0()(2026.02.22)
- ATtiny3224で裸の32bit周波数カウンタ #3(2026.02.20)
- 備忘録:1Hzパルス発生回路(2026.02.01)


コメント