搜索
bottom↓
回复: 42

dsPic可以不用外置晶振吗?以及一起的3个问题。谢谢

[复制链接]

出0入22汤圆

发表于 2007-12-23 00:35:19 | 显示全部楼层 |阅读模式
我最近在研究dsPic30f2012,就写了那么2行代码
其中,2-5脚连接了4个led,led的另一端接了电阻后接电源。
#include "p30f2012.h"
int main(void)
{
        PORTB=0x0000;
        TRISB=0x0000;
        while(1)
        {
                PORTB=0x00;
                asm("nop");
                PORTB=0xff;
                asm("nop");
        }
}
系统使用内部RC振荡器,FRC 4X。
现有问题如下:
1,PIC可以象AVR一样通过“熔丝”设置内部(外部)晶振么?如果是,是configuration bits么?
2,如果是如上所猜测,那么,这个设置如何设置到PIC里面使其生效?界面上好像没有“写入”等类似按钮。
3,我在使用过程中还发现一个奇怪的问题,上面程序在单步调试的时候,可以看到LED在亮灭交替,但是将程序下载到单片机后,就看不见LED动了。基本上就是不亮。请问:pic是不是跟AVR一样,程序下载后,直接就可以运行?因为我尝试过重新上电,LED也不亮。或者需要将那根引脚处理后才能运行其内部程序?
谢谢了。

出0入22汤圆

 楼主| 发表于 2007-12-23 22:14:43 | 显示全部楼层
我是新手,有没有高手顺便帮忙看看?

出0入0汤圆

发表于 2007-12-23 22:34:45 | 显示全部楼层
没用过30的,pic的镕丝位是一个存在一个地址空间的,直接包含在hex文件中,不需要修改,当然有的变成器是可以修改的。
可以直接在代码中配置这些位的,也可以在maplab下有个菜单直接配的。

至于程序运行,我之前调试时是可以运行的,不过pic的调试太滥了,忒慢了点,所以我都不用。pic的icd2调试是占用一定系统资源的。所以它的默lkr文件有两种

出0入0汤圆

发表于 2007-12-24 12:57:53 | 显示全部楼层
配置内/外晶振可以在MPLAB IDE的莱单Configure下的Configuration bits里设定,另外也可以在程序开始处直接写好,像我用pic16f946时,直接写" __CONFIG       _CP_OFF & _WDT_OFF & _BOD_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT  & _CPD_OFF"就好了,省得写程序时还得配置

另外你的灯基本不亮,应该是你延时太短的缘故吧,建议你asm("nop")多放几个试试

出0入22汤圆

 楼主| 发表于 2007-12-24 13:19:36 | 显示全部楼层
谢谢楼上。我尝试过使用mplab的debug下面的run,都可以看见led亮的啊。只是不能看见交替的亮灭而已。

出0入0汤圆

发表于 2007-12-24 14:30:12 | 显示全部楼层
把PORTB改成LATB,应该可以了。它有个读修改写的过程。

出0入0汤圆

发表于 2007-12-24 15:27:29 | 显示全部楼层
改成LATB也不行,我试过LZ的程序了,当输出为高的时候LED亮,连续运行看不到什么交替过程,全亮了,因为两条指令之间的延时太小了。

出0入22汤圆

 楼主| 发表于 2007-12-24 16:00:54 | 显示全部楼层
楼上的,全亮是正常的。但是我的LED现在是全灭啊。

出0入0汤圆

发表于 2007-12-24 16:12:06 | 显示全部楼层
把中断关了试试呢,我手头只有6014的,没试出来

出0入0汤圆

发表于 2007-12-24 16:22:37 | 显示全部楼层
你是把程序down到芯片里然后在跑的??
那你是否把ICD2的连接线和板子分开呐?

出0入22汤圆

 楼主| 发表于 2007-12-24 16:33:36 | 显示全部楼层
8楼,我的程序里面没有关于中断的把?配置位里面也没有关于中断的啊。请问如何关?默认是开的还是关的?
9楼,是把程序通过icd2下载到芯片里面运行的。最小系统就是将Vcc接了5V,GND接了地。没有其他。我尝试过分开,断电重新上电。都不行的。

