Atmega2560ベースのチュートリアル(7) - 8ビットタイマ(TIM0 / 2)FastPWMモード

Atmega2560ベースのチュートリアル(7) - 8ビットタイマ(TIM0 / 2)FastPWMモード

FastPWMモードで8ビットタイマは、一般的に4つのレジスタOCRxA、OCRxB、TCCRxA、TCCRxB(x = 0,2)、タイマーを必要とするように2つの8ビットタイマ、タイマ0、タイマ2、の合計Atmega2560 0および2は基本的に同じ構造であり、以下では、例えばタイマ0であります

1.作品

FastPWMモード、固定周波数の下では、デューティ・サイクルを変更することができます。タイマーの値がカウントが0xFFで再び増分されたとき、上方インクリメント同時にトグル、ピンは動作時にタイマーに接続されており、このプロセスでは、その値OCRxAまたは対応する値OCRxBに等しい場合に発生詳細な動作モードは、それぞれ必要な設定に応じて決定されます

2.OCRxBレジスタ

ピンBの動作点が発生するタイマーを比較した場合

3.OCRxAレジスタ

タイマーの比較は、操作が発生し、ピンポイントに接続されています。

4.TCCRxAレジスタ

主な意思決定、タイマ値は、どのような操作ピンのために、OCRxAまたはOCRxBに等しく、タイマモードFastPWM

次のように配置された詳細:

5.TCCRxBレジスタ

分割数、分割は、いくつかの異なる周波数に依存して主決定を変更することができます

次のように配置された詳細:

6.具体例

0にタイマー、例えば、あなたが友人タイマー2を必要とするには、タイマーを使用するためにどのレジスタに交換することができます2


/*
 * 定时器0,工作在FastPWM模式,PB7,PG5输出,当匹配时置低,当重置时置高
 */ 

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>

float duty=55.8,duty1=81;         //A通道55.8%占空比,B通道81%占空比
int i,i1;

int main(void)
{
	DDRB|=_BV(DDB7);
	PORTB|=_BV(PB7);
	DDRG|=_BV(DDG5);
	PORTG|=_BV(PG5);
	TCCR0A |=_BV(WGM00)|_BV(WGM01)|_BV(COM0A0)|_BV(COM0A1)|_BV(COM0B0)|_BV(COM0B1);       //当匹配时置低,当重置时置高,设置为FastPWM
	TCCR0B |=_BV(CS02);                                                                   //256分频
	duty=duty*256/100;
	i=duty;
	OCR0A=i;
	duty1=duty1*256/100;
	i1=duty1;
	OCR0B=i1;
	while (1)
	{
	}
}

波形チャート

公開された12元の記事 ウォンの賞賛2 ビュー4149

おすすめ

転載: blog.csdn.net/jiantoushi/article/details/104084685