Zitat Zitat von peter02
Kannst Du deutsch lesen?
Dein Programm klappt es super!!!!!!!

Ich habe es gerade auf meinen ATMEGA32 übertragen. Die Temperatur wird z.B. als 23.56 C angezeigt. Jetzt ist die Anzeige schon zu genau, die letzte Stelle verändert sich recht schnell.

Kann man die Anzeige etwas "dämpfen"?

Ich sehe auch, dass die Hunderterstelle sich immer in Schritten von 6 oder 7 verändert. Das heißt z.B. 23.81 dann 23.87 dann 23.93 beim erwärmen.

Gruß Peter
Hello,
I’m glad you like it!
I have made a few small changes and now the increments are 0,1°C.
Try it out and let me know if it Works.
Greetings,
Windt H.J.

Code:
'***************************************'
'* WINDT SYSTEMS                       *'
'* DS1621 v1.2 for 89S8252 Flash Board *'
'* 2006 / H.J. WINDT                   *'
'***************************************'
'----------------------------------------------------------------------------------------------------'
'This software for the 89S8252 will read the DS1621 8 bit Temperature, Counter And Slope and'
'display the data on a terminal as T = xxx , x°C in 0,1°C increments'
'The temperature is read as -550 to 1250, the last digit is actually the digit behind the comma,'
'example 1: temp_c = -15 is actually -1,5°C'
'example 2: temp_c = 250 is actually 25,0°C.
'Communication with the DS1621 is via the I2C bus.'
'Feel free to use and share this software!'
'DS1621 -->> DALLAS SEMICONDUCTOR Digital Thermometer and Thermostat'
'----------------------------------------------------------------------------------------------------'
'********************************* PORTS *********************************'
Config Sda = P1.0
Config Scl = P1.1
'*************************************************************************'
'******************************* VARIABLES *******************************'
Dim I2c_byte As Byte
Dim Loops1 As Byte
Dim Count As Byte
Dim Slope As Byte
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp_c As Integer
'*************************************************************************'
'******************************* CONSTANTS *******************************'
Const Ds1621_i2c_address = &H0
Const Ds1621_i2c_r_address = &H1
'*************************************************************************'
'********************************* SETUP *********************************'
Config I2cdelay = 800
'*************************************************************************'
'******************************** PROGRAM ********************************'
Temp_c_loop:
Gosub Get_ds1621_temperature

Temp1 = Temp_c / 10
Temp1 = Abs(temp1)

Temp2 = Temp_c / 10
Temp2 = Temp2 * 10
Temp2 = Temp_c - Temp2
Temp2 = Abs(temp2)

Print "T = ";
If Temp_c < 0 Then Print "-";
Print Temp1 ; "," ; Temp2 ; "°C"

Goto Temp_c_loop
'*************************************************************************'
'****************************** SUBROUTINES ******************************'
Get_ds1621_temperature:

For Loops1 = 1 To 2
Ds1621_start_convert:
I2cstart
I2cwbyte Ds1621_i2c_address
I2cwbyte &HEE
I2cstop

Ds1621_check_conversion_done:
I2cstart
I2cwbyte Ds1621_i2c_address
I2cwbyte &HAC
I2cstop
I2cstart
I2cwbyte Ds1621_i2c_r_address
I2crbyte I2c_byte , Nack
I2cstop
Temp1 = I2c_byte And 1
Temp2 = I2c_byte And 128
If Temp1 = 1 Then If Temp2 = 128 Then Goto Ds1621_check_conversion_done

Ds1621_read_temp:
I2cstart
I2cwbyte Ds1621_i2c_address
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte Ds1621_i2c_r_address

I2crbyte Temp_c , Nack
If Temp_c > 127 Then Temp_c = Temp_c + &HFF00
Temp_c = Temp_c * 100

Ds1621_read_count:
I2cstart
I2cwbyte Ds1621_i2c_address
I2cwbyte &HA8
I2cstop
I2cstart
I2cwbyte Ds1621_i2c_r_address
I2crbyte Count , Nack
I2cstop

Ds1621_read_slope:
I2cstart
I2cwbyte Ds1621_i2c_address
I2cwbyte &HA9
I2cstop
I2cstart
I2cwbyte Ds1621_i2c_r_address
I2crbyte Slope , Nack
I2cstop

Temp1 = Count * 100
Temp2 = Slope * 100

Temp2 = Temp2 - Temp1
Temp1 = Temp2 / Slope

Temp_c = Temp_c - 25
Temp_c = Temp_c + Temp1
Temp_c = Temp_c / 10

I2cstop
Next
Return
'*************************************************************************'
'********************************* DATA **********************************'

'*************************************************************************'