打印

极限编程题目A:输出方波

[复制链接]
4377|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanyong|  楼主 | 2009-4-29 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求在某一i/o输出频率最高的方波.

使用mcu为:

A:pic10f系列.

B:pic16f@5MIPS.

请给出程序或者思路或者实测波形.


p.s:出个题目大家玩玩.
沙发
yewuyi| | 2009-4-29 12:01 | 只看该作者

~~

16F系列的很多有PWM

10F系列的应该基本都没有PWM,只能软件做

使用特权

评论回复
板凳
lanyong|  楼主 | 2009-4-29 14:40 | 只看该作者

方波

http://zh.wikipedia.org/wiki/%E6%96%B9%E6%B3%A2

在現實世界,數碼電子的頻寬有限,方波只能以有限的頻寬來表達,意味著我們只能取一個近此方波的波型。要得出這個合理的波型,最少要有基波(fundamental harmonic)和第三次谐波(third harmonic)。當然,谐波的數量越多,波型就越像一個方波。

占空比(duty cycle)是方波值「1」佔一個周期的時間比例。真實方波的占空比是50%──即高值和低值占的時間一樣。方波的平均值是由占空比决定的,因此通过改变ON和OFF周期然后求平均数,有可能代表两个限制电平(limiting level)间的任意值。这是脉宽调制(pulse-width modulation)的基础。

使用特权

评论回复
地板
lanyong|  楼主 | 2009-4-29 14:43 | 只看该作者

极限在于:频率最高和方波

yewuyi兄弟用硬件pwm做.

极限得到频率是多少?

请给个参数,哈哈.

这个题目我估计要实际去做才有意思.

使用特权

评论回复
5
yewuyi| | 2009-4-29 15:23 | 只看该作者

呵呵,还真没仔细计算过,

如果硬件PWM的话:

Tpwm=(PR2+1)*4*Tosc*TMR2pre

假设4M的OSC,那么Tosc=0.25uS,TMR2pre=1:1,取PR2=0,那么最大似乎可达到1M的方波。


呵呵,事实上是否成立,例如PR2=0似乎就有点麻烦。

使用特权

评论回复
6
youss| | 2009-4-29 22:22 | 只看该作者

极限!!有意义吗?

假如从RB1输出:(题目是否作一具体说明),输出频率同晶振的关系,自已算吧...
这个就是极限
LOOP  BCF  RB,1
      BSF  RB,1
      GOTO LOOP

PIC连续对I/O操作将出现问题,改用以下:输出方波对称
LOOP  BCF  RB,1
      NOP
      NOP
      BSF  RB,1
      GOTO LOOP

使用特权

评论回复
7
lanyong|  楼主 | 2009-4-30 09:47 | 只看该作者

haha,题目而已

你以为陈景润的 1+1有什么实际的意义吗?

另,你
LOOP  BCF  RB,1
      BSF  RB,1
      GOTO LOOP

不是方波.请看楼上方波的定义.


你这样的方法
16f好象没有反转指令.

否则应该是
LOOP  btg rb,1
      GOTO LOOP

----------------
另,LOOP  BCF  RB,1
      NOP
      NOP
      BSF  RB,1
      GOTO LOOP
频率才多少,哈哈.非极限也.

使用特权

评论回复
8
martin| | 2009-4-30 12:13 | 只看该作者

PIC10&PIC16

;对于PIC10,GP0输出clock,1/6 Fcy
    ORG     0x000             
    movwf   OSCCAL            

start    
    movlw    0x00
    TRIS    GPIO
    movlw    0x01
loop
    xorwf    GPIO,F
    goto    loop            
    END 


//对于PIC16,RC2输出clock,1/2 Fcy
void main(void)
{
    TRISC = 0x00;//PORTC设置为输出
    T2CON = 0b00000100;//Timer2使能,分频为1:1
    CCPR1L = 0x00;//此处为0,占空比由CCP1CON<5:4>实现
    PR2 = 0x01;//PWM周期=[(PR2)+1]*4*Tosc*(TMR2预分频值)
    CCP1CON = 0b00101111;//使能PWM,CCP1CON<5:4>为10
    while(1);  
}

使用特权

评论回复
9
lanyong|  楼主 | 2009-4-30 13:10 | 只看该作者

loop
    xorwf    GPIO,F
    goto    loop 

xorwf 用得好.

我看用swapf GPIO,F应该也可以.

我看10F到这里估计也就极限了.


--------------

pic16f 应该还有机会.

法2达到1/2 Fcy.

uart最高波特率.连续发0x55. (1 8 1stop bit).

使用特权

评论回复
10
lanyong|  楼主 | 2009-4-30 13:23 | 只看该作者

整错了

法2达到1/2 Fcy.

uart最高波特率.连续发0x55. (1 8 1stop bit).

只能达 1/(2*4) Fcy.

sorry.

使用特权

评论回复
11
xieyuanbin| | 2009-5-1 09:16 | 只看该作者

无需编程,大多数12,16系列可以以Fcy输出方波.

将OSC2引脚设置成CLKOUT即可输出与指令周期一致的方波.
但10F系列因无此功能,所以还是只能以指令方式实现.
另外如果要求不严格的话,除初始化程序外,可以用XORWF PORTX这样的指令填满程序空间,

使用特权

评论回复
12
lanyong|  楼主 | 2009-5-4 09:17 | 只看该作者

谢兄,非也

"另外如果要求不严格的话,除初始化程序外,可以用XORWF PORTX这样的指令填满程序空间,"

无法得到连续的方波,绝对有突变.另你需要初始化,不可能跑到底又跑到头吧.


"将OSC2引脚设置成CLKOUT即可输出与指令周期一致的方波"

为extrc 带clkout, 并不是很准确.


其实我们可以利用spi,或者同步uart的clk输出得到最高频率方波.
到这里,我看也就极限了吧.

使用特权

评论回复
13
xieyuanbin| | 2009-5-4 12:29 | 只看该作者

用外部振荡器可以实现

将OSC2引脚设置成CLKOUT即可输出与指令周期一致的方波

使用特权

评论回复
14
lanyong|  楼主 | 2009-5-4 13:01 | 只看该作者

对,

不过外部时钟是否可控.

spi时钟可控.不工作的时候就没了,哈哈.

使用特权

评论回复
15
yewuyi| | 2009-5-4 14:04 | 只看该作者

lanyong偏题

呵呵,你开始可没加这些条件。


其实啊,刚开始的时候,我也想说用CLKOUT输出,呵呵,但怕纠缠,所以就没说

使用特权

评论回复
16
lanyong|  楼主 | 2009-5-4 14:49 | 只看该作者

也没偏题啊

spi时钟需要编程才能得到.

而谢兄才是偏题.他的时钟输出是不需要编程的.哈哈.

出个小题目,大家玩玩,又没有糖分给大家.

多谢参与.

大家一起来整耍耍.

使用特权

评论回复
17
yewuyi| | 2009-5-4 14:59 | 只看该作者

呵呵,CLKOUT也需要编程啊

^_^,在CONFIG里面写上配置字也是编程一部分嘛

使用特权

评论回复
18
lanyong|  楼主 | 2009-5-5 09:03 | 只看该作者

兄弟,强也

你这样说,也对,哈哈.

使用特权

评论回复
19
icecut| | 2009-5-8 15:55 | 只看该作者

你们啊

我把引脚设置成输入,把晶振线短路过来.
我用有源晶振,保证方波质量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

457

帖子

2

粉丝