PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit myTWI.lib



TiRe
05.02.2010, 23: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

mat-sche
06.02.2010, 12:57
Hi!

suche mal hier im Netz nach meinen Fragen, hatte auch Probleme mit der Mutimasterumgebung. Darin sind alle Schlüssel zum Erfolg.