Arduino Mega到ADC SPI通信不工作
我正在使用SPI通信尝试在外部时钟模式下将我的Arduino Mega 2560作为主机与ADC芯片作为从机(Arduino Mega到ADC SPI通信不工作,arduino,spi,adc,Arduino,Spi,Adc,我正在使用SPI通信尝试在外部时钟模式下将我的Arduino Mega 2560作为主机与ADC芯片作为从机(Max 1247)连接,但每次运行代码时,我都会收到相同的值(RB1=255,RB2=255,RB3=255)。还连接了一个触摸屏(可正常工作)。除了与Arduino的通讯,一切都正常 我尝试过删除define头并改变时钟。也不要更改任何内容(可能是因为其他错误) //标题部分 //定义SPI连接 #定义SELPIN 53//选择插脚 #定义DATAOUT 50//MIS0 #在51//
Max 1247
)连接,但每次运行代码时,我都会收到相同的值(RB1=255,RB2=255,RB3=255)
。还连接了一个触摸屏(可正常工作)。除了与Arduino的通讯,一切都正常
我尝试过删除define头并改变时钟。也不要更改任何内容(可能是因为其他错误)
//标题部分
//定义SPI连接
#定义SELPIN 53//选择插脚
#定义DATAOUT 50//MIS0
#在51//MOSI中定义数据
#定义SPICLOCK 52//Clock
#定义SSTRB 43//SSTRB
#包括
#包括“MCUFRIEND_kbv.h”
MCUFRIEND_kbv tft(A3、A2、A1、A0、A4);
int-sstrb=0;
字节TB1=B11101111;
字节RB1;
字节RB2;
字节RB3;
字节RB4;
//设置
无效设置(){
pinMode(SELPIN,输出)
引脚模式(sstrb,输入)
引脚模式(数据输出、输入)
pinMode(数据输入、输出);
pinMode(SPICLOCK,输出);
//禁用设备以启动。
数字写入(SELPIN,高);
数字写入(SPICLOCK,低电平);
数字写入(数据输入,低电平);
}
void循环(){
//其他一些触摸屏的东西就在这之前。。
else if(currentPage==“3”){
如果(tp.z>myTouch.pressureThreshhold){
x=tp.x;
y=tp.y;
//后退按钮命令
如果((x>=20)&&(x=0)&&&(y=700)&&&(x=350)&&(y我不能肯定这是否是你问题的根源,但我发现了以下几点:
您将SSTRB定义为插脚43
#define SSTRB 43 //SSTRB
但实际上您从未使用此值,而是定义了
int sstrb = 0;
下面的几行,您将使用它们将引脚0定义为输入
pinMode(sstrb, INPUT);
我想应该是这样
pinMode(SSTRB, INPUT);
然后,在循环中有这些行
digitalRead(sstrb);
if (sstrb == 0){
如果digitalRead实际上什么都不做(从引脚0读取并丢弃该值),我假设您想要写入
sstrb = digitalRead(SSTRB);
否则,sstrb
实际上从未更改,始终为0
另外,由于数据表()中说明
在外部时钟模式下,[…]SSTRB脉冲高达一个时钟
控制字节最后一位后的句点
如果您使用的是外部时钟模式,我假设您更希望在继续之前等待此脉冲结束。您可以执行如下繁忙等待:
bool wasHigh = false;
do {
sstrb = digitalRead(SSTRB);
if( sstrb == 1 ){
wasHigh = true;
}
}while( !(wasHigh && sstrb == 0) );
请注意,如果脉冲在此等待之前出现或从未出现,您将无休止地留在该循环中。您可能不想在此处添加中断条件或超时。当然,您也可以使用中断来解决此问题
附加说明:您正在检查sstrb
是否仅为0的分支中调用endTransaction
。我不知道SPI库如何处理在不先结束旧事务的情况下再次开始事务,它可能工作正常,我只是想让您知道这可能是一个潜在的陷阱。这帮了大忙随着我对sstrb的困惑。我还发现我对SELPIN和连接到CS的pin进行分组是错误的。我认为它们是相同的,但一旦我将它们分开,并更新代码以匹配您在sstrb上添加的部分,一切都按预期进行了。很高兴听到现在一切都正常了。总是很乐意提供帮助。
bool wasHigh = false;
do {
sstrb = digitalRead(SSTRB);
if( sstrb == 1 ){
wasHigh = true;
}
}while( !(wasHigh && sstrb == 0) );