
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Thank you Its working now I have learn a lot and now I can go on with it Hans > Hello, > Thank you very much for warning me about this! > The problem was not with the variables temp_in or temp_out but with the way they are displayed. > I guess I missed this while testing my example. > > Here is the corrected version, v1.4 > Let me know how it works out. > Greetings, > H.J. Windt > > '* 2xDS1621 v1.4*' > '**************** I/O PORTS ****************' > define lcd_backlight_off port[16] > '*******************************************' > '**************** VARIABLES ****************' > define configuration byte[1] > define iic_nack bit[7] > define ds1621_in_error bit[9] > define ds1621_out_error bit[10] > define iic_nack_count byte[3] > define iic_byte byte[4] > define ds1621_status byte[5] > define loop byte[6] > define temp_in word[4] > define temp_out word[5] > '*******************************************' > '**************** CONSTANTS ****************' > define ds1621_in_iic_address &h90 > define ds1621_out_iic_address &h92 > '*******************************************' > '****************** SETUP ******************' > put 0:print"#ON_LCD#";:print"#INIT#";:print"#CLR#";:lcd_backlight_off = 0:print"#OFF#"; > '*******************************************' > '***************** PROGRAM *****************' > #start > gosub get_ds1621_temperature > > print"#ON_LCD#"; > > print"#L101#";:print"T in = "; > if temp_in < 0 then print"-"; > print abs(temp_in/10);",";abs(temp_in-temp_in/10*10);:put&hdf:print"C "; > print"#L108#";:if ds1621_in_error <> 0 then print"IIC Error "; > > print"#L201#";:print"Tout = "; > if temp_out < 0 then print"-"; > print abs(temp_out/10);",";abs(temp_out-temp_out/10*10);:put&hdf:print"C "; > print"#L208#";:if ds1621_out_error <> 0 then print"IIC Error "; > > print"#OFF#"; > goto start > '*******************************************' > '*************** SUBROUTINES ***************' > #get_ds1621_temperature > ds1621_in_error = 0 > ds1621_out_error = 0 > for loop = 1 to 2 > #ds1621_start_convert > print"#ON_IIC#"; > print"#START#"; > gosub ds1621_write_address > put &hee > print"#STOP#"; > print"#OFF#"; > gosub check_iic_nack > if iic_nack_count > 6 then goto no_ack_from_ds1621 > if iic_nack then goto ds1621_start_convert > #ds1621_check_conversion_done > print"#ON_IIC#"; > print"#START#"; > gosub ds1621_write_address > put &hac > print"#STOP#"; > print"#OFF#"; > gosub check_iic_nack > if iic_nack then goto ds1621_pass_check_conversion_done > print"#ON_IIC#"; > print"#START#"; > gosub ds1621_read_address > get ds1621_status > print"#STOP#"; > print"#OFF#"; > gosub check_iic_nack > #ds1621_pass_check_conversion_done > if iic_nack_count > 9 then goto no_ack_from_ds1621 > if iic_nack then goto ds1621_check_conversion_done > if (ds1621_status and 1) = 1 then if (ds1621_status and 128) = 0 then goto ds1621_check_conversion_done > #ds1621_read_temp > print"#ON_IIC#"; > print"#START#"; > gosub ds1621_write_address > put &haa > print"#STOP#"; > print"#OFF#"; > gosub check_iic_nack > if iic_nack then goto pass_ds1621_read_temp > print"#ON_IIC#"; > print"#START#"; > gosub ds1621_read_address > get iic_byte > if loop = 1 then if iic_byte > 127 then temp_in = (&hff00 + iic_byte) * 10 else temp_in = iic_byte * 10 > if loop = 2 then if iic_byte > 127 then temp_out = (&hff00 + iic_byte) * 10 else temp_out = iic_byte * 10 > get iic_byte > if loop = 1 then if (iic_byte and 128) = 128 then temp_in = temp_in + 5 > if loop = 2 then if (iic_byte and 128) = 128 then temp_out = temp_out + 5 > print"#STOP#"; > print"#OFF#"; > gosub check_iic_nack > #pass_ds1621_read_temp > if iic_nack_count > 9 then goto no_ack_from_ds1621 > if iic_nack then goto ds1621_read_temp > if temp_in = -600 then goto ds1621_start_convert > if temp_out = -600 then goto ds1621_start_convert > #pass_get_ds1621_temperature > next > return > > #ds1621_write_address > if loop = 1 then put ds1621_in_iic_address > if loop = 2 then put ds1621_out_iic_address > return > > #ds1621_read_address > if loop = 1 then put ds1621_in_iic_address + 1 > if loop = 2 then put ds1621_out_iic_address + 1 > return > > #check_iic_nack > print"#ON_CONFIG#"; > get configuration > if not iic_nack then goto pass_iic_nack_clear > iic_nack = 0 > put configuration > iic_nack = 1 > iic_nack_count = iic_nack_count + 1 > print"#OFF#"; > return > #pass_iic_nack_clear > iic_nack_count = 0 > print"#OFF#"; > return > '*******************************************' > '******* INITIALIZATION SUBROUTINES ********' > > '*******************************************' > '****************** DATA *******************' > > '*******************************************' > '************* ERROR MESSAGES **************' > #no_ack_from_ds1621 > beep 1,1,1:beep 10,1,1:beep 1,1,1:beep 10,1,1 > if loop = 1 then ds1621_in_error = 1 > if loop = 2 then ds1621_out_error = 1 > goto pass_get_ds1621_temperature > '*******************************************' |
| Antwort schreiben |