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: DS1621 unter CCBasic Kategorie: C-Control I V1.1 (von pasch - 8.06.2006 14:08)
 Als Antwort auf Re: DS1621 unter CCBasic von DIE HARD - 25.12.2004 20:03
>
> > 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

Bisherige Antworten:

Re: DS1621 unter CCBasic (von ManfredW - 8.06.2006 17:19)