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