Hallo,

ich versuche den TWI-Code myTWI.lib von PicNick einzusetzten - leider nach einigen Stunden erfolglos.

Im ertsten Schritt soll einfach eine Multimasterumgebung eine Temperatursensor an Adresse 144 (&h90) auslesen.

In der klassischen Bascom-Variante sieht das so aus und funktioniert gut:
Code:
   I2cstart                                                 'repeated start
   I2cwbyte Commandbyte                                     'slave address (read)
   I2crbyte Hbyte , Ack                                     'read byte
   I2crbyte Lbyte , Ack
   I2cstop
bei PicNick's routine geht es bei mir aber nicht
Code:
$regfile = "m8def.dat"
$crystal = 8000000

$include "MyTWI.bas"

$baud = 38400

$hwstack = 64
$swstack = 64
$framesize = 64



Const Tmr_c_prescale = 64
Const Tmr_c_preload = 131
Const Tmr_c_divis = 250

Declare Sub Twi_show_state(byref State As Byte)


'-------------------------------------------------
'  fremde I2C Adresse   (als Master)
'-------------------------------------------------
Const Mn2_adr = &H90                                        '144


Dim Slv_byte As Byte                                        'sende Byte (irgendwas)

Dim Twi_mst_buff(24) As Byte                                'Buffer für Masterfunktionen
Dim Twi_slv_buff(24) As Byte                                'Buffer für Slavefunktionen


Waitms 500

Print : Print
Print "Multimaster 1.0a"
Print Version()

Dim Temp As Byte


      Twi_st_data = Varptr(twi_slv_buff(1))                 'datenbuffer senden


   Twi_mst_addr = Mn2_adr + 1                               'I2C adresse ZIEL (+R)
   Twi_mr_cntr = 2                                          ' wieviele Byte
   Twi_mr_data = Varptr(twi_mst_buff(1))                    ' empfangsbuffer
      Gosub Run_wait_master                                 ' auf gehts
   Wait 1
   Loop
End



'----------------------------------------
$include "Twi_show_state.bas"
'----------------------------------------

Run_wait_master:
      Gosub Mst_start                                       'aufruf
      Select Case Twi_mst_flag                              'ergebnis ?
      Case Twi_m_sent:                                      'gesendet
               Print "<<<<<<MASTER sent:" ;
               Print Hex(twi_mst_addr) ; " ";
               For Temp = 1 To Twi_mt_cntr
                     Print Hex(twi_mst_buff(temp));
               Next
               Print
               Twi_mst_flag = 0
      Case Twi_m_recv:                                      'geholt
                Print ">>>>>>MASTER read:" ;
               Print Hex(twi_mst_addr) ; " ";
               For Temp = 1 To Twi_mr_cntr
                     Print Hex(twi_mst_buff(temp));
               Next
               Print
               Twi_mst_flag = 0
      Case Else:                                            'irgendein Problem
                'Print Chr(7) ;
                Print Hex(twi_mst_addr) ; " ";
                Call Twi_show_state(twi_mst_flag)
      End Select
   Return
Am Terminal bekomme ich nur die Meldung

91 03 M Timeout

Ich denke dass ich einen kleinen aber entscheidenden Fehler mache - aber welchen??


Danke und Gruß
TiRe