boawen 发表于 2008-12-21 15:43:29

请马老师指点T/C1同时输出2路pwm【恢复】

马老师您好:

    用定时器1可以输出两路不同的PWM波形。但是我今天做了让OC1A和OC1B同时输出不同的pwm时却不能控制,就是改变OCR1A和OCR1B的值,其pwm没有改变,我不知道是不是我的配置除了问题,希望马老师能知道一下,给个正确的初始化函数

 我的初始化函数为:

 void timer1_init(void)

  { 

   TCCR1A=  0XF1;   //11110001 8位快速pwm,

   TCCR1B=  0X0A;  //00001010

   TCNT1H= 00;

   TCNT1L= 80;

   OCR1AH = 00;

   OCR1BL = 200;

   OCR1BH = 00;

   OCR1AL = 200;

 

 PORTD|=(1<<PD4)|(1<<PD5); //设置PD4,5为oc1B,A

 DDRD|=(1<<DDD4)|(1<<DDD5);

 }







 我不知道是什么原因,望老师指点!谢谢

boawen 发表于 2008-12-27 20:18:59

谢谢你的热心回答

kbdcj2000 发表于 2008-12-22 00:07:14

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 31.25 kHz

// Mode: Fast PWM top=00FFh

// OC1A output:Non- Inv.

// OC1B output: Non-Inv.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0xA1;

TCCR1B=0x0C;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



上面是tiny2313v,内部8M,不预分频(我也不知道预不预分频,是否会影响上面的参数,没时间去研究),用cvavr产生的初始化代码。

oc1a和oc1b引脚共阴接2个led,你在主程序不停的++OCR1AL和OCR1BL,led就会由暗到亮,重复,再重复。我的dmx512解码程序就是用这个代码初始化的。

强烈建议,用cvavr吧,事半功倍,听马老师的没错。再说马老师也偶尔要用这个IDE的啊。
页: [1]
查看完整版本: 请马老师指点T/C1同时输出2路pwm【恢复】