« その後のMPLAB@Snap:Arduino IDEで使えるぞ | トップページ | ATtiny402マイコン サンプル:RCサーボモータテスター »

2025年7月23日 (水)

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のピン配列
1604
  AVR1系:ATtiny1614のピン配列
1614
  AVR2系:ATtiny1624のピン配列
1624

・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の代替ポートがピンの外なので、ひょっとしたら
 最初から除外されているのかもしれない。


|

« その後のMPLAB@Snap:Arduino IDEで使えるぞ | トップページ | ATtiny402マイコン サンプル:RCサーボモータテスター »

AVRマイコン」カテゴリの記事

ATtiny」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« その後のMPLAB@Snap:Arduino IDEで使えるぞ | トップページ | ATtiny402マイコン サンプル:RCサーボモータテスター »