MPLAB SNAP

2025年7月21日 (月)

その後のMPLAB@Snap:Arduino IDEで使えるぞ

あれこれネットをさまよっていたら、
 JH7UBCブログ
ATtiny402 ArduinoでLチカまで(2023-07-18)
USBシリアル変換器でATtiny402への書き込み(2023-07-23)
Arduinon IDEでATtiny402を手懐ける方法が出てきました。

その中で「書き込み装置の選択」にMPLAB SNAP(UPDI mode)
出ています。
うまく行くのかどうか分かりませんでしたが、
試してみると・・・書けました。

設定、確認するとことろ。
Ss12_20250721101601

  a.書き込み装置 MPLAB SNAP(UPDI mode)
  b.チップの種別 ATtiny402
  c.使用するクロック周波数
  d.milliesやdelayを使いたいならd.
  e.タイマー割り込みは要らないぜというのならe.

タイマーはタイマーAを8bit分割で使い、ベクタ番号9
のオーバーフロー割り込みで計時しています。

「e.」だと、この処理が無くなって、使用RAMバイト数
はゼロになって、ほぼ裸のTiny402が使えます。


たとえば、こんなテストスケッチ。

//  ATtiny402 : 20MHz, millis() micros()タイマーイネーブル
void setup() {
VPORTA.DIR = 0b11001110;
// || |||+---- PA0 6pin UPDI
// || ||+----- PA1 4pin
// || |+------ PA2 5pin
// || +------- PA3 7pin 20ms経過でトグル
// |+---------- PA6 2pin millis変化でトグル
// +----------- PA7 3pin loopでトグル
}

void loop() {
uint32_t ms, ms20, tnow;
tnow = millis(); // 現ms値
ms = ms20 = tnow;
while(1){
VPORTA.IN |= (1 << 7); // PA7 3pin トグル
tnow = millis(); // 現ms値
if(ms != tnow){ // ms値変化?
VPORTA.IN |= (1 << 6); // PA6 2pin トグル
ms = tnow;
}
if((tnow - ms20) >= 20){ // 20ms経過
VPORTA.IN |= (1 << 3); // PA3 7pin トグル
ms20 = tnow;
}
}
}

・loopでPA7をトグル
・millis()で1ms変化を調べてPA6をトグル。
・20ms経過を調べてPA3をトグル。

すると、こんな波形が出てきます。
Ms11a
もうちょい拡大すると・・・
Ms12a
「millis()値変化でトグル」が1msきっちりにならない
のに注意が必要です。
  Arduino UNO R3でもきっちり1msじゃ
  ありません。

| | コメント (0)

2025年7月16日 (水)

その後のMPLAB@Snap

UPDI」で書き込む新しいタイプのAVRマイコン、
  ・Microchip StudioでMPLAB@Snapが動かない
ということで、MPLAB@SnapはMicrochip Studioで
使うのはあきらめて、「MPLAB IPE」を使って
書いていました。

フラッシュメモリの書き込みはちゃんとできていたんですが、
困ったぞが「ヒューズビット」の書き込み。
MPLAB IPEでは、うまいこといかないのです。
 ・起動時のクロックを20MHz→16MHzにしたい
 ・BOD電圧を触りたい 1.8V→2.6V
など。

そこで・・・あれこれ検索すると
ATTINY202/402のFUSEビットをAVRDUDESSを使って書く方法
[Part2] ATTINY202への書き込みとプログラムをやっています!

AVRDUDESSが使えそうということで、試してみました。

起動するとMPLAB@Snapをそのまま認識してくれました。
Sn1

コンパイル結果のHEXファイルを読み込むようにして、
右下の追加コマンド。
 ・-x mode=avr    AVRモードにせよ
             これは必須!

 ・-U fuse2:w:0x01:m ヒューズ02の値を01に
          変更したいときだけ

とりあえずこれでMPLAB@Snapを使っています。

・書き込み装置選択画面
Sn2

| | コメント (0)

2025年6月13日 (金)

あかんやん「Microchip Studio」

AVRマイコンのポート操作、I/Oマクロとして以下のように記述したとき
 #define PA0_H (PORTA |= (1 << PA0)) // PA0 Hに
 #define PA0_L (PORTA &= ~(1 << PA0)) // PA0 Lに
以前の「Atmel Studio」では「SBI」「CBI」命令に展開されて
最速の実行コードが生成されていました。
  ※Arduino UNO R3でも同じ

