ATtiny202を32kHzで動かした
ATtiny202を省電力で動かそうとする実験のひとつ
パワーダウンスリープを使えば早いが、起き上がりのピン変化割込みにPx2とPx6しか使えない
2025/06/26追記
起き上がりに全てのピンが使えるが、若干の制限があるだけでした。
細かい事は今後の記事に書くとして、実行中にソフトウェアからクロックを変更してみたので、忘れないうちにメモしておく
#undef F_CPU // 既存の F_CPU 定義を解除
#define F_CPU 32768UL // 新しく定義
#include <util/delay.h>
void setup() {
//PORT設定
PORTA.DIRSET = PIN1_bm; //PORTレジスタ データ方向設定(出力)
PORTA.OUTCLR = PIN1_bm; //PORTレジスタ 出力値解除(LOW)
//メインクロック設定
CCP = CCP_IOREG_gc; //CCP 構成設定変更保護レジスタ 保護されたI/Oレジスタ解錠
CLKCTRL.MCLKCTRLA = CLKCTRL_CLKSEL_OSCULP32K_gc; // 32768Hzクロック選択
CCP = CCP_IOREG_gc; //CCP 構成設定変更保護レジスタ 保護されたI/Oレジスタ解錠
CLKCTRL.MCLKCTRLB = 0x00; //分周無し
}
void loop() {
PORTA.OUTSET = PIN1_bm;
_delay_ms(1000);
PORTA.OUTCLR = PIN1_bm;
_delay_ms(500);
}
12行目、13行目
これがツボ
Clock Controlレジスタは構成設定変更保護下にあるので、書き込む直前に保護を解除する必要がある。

消費電流の測定はまた今度
ATtiny202でシリアル通信を行う方法
ATtiny202でシリアル通信を使ってデバッグをしたいときに、Arduino標準の「Serial」を使うと、フラッシュメモリを1500byte程使ってしまう。
その対策としてライブラリを使わずにハードウェアのUSART機能を使ってこれをする為の備忘録
要件
・ATtiny202からの送信だけ行う
・文字列を送信する
・値を送信する
普通のやりかた
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello, World");
delay(1000);
}
最大2048バイトのフラッシュメモリのうち、スケッチが1438バイト(70%)を使っています。
最大128バイトのRAMのうち、グローバル変数が59バイト(46%)を使っていて、ローカル変数で69バイト使うことができます。
対策
初期設定関数
//ボーレートの計算式
//F_CPUはArduino IDEが勝手に設定してくれる
#define USART0_BAUD_RATE(BAUD_RATE) ((float)(F_CPU * 64 / (16 * (float)BAUD_RATE)) + 0.5)
void serialPrintBegin() {
cli(); //割込み禁止
USART0.BAUD = (uint16_t)USART0_BAUD_RATE(9600); //ボーレート9600
USART0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc //通信動作 非同期USART
| USART_PMODE_DISABLED_gc //パリティ動作 禁止
| USART_SBMODE_1BIT_gc //停止ビット動作 1停止ビット
| USART_CHSIZE_8BIT_gc; //文字ビット数 8ビット
PORTA.DIRSET |= PIN6_bm; //ピン設定 TxD PIN6=ICの2番
PORTMUX.CTRLB &= ~PORTMUX_USART0_bm; //念のためUSART0通信ピン代替を無効にする
/*代替ピンを使用する場合
PORTA.DIRSET |= PIN1_bm; //ピン設定 TxD PIN1=ICの4番
PORTMUX.CTRLB |= PORTMUX_USART0_bm; //USART0通信ピン代替
*/
USART0.CTRLB |= USART_TXEN_bm; //送信許可 USART送信部が許可されます。
sei(); //割込み許可
}
文字列の送信関数
void serialPrintString(const char *str) {
cli();
while (*str) {
while (!(USART0.STATUS & USART_DREIF_bm)) { // データレジスタ空フラグが立つのを待つ
}
USART0.TXDATAL = *str; // 1文字送信
str++; // 次の文字へ
}
sei();
}
値の送信関数
#define BUFFER_SIZE 7 //serialPrintNumber用のバッファ 文字数+1
void serialPrintNumber(int16_t value) {
char buffer[BUFFER_SIZE];
itoa(value, buffer, 10); // 整数を文字列に変換(10進数)
serialPrintString(buffer); // 変換後の文字列を送信
}
メインスケッチ
void setup() {
serialPrintBegin(); //設定呼びだし
}
void loop() {
int8_t value1 = 42;
int16_t value2 = -564;
uint8_t value3 = 255;
serialPrintString("Hello, World \n");
delay(1000);
serialPrintNumber(value1);
serialPrintString("\n");
delay(1000);
serialPrintNumber(value2);
serialPrintString("\n");
delay(1000);
serialPrintNumber(value3);
serialPrintString("\n");
delay(1000);
}
最大2048バイトのフラッシュメモリのうち、スケッチが629バイト(30%)を使っています。
最大128バイトのRAMのうち、グローバル変数が10バイト(7%)を使っていて、ローカル変数で118バイト使うことができます。

