INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> > > > 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 |