2017-01-04 13 views
0

私はこれが愚かだと知っていますが、私は本当に混乱しました。AVR PWMコンフィギュレーション

IはATmega16で上の3つのモードでPWMパルスを作りたい:デューティサイクルで 1- 1kHzの100%デューティサイクルで 2- 4kHzの100%デューティサイクルIであった

50% 3- 1kHzのほぼ2年間AVRから離れて、私はすべてを忘れてしまったので、簡単な方法でタイマー1の計算が必要です。 私が読んだことは、私をもっと混乱させます。私を助けることができるものはありますか? 私はCodevision AVRを使用しています。デューティサイクルで

+1

はあなたがhttps://electronics.stackexchange.com/でより良い運を持っています。 AVRのハードウェアタイマー以外のコードについてはまったく話しているわけではないので –

答えて

0

私はこれをしましたが、試験がありましたので、投稿するには時間がかかりすぎました。私は4MHzの

にFCPUを設定し、ここのコードです :

void set1KhzDC100() 
{ 
// Timer/Counter 1 initialization 
// Clock source: System Clock 
// Clock value: 500.000 kHz 
// Mode: Fast PWM top=0x01FF 
// OC1A output: Non-Inv. 
// OC1B output: Discon. 
// Noise Canceler: Off 
// Input Capture on Falling Edge 
// Timer1 Overflow Interrupt: Off 
// Input Capture Interrupt: Off 
// Compare A Match Interrupt: Off 
// Compare B Match Interrupt: Off 
TCCR1A=0x82; 
TCCR1B=0x0A; 
TCNT1H=0; 
TCNT1L=0; 
ICR1H=0x00; 
ICR1L=0x00; 
OCR1A=511; 
} 

void Set4KhzDC100() 
{ 
// Timer/Counter 1 initialization 
// Clock source: System Clock 
// Clock value: 4000.000 kHz 
// Mode: Fast PWM top=0x03FF 
// OC1A output: Non-Inv. 
// OC1B output: Discon. 
// Noise Canceler: Off 
// Input Capture on Falling Edge 
// Timer1 Overflow Interrupt: Off 
// Input Capture Interrupt: Off 
// Compare A Match Interrupt: Off 
// Compare B Match Interrupt: Off 
TCCR1A=0x83; 
TCCR1B=0x09; 
TCNT1H=0x00; 
TCNT1L=0x00; 
ICR1H=0x00; 
ICR1L=0x00; 
OCR1A=1023; 
OCR1BH=0x00; 
OCR1BL=0x00; 
} 

void Set1KhzDC50() 
{ 
// Timer/Counter 1 initialization 
// Clock source: System Clock 
// Clock value: 500.000 kHz 
// Mode: Fast PWM top=0x01FF 
// OC1A output: Non-Inv. 
// OC1B output: Discon. 
// Noise Canceler: Off 
// Input Capture on Falling Edge 
// Timer1 Overflow Interrupt: Off 
// Input Capture Interrupt: Off 
// Compare A Match Interrupt: Off 
// Compare B Match Interrupt: Off 
TCCR1A=0x82; 
TCCR1B=0x0A; 
TCNT1H=0; 
TCNT1L=0; 
ICR1H=0x00; 
ICR1L=0x00; 
OCR1A=255; 
} 
3

1-デューティサイクルと1kHzの100%

2- 4kHzの100%

は同じものです。実際のPWMはまったくありません。出力は常に高く、周波数は重要ではありません。

デューティサイクル50%

実際にはPWMです。選択できるタイプはいくつかありますが、デューティサイクルが正確に50%になる場合は、トグルでこれを実現する簡単な方法があります。マニュアルでは、

高速PWMモードでの波形出力は、コンペアマッチ(COM1A1:0 = 1)ごとに論理レベルをトグルするようにOC1Aを設定することで実現できます。これは、OCR1Aを使用してTOP値(WGM13:0 = 15)を定義する場合にのみ適用されます。ある

01こと、及び1ことがTCCR1AとTCCR1Bの全てWGMビットを設定するTCCR1AのCOM1A1とCOM1A0ビットを設定します。 OCR1AとTCCR1BのCSxプリスケーラビットを選択して、0.5msごとにOCR1Aに達するようにしてください。