0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ATtiny3224: PWM 出力

Last updated at Posted at 2025-09-19

PIN_PA5 に 10KHz の PWM出力をします。

プログラム

pwm01/pwm01.ino
// ----------------------------------------------------------------
/*
	pwm01.ino
				Sep/21/2025
*/
// ----------------------------------------------------------------
#define	PROGRAM	"pwm01.ino"
#define	VERSION	"2025-09-21 PM 12:17"

// ----------------------------------------------------------------
#define PWM_PIN PIN_PA5

int icount = 0;
// ----------------------------------------------------------------
void setup() {
	Serial1.begin(19200);
	delay(1000);
	Serial1.println("*** setup start ***");
	delay(1000);
	Serial1.println("*** ATtiny3224 ***");
	Serial1.println(PROGRAM);
        delay(1000);
        Serial1.println(VERSION);
        delay(1000);
	Serial1.print("CPU Clock = ");
	Serial1.print(F_CPU);
	Serial1.println(" Hz");
        delay(1000);

  // PWM ピンを出力に設定
	pinMode(PWM_PIN, OUTPUT);

	uint32_t cmp0 = 8332;

	Serial1.println("cmp0 = " + String(cmp0));
	TCA0.SINGLE.CMP0 = cmp0;

  // タイマーの設定
	TCA0.SINGLE.CTRLB = TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_WGMODE_SINGLESLOPE_gc; // PWMモードを設定
	TCA0.SINGLE.CTRLA = TCA_SINGLE_ENABLE_bm | TCA_SINGLE_CLKSEL_DIV8_gc;
	 // クロックを8で分周


}

// ----------------------------------------------------------------
void loop() {
	int duties[] = {32,64,128};

	for (int it=0; it< 3; it++)
		{
		Serial1.print("*** icount = " + String(icount));
		Serial1.println("\tduty = " + String(duties[it]));
		analogWrite(PWM_PIN, duties[it]);
		delay(1000);
		analogWrite(PWM_PIN, 0);
		delay(1000);
		}


	icount++;
}

// ----------------------------------------------------------------

シリアルの出力

*** setup start ***
*** ATtiny3224 ***
pwm01.ino
2025-09-21 PM 12:17
CPU Clock = 20000000 Hz
cmp0 = 8332
*** icount = 0	duty = 32
*** icount = 0	duty = 64
*** icount = 0	duty = 128
*** icount = 1	duty = 32
*** icount = 1	duty = 64
*** icount = 1	duty = 128

分周比を変えて、周波数を変える方法

text/pwm01/pwm01.ino
// ----------------------------------------------------------------
/*
	pwm01.ino
				Sep/29/2025
*/
// ----------------------------------------------------------------
#define	PROGRAM	"pwm01.ino"
#define	VERSION	"2025-09-29 PM 19:44"

// ----------------------------------------------------------------
#define PWM_PIN PIN_PA5

// ----------------------------------------------------------------
void setup() {
	Serial1.begin(19200);
	delay(500);
	Serial1.println("*** setup start ***");
	Serial1.println("*** ATtiny3224 ***");
	Serial1.println(PROGRAM);
        Serial1.println(VERSION);
	Serial1.print("CPU Clock = ");
	Serial1.print(F_CPU);
	Serial1.println(" Hz");
        delay(500);

  // PWM ピンを出力に設定
	pinMode(PWM_PIN, OUTPUT);

	uint32_t cmp0 = 8332;

	Serial1.println("cmp0 = " + String(cmp0));
	TCA0.SINGLE.CMP0 = cmp0;

  // タイマーの設定
	TCA0.SINGLE.CTRLB = TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_WGMODE_SINGLESLOPE_gc;
 // PWMモードを設定
	TCA0.SINGLE.CTRLA = TCA_SINGLE_ENABLE_bm | TCA_SINGLE_CLKSEL_DIV1024_gc;
}

// ----------------------------------------------------------------
void loop() {
	led_proc(TCA_SINGLE_CLKSEL_DIV4_gc);
	led_proc(TCA_SINGLE_CLKSEL_DIV8_gc);
	led_proc(TCA_SINGLE_CLKSEL_DIV16_gc);
	led_proc(TCA_SINGLE_CLKSEL_DIV64_gc);
	led_proc(TCA_SINGLE_CLKSEL_DIV256_gc);
	led_proc(TCA_SINGLE_CLKSEL_DIV1024_gc);
	delay(1000);
}

// ----------------------------------------------------------------
void led_proc(int div)
{
	Serial1.println(String(div));
	TCA0.SINGLE.CTRLA = TCA_SINGLE_ENABLE_bm | div;
	int duty = 128;
	analogWrite(PWM_PIN, duty);
	delay(1000);
	analogWrite(PWM_PIN, 0);
	delay(1000);
}

// ----------------------------------------------------------------
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?