| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
為什么ADS7843讀出來全是0?? | 
  
| 作者:Lx_mcu 欄目:單片機 | 
我開始用的是下面這個程序,讀出來全是0,能生中斷! 后來我又改了下,還是全為0;不知道是什么問題! 哪位大哥幫幫助呀! 觸摸屏芯片ADS7846/ADS7843驅(qū)動程序(C51) /* [文件名] Touch.c [功 能] 8051單片機驅(qū)動ADS7846/ADS7843芯片 [簡 介] ADS7846/7843芯片 適合用在4線制觸摸屏,它通過標(biāo)準(zhǔn)SPI協(xié)議和CPU通信,操作簡單,精度高,當(dāng) 觸摸屏被按下時(即有觸摸事件發(fā)生)則ADS7846向CPU發(fā)中斷請求,CPU接到請求后,應(yīng)延時一下再響應(yīng) 其請求,目的是為了消除抖動使得采樣更準(zhǔn)確。如果一次采樣不準(zhǔn)確。 [原作者] 鞠春陽 [版 本] v1.1b [最后修改時間] 2004年3月31日 9:11 */ #include "reg51.h" #include "intrins.h" sbit DCLK=P1^6; sbit CS=P2^2; sbit DIN=P2^3; sbit DOUT=P2^4; sbit BUSY=P2^5; delay(unsigned CHAR i--) { while(i--); } void start() //SPI開始 { DCLK=0; CS=1; DIN=1; DCLK=1; CS=0; } WriteCharTo7843(unsigned CHAR num) //SPI寫數(shù)據(jù) { unsigned CHAR count=0; DCLK=0; for(count=0;count<8;count++) { num<<=1; DIN=CY; DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效 DCLK=1; _nop_();_nop_();_nop_(); } } ReadFromCharFrom7843() //SPI 讀數(shù)據(jù) { unsigned CHAR count=0; unsigned int Num=0; for(count=0;count<12;count++) { Num<<=1; DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效 DCLK=0; _nop_();_nop_();_nop_(); if(DOUT) Num++; } return(Num); } void ZhongDuan() interrupt 0 //外部中斷0 用來接受鍵盤發(fā)來的數(shù)據(jù) { unsigned int X=0,Y=0; delay(10000.html">10000); //中斷后延時以消除抖動,使得采樣數(shù)據(jù)更準(zhǔn)確 start(); //啟動SPI // while(BUSY); //如果BUSY信號不好使可以刪除不用 delay(2); WriteCharTo7843(0x90); //送控制字 10010000.html">10000 即用差分方式讀X坐標(biāo) 詳細(xì)請見有關(guān)資料 // while(BUSY); //如果BUSY信號不好使可以刪除不用 delay(2); DCLK=1; _nop_();_nop_();_nop_();_nop_(); DCLK=0; _nop_();_nop_();_nop_();_nop_(); X=ReadFromCharFrom7843(); WriteCharTo7843(0xD0); //送控制字 11010000.html">10000 即用差分方式讀Y坐標(biāo) 詳細(xì)請見有關(guān)資料 DCLK=1; _nop_();_nop_();_nop_();_nop_(); DCLK=0; _nop_();_nop_();_nop_();_nop_(); Y=ReadFromCharFrom7843(); CS=1; } main() { TMOD=0x11; // 記數(shù)器0 計數(shù)器1 都以 16 位 記數(shù) TCON=0x00; IE=0x83; //1000 0001 EA=1中斷允許, IP=0x01; while(1); }  | 
  
| 2樓: | >>參與討論 | 
| 作者: zgl7903 于 2006/9/7 13:09:00 發(fā)布:
         個人見解 1 用示波器測量管腳是否有波形? 2 初始化是否有問題? 3 讀管腳是否出于浮置狀態(tài)  | 
  |
| 3樓: | >>參與討論 | 
| 作者: 1982gaoji 于 2006/9/7 13:51:00 發(fā)布:
         一點建議 仔細(xì)再看一下資料,是不是時續(xù)有問題,或者該開的標(biāo)志位有問題,  | 
  |
| 4樓: | >>參與討論 | 
| 作者: Lx_mcu 于 2006/9/7 13:56:00 發(fā)布:
         謝謝,我再好好看看, 謝謝大家的幫助,  | 
  |
| 5樓: | >>參與討論 | 
| 作者: Lx_mcu 于 2006/9/7 16:46:00 發(fā)布:
         還是 0 我測了下 X+ X- 都是2.8V Y+ Y- 則為0V 從資料上看,VREF是加在Y+ Y-之間,這是這么為事!?  | 
  |
| 6樓: | >>參與討論 | 
| 作者: zgl7903 于 2006/9/7 19:48:00 發(fā)布:
         先詳讀一下器件資料,把過程靠明白了 再提問題  | 
  |
| 7樓: | >>參與討論 | 
| 作者: xwj 于 2006/9/7 20:20:00 發(fā)布:
         LZ ,先搞清楚局部變量的作用域再說! 還有,AD轉(zhuǎn)換是要時間的,不要一下延時一下又不延時  | 
  |
| 8樓: | >>參與討論 | 
| 作者: Lx_mcu 于 2006/9/8 16:24:00 發(fā)布:
         我的加了uint16了 我的加了uint16了 ReadFromCharFrom7843() //SPI 讀數(shù)據(jù) { unsigned CHAR count=0; unsigned int Num=0; for(count=0;count<12;count++) { Num<<=1; DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效 DCLK=0; _nop_();_nop_();_nop_(); if(DOUT) Num++; } return(Num); }  | 
  |
| 9樓: | >>參與討論 | 
| 作者: Lx_mcu 于 2006/9/9 9:43:00 發(fā)布:
         好了,可以讀出來了,是參數(shù)傳遞上有點問題! 我程序里面用了一個環(huán)形隊列,以前我用的是指針,這次我改了一下,就用一個變量,問題就在這里,謝謝大家了!! 下面我還得調(diào)試坐標(biāo)轉(zhuǎn)換的問題,  | 
  |
| 10樓: | >>參與討論 | 
| 作者: 言言 于 2006/9/10 17:02:00 發(fā)布:
         想問一下你用7843的效果如何 我最近也在搞觸摸屏,想問一下你取到的坐標(biāo)值線性度如何,我取到的值校正成顯示坐標(biāo)值還不是很理想 希望和你交流一下,我的郵箱:yanyaomail@163.com  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |