需要确认注册邮箱后才能开通博客,立即确认我的邮箱
文章 搜索 高级搜索 ?3? ?3?
  • 滤波器new!
  • LED驱动 new!
  • 新能源 new!
  • PLL
  • PCIE协议
  • 可穿戴
  • LSI
  • FCI
文章 论坛 博客 小组 研讨会
EDN China>EDN论坛>模拟器件技术论坛专区>AD5313 与 PIC 16F 877A 通过 SPI 通信问题
楼主 问题:

AD5313 与 PIC 16F 877A 通过 SPI 通信问题

发布时间:2010-9-2 上午8:57

作者: ayzyj

等级: 初学者

积分: 23分

发帖数: 2次

网站总积分: 46分

53分

发送消息

加为好友

查看用户的所有发言

查看用户的个人主页

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件
编辑的程序无论如何也不能和 AD5313 通信。AD5313 需要16位的数据,而16F877A 只能每次发送8位。在两次发送中间的处理间隔导致数据不连续?
不胜感激!
AD5313 与 PIC 16F 877A? 通过 SPI 通信问题
#include <pic.h>
//本程序将通过PIC16F877 的SPI 方式驱动D/A 转换器MAX518A5313 通道输出

unsigned int i;
unsigned int t;
unsigned int a,b;
unsigned int y;
unsigned int j;
unsigned int n;
unsigned int discon;
unsigned int discona;
//SPI 初始化子程序
void SPIint()
{????
??????? PIR1=0;
??????? SSPCON = 0X32;???????? //0000 1000, 初始化SSPCON 寄存器,SPI主控方式,时钟Fosc/64
??????? TRISC3 =0;?????????? // RC3 为SCK 脉冲,为输出
??????? TRISC4 =1;?????????? //主控方式下,SDI 为输入
??????? TRISC5 =0;????????? //? SDO 为输出
???????
??????? SSPSTAT="0X80";???????? //初始化SSPSTAT 寄存器
???????????????
???????
??????? SSPIF="0";????????????? //清SSP 中断标志
???????? CKP="0";
???????? CKE="1";
????????
???????
?????????????????????????????
??????? SSPEN="1";????????????? //SPI 模块使能
???????
??????? TRISA5=0;???????????? //重新设定RD5的功能
??????? RA5=1;???????? // SPI 主控方式下,SS 片选端,不用应当接高电平
}
void init(void)
{
?? asm("CLRWDT");?
?? ADCON1=0X0F;
?? TRISA="0B00100000";?? //RA5 位为片选 输入端,在SPI使能之前需要设定为输入
??
?? TRISC="0B00010000";
?? TRISD="0B00000000";
??
??? PORTA="0x38";?????? // RA3、RA4、RA5 应为高电平 0011 1000
?
?? PORTC="0x00";?
?? PORTD="0x00";
???
?????????
}
void delay(unsigned long x)
{
??? unsigned int a,b;
??? for(a=x;a>0;a--);??
??? for(b=10;b>0;b--);
}

//SPI 总线输出数据子程序
void spi()
{
?????????????????? delay(100);//DA转换器 启动延时
??????????????????
????????????????
?????????????????? RA3=1;????? //清除ADC CLR端子 缓冲数据 无效
?????????????????
?????????????????? RA4=1;????? //? LDAC 数据更新禁止
??????????????????
???????????????
????????????????? RA1=1;???? //产生帧同步信号
?????????????????
????????????????? delay(10);? //保证帧同步信号高电平时间
????????????????? RA1=0;???? //产生帧同步信号
??????????????????
??????? SSPBUF="0X45"; //SPI 总线发送高位数据字节
???????????
?????????????
??????????? do {
??????????????? ;
??????????????? }while(SSPIF==0); //等待数据发送完毕
???????????????? SSPIF="0"; //SSPIF 标志清0
???????????????
???????????????? delay(3);????????
??????????
??????? SSPBUF="0X54"; //SPI 总线发送 低位数据字节
?????????????? do {
????????????????? ;
????????????????? }while(SSPIF==0); //等待数据发送完毕
???????????????????
????????????????
??????????????????? SSPIF="0"; //SSPIF 标志清0
??????????????????? n="SSPBUF";// 读SSPBUF的值,以去掉BF清零???????
???
????????? RA1=1;???? //停止帧同步信号(片选结束)
????????? RA2=1;????? //第二块D/A转换器 帧同步信号(片选结束)
????????
???????? delay(10);
???????? RA4=0;????? // 数据接收完毕,允许更新DAC
???????? delay(10);
???????? RA4=1;????? //数据更新完毕

?????????
????????????
????????
????????????? // delay(60000);
????????????
???????????? // delay(60000);
??????????? //? RD6=1;
???????????? //? delay(60000);
????????????? // delay(60000);
??????????? //? RD6=0;
}
//主程序

main ()
????????? {
????????????????? init();
???????????????????????
???????????????? SPIint(); //I2C 初始化
???????????????????
????????????? asm("CLRWDT");
?
????????????
??????????????????????????
??????????????????
??????? while(1)????????????
????????????? {?
??????????????? delay(10);
??????????????
??????????????? // RD7=0;
??????????????? spi(); //利用spi 总线方式送出数据
???????????????
??????????????? delay(10);
???????????????? RD7=1;
????????????????????????????????????
???????????? }???????? }
分享到:? 新浪微博 ?? 微信 ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
qq空间 ?? 腾讯微博 ?? 人人网 ?? 百度搜藏 ??
引用 回复 收藏 推荐到小组 ( 0) ( 0) 关注

EDN China电子设计技术换个角度分析VR中的光学定位及姿态捕捉技术,难点在哪?
第1楼

楼主的问题今晚提交给ADI。

发布时间:2010-9-2 下午1:35

版主

作者: EvelynZhang

等级: 殿堂级工程师

积分: 20335分

发帖数: 5913次

网站总积分: 33066分

16431分

发送消息

加为好友

查看用户的所有发言

查看用户的个人主页

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件
楼主的问题今晚提交给ADI。
引用 回复
( 0) ( 0)


EDN China电子设计技术智能制造再迎利好,ADI提供核心助推力
第2楼 re:有可能 发布时间:2010-9-3 下午3:20

作者: ADI_Nicolle

等级: 中级工程师

积分: 1219分

发帖数: 627次

网站总积分: 2438分

1169分

发送消息

加为好友

查看用户的所有发言

查看用户的个人主页

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件
很可能是你说的原因。

这种调时序的问题,仅从代码很难找到问题的。因为时序问题,跟延时等等都有关系的,你需要用示波器或逻辑分析仪来抓一下数据线上的波形对照数据手册中的时序图来检查,这样会容易看到时序错在哪里。
引用 回复
( 0) ( 0)

上一帖????16F877A 和 AD53...

快速回复 高级回复
用户名:?
美国的游客?????? (您将以游客身份发表,请登陆 | 注册) ?
标题: * 标题还可以输入80
评论: * 你还可以输入30000
验证码: ?*?
分享: 新浪微博?? qq空间?? qq微博?? 人人网?? 百度搜藏??
维护专业、整洁的论坛环境需要您的参与,请及时举报违规帖子,如果举报属实,我们将给予相应的积分奖励。
谢谢您的热心参与!
返回模拟器件技术论坛 | 返回专业技术交流区
本论坛仅陈述专家或个人观点,并不代表EDN China 电子技术设计互动社区网站立场。

本版热门贴子

视频
?analog.com官网全线升级

在线研讨会
产品新闻
返回论坛页首
有问题请反馈