完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
来自网友的提问:
小的是寫MIcrochip的dsPIC33FJ64GS606,並打算以SPI讀取AD7606-4的轉換值 但讀取到的值一直為0 也弄不清是接線問題還是程式問題 程式的話是照ADI網站上的程式碼範例改寫的 電路則是看datasheet上的serial mode條件所接的 線路圖和程式碼範例已上傳至附件 下面則是我所寫的程式碼 #include "p33FJ64GS606.h" #include #include #include _FOSCSEL(FNOSC_FRC) // Internal FRC with non PLL _FOSC(FCKSM_CSECMD & OSCIOFNC_ON) // Sw Enabled, Mon Disabled and OSCO pin has digital I/O function _FWDT(FWDTEN_OFF) // Watchdog Timer disabled _FPOR(FPWRT_PWR128) // POR Timer Value 128mSec _FGS(GWRP_OFF) // General Segment may be written _FICD(ICS_PGD1 & JTAGEN_OFF); // Use PGC1/EMUC1 and PGD1/EMUD1 unsigned char j, k; unsigned int TempA, TempB, DoutA[3], DoutB[3]; unsigned char Busy; int main(){ SPI2CON1 = 0x073B; SPI2STAT = 0xA000; // I/O Port設定,TRIS為設定資料流向(1:輸入 , 0:輸出)。Port為設定高、低電位(1:logic high , 0:logic low) TRISGbits.TRISG9=0; PORTGbits.RG9=1;//CS TRISBbits.TRISB2=0; PORTBbits.RB2=1;//CNVST TRISBbits.TRISB3=0; PORTBbits.RB3=0;//RESET TRISGbits.TRISG6=0; PORTGbits.RG6=1;//sck TRISBbits.TRISB4=1; PORTBbits.RB4=0;//doutA TRISBbits.TRISB5=1; PORTBbits.RB5=0;//doutB TRISBbits.TRISB1=1; PORTBbits.RB1=0;//busy TRISBbits.TRISB8=0; PORTBbits.RB8=1;//PAR/SER/BYTE SEL TRISBbits.TRISB9=0; PORTBbits.RB9=1;//STBY TRISBbits.TRISB10=0; PORTBbits.RB10=0;//RANGE TRISBbits.TRISB11=0; PORTBbits.RB11=1;//REF SELECT while(1) { PORTBbits.RB2=0; Delay_1mS_Cnt; PORTBbits.RB2=1; Delay_1mS_Cnt; Busy=PORTBbits.RB1; while(Busy==1){ Delay_1mS_Cnt; Busy=PORTBbits.RB1; } PORTGbits.RG9=0; for(j=0; j<4; j++) { TempA=0; TempB=0; for(k=0; k<16; k++){ PORTGbits.RG6=0; TempA=(TempA<<1) + LATBbits.LATB4; TempB=(TempB<<1) + LATBbits.LATB5; LATGbits.LATG6=1; } DoutA[j]=TempA; DoutB[j]=TempB; } PORTGbits.RG9=1; } } |
|
相关推荐
3个回答
|
|
|
|
|
|
adi_rock: 您好,我给您发信件问的是关于ADE7878的问题,不知道是不是系统弄错了,我把问题重新给您发一遍: 我现在正在进行电流有效值相关程序的测试,我配置了单片机的外部中断,当出现电流过零事件时,会触发单片机中断,在中断程序中,先清除中断标志,关闭全局中断,然后读取status1寄存器,写回status1,根据读出的数据判断是发生了哪一相电流的过零时间,然后再将相应的电流有效值读出,在中断程序最后,回复全局中断。 在程序的运行过程中,我用示波器捕捉IRQ1上的输出信号,发现系统工作后,IRQ1上只输出了八十多个脉冲后就没有信号输出了,切IRQ1为低电平,好像ADE7878工作了一下之后又不工作了,调试程序也能发现相应的电流有效值读取程序只执行了八十多次,和IRQ1上捕捉的脉冲数一致。请问这种情况是如何产生的呢? 初始化ADE7878的时候,对以下的寄存器进行了初始化:CONFIG、CFxDEN、CFMODE、COMPMODE、MMODE、PEAKCYC、ACMODE、LCYCMODE、MASK0、MASK1、GAIN、RUN,按照datasheet上的说法在向RUN寄存器写入0001之前,需要向初始化寄存器列表的最后一个寄存器连续写入三遍,是否是指对GAIN连续写入三遍,然后再写入RUN寄存器来启动DSP? 希望得到您的帮助,谢谢。 frenkwang2002@163.com 发件人: adi_rock 发送时间: 2013-12-23 10:01 收件人: 东东 王 主题: Re: 用dsPIC33F以SPI讀取AD7606數據都為0 - 中文技术支持 Re: 用dsPIC33F以SPI讀取AD7606數據都為0 created by adi_rock in 数据转换器专区 - 查看全部讨论 您好。 AD7606上电后需要一次复位操作。 硬件上,CONVST B也需要控制信号,和CONVST A 的时间需要满足t5的时间要求 通过回复电子邮件回复该消息 -或- 转到以下位置上的消息 如您想暂停对某个讨论的关注,请您点击该讨论帖并在右手菜单处点击“停止跟踪”。请您务必在登陆状态下进行设置。 在 数据转换器专区 内开始新讨论,通过 电子邮件 或在以下位置上:中文技术支持 |
|
|
|
您好。非常抱歉,系统把另一个回复转给了您。已经和您电话沟通过 |
|
|
|
只有小组成员才能发言,加入小组>>
1007 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1397 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1943 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4276 浏览 2 评论
9068 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1561浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1700浏览 2评论
1009浏览 2评论
1684浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1398浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 06:22 , Processed in 0.798212 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号