新しいPC(win11マシン)にインストールして使い始めた
「Microchip Studio」でも同じだと思ってたら、ポート
への出力がエラい遅いんです。
展開されたアセンブラのソースを見ると、
  Hへの制御は「IN, OR, OUT」と、
  Lへの制御は「IN, AND, OUT」と。
この3命令に展開されています。

単純に実行が遅れるだけでなく、割り込み処理の中と
メイン側で同じポートへのアクセスがあると、相互の競合が
発生します。
メイン側では「割り込み禁止・割り込み再開」を
指示しなくちゃならないので、よけいに遅くなってしまいます。

コンパイラのオプション指定で変化するんだろうと考え
ているのですが、どこを触れば良いのか探し出せてません。

困ったぞ!

※その後・・・おそらく解決
「ALT-F7」でプロジェクトのプロパティを出し、
「GNU Cコンパイラ」のオプティマイズを変更。
Opt11
初期設定が-Og:デバッグ時の設定になっていました。
-O1, -O2, -O3, -Osのどれでも「SBI」「CBI」に
展開してくれるようになりました。
一件落着!! よかったゾ。

あとはMPLAB@Snapの扱い。
Microchip Studio内からの書き込み操作じゃなく、
別のツールを使うか・・・

※関連
2019年3月25日:割り込みで処理させるwordデータの扱い
この中で示しているポートのH/L操作、

 #define PB5_H (sbi(PORTB,PORTB5))
 #define PB5_L (cbi(PORTB,PORTB5))

ここでの「sbi()」「cbi()」そのものが、こんな具合に
「SFR &= ~b」「SFR |= b」なっているのです。

 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
   wiring_private.hの中で定義

この1命令でビット操作ができるのはアドレス0x00~0x1Fまでの
32バイトの区間にあるものだけ。
AVRマイコンのアーキテクチャではむちゃ貴重なエリア
なのです。

 

| | コメント (0)

2025年6月12日 (木)

Microchip StudioでMPLAB@Snapが動かない

「UPDI」で書き込む新しいタイプのAVRマイコン、
  今回は8ピンのATtiny402
Microchip Studio環境で書き込みできるよう
MPLAB@Snapを買ってきました。
Tl1

むき出しの基板なんで、ちょうどええ大きさの
プラケースも見つけて、「よしよし」と。

Tl32
ダイソーで買ったプラケースにうまいこと入りました。
Tl33
ケーブル出しの穴加工、使うのはカッターナイフだけ。

さて、これでっとなったんですが、
Microchip StudioでSnapが言うことをきいてくれない
のです。

USBをつないで出てきたのは、
 「ファームウェアをアップグレードせよ」
と。
Microchip Studioの中でアップグレード処理が
始まったんですが、失敗。
Up1
ネットを見ると、「MPLAB X IDE」でゴソゴソせよ
という情報が出てきます。
  トラ技の2021年4月号の特集記事(p44)にも
  注意が出ていました。
T51

面倒ですが「MPLAB X IDE」をインストールして、
あれこれ。
実際の「ATtiny402」とSnapをUPDIでつないで、
試しにパルスを出すテストプログラムを書いたら
ちゃんと動きました。

これで「よっしゃ」だったんですが、Microchip Studioに
つなぎ直すと、こんどはこんなエラーメッセージ。
Up2

Snapのファームウェアバージョン、On toolが「1.0b」。
MPLAB X IDEでアップグレードされたんでしょう。
しかし、On Diskが「1.0a」となっていて、
「ファームウェアをアップグレードせよ」に従い
「Upgrade」ボタンを押したら・・・
Up3
失敗
現状、Microchip StudioでSnapが使えません。

MPLAB X IDEはキライだし、AVR Studio時代から使い慣れた
ツールを利用したいのです。
困った、困った。

AVRISP mkIIなどのSPI方式の書き込みツールは使えています。


※追記
その後・・・
プログラムの編集とコンパイルは手慣れた「Microchip Studio」で。
できあがった「.HEX」ファイルを「MPLAB IPE」に食わせて
UPDIで書き込み。こんな手順で作業してました。
MPLAB IPEを起動しっぱなしにしておくと、Microchip Studioで
コンパイルしたら「HEXファイルが変わったぜ!」と警告を出して
くれます。
Mp11
そこで、書き込み操作を実行。

しかし、まだ落とし穴。
「Hold in Reset」にしてたら、書き込みが終わっても
リセットのままになってしまって、
書いたプログラムが走れへん。
スカタンしたかとびっくりしますんで、
「Release from Reset」にしとかんとあきません。

Mp12

https://ww1.microchip.com/downloads/jp/DeviceDoc/50002227B_JP.pdf


| | コメント (11)