|
|||||||||||
| 技術(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 |
有誰用過SHT7X系列溫濕度傳感器 |
| 作者:highhand 欄目:單片機 |
感覺好像讀寫存儲芯片那樣,但是就是不能正常讀取,哪位讀取SHT7X系列的,能否提供一份參考程序,謝謝!有酬 * - 本貼最后修改時間:2007-3-31 0:58:06 修改者:highhand |
| 2樓: | >>參與討論 |
| 作者: mohanwei 于 2007/3/28 21:38:00 發(fā)布:
廠家就給出了例程…… 用起來感覺非常方便。 注意它的接口只是看起來很想I2C而已,實際不是的……好好閱讀一下手冊。 |
|
| 3樓: | >>參與討論 |
| 作者: highhand 于 2007/3/29 8:00:00 發(fā)布:
我按照例程,但是出不來 廠家給出的是基于51的程序,我用的是PIC16F819,不知道哪里有問題。樓上的兄臺,能否指點一下,或者加我QQ(86025230)指導(dǎo)一下,因為我們時間比較急。謝謝你了!我并不是一遇到困難就到處求助的,雖然沒有弄出來,也弄了好幾天了,因為我們做項目,現(xiàn)在時間比較急,手冊我看了很多次了,包括IO的方向、上拉電阻等都注意到了。如果可以的話請你幫幫忙,不勝感激! * - 本貼最后修改時間:2007-3-29 8:10:08 修改者:highhand |
|
| 4樓: | >>參與討論 |
| 作者: yewuyi 于 2007/3/29 10:55:00 發(fā)布:
怎么個有酬法子? 呵呵,自己看看就知道了啊,也可以聯(lián)系代理商,需要提醒你的是,這個東西精度確實不錯,但因為要求功耗的原因,傳輸距離要注意 |
|
| 5樓: | >>參與討論 |
| 作者: highhand 于 2007/3/29 11:30:00 發(fā)布:
聯(lián)系過了,還是沒有解決 代理商只提供51的參考程序,存在的可能是IO方向問題,我也試過了,還是出不來,樓上的兄弟們?nèi)绻鲞^的話就指點指點吧,謝謝你們了! |
|
| 6樓: | >>參與討論 |
| 作者: chenlung 于 2007/3/29 13:41:00 發(fā)布:
能不能把你的CPU連接和程序搞出來看下 只見你說有問題,這樣哪里看得出來。 |
|
| 7樓: | >>參與討論 |
| 作者: highhand 于 2007/3/29 15:06:00 發(fā)布:
原參考程序(51) /*********************************************************************************** Project: SHTxx DEMO program (V2.1) Filename: SHTxx_Sample_Code.c Prozessor: 80C51 family Compiler: Keil Version 6.14 Autor: MST Copyrigth: (c) Sensirion AG ***********************************************************************************/ #include <AT89s53.h> //Microcontroller specific library, e.g. PORT definitions #include <intrins.h> //Keil library (is used for _nop()_ operation) #include <math.h> //Keil library #include <stdio.h> //Keil library typedef union { unsigned int i; float f; } VALUE; //---------------------------------------------------------------------------------- // modul-var //---------------------------------------------------------------------------------- enum {TEMP,HUMI}; #define DATA P1_1 #define SCK P1_0 #define noACK 0 #define ACK 1 //adr command r/w #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 //---------------------------------------------------------------------------------- CHAR s_write_byte(unsigned CHAR VALUE) //---------------------------------------------------------------------------------- // writes a byte on the Sensibus and checks the acknowledge { unsigned CHAR i,error=0; for (i=0x80;i>0;i/=2) //shift bit for masking { if (i & VALUE) DATA=1; //masking VALUE with i , write to SENSI-BUS else DATA=0; SCK=1; //clk for SENSI-BUS _nop_();_nop_();_nop_(); //pulswith approx. 5 us SCK=0; } DATA=1; //release DATA-line SCK=1; //clk #9 for ack error=DATA; //check ack (DATA will be pulled down by SHT11) SCK=0; return error; //error=1 in case of no acknowledge } //---------------------------------------------------------------------------------- CHAR s_read_byte(unsigned CHAR ack) //---------------------------------------------------------------------------------- // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1" { unsigned CHAR i,val=0; DATA=1; //release DATA-line for (i=0x80;i>0;i/=2) //shift bit for masking { SCK=1; //clk for SENSI-BUS if (DATA) val=(val | i); //read bit SCK=0; } DATA=!ack; //in case of "ack==1" pull down DATA-Line SCK=1; //clk #9 for ack _nop_();_nop_();_nop_(); //pulswith approx. 5 us SCK=0; DATA=1; //release DATA-line return val; } //---------------------------------------------------------------------------------- void s_transstart(void) //---------------------------------------------------------------------------------- // generates a transmission start // _____ ________ // DATA: |_______| // ___ ___ // SCK : ___| |___| |______ { DATA=1; SCK=0; //Initial state _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; } //--------------------------------------- |
|
| 8樓: | >>參與討論 |
| 作者: highhand 于 2007/3/29 15:07:00 發(fā)布:
自己程序 PA2作為時鐘線,PA3作為數(shù)據(jù)線。因為要用作定時輸出,所以用到了定時中斷程序,請各位幫我看看,程序可能亂了點,主要是看看SHT部分,PWM、定時那些都沒有問題的了。不勝感激。 #include <pic.h> #include <pic16f81x.h> #include <math.h> #include <stdio.h> CHAR s_write_byte(unsigned CHAR VALUE); CHAR s_read_byte(unsigned CHAR ack); void s_transstart(void); void s_connectionreset(void); CHAR s_softreset(void); CHAR s_read_statusreg(unsigned CHAR *p_VALUE, unsigned CHAR *p_checksum); CHAR s_write_statusreg(unsigned CHAR *p_VALUE); CHAR s_measure(unsigned CHAR *p_VALUE, unsigned CHAR *p_checksum, unsigned CHAR mode); void calc_sth11(float *p_HUMIDITY ,float *p_temperature); float calc_dewpoint(float h,float t); void PWM_Initial(void); void PWM_Display(int PWMOut92, int PWMOut10); void Timer1_Initial(void); void interrupt isr(void); static bit SCK @ (unsigned)&PORTA*8+2; static bit DATA @ (unsigned)&PORTA*8+3; //------------------------------------------------------------------------------ // modul-var //------------------------------------------------------------------------------ enum {TEMP,HUMI}; #define noACK 0 #define ACK 1 //adr command r/w #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 CHAR PWM92,PWM10; unsigned int n_Scan=0,pwm=0; float dew_point; unsigned CHAR err,chksum; unsigned int humi_vali=0,temp_vali=0; float humi_valf,temp_valf; main() { TRISA = 0x00; TRISB = 0x00; PORTB = 0x0FF; PWM_Initial(); // PWM Initial Timer1_Initial(); // Timer1 Initial PEIE=1; // Enable Peripheral Interupts GIE =1; // Enable GLOBAL Interrupt s_connectionreset(); while(1) { // } } void PWM_Initial(void) { PR2=0x0F9; CCPR1L=0x7F; CCP1CON=0x20; TRISB=0x00; T2CON=0x05; CCP1CON|=0x0F; } void PWM_Display(int PWMOut92, int PWMOut10) { CCPR1L=PWMOut92; CCP1CON&=0x0CF; CCP1CON|=PWMOut10; } void Timer1_Initial(void) { OPTION=0x87; // Falling Edge of INT Pin,WDT Fosc/128 PSA=1; // WDT Fosc/128 T1CON=0x00; // Internal Clock(Fosc/4) TMR1H=0x0FC; TMR1L=0x2E; // 1ms TMR1IF=0; // Clear TIMER1 Interrupt Flag TMR1IE=1; // Enable TIMER1 Interrupt TMR1ON=1; // Start Timing } void interrupt isr(void) { if (TMR1IF==1) // TIMER1 Interrupt Subroutine { TMR1IF=0; TMR1H=0x0FC; TMR1L=0x2E; n_Scan+=1; CLRWDT(); // WDT Clear if (n_Scan==1000) { PORTB=0x0FF; CLRWDT(); // WDT Clear } if (n_Scan==1500) { PORTB=0x01; //pwm=200; if(pwm==1000) { pwm=0; } PWM10=(CHAR)(pwm&(0x03)); PWM10=PWM10<<4; PWM92=pwm>>2; PWM_Display(PWM92,PWM10); } if (n_Scan==2000) { PORTB=0x02; err=0; err+=s_measure((unsigned CHAR*) &humi_vali,&chksum,HUMI); //measure HUMIDITY //err+=s_measure((unsigned CHAR*) &temp_vali,&chksum,TEMP); //measure temperature //if(err!=0) //{s_connectionreset();} if(err==0) { //humi_vali=1500; //temp_vali=10000; humi_valf=(float)humi_vali; //converts integer to float temp_valf=(float)temp_vali; //converts integer to float calc_sth11(&humi_valf,&temp_valf); //calculate HUMIDITY, temperature pwm=(unsigned int) (humi_valf*10); } } |
|
| 9樓: | >>參與討論 |
| 作者: lehao 于 2007/3/29 18:40:00 發(fā)布:
不懂c語言 用匯編做過,我做的時候有個問題,一個是等待是否檢測到變低的信號.得到這個信號了就說明通訊工作對了. 你要是迷惑,先做個程序檢測這個低信號好了. 沒學(xué)過c語言,只能這么說下了. 工作過程是容易:先發(fā)啟動信號,在發(fā)命令,等待低信號,在就讀數(shù)據(jù)好了.sht工作有周期,你的時間間隔不能太短,他本身的檢測時間較長. 希望能幫到你! |
|
| 10樓: | >>參與討論 |
| 作者: mohanwei 于 2007/3/29 22:03:00 發(fā)布:
今天太晚了,我明天再看看程序…… 一般說來這種接口的驅(qū)動是最好寫的,先按照手冊上的讀寫流程圖編寫出程序框架,然后往下細化到read和write函數(shù),最后參照讀寫時序圖編寫read和write的實現(xiàn)。 調(diào)試的時候不要急著直接編譯整個項目,要先單獨編幾個測試函數(shù)先把接口完全調(diào)通。調(diào)試的時候最好能有硬件仿真器(其實我一般是用keil先進行軟件仿真的……),結(jié)合萬用表和示波器觀察管腳電平變化,有一點不對也要分析清楚。 雖然這段文字看起來是紙上談兵,但的確是我多年調(diào)程序總結(jié)出來的部分經(jīng)驗,我按照這個步驟來調(diào)接口,幾乎沒有浪費過時間。 |
|
| 11樓: | >>參與討論 |
| 作者: highhand 于 2007/3/29 22:22:00 發(fā)布:
非常感謝樓上的兄臺 真心感謝你,我會再努力的,如果你又時間,也希望你幫幫忙看看,指點一下。 |
|
| 12樓: | >>參與討論 |
| 作者: highhand 于 2007/3/31 0:57:00 發(fā)布:
問題已經(jīng)解決,謝謝大家提示 謝謝大家?guī)兔!非常感謝! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |