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 |