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 peter - 11.07.2006 20:00)
 Als Antwort auf Re: DS1621 unter CCBasic von DIE HARD - 28.12.2004 15:15
peter nutzt:  CC1-Unit V1.1
>
>
> > Nun muß der DS1621 nur noch an der Micro laufen.....
> >
> >
> > mfg
> >
> > Stefan
>
> Hallo
> Aha, auch da kann ich was für dich tun.
> Das Programm und die LIB für den DS1631. Die anderen Programme aus der LIB findest du auf
> der Support-Seite
> Auch hier habe ich den neg. Temperaturbereich noch nicht getestet.
> (mein Kühlschrank geht zurzeit nicht)
> ciao......
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
> 'II       BASIC++ DEMO ZUM BASIC-COMPUTER UNIT MICRO               II
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
> '--------------------------------------------------------------------
> ' Beispiel zum BASIC-COMPUTER    mit dem Programmer/Application-Board
> '--------------------------------------------------------------------
> ' ANWENDUNG:         TEMPERATUR DS1631 AM IIC-BUS ABFRAGEN
> '                    ANZEIGE AM IIC-BUS LCD
> '--------------------------------------------------------------------
> 'Dieses Beispiel benutzt das MICROMODUL das die IIC-BUS Ports auf
> 'Port 5/6 hat.
> '
> ' ersetzen Sie:  import "....\LIB\MICRO_IIC_GENERICX.BAS"
> '          mit:  import "....\LIB\MICRO_IIC_GENERIC.BAS" wenn Sie die
> '
> ' Ports 2/5 benutzen wollen, ändern Sie dann auch die Portzuweisung
> ' von SDA und SCL in diesem Programm        
> '---------------------------------------------------------------------
> ' Beispielprogramm:
> ' Das Programm schleift und zeigt die Temperatur am LCD an. Der Abfragezyklus
> ' wird von der Geschwindigkeit des IIC-BUS bestimmt und beträgt ca.3s
>
> ' Sie können die Demo benutzen und erweitern ohne die Details im Treiber
> ' näher zu kennen.
> '
> '
>
> '
> '------------------------------------------------------------------------
> OPTION CCMICRO
>
> '--------------------------
> '------ I/O PORTS ---------
> '--------------------------
> define SDA           port[5]
> define SCL           port[6]
> '--------------------------
> '---- SYSTEM MEMORY -------
> '--------------------------
> define TEMPHI       as byte
> define TEMPLO       as byte
> define HUNDERTER as byte
> define ZEHNER as byte
> define EINER as byte
> define DATABYTE as byte
> define COUNTER as byte
>
> const LCDADDR=01001110b' LCD ADRESSE
> const DS1631=158    'Adresse TEMPSENSOR
>
> import "....\LIB\MICRO_IIC_GENERICX.BAS"
> import "....\LIB\MICRO_IIC_PCF8574_IO.BAS"
> import "....\LIB\MICRO_IIC_LCD_DRIVE.BAS"
> import "....\LIB\MICRO_DS1631_GENERIC.BAS"
>
> '----------------------------------------------------
> '     SPLIT DATABYTE VALUE INTO DIGITS AND SHOW
> '----------------------------------------------------
> FUNCTION SHOW_DATA()
> HUNDERTER=DATABYTE/100
> ZEHNER=(DATABYTE MOD 100)/10
> EINER=DATABYTE-10*ZEHNER-100*HUNDERTER
> if HUNDERTER=0 then goto NH
> LCD_WRITE(LCDADDR,20h,HUNDERTER+30h)
> #NH
> if ZEHNER=0 then goto NZ
> LCD_WRITE(LCDADDR,20h,ZEHNER+30h)
> #NZ
> LCD_WRITE(LCDADDR,20h,EINER+30h)
> END FUNCTION
>
>
>
> '---------- IICBUS INIT ------------------------
> SDA=on
> SCL=on
> '----------------------------------------------
> pause 2
> LCD_INIT(LCDADDR)
> '-----------------------------------------------------
> DS1631RESET(DS1631)
> DS1631SET_STATUS(DS1631,1)
> '-------------------------------------------------------------
> '-----            LOOP READING TEMPERATURE                 ---
> '-------------------------------------------------------------
> #LOOP
> pause 5
> 'DS1631GET_STATUS(DS1631)
> '--------- GETTING TEMP IN TEMLO/HI --------------------------
> DS1631CONVERT(DS1631)
> DS1631WAIT_READY(DS1631)
> pause 10
> DS1631GET_TEMP(DS1631)
>
> TEMPLO=TEMPLO shr 7
> TEMPLO=((TEMPHI SHL 1)and FEh)or TEMPLO
> if TEMPHI > 127 then TEMPLO=(not TEMPLO)+1
> DATABYTE=TEMPLO/2
> 'databyte=temphi
> LINE1(LCDADDR,1)
> '--------- WRITING "TEMP:" ----------------------------------
> LCD_WRITE(LCDADDR,20h,54h)
> LCD_WRITE(LCDADDR,20h,45h)
> LCD_WRITE(LCDADDR,20h,4Dh)
> LCD_WRITE(LCDADDR,20h,50h)
> LCD_WRITE(LCDADDR,20h,3Ah)
> '--------- WRITING THE VALUE --------------------------------
> SHOW_DATA()
> LCD_WRITE(LCDADDR,20h,2Eh)
> if (TEMPLO and 1) > 0 then
> DATABYTE=35h
> ELSE
> DATABYTE=30h
> END IF
> LCD_WRITE(LCDADDR,20h,DATABYTE)
> goto LOOP
>
> IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
>
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
> 'III      BASIC++  DEMO ZUM BASIC-COMPUTER UNIT MICRO           IIIII
> 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
> '--------------------------------------------------------------------
> ' Beispiel zum BASIC-COMPUTER    mit dem Programmer/Application-Board
> '--------------------------------------------------------------------
> ' LIBRARY:                           COMMON DS1631 CONTROL ROUTINES
> '                                    
> '---------------------------------------------------------------------
> 'DS1631RESET(ADDR as byte)                    RESET
> 'DS1631CONVERT(ADDR as byte)                  START CONVERSION
> 'DS1631GET_STATUS(ADDR as byte)               READ STATUS REGISTER,RETURN BYTE
> 'DS1631SET_STATUS(ADDR as byte,DATA as byte)  WRITE STATUS REGISTER
> 'DS1631GET_TEMP(ADDR as byte)                 RETURN WORD WITH TEMP
> '-------------------------------------------------------------------
>
> '--------------------------
> '--- DS1631 COMMANDS ------
> '--------------------------
> const CONVERT=51h
> const STOP_CONVERT=22h
> const READ_TEMP=AAh
> const CONF=ACh
> const RESET=54h
>
> '-----------------------------------------------------
> '------------------   DS1631 RESET  ------------------
> '-----------------------------------------------------
> FUNCTION DS1631RESET(ADDR as byte)
> IICSTART
> IICSEND(ADDR)
> IICSEND(RESET)
> IICSTOP
> END FUNCTION
> '-----------------------------------------------------
> '------------------   DS1631 CONVERT  ----------------
> '-----------------------------------------------------
> FUNCTION DS1631CONVERT(ADDR as byte)
> IICSTART
> IICSEND(ADDR)
> IICSEND(CONVERT)
> IICSTOP
> END FUNCTION
> '-----------------------------------------------------
> '----------------- GET DS1631 STATUS -----------------
> '-----------------------------------------------------
> FUNCTION DS1631GET_STATUS(ADDR as byte)
> IICSTART
> IICSEND(ADDR)
> IICSEND(CONF)
> IICSTOP
>
> IICSTART
> IICSEND (ADDR+1)
> IICREAD
> IICSTOP
> END FUNCTION
> '-------------------------------------------------------
> '----------------- SET DS1631 STATUS -----------------
> '-------------------------------------------------------
> FUNCTION DS1631SET_STATUS(ADDR as byte,DATA as byte)
> IICSTART
> IICSEND (ADDR)
> IICSEND (CONF)
> IICSEND (DATA)
> IICSTOP
> END FUNCTION
> '-------------------------------------------------------
> '----------------- WAIT DS1631 READY   -----------------
> '-------------------------------------------------------
> FUNCTION DS1631WAIT_READY(ADDR as byte)
> #WT
> DS1631GET_STATUS(ADDR)
> if (DATABYTE and 80h) = 0 then goto WT
> END FUNCTION
> '-----------------------------------------------------
> '----------------- GET DS1631 TEMP -----------------
> '-----------------------------------------------------
> FUNCTION DS1631GET_TEMP(ADDR as byte)
> IICSTART
> IICSEND (ADDR)
> IICSEND (READ_TEMP)
> IICSTOP
>
> IICSTART
> IICSEND (ADDR+1)
> IICREAD
> TEMPHI=DATABYTE
> IICREAD
> TEMPLO=DATABYTE
> IICSTOP
>
> END FUNCTION
>
>
>
>

 Antwort schreiben

Bisherige Antworten: