无法实现100KHz输出
PIC12F675定时器无法实现100KHz输出还有什么现象?能再详细描述下吗? 想用PIC12f675实现100KHz的PWM输出,看了下手册算了下应该是可以做1us定时的。但搞了半天最高只能输出15KHz。
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因 #include<pic12f675.h>
// CONFIG
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#define nop() asm("NOP")
#define u8 unsigned char
#define u16 unsigned int
#define PWM_A GPIO2
#define LED GPIO1
u8 n = 0;
void init(void)
{
CMCON = 0x07;
ANSEL = 0x00;
WPU |= 0x20;
TRISIO = 0x38;
TMR0 = 0xFF;
//OPTION_REG
T0CS = 0;
PSA = 1;
//INTCON
T0IF = 0;
T0IE = 1;
GIE = 1;
}
void __interrupt(low_priority) tmer0(void)
{
if(T0IF==1)
{
TMR0 = 0xFF;
T0IF = 0;
n++;
if(n==1)
PWM_A = 1;
else
{
PWM_A = 0;
n = 0;
}
}
}
void main(void)
{
init();
while(1);
} 用新的型号,MCC生成代码几分钟就搞定了 软件做100KHz PWM?
你是开玩笑吧
为啥不行呢? 看手册TIMR0不分频正好是1us啊,内部时钟4MHz PIC12F675单指令周期=(1/4000000)*4=1us,软件模拟PWM。 除非其他事情都不做,CPU资源被这个软件模拟PWM一直占用 只输出PWM,并且PWM的位数极低,这样做就没意义了。 跑指令也是需要时间的 正解,楼主可以选带PWM外设的器件。 感谢,不过我也做啥操作啊,就消耗了60多条指令了?
1uS的指令周期,你要做1uS的定时中断? 中断处理不要花时间吗? 100KHz=10uS,就算是做1bit PWM,也要5uS内处理一次,这小CPU忙得过来吗?
确实是,即使做了也是问题多多。再次感谢。
不清楚你的代码怎么写的,但用定时器来做,会更加耗时
页:
[1]
2