在采用通信時(shí),當(dāng)數(shù)據(jù)送出后,經(jīng)常得不到正確的返回信號(hào),或者說是得不到相關(guān)的中斷,在電路設(shè)計(jì)上,采上貴公司的提供的原理圖進(jìn)行設(shè)計(jì),直接使用MCU的8個(gè)I/O與CH375相連!貴公司能否提供一下相關(guān)的解決方案,或相關(guān)的并口電路原理,與PCB設(shè)計(jì)時(shí)要注意的問題,或是相關(guān)的程序源碼?UploadImages/200842420142267.rar
原理圖你可以去參考CH375DS1上面的電路設(shè)計(jì)。
到我們網(wǎng)站上下載CH372EVT.ZIP和CH375EVT.ZIP, http://m.findthetime.net/download/list.asp?id=29 http://m.findthetime.net/download/list.asp?id=32 CH372EVT.ZIP里是做設(shè)備的,里面有相關(guān)的例子 CH375EVT.ZIP是做主機(jī)的例子和375的并口的電路等等!
我是按照二樓說的做的,也不知道到低出問題是在哪個(gè)環(huán)節(jié)發(fā)生的,
到底是什么地方出現(xiàn)了錯(cuò)誤?硬件上面的問題你可以去用測(cè)試命令來測(cè)試你的硬件上面是否有問題
硬件上面的問題你可以去用測(cè)試命令來測(cè)試你的硬件上面是否有問題,運(yùn)行check_exist 得不到返回值!
用示波器得到發(fā)送數(shù)據(jù)正常!但無返回的數(shù)據(jù)!
你讀數(shù)據(jù)端口的時(shí)候返回?cái)?shù)據(jù)是什么?既然測(cè)試命令不能通過說明你的硬件或者時(shí)序上有問題!可以把你的程序貼出來!
我也有同樣的問題 用示波器查看WR RD A0等都 正常 而且 測(cè)試數(shù)據(jù)也已經(jīng)發(fā)送到375的并口 但是 返回值始終都是0xff CS 引腳始終接地 用復(fù)位的程序復(fù)位 我用的是MSP430F149
具體硬件電路在附件中!UploadImages/200842420121882.rar
#include #include "CH375_Comm_define.h"
void Delay10us(unsigned int dtime); void InitOsc(void); void CH375_Init(void); void CH375_SendCMD1(unsigned char Command); void CH375_SetVIDPID(void); unsigned char CH375_SendCMD2(unsigned char Command,unsigned char Parameter); unsigned char WatchPoint; void main(void) { WDTCTL = WDTPW + WDTHOLD; InitOsc(); //CH375_SetVIDPID(); CH375_Init(); while(1); } void CH375_Init(void) { //首先初始化端口 CH375_DIR = 0xFF; //按位進(jìn)行或運(yùn)算 CH375_WR_HI; //WR無效 CH375_WR_DIR |= CH375_WR; CH375_RD_HI; //RD無效 CH375_RD_DIR |= CH375_RD; CH375_A0_HI; //A0=1命令 CH375_A0_DIR |= CH375_A0; //第一部分硬件復(fù)位 CH375_SendCMD1(0x05); Delay10us(3500); //延時(shí)40ms //第二部分設(shè)置VID和PID //CH375_SetVIDPID(); //第三部分設(shè)置USB工作模式 WatchPoint = CH375_SendCMD2(0x06,0x11); _NOP(); //Add BreakPoint here } //發(fā)送單字節(jié)命令 void CH375_SendCMD1(unsigned char Command) { P6DIR = 0xFF; CH375_OUT = Command; //發(fā)送數(shù)據(jù) CH375_A0_HI; //A0=1命令 CH375_WR_LO; //WR有效 _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 // CH375_CS_HI; //CS無效 } //發(fā)送帶有返回的單字節(jié)命令 unsigned char CH375_SendCMD2(unsigned char Command,unsigned char Parameter) { unsigned char result; //當(dāng)WR為低電平而A0為高電平時(shí),D7-DO上的數(shù)據(jù)被作為命令碼寫入CH375。 CH375_DIR = 0xff; CH375_OUT = Command; //發(fā)送指令數(shù)據(jù) CH375_A0_HI; //A0=1命令 CH375_WR_LO; //WR有效 _NOP(); _NOP(); CH375_WR_HI; //WR無效 //當(dāng)WR以及AO都為低電平時(shí),D7-DO上的數(shù)據(jù)被寫入CH375; CH375_A0_LO; //A0=0命令 CH375_WR_LO; //WR有效 CH375_OUT = Parameter; //發(fā)送數(shù)據(jù) _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 //Delay10us(5); //當(dāng)RD及AO都為低電平時(shí),CH375中的數(shù)據(jù)通過D7-DO輸出; P6DIR = 0x00; CH375_A0_LO; CH375_RD_LO; //RD有效 //在這里通過示波器觀察到375的所有IO輸出1 即0XFF _NOP();_NOP();_NOP(); result = P6IN; // CH375_RD_HI; //RD無效 //CH375_DIR = 0xFF; return result; }
void InitOsc(void) { //MCLK=SMLCLK=4MHz,ACLK=32768 unsigned char i,j; //設(shè)置系統(tǒng)時(shí)鐘 BCSCTL1 = 0x00; //啟動(dòng)XT2晶振,ACLK為XT1(32KHz) BCSCTL2 = 0x88; //MCLK為XT2不分頻;SMCLK為XT2,4MHz j=0; while(1) { IFG1 &= ~OFIFG; //清OSCFault標(biāo)志 for (i=0xFF;i>0;--i); //延時(shí)等待 if ((IFG1 & OFIFG)!=0) { BCSCTL1 = 0x00; //啟動(dòng)XT2晶振,ACLK為XT1(32KHz) BCSCTL2 = 0X88; //MCLK為XT2不分頻,SMCLK為XT2不分頻 j++; //如果檢測(cè)到振蕩器失效,則計(jì)數(shù) if (j>10) //如果計(jì)數(shù)值超過10次,則認(rèn)為是硬件問題 ; //OSCFault(); } else { for (i=0xFF;i>0;--i); //等待振蕩器達(dá)到足夠的幅度 IFG1 &= ~OFIFG; //清OSCFault標(biāo)志 IE1 |= OFIE + ACCVIE; //振蕩器故障,F(xiàn)LASH非法訪問中斷允許 break; } } }
void Delay10us(unsigned int dtime) { unsigned int i,j; for(j=0;j for(i=0;i<((MCLK/500)-3);i++); } }
//設(shè)置VID和PID void CH375_SetVIDPID(void) { unsigned char itemp; CH375_DIR = 0xFF; CH375_OUT = 0x12; //CH375_CS_LO; //CS有效 CH375_A0_HI; //A0=1命令 CH375_WR_LO; //WR有效 _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 _NOP();_NOP();_NOP(); itemp = (unsigned char)(CH375_VID&0xff); //VID低字節(jié) CH375_OUT = 0x48;//itemp; CH375_A0_LO; //A0=0數(shù)據(jù) CH375_WR_LO; //WR有效 _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 _NOP();_NOP();_NOP(); itemp = (unsigned char)((CH375_VID>>8)&0xff); //VID高字節(jié) CH375_OUT = 0x43;//itemp; CH375_A0_LO; //A0=0數(shù)據(jù) CH375_WR_LO; //WR有效 _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 _NOP();_NOP();_NOP(); itemp = (unsigned char)(CH375_PID&0xff); //PID低字節(jié) CH375_OUT = 0x37;//itemp; CH375_A0_LO; //A0=0數(shù)據(jù) CH375_WR_LO; //WR有效 _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 _NOP();_NOP();_NOP(); itemp = (unsigned char)((CH375_PID>>8)&0xff); //PID高字節(jié) CH375_OUT = 0x55;//itemp; CH375_A0_LO; //A0=0數(shù)據(jù) CH375_WR_LO; //WR有效 _NOP();_NOP();_NOP(); CH375_WR_HI; //WR無效 // CH375_CS_HI; //CS無效 _NOP();_NOP();_NOP(); } 這個(gè) 就是我的程序 大家?guī)兔纯磿r(shí)序有沒有什么問題
沒有貴公司的技術(shù)人員回復(fù)嗎?
你的并口電路有問題:TXD引腳未通過1KΩ左右的下拉電阻接地或者直接接地,CH375未工作在并口方式下 建議你對(duì)照CH375DS1.PDF中并口連接方式,確認(rèn)你的電路是否正確。
"TXD引腳未通過1KΩ左右的下拉電阻接地或者直接接地",,,TXD引腳已經(jīng)直接接地!沒有沒接地呀!我是按CH375DS1.PDF中并口連接方式
如圖;
375正常工作后硬件上有以下特征: (1)晶振起振,12MHz (2)25腳為低電平,26腳為高電平 以上正常后,再發(fā)送測(cè)試命令,如果不成功,則需要檢查硬件連線和操作時(shí)序