请问斑竹,stc可否输出10-20k频率可变的高速脉冲
利用pca还是pwm pca 没问题 有缘于你 发表于 2015-5-9 08:35pca 没问题
我用它控制电机,要求频率实时可调,能做到吗 看你实时精度要求了, 我用pca发过100k以内频率可变的脉冲 这个对于STC15系列太简单了,每个定时器都有可编程频率输出功能 有缘于你 发表于 2015-5-9 09:21
看你实时精度要求了, 我用pca发过100k以内频率可变的脉冲
精度要求的确不高,我在考虑pwm模块和pca modbus 发表于 2015-5-9 10:36
这个对于STC15系列太简单了,每个定时器都有可编程频率输出功能
定时器确实可以,但是我在最近的实验中发现,并不能实时更改频率,如果可以更改的话,请问应该如何配置,毕竟我觉得定时器可编程输出还是优于pca,因为它不需要中断 本帖最后由 STCunio 于 2015-5-9 11:38 编辑
5楼正解,用定时器就可以,可以满足你的要求,下面的中文注释有乱码,详细请看附件
tone函数可以发出你想要的频率,T0对应数字5。
void tone(u8 pin,u16 frequency)
{
u8 TH_TEMP,TL_TEMP;
u16 TIM_Value;
switch(pin)
{
case 5: //T0
TMOD &= ~0x03; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯ÖØ×°, 3: 16λ×Ô¶¯ÖØ×°, ²»¿ÉÆÁ±ÎÖжÏ
AUXR &= ~0x80; //12T
TMOD &= ~0x04; //¶¨Ê±
INT_CLKO |= 0x01; //Êä³öʱÖÓ
TIM_Value = 65536UL - (MAIN_Fosc /frequency/24+0.5); //³õÖµ
TH_TEMP = (u8)(TIM_Value >> 8);
TL_TEMP = (u8)TIM_Value;
TH0=TH_TEMP;
TL0=TL_TEMP;
TR0=1;
break;
case 4: //T1
TMOD &= ~0x30; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯ÖØ×°, 3: 16λ×Ô¶¯ÖØ×°, ²»¿ÉÆÁ±ÎÖжÏ
AUXR &= ~0x40; //12T
TMOD &=0x40; //¶¨Ê±
INT_CLKO |= 0x02; //Êä³öʱÖÓ
TIM_Value = 65536UL -(MAIN_Fosc /frequency/24+0.5); //³õÖµ
TH_TEMP = (u8)(TIM_Value >> 8);
TL_TEMP = (u8)TIM_Value;
TH1=TH_TEMP;
TL1=TL_TEMP;
TR1 = 1; //¿ªÊ¼ÔËÐÐ
break;
case 0: //T2
//¶¨Ê±Æ÷2±»¹Ì¶¨Îª16λÖØװģʽ
AUXR &= ~0x04; //12T
AUXR &= ~0x08; //¶¨Ê±
INT_CLKO |= 0x04; //Êä³öʱÖÓ
TIM_Value = 65536UL - (MAIN_Fosc /frequency/24+0.5); //³õÖµ
TH_TEMP = (u8)(TIM_Value >> 8);
TL_TEMP = (u8)TIM_Value;
T2H=TH_TEMP;
T2L=TL_TEMP;
AUXR |= 0x10; //¿ªÊ¼ÔËÐÐ
break;
case 52://T3
T4T3M &= ~0x02; //12T
T4T3M &= ~0x04; //¶¨Ê±
T4T3M |=0x01; //Êä³öʱÖÓ
TIM_Value = 65536UL - (MAIN_Fosc /frequency/24+0.5); //³õÖµ
TH_TEMP = (u8)(TIM_Value >> 8);
TL_TEMP = (u8)TIM_Value;
T3H=TH_TEMP;
T3L=TL_TEMP;
T4T3M |= 0x08; //¿ªÊ¼ÔËÐÐ
break;
case 54://T4
T4T3M &= ~0x20; //12T
T4T3M &= ~0x40; //¶¨Ê±
T4T3M |=0x10; //Êä³öʱÖÓ
TIM_Value = 65536UL - (MAIN_Fosc /frequency/24+0.5); //³õÖµ
TH_TEMP = (u8)(TIM_Value >> 8);
TL_TEMP = (u8)TIM_Value;
T4H=TH_TEMP;
T4L=TL_TEMP;
T4T3M |= 0x80; //¿ªÊ¼ÔËÐÐ
break;
default:
break;
}
} STCunio 发表于 2015-5-9 11:36
5楼正解,用定时器就可以,可以满足你的要求,下面的中文注释有乱码,详细请看附件
tone函数可以发出你想要 ...
多谢斑竹,手机无法看附件,但是能理解的的程序,现在这种是可以实现某个频率输出,但是若我想实时改变频率,即比如外部按键增加减小频率等,不知能否操作?我最近试验发现是无法实现,不知有何方法?
我是检测到有频率需要改变时禁止定时器输出,失能定时器,然后定时器值更新,再使能定时器,使能输出,发现不能改变
我在更新定时器值时不失能定时器,仍然不能输出 衰不堪言 发表于 2015-5-9 11:44
多谢斑竹,手机无法看附件,但是能理解的的程序,现在这种是可以实现某个频率输出,但是若我想实时改变频 ...
可以更新的,我的实例是用扬声器发出一首游戏(超级玛丽)的音乐,不同的频率声音时时切换并且没有杂音 STCunio 发表于 2015-5-9 13:08
可以更新的,我的实例是用扬声器发出一首游戏(超级玛丽)的音乐,不同的频率声音时时切换并且没有杂音 ...
那就太好了,只是我没有看到更新的操作,难道更新时就简单操作定时器初值就行了吗,还是要做其他操作? 衰不堪言 发表于 2015-5-9 11:29
定时器确实可以,但是我在最近的实验中发现,并不能实时更改频率,如果可以更改的话,请问应该如何配置, ...
不知道你要多实时,最多延时半个周期。 PCA好些 小李非刀 发表于 2015-5-9 14:34
不知道你要多实时,最多延时半个周期。
看斑竹的程序,每次需要修改频率,都是在重新初始化定时器,我明了了
之前我所写的程序,一个是只修改定时器初值,一个是TR0 = 0,INT_CLOK = 0,然后再修改初值,然后启动定时器,两种方式均以失败告终,请问斑竹何故? STCunio 发表于 2015-5-9 11:36
5楼正解,用定时器就可以,可以满足你的要求,下面的中文注释有乱码,详细请看附件
tone函数可以发出你想要 ...
最近又用到了这个,照搬斑竹的程序,发现实际输出频率和程序的频率差距很大,比如我要输出20K,实测大概只有5K,请问怎么回事 衰不堪言 发表于 2015-6-13 21:54
最近又用到了这个,照搬斑竹的程序,发现实际输出频率和程序的频率差距很大,比如我要输出20K,实测大概 ...
楼主你是不是做了分频处理了
页:
[1]