TiRe
06.02.2010, 00:19
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:
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
$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
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:
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
$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
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
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