JJ1KGL

工作をしたときなど、不定期にアップします。

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行目

CCP = CCP_IOREG_gc;

これがツボ

Clock Controlレジスタは構成設定変更保護下にあるので、書き込む直前に保護を解除する必要がある。

PA1の出力波形

 

消費電流の測定はまた今度

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モードの選択

これがスイッチの切り替えでできるようになっている。

USBシリアル変換&UPDIライター表

USBシリアル変換&UPDIライター裏

<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運用を行うときに選択します

 

どうやらできるらしい。ということで作ってみた。

 

設計・準備

f:id:jj1kgl:20190516000839p:plain

回路図

言うまでもないが、こういう使い方をすると、純正マイク(MH-31)の『UP』『DOWN』ボタンは使用できなくなる。

各キットは秋月電子秋葉原店より調達。(通販でも買える。)

 

 

ユニバーサル基板はこのあたりを使うとピッタリ(というがギリギリ)収まる。

 

どうせ『GND』『RXD』『TXD』しか使わないので、このUSB-シリアル変換モジュールでもできるかもしれない。こっちの方が小型。(未検証)

 

配線の設計は『PasS』を使用。

f:id:jj1kgl:20190516002544p:plain

ユニバーサル基板の配線(青=裏配線、赤=表配線)

 

試作

 

f:id:jj1kgl:20190516003909j:plain

各キットにピンヘッダを付け、まずはブレッドボードで動作確認。

 

制作

f:id:jj1kgl:20190516004128j:plain

表配線があるので先にメッキ線を通しておく。

f:id:jj1kgl:20190516004728j:plain

各キットを基板にはんだ付け。

f:id:jj1kgl:20190516004832j:plain

裏配線。

動作確認、、、、あれ、動作しない。

『RXD』と『TXD』を逆に繋いでいたらしい。

f:id:jj1kgl:20190516005054j:plain

 とりあえずの修正。

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

f:id:jj1kgl:20190516005233j:plain

完成品

動作確認よし!

JJ1KGLはスルーホール基板を使ってしまったが、表配線をするので片面基板を使わないといけないことに最後に気が付いた。

仕方がないので裏配線を少しだけ浮かせて、スルーホールの反対側と短絡しないようにした。

 

 

ハムログと連携する場合の設定

パソコンの設定

コントロールパネル→ハードウェアとサウンド→デバイスマネージャー→ポート(COMとLPT)→接続したUSB変換キットを確認。COMポート番号を控えておく。この場合『5』

f:id:jj1kgl:20190516010722p:plain

設定を変えたらwindowsを再起動する。

 

FT-857の設定

  • メニューモード NO・019 CAT RATE 『4800bps』
  • メニューモード NO・059 MIC SEL 『CAT』

 

ハムログの設定

  • オプション→環境設定→設定5

    f:id:jj1kgl:20190516011901p:plain

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

f:id:jj1kgl:20190516012239p:plain

取得する周波数の設定はお好みで。

設定を変えたらハムログを再起動する。

このあたりの設定は、ハムログ公式にも掲載されている。

 

終了

ハムログへの周波数や電波形式の取得だけではなく、他にもできることがあるはずです。活用法があればコメントよろしくお願いします。

たしか、スマホのアプリでCAT制御するやつがあった気がする。