完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好,我想使用SPI来建立PIC16F1719和RPI之间的通信。控制器从传感器获取ADC值并将它们发送到RPi,但问题是PIC上的SDO总是很高,并且没有发送值。我真的很感激任何建议。谢谢
以上来自于百度翻译 以下为原文 Hi everyone, I want to use SPI to establish a communication between PIC16F1719 and RPi. The controller gets ADC values from sensors and sends them to the RPi but the problem is that the SDO on the PIC is constantly high and no values are sent. I'd really appreciate any suggestions. Thanks |
|
相关推荐
4个回答
|
|
以下是SPI代码:void spi_init(){SSPEN=0;//Reset SPI模式TRISDbits.TRISD0=1;//RD0作为SS输入TRISCbits.TRISC5=0;//RC5作为SDO输出TRISCbits.TRISC4=1;//RC4作为SDI输入TRISCbits.TRISC3=1;//RC3作为SCK输入时钟RC5PPS=0x11;//设置RC5作为外围SDO输出SSPCLKPPS0x10;//RC3作为外围CLK SSPSPSPSPSPSPS=0x08,//选择RD0作为SS输入管SS SS输入引脚SSP1STAT=0x40;//选择RD0作为SS SS输入管SS SS SS SS输入管SSP1XXXXP1STAT=0x40;//设置SMP=0,CKE=1注:下6位只读只读SSP1P1CONP1CON1=0X04;//CKP=0,SS ENABLED SSP1IF=0,SS ENABLED SSP1IF SSP1IF=0;SSP1IE=1;PEIE=1;PEIE=1;PEIE=1;PEIE=1;GIE=1;GIE=1;GIE=1;SSPEE=1;SSPEPEIsdBist.TrISD0=0;而(!)SSP1IF;TEMP= SSPBUF;而(!)SSP1IF;temp=SSPBUF;TRISDbits.TRISD0=1;return temp;}void main(){OSCCONbits.SCS=0x00;OSCCONbits.IRCF=0x0E;spi_init();//Call SPI初始化函数adc_init();//Call ADC初始化函数TRISAbits.TRISA4=1;//设置RA4作为同步ANSELAbits的输入。SA4=0;//禁用RA4的模拟驱动程序,而(1)//循环永远{;}}无效中断Isr(void){静态无符号int count=0;无符号int Current[24];无符号int I,.;无符号char temp;if(SSP1IF){SSP1IF=0;SSP1IE=0;if(RA4&spi_r()==157){for(char i=0;i<24;i++){Current=110;//getCurrent(I_ch);}for(char i=0;i<24;i++){I=getCurrent(I_ch);//Current;temp=SSP1BUF;if(!Ra4)中断;SSP1BUF=(i;and 0xFF00)& gt;8;而(!)SSP1IF和AM&RA4);SSP1IF=0;TEMP= SSP1BUF;IF(!)RA4)中断;SSP1BUF=I&AMP;0x00 FF;而(!)SSP1IF和AM&RA4);SSP1IF=0;} SSP1IF=0;SSP1IE=1;}
以上来自于百度翻译 以下为原文 Here's the SPI code: void spi_init() { SSPEN = 0; // Reset SPI mode TRISDbits.TRISD0 = 1; // RD0 as SS input TRISCbits.TRISC5 = 0; //RC5 as SDO output TRISCbits.TRISC4 = 1; // RC4 as SDI input TRISCbits.TRISC3 = 1; // RC3 as SCK input clock RC5PPS = 0x11; // Set RC5 as peripheral SDO out SSPCLKPPS = 0x10;// RC3 as peripheral CLK SSPSSPPS = 0x08, // Select RD0 as SS input pin SSP1STAT = 0x40;// set SMP=0, CKE = 1 Note: the lower 6 bit is read only SSP1CON1 = 0x04; // CKP = 0, SS ENABLED SSP1IF = 0; SSP1IE = 1; PEIE = 1; GIE = 1; SSPEN = 1; } unsigned char spi_r() { unsigned char temp; TRISDbits.TRISD0 = 0; while(!SSP1IF); temp=SSPBUF; while(!SSP1IF); temp=SSPBUF; TRISDbits.TRISD0 = 1; return temp; } void main () { OSCCONbits.SCS = 0x00; OSCCONbits.IRCF = 0x0E; spi_init(); // Call SPI initialization function adc_init(); // Call ADC initialization function TRISAbits.TRISA4 = 1; // Set RA4 as input for the synchronization ANSELAbits.ANSA4 = 0; // Disable the analog driver for RA4 while(1) // Loop forever {; } } void interrupt Isr(void) { static unsigned int count = 0; unsigned int Current[24]; unsigned int I,current; unsigned char temp; if(SSP1IF) { SSP1IF = 0; SSP1IE = 0; if(RA4 && spi_r() == 157) { for(char i = 0; i < 24; i++) { Current = 110;//getCurrent(I_ch); } for(char i = 0; i < 24; i++) { I = getCurrent(I_ch);//Current; temp = SSP1BUF; if(!RA4) break; SSP1BUF = (I & 0xFF00) >> 8; while(!SSP1IF && RA4); SSP1IF = 0; temp = SSP1BUF; if(!RA4) break; SSP1BUF = I & 0x00FF; while(!SSP1IF && RA4); SSP1IF = 0; } } SSP1IF = 0; SSP1IE = 1; } } |
|
|
|
好,那么我应该用轮询代替还是你建议什么?谢谢你的回复。
以上来自于百度翻译 以下为原文 Okay, so should I use polling instead or what do you suggest? Thanks for your reply. |
|
|
|
让它使用轮询工作。只有当它工作时,你应该决定是否需要使用中断。
以上来自于百度翻译 以下为原文 Get it working using polling. Only once it's working, should you decide if there is a need to use interrupts. |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
5248 浏览 9 评论
2037 浏览 8 评论
1957 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3218 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2265 浏览 5 评论
788浏览 1评论
679浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
608浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
685浏览 0评论
582浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 02:33 , Processed in 1.163105 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号