Hi,

und nun noch ein kleines Demoprogramm dazu:
Code:
'**********************************************************

'Programm            :
'By                  : mat-sche
'Compiler            : BASCOM-AVR  1.11.9.3
'Hardware            : DS1820 an Port d.4
'
'                      LCD-Display 4x20 an PortC
'                      max1069 an Hardware TWI
'Chip type           : MEGA32
'Date                : 04.03.2010
'**********************************************************

$regfile = "m32def.dat"
$crystal = 14745600



$baud = 9600
$lib "i2c_twi.lbx"
$hwstack = 64
$swstack = 64
$framesize = 64
'$sim


'-------------------------------------------------------------------------------   2x16 LCD Display an Port c =>Conector
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 4
Config Lcdbus = 4
Initlcd
Cursor Off
Cls


Ddrd = &B00010000                                                               'pull up einschalten für Taster
Ddrb = &B1000000
Dim Gsm As Bit
Led Alias Portb.7
Dim Rs232_flash As Byte
Dim Rs232_str As Byte
'-------------------------------------------------------------------------------   Variablen
Config Twi = 400000                                                             ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100
Config Scl = Portc.0                                                            'Is serial clock SCL
Config Sda = Portc.1
Const Max1069wr = &B01101110                                                    'DS1624 Sensor write
Const Max1069rd = &B01101111
Dim E_ah As Byte                                                                'höherwertiges Byte der SpeicherAdresse (Adresse=Word)
Dim E_al As Byte                                                                'niederwertiges Byte der SpeicherAdresse (Adresse=Word)                                                         'Is serial data SDA
Dim E_addr As Word                                                              'SpeicherAdresse EEprom
Dim E_dat_r As Byte
Dim Spannung1 As Byte , Spannung2 As Byte , Spannung3 As Word , Spannung4 As Single
'Dim Storespannung(2) As Byte At Spannung Overlay                                'Maske: weise die 4Byte aus dem Single(Temperature) dem
Dim Bita As Bit
Dim Avgschleife1 As Byte
Dim Avg1_ges_temp As Long , Avg_1 As Long


'-------------------------------------------------------------------------------


 Locate 1 , 1
   Lcd "start"
Waitms 100
Cls
Do

'******************************************************************************* 'Automatisches Flashen über RS232
Rs232_flash = Ischarwaiting()
If Rs232_flash = 1 Then                                                         'wurde was über RS232 empfangen?
   Rs232_str = Inkey()                                                          'Empfangspuffer auslesen
   If Rs232_str = 123 Then                                                      'vom MCS-Programmer geschickte "123" empfangen?
   Goto &HF800                                                                  'Sprungadresse zum Startbereich des Bootloaders
   End If
End If
     Led = 1                                                                    'Pin wird auf High, also 5V geschaltet
     Waitms 100
     Print "LED"
     Led = 0                                                                    'Pin wird auf Low, also 0V geschaltet
     Waitms 100

 I2cstart
    I2cwbyte Max1069rd
    I2crbyte Spannung1 , Ack                                                    ' acknowledge => weiteres Datenbit wird erwartet
    I2crbyte Spannung2 , Nack                                                   ' not acknowledge => abschluss der Übertragung
    I2cstop

    'Spannung3 = Spannung1 * 256
    'Spannung3 = Spannung3 + Spannung2
    'Shift Spannung3 , Right , 2
    Spannung3 = Makeint(spannung2 , Spannung1)                                  ' high und lowbyte zur worvariable zusammensetzen

    Avg1_ges_temp = Avg1_ges_temp + Spannung3                                   ' 2 fach oversampling
     Incr Avgschleife1
     If Avgschleife1 = 2 Then
    Spannung4 = Avg1_ges_temp / 2
     Avgschleife1 = 0
     Avg1_ges_temp = 0
    Spannung4 = Spannung4 * 4.096
    Spannung4 = Spannung4 / 16384
    Locate 1 , 1 : Lcd "Sp4= " ; Spannung4
    Locate 2 , 1 : Lcd "I2c err= " ; Err
    End If
    'Waitms 300

'******************************************************************************* CONTINUOUS CONVERSIONS


    If Bita = 1 Then
      Cls
    I2cstart
    I2cwbyte Max1069rd
    I2crbyte Spannung1 , Ack
    I2crbyte Spannung2 , Ack

    I2crbyte Spannung1 , Ack
    I2crbyte Spannung2 , Ack

     I2crbyte Spannung1 , Ack
    I2crbyte Spannung2 , Nack
    I2cstop

    Spannung3 = Makeint(spannung2 , Spannung1)
    Spannung4 = Spannung3 * 4.096
    Spannung4 = Spannung4 / 16384
    Locate 1 , 1 : Lcd "Sp4= " ; Spannung4
    Locate 2 , 1 : Lcd "I2c err= " ; Err


     Locate 3 , 1 : Lcd "I2c err= " ; Err

 End If
'-------------------------------------------------------------------------------   Taster für Kommado senden an die verschiedenen Slaves
Debounce Pina.7 , 1 , Taster1 , Sub
Debounce Pina.6 , 1 , Taster2 , Sub
Debounce Pina.5 , 1 , Taster3 , Sub
Debounce Pina.4 , 1 , Taster4 , Sub
Debounce Pina.3 , 1 , Taster5 , Sub
 'Waitms 200



Loop
End


'*******************************************************************************   SUBS

   Taster1:
    Cls
    I2cstart
    I2cwbyte Max1069rd
    I2crbyte Spannung1 , Ack
    I2crbyte Spannung2 , Nack
    I2cstop

    Spannung3 = Spannung1 * 256
    Spannung3 = Spannung3 + Spannung2
    Shift Spannung3 , Right , 2
    Spannung4 = Spannung3 * 4.096
    Spannung4 = Spannung4 / 16384
    Locate 1 , 1 : Lcd "Sp4= " ; Spannung4

   Return

  Taster2:
  Toggle Bita
  Locate 4 , 1
   Lcd "Taster2"
  Return

  Taster3:
  'Timervorgabe = 63500
  Locate 1 , 1
   Lcd "Taster3"
  Return

  Taster4:
  Enable Timer1
  'Timervorgabe = 64300
  Locate 1 , 1
   Lcd "Taster4"
  Return

  Taster5:
 Gsm = 1
  Locate 2 , 1
   Lcd "Taster5"
   Return
Gruß MAT