
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Hallo, > > hat es inzwischen jemand geschafft, einen DS1621 unter CCBasic zum Laufen zu bringen? > Mir gelingt es jedenfalls nicht. > Des Sensor wird als Device gefunden und das war es. Ich bekomme keine Daten oder das Config-Register ausgelesen. > > mfg > > Stefan > > Ich habe was für den 1631. 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 'IIIIIII DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 (by DIE HARD) IIIII 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII '-------------------------------------------------------------------- ' Beispiel zum BASIC-COMPUTER mit dem Programmer/Application-Board '-------------------------------------------------------------------- ' ANWENDUNG: IIC_BUS - TEMPERATURSENSOR (xxxxxx) ' TEMPERATUR DS1631 AM IIC-BUS-BUS ABFRAGEN ' '-------------------------------------------------------------------- ' Eine kleine DEMO welchedie TEMPERATUR eines DS1631 am IIC-BUS abfragt ' Beschreibung: ' Der DS1631 wird angesprochen indem zunächst die START-Bedingung und ' danach die ADRESSE zusammen mit dem READ/WRITE-Bit gesendet wird. ' Die Adresse besteht aus einem festen, nicht veränderbaren Anteil und ' einem vom Benutzer wählbaren Teil (drei Jumper). Das letzte Bit ' legt fest ob eine READ (Eingabe) oder WRITE (Ausgabe) über den PCF 8574 ' erfolgt ' Es ist nur die Schreibadresse als Konstante definiert, die Leseadresse ' berechnet der Treiber zu Schreibadresse+1 ' In diesem Beispiel hat der DS1631 die Adresse 7 (alle Bits auf HI) ' d.h. alle Jumper müssen abgezogen sein. ' Damit ergibt sich für eine READ-Operation folgender Wert: ' ' 1 0 0 1 1 1 1 1 READ-Operation ADR 159 ' I------I-----I-I ' FIX ADR ADR R/W ' ' Für eine WRITE-Operation ist das letzte Bit LO und es ergibt sich ' folgender Wert: ' ' 1 0 0 1 1 1 1 0 WRITE-Operation ADR 158 ' I------I-----I-I ' FIX ADR ADR R/W '----------------------------------------------------------------------- 'Programm: 'Das Unterprogramm DS1631GET_TEMP liefert in TEMP einen 9 Bit-Wert, 'der allerdings linksbündig verschoben ist. Für eine richtige Anzeige 'ist eine entsprechende Korrektur notwendig. Diese 9 Bit liefern eine 'Auflösung von 0.5 Grad. 'Das Programm liset den DS 1631 im "ONE SHOT" Modus, d.h. der Sensor ist 'nur während der Temperaturwandlung/Übertragung Strom (1mA). Sonst beträgt 'die Stromaufnahme des Sensor selbst < 1uA 'Die Demo ist im neg. Temperaturbereich nicht getestet. '------------------------------------------------------------------------ '-------------------------- '------ I/O PORTS --------- '-------------------------- define LIGHT port[16] '-------------------------- '---- SYSTEM MEMORY ------- '-------------------------- define TEMP word[1] define TEMPHI byte[1] define TEMPLO byte[2] define SCONFIG byte[3] define DATA byte[4] '-------------------------- define DS1631 158 'IIC ADDRESS $9E '-------------------------- '--- DS1631 COMMANDS ------ '-------------------------- define CONVERT &H51 define STOP_CONVERT &H22 define READ_TEMP &HAA define CONFIG &HAC define RESET &H54 '--------------------------- #INIT LIGHT=off '----------- EINSCHALT MELDUNG ------------------------ print"#ON_LCD#"; print"#INIT#"; print"READ DS1631 TEMP"; print"#OFF#"; '----------------------------------------------------- '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 if TEMPHI>128 then goto NEGTEMP TEMP=TEMP shr 7:goto show #NEGTEMP TEMP=(TEMP shr 7)or &HFE #show print"#ON_LCD#";"#L201#";"TEMP: ";TEMP/2;".";(TEMPLO and 1)*5;" C ";"#OFF#"; 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 LIGHT=on else LIGHT=off return |
| Antwort schreiben |