Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: What is wrong with DS1631 Reading ? Kategorie: C-Control I V1.2/2.0 (von Daniel - 22.10.2005 14:36)
 Als Antwort auf Re: What is wrong with DS1631 Reading ? von DIE HARD - 19.10.2005 14:33
Daniel nutzt:  CC1-M-Unit V1.2/2.0

>
> > I'm desperately trying to read I2C DS1631 (Conrad 198298). What is wrong in my program below ?? TEMP is always Zero.
>
> Hi......
> yes, and I desperately tried to find out why.
> This is the reason:
>
> define TEMP        word[1]    
> define TEMPHI      byte[6]      !!!!!!!!
> define TEMPLO      byte[7]     !!!!!!!
>
> The word TEMP is base for the calculation. This calculation is done with
> HBYTE and LOBYTE of TEMP seperately.
> Therefore TEMPHI and TEMPLO have to be assigned as byte[1] and byte[2]
>
> Below you find a running version of your program.
> Use this one for further development, because i changed some more details.
> e.g added a delay, and changed some delays to smaller values for speed up.
>
> ciao.....
>
>  
>
>
>
>
> define EXTPORT     byteport[10] 'LCD sur PCF8574
>
> define Led         port[4]
> 'define SDA         port[9]
> 'define SCL         port[10]
>
> '--------------------------
> '---- SYSTEM MEMORY -------
> '--------------------------
>
> define DS1631      158  'I2C ADDRESS $9E
>
> '------------------------------
> define TEMP        word[1]
> define TEMPHI      byte[1]
> define TEMPLO      byte[2]
> define SCONFIG     byte[3]
> define DATA        byte[4]
> define DELAY       byte[5]
> '--- LCD-I2C INTERFACE  -------
> define OUTBYTE     byte[6]
> define LCD         byte[7]
> define BUF         byte[8]
> '------------------------------
> '--------------------------
> '--- DS1631 COMMANDS ------
> '--------------------------
> define CONVERT          &H51
> define STOP_CONVERT     &H22
> define READ_TEMP        &HAA
> define CONFIG           &HAC
> define RESET            &H54
> '---------------------------
>
> 'SDA = on : SCL =on
> print"#ON_LCD#";
> print"#INIT#";
> print"READ DS1631 TEMP";
> print"#OFF#";
>
>
> gosub lcd_init 'initialisation LCD
> 'goto show'**********************************************
> '-----------------------------------------------------
>
> gosub DS1631RESET
> DATA = 1 : gosub DS1631WRITE_STATUS  ' ONE SHOT MODE
> pause 10
> data = 0
>
> '-------------------------------------------------------------
> '-----            LOOP READING TEMPERATURE                 ---
> '-------------------------------------------------------------
> #LOOP
> gosub DS1631CONVERT
> #WAIT_READY
> gosub DS1631GET_STATUS
> if (DATA and &H80)=0 then goto WAIT_READY
> gosub DS1631GET_TEMP
> TEMP=TEMP SHR 7
> if (TEMP and &H0100) = &H0100 then TEMP=(TEMP or &HFE00)
>
> 'print temp
> '-------------------------------------------------------------
> '-----            AFFICHAGE TEMPERATURE                 ---
> '-------------------------------------------------------------
> #show
> gosub LCD_CLR
>    'temp=100
>
>   TEMP = TEMP / 2
>   LCD = 1 : gosub L1_GOTOPOS    'LINE 1 POS 1
>   LCD = 84   : gosub WCAR 'T
>   LCD = 101  : gosub WCAR 'e
>   LCD = 109  : gosub WCAR 'm
>   LCD = 112  : gosub WCAR 'p
>   LCD = 46   : gosub WCAR '.
>   LCD = 32   : gosub WCAR 'space
>  
>   LCD = (Temp / 100) + 48 : gosub WCAR
>   LCD = ((Temp - ((Temp / 100) * 100)) / 10) + 48 : gosub WCAR
>   LCD = (Temp - ((Temp / 10) * 10)) + 48 : gosub WCAR
>   LCD = &H2E : gosub WCAR   '.
>
>   LCD = ((TEMPLO and 1)*5) + 48 : gosub WCAR
>
>   LCD = 223 : gosub WCAR '°
>   LCD = 67 : gosub WCAR 'C
>   LCD = 32 : gosub WCAR 'space
>
> Pause 20
> goto LOOP
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
>
>
>
>
>
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
> 'IIIII             DS1631  DRIVER                 III
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
>
> '------------------   DS1631 RESET  ------------------
> #DS1631RESET
> print"#ON_IIC#";"#START#";:put DS1631:put RESET:print"#STOP#";"#OFF#";
> goto IIC_STATUS
> '------------------   DS1631 CONVERT ------------------
> #DS1631CONVERT
> print"#ON_IIC#";"#START#";:put DS1631:put CONVERT:print"#STOP#";"#OFF#";
> goto IIC_STATUS
> '----------------- GET DS1631 STATUS -----------------
> #DS1631GET_STATUS
> print"#ON_IIC#";"#START#";:put DS1631:put CONFIG:print"#STOP#";"#OFF#";
> print"#ON_IIC#";"#START#";:put DS1631+1:get DATA:print"#STOP#";"#OFF#";
> goto IIC_STATUS
> '----------------- WRITE DS1631 STATUS -----------------
> #DS1631WRITE_STATUS
> print"#ON_IIC#";"#START#";:put DS1631:put CONFIG:put DATA:print"#STOP#";"#OFF#";
> goto IIC_STATUS
> '----------------- GET DS1631 TEMPERATURE -----------------
> #DS1631GET_TEMP
> print"#ON_IIC#";"#START#";:put DS1631:put READ_TEMP:print"#STOP#";"#OFF#";
> print"#ON_IIC#";"#START#";:put DS1631+1:get TEMPHI:get TEMPLO:print"#STOP#";"#OFF#";
> goto IIC_STATUS
> '-----------------------------------------------------
> '----- CONFIG REGISTER ABFRAGE UND ERROR CLEAR -------
> '-----------------------------------------------------
> #IIC_STATUS
> print"#ON_CONFIG#";        'UMLEITUNG ZUM CONFIG MODULE
> get SCONFIG                 'CONFIG REGISTER LESEN
> put (SCONFIG and &B10111111)'IIC ERROR FLAG IN CONFIG LÖSCHEN
> print"#OFF#";
> if (SCONFIG and &B01000000)>0 then Led=on else Led=off
> return
> '-----------------------------------------------------
>
>
>
>
>
> '-------------------------------------------------------
> '--- PCF 8574 LCD DRIVER AT ADDR 7 / EXT BYTEPORT 10 ---
> '-------------------------------------------------------
> #LCD_INIT
> EXTPORT=0
> LCD=&H38:gosub LCD_WRITECMD
> EXTPORT= &B00000010:EXTPORT= &B01000010:EXTPORT= &B00000010:
> LCD=&H28:gosub LCD_WRITECMD:LCD=&H0C:gosub LCD_WRITECMD
> #LCD_CLR
> LCD=&H02:gosub LCD_WRITECMD:LCD=&H01:gosub LCD_WRITECMD:pause 5:return
> #L1_GOTOPOS
> LCD=LCD +&H7F:goto LCD_WRITECMD
> #L2_GOTOPOS
> LCD=LCD +&HBF:goto LCD_WRITECMD
> #LCD_WRITECMD
> BUF = off:goto LCD_WRITE
> #WCAR
> BUF = &B00100000
> #LCD_WRITE
> '--------- ------WRITE HI NIBBLE ------------------------
> OUTBYTE=BUF or (LCD shr 4)
> EXTPORT=OUTBYTE or &B01000000:EXTPORT=OUTBYTE and &B10111111
> '--------------- WRITE LO NIBBLE ------------------------
> OUTBYTE=BUF or (LCD and &H0F)
> EXTPORT=OUTBYTE or &B01000000:EXTPORT=OUTBYTE and &B10111111
> '--------------- SOME LCDs NEED SOME DELAY HERE ---------
> FOR DELAY=0 TO 255
> NEXT
> return
> '-------------------------------------------------------
>

Many thanks for your help. Works fine. Daniel

 Antwort schreiben

Bisherige Antworten: