STM32
直播中

高澜栖

7年用户 195经验值
私信 关注
[问答]

求解答实验18触摸屏实验问题!

//SPI读数据
//从7846/7843/XPT2046/UH7843/UH7846读取adc值   
u16 ADS_Read_AD(u8 CMD)   
{   
u8 count=0;   
u16 Num=0;
TCLK=0;//先拉低时钟   
TCS=0; //选中ADS7843  
ADS_Write_Byte(CMD);//发送命令字
delay_us(6);//ADS7846的转换时间最长为6us
TCLK=1;//给1个时钟,清除BUSY        
TCLK=0;   
for(count=0;count<16;count++)  
{      
  Num<<=1;   
  TCLK=0;//下降沿有效           
  TCLK=1;
  if(DOUT)Num++;   
}   
Num>>=4;   //只有高12位有效.
TCS=1;//释放ADS7843  
return(Num);   
}
以上函数中的读取段,也就是for循环中貌似只有15个下降沿何以读取16位数据。是否可以将清除BUSY时的  TCLK=1;TCLK=0;这两句顺序对调下?
这是我软件仿真的图片,在清除BUSY后,好像只有15个下降沿。请原子哥赐教!

回帖(3)

马沃源

2019-7-16 09:26:40
下降沿是又16个的,你好好数数吧.
至于BUSY位,能否调转,这个要看资料,或者你自己亲自试验一下,调转过来看看能否正常读数?不能就说明不能调转.能,就说明可以.
举报

田晴

2019-7-16 09:44:53
这个不能看能否正常读数。我试过将Num>>4这句改成右移3位或者5位,经过屏幕校准后都是正确的,能正常手写,将BUSY位调转后也是一样,所以我认为这只是将读取结果放大或者缩小2倍,经过校准没什么影响。
    个人认为原程序for循环中只有15个下降沿,因为第一次循环中没有下降沿,最后结果右移4位后实际上只有11位有效数据。
举报

王博

2019-7-16 09:50:09
TCLK=1;//给1个时钟,清除BUSY        
 TCLK=0;   
 for(count=0;count<16;count++)  
 {       
  Num<<=1;   
  TCLK=0;//下降沿有效           
  TCLK=1;
  if(DOUT)Num++;    
 }   
因为在进入循环的时候TCLK为0,所以第一个TCLK=0并没有体现出下降沿,你说的15个是正确的.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分