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.2/2.0 (von DIE HARD - 28.12.2004 15:15)
 Als Antwort auf Re: DS1621 unter CCBasic von Stefan Süßmann - 28.12.2004 14:30


> 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:

Re: DS1621 unter CCBasic (von peter - 11.07.2006 20:00)
Re: DS1621 unter CCBasic (von Stefan Süßmann - 28.12.2004 15:45)