出0入0汤圆

发表于 2007-12-24 18:24:43 | 显示全部楼层
你换个IO看看啊!!同样的操作。

出0入0汤圆

发表于 2007-12-25 10:42:36 | 显示全部楼层
用的6014,下面这个程序烧进去可以运行的。

#include "p30f6014.h"

int failmemory[40];
void main(void)
{
    INTCON1=0x0000;
    INTCON2=0x0000;
    TRISD=0x0000;
    TRISC=0xff00;
    while(1)
    {
        PORTD=PORTD&0x0000;
        asm("nop");
        PORTD=PORTD|0xffff;
        asm("nop");
        }
}

出0入0汤圆

发表于 2007-12-25 10:47:33 | 显示全部楼层
asm("nop");   ???

一个NOP 就能用眼睛看到闪烁???

火眼金睛了`~~~

出0入22汤圆

 楼主| 发表于 2007-12-25 11:17:29 | 显示全部楼层
楼上的,我是说脱离mplab后运行不亮,通过mplab单步调试能够看见亮灭交替。没有说运行的时候能够看见闪烁的。

出0入0汤圆

发表于 2007-12-25 16:07:18 | 显示全部楼层
顺便问一下,你用的是pin2~pin5麽??
它具有模拟的复用功能诶,你不把他配置成数字的怎么工作呐?
到AD模块那边找找看吧!

出0入22汤圆

 楼主| 发表于 2007-12-26 14:06:09 | 显示全部楼层
楼上的,我已经将AD口转化为数字口了啊。程序如下:

#include "p30f2020.h"
int main(void)
{
        ADPCFG = 0xFFFF;        /* Configure ANx pins used by ICD for digital i/o*/
        TRISB = 0x0000;
       
        while(1)
        {
                LATBbits.LATB0 = ~LATBbits.LATB0;
                LATBbits.LATB1 = ~LATBbits.LATB1;
                LATBbits.LATB2 = ~LATBbits.LATB2;
                LATBbits.LATB3 = ~LATBbits.LATB3;
                asm("nop");
        }
}
但是还是看不见那几个LED亮的啊。只是在调试的时候单步运行可以看见亮灭。其余时候都是灭的。
也尝试了外部晶振,使用的是AVR的连接方式,只是在OSC2和晶振之间接了个330欧姆电阻,电容是22p,晶振是2M。
配置位如下,不知道有没有什么问题?

出0入0汤圆

发表于 2007-12-26 14:45:00 | 显示全部楼层
呃。。。
你的晶振模式是不是没选啊?振荡器模式是不是该选Internal Fast RC 那一项啊?

或者你选了外部晶振的模式却使用了FRC的PLL?

出0入0汤圆

发表于 2007-12-26 15:01:36 | 显示全部楼层
你芯片还真多啊,怎么换2020的拉,它还有复用功能啊,模拟比较功能,把它也禁止了,再改试试!

出0入22汤圆

 楼主| 发表于 2007-12-27 23:42:09 | 显示全部楼层
谢谢leofoolish 和上面各位帮助的朋友。问题终于得到解决了。
原来是因为ICD2在调试模式下,好像并没有将hex文件下载到了芯片的flash里面,就算你点了编程菜单。
如果将ICD2加载为编程器模式,在然后再点编程器里面的编程菜单,这次好像是真正的将hex下载到flash里面去了。
但为什么还是没有运行呢?那是因为ICD2将芯片的MCLR引脚拉低了,系统一直在复位,难怪不能运行了。
知道原因后就好办了,方法有两个:
1.使用菜单 编程器->复位并释放CPU,这样的话,芯片终于运行起来了。
2.拔掉下载线 这是最彻底的方法。但是前面我这么做过,为什么还是失败了呢?那是因为2020的最小系统是我自己用面包版搭的最简单的系统,MCLR并没有上拉,导致该位在悬空的时候电压只有2.?V,处于一个不确定的状态,难怪系统也不如何运行了呢。今天加了个10k的上拉电阻后,终于可以正常运行了。

但是,新问题又来了。
1.用惯了iccavr的代码向导,请问下,DSPIC有没有那样类似的东西?
2.dspic的无源晶振设计电路和avr的有没有什么区别?我用了avr的连接方式,8M无源晶振。配置位需要如何处理才能够让dspic使用外部晶振呢?我修改了如下配置位:
primary oscillator source : HS oscillator mode/ EC oscillator mode
oscillator mode   primary oscillator(hs, ec) w/pll
但是重新上电后,芯片好像就不运行了。请问,我是不是修改错了?

出0入0汤圆

发表于 2007-12-28 00:24:09 | 显示全部楼层
"原来是因为ICD2在调试模式下,好像并没有将hex文件下载到了芯片的flash里面,就算你点了编程菜单。"
这个不对吧,不编程程序如何运行,可以想想,调试的时候可以全速运行,那这个怎么解释,不可能icd2以高于系统时钟的速度把代码放到目标芯片再执行。所以这个结论是错的。

ICD2把目标板复位住了:总觉得是microchip设计的不好的一方面。

最小系统的问题我一开始也遇到过。


没有代码向导,有完善的库文件(C30)。

第二个问题,这种型号的不能用crystal,有个勘误表提到这一点,芯片设计有缺陷。

出0入0汤圆

发表于 2007-12-28 08:33:44 | 显示全部楼层
晕死,你没明白我在9楼说的意思哇,我说的就是在编程模式下的,汗。。。。
bozai,你真强,这个居然还记得,我差点忘了,呵呵!!2020

出0入0汤圆

发表于 2007-12-28 08:36:58 | 显示全部楼层
dsPIC30F2020的不是所有的都不可以用外部crystal,你可以用有源晶振,但是有些批次又是同样可以使用crystal的,
要区分不同的版本。

出0入22汤圆

 楼主| 发表于 2007-12-28 10:40:23 | 显示全部楼层
谢谢21楼,我是新手,还没有建立起调试模式和编程模式的概念,原来认为基本一样。
20楼,请问下,您所说的完善的库文件说的是不是support文件夹里面的东西?
谢谢bozai和leofoolish ,我今天换了个30f2012,终于可以使用外部无源晶振了。不过发现另外一个问题,芯片外接8M无源晶振,将icd2加载为下载器后,下载程序,配置位的设置了oscillator xt w/pll 16x,然后释放复位,发现可以运行了。但是每次下载程序后,芯片都是以一个较低的速度在运行,非得重新上电后才能将速度提高,好像是没有使能pll。不知道这个是不是也是一个正常现象?

出0入0汤圆

发表于 2007-12-28 11:21:17 | 显示全部楼层
是的

  pll要重上电以后才好用  这是正常的

出0入22汤圆

 楼主| 发表于 2007-12-28 12:56:18 | 显示全部楼层
楼上,那也就是说,我每次下载程序后,还需要手动把芯片断电再上电?那多麻烦啊。

出0入22汤圆

 楼主| 发表于 2007-12-28 14:35:30 | 显示全部楼层
今天研究了一下2012的配置位,终于将上面2个问题搞定了。
1.需要将clock switching and monitor 都设置为disable
2.将master clear enable 设置为disable
这样就可以下载程序后即刻运行,而且是以设置的晶振在运行。前提是没有改变晶振方式和pll的情况下。

出0入0汤圆

发表于 2007-12-28 15:22:42 | 显示全部楼层
不对吧,我作了下实验,PLL是可以正常工作的哦,把人工复位引脚打开也是可以的,
再说那个脚和PLL会有联系麽?

出0入22汤圆

 楼主| 发表于 2007-12-28 15:56:28 | 显示全部楼层
楼上的,不知道我们测试的芯片是否一样?我的是p30f2012,外部无源晶振8M。
我刚刚试了下,如果
master clear enable设置为disable的话,可以在芯片程序下载完成后就开始运行;如果选择的enable的话,需要下载后选择下菜单release from reset芯片才能工作。

clock switching and monitor ,如果都是disable的话,下载程序后就是使能pll的,如果sw enable mon disable的话,每次下载后都是没有使能pll,必须重新上电后才能使能pll;如果两个都是enable的话,也是必须重新上电后才是使能pll的。

出0入0汤圆

发表于 2009-8-21 23:17:49 | 显示全部楼层
明天买芯片,试一试最小系统好不好弄,

出0入0汤圆

发表于 2009-8-22 00:04:52 | 显示全部楼层
这是我pic30f2010的程序 可以参考下
没有晶振的话会自动转换回内部rc

#include <p30f2010.h>

_FOSC(CSW_FSCM_ON & FRC & XT_PLL16);
_FWDT(WDT_OFF);
_FBORPOR( PBOR_ON & BORV_27 & MCLR_EN);
_FGS(CODE_PROT_OFF);

void delay(unsigned int t)
{
        while(t--);
}

#define DEAD 1

int main()
{
        TRISE=0;
        while(1)
        {
        PORTE=0b0001;delay(DEAD);
        PORTE=0b0011;delay(DEAD);
        PORTE=0b0010;delay(DEAD);
        PORTE=0b0000;delay(DEAD);
        }
        return 0;
}

出0入0汤圆

发表于 2009-8-22 04:08:38 | 显示全部楼层
"PORTB=0x00;
asm("nop");
PORTB=0xff;
asm("nop"); "

you should put sufficient amount of delay in between the ON's and OFF's.

try this:

PORTB^=0xff;
delay(1000);

delay() is a delay routine:

void delay(long int dly) {
  while (dly--)
    ;
}

hope it helps.

出0入0汤圆

发表于 2009-9-1 07:25:23 | 显示全部楼层
dsPIC的IO输出最好不要直接对portx赋值,应该使用专门的输出锁存器LATX赋值,这样可以保证不会出现什么问题。

出0入0汤圆

发表于 2009-9-2 20:54:45 | 显示全部楼层
楼主,检查下复位电路看看是不是忘记加上拉电阻了。30F系列的片子没有那么多麻烦,和16F差不多就是多了几个中断和中断优先级的问题。
32楼的这位,目前的C30可以直接对PROTX赋值了,不需要经过那个LATX寄存器了。早期的ASM环境是需要用LATX进行中转一下的。

出0入0汤圆

发表于 2009-9-6 20:23:37 | 显示全部楼层
咳咳,开始学写pic单片机编程了,特此mark之。

出0入0汤圆

发表于 2009-10-16 11:21:23 | 显示全部楼层
jihao

出0入0汤圆

发表于 2010-2-12 18:06:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-30 10:55:34 | 显示全部楼层
KuJJ 水箱 大哥我是刚学pic30f的但是我的pwm不怎么会,希望大哥指点,我的QQ是346099918

出0入0汤圆

发表于 2010-5-20 21:41:16 | 显示全部楼层
苦恼中

出0入0汤圆

发表于 2010-5-20 23:03:07 | 显示全部楼层
本人昨天才正式入手dspic30,两天时间已经把产品上的HC595驱动4位数码管+ADC+TIME,调通了.深有感触!!

MPLAB ICD2是我用过的最难用的仿真器,速度很慢,使用过程中,经常出现烧写不成功,烧程序前不要点,CLEAR program,否则,烧写的是上次编译的程序,本人在这点上吃了大亏,大约1天半的时间都耽误在这上面了。
mplab IDE 感觉不够人性化,经常“死”,

不知道大家是不是都用同感?

出0入22汤圆

 楼主| 发表于 2010-5-21 17:25:41 | 显示全部楼层
就是,mplab感觉还没有avrstudio好用的。不过这两个东西现在都基本上很少用了。直接用atmanavr,下一个产品将和8位机基本绝缘了。

出0入0汤圆

发表于 2010-6-9 15:17:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-27 11:02:42 | 显示全部楼层
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 13:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表