これで余裕ができますね。
ちなみに今回の実験で使ったのがこちら
自作のUSBシリアル変換&UPDIライター
ロジックレベル3.3Vor5Vの選択
UPDIモードorUARTモードの選択
これがスイッチの切り替えでできるようになっている。


<FT-857>CAT制御用インターフェース
最近、CAT制御というものに興味を持った。FT-857をCAT制御するには、いくつかの方法がある。
パソコンのシリアルポートからFT-857本体背面の『CAT/TUNER/LINEAR端子』にシリアルケーブルを接続するやり方が一般的だが、この端子は1つしかない。
(最近のパソコンにはシリアルポートが無いので、USB-シリアル変換ケーブルを使用する。)
この端子に接続して使用するものは、他にもオートアンテナチューナー『FC-30』『FC-40』や、リニアアンプ『VL-1000』などがある。
そのため、例えばFC-40を使用しながらパソコンからCAT制御をするといったことができないのである。。。と思ったら、
説明書 メニューモード NO・059 MIC SEL
マイク端子の動作を選択します。
<中略>
CAT : アンテナチューナー接続時にCAT運用を行うときに選択します。
どうやらできるらしい。ということで作ってみた。
設計・準備

言うまでもないが、こういう使い方をすると、純正マイク(MH-31)の『UP』『DOWN』ボタンは使用できなくなる。
ユニバーサル基板はこのあたりを使うとピッタリ(というがギリギリ)収まる。
どうせ『GND』『RXD』『TXD』しか使わないので、このUSB-シリアル変換モジュールでもできるかもしれない。こっちの方が小型。(未検証)
配線の設計は『PasS』を使用。

試作

制作



動作確認、、、、あれ、動作しない。
『RXD』と『TXD』を逆に繋いでいたらしい。

これだと気分が悪いので最初からやり直し。

動作確認よし!
JJ1KGLはスルーホール基板を使ってしまったが、表配線をするので片面基板を使わないといけないことに最後に気が付いた。
仕方がないので裏配線を少しだけ浮かせて、スルーホールの反対側と短絡しないようにした。
ハムログと連携する場合の設定
パソコンの設定
コントロールパネル→ハードウェアとサウンド→デバイスマネージャー→ポート(COMとLPT)→接続したUSB変換キットを確認。COMポート番号を控えておく。この場合『5』

設定を変えたらwindowsを再起動する。
FT-857の設定
- メニューモード NO・019 CAT RATE 『4800bps』
- メニューモード NO・059 MIC SEL 『CAT』
ハムログの設定
- オプション→環境設定→設定5

FT-847の設定だけでOK - オプション→入力環境設定→リグ接続設定

設定を変えたらハムログを再起動する。
このあたりの設定は、ハムログ公式にも掲載されている。
終了
ハムログへの周波数や電波形式の取得だけではなく、他にもできることがあるはずです。活用法があればコメントよろしくお願いします。
たしか、スマホのアプリでCAT制御するやつがあった気がする。