Hallo,

ich habe folgendes Problem. Ich möchte 2 MEGA8 mit Hilfe des I2C-Busses miteinander koppeln um Daten (z.Z erstmal 1 Byte) vom Master zum Slave zu übertragen. Ich habe mir die Slave-Library (von MCS) gekauft. Bei der Anwendung habe ich mich genau an die Doku gehalten, bzw. habe hier im Forum alle Hinweise dazu gelesen. Trotzdem kann ich den Slave nicht dazu bewegen Daten vom Master zu empfangen und in Abh. vom Empfangswert eine LED einzuschalten.

Hier der Code:
Slave:

Code:
' Testprogramm 2 zur Nutzung eines MEGA8 als I2C-Slave
'
' I2C Port am Slave MEGA8:     SDA = Portd2 (INT0)
'                              SCL = Portd4 (T0)
'


$regfile = "m8def.dat"                                      ' MC-Definitionen laden
$crystal = 1000000                                          ' 1Mhz int. Quarzfrequenz
$baud = 9600

Dim A As Byte
Dim B As Byte
Dim Bfake As Byte

Config I2cslave = &B01000000

Config Portc.3 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portc.0 = Output
Config Portc.1 = Output

Led0 Alias Portb.0
Led1 Alias Portb.1
Led2 Alias Portb.2
Led3 Alias Portc.0
Led4 Alias Portc.1

Portc.3 = 1                                                 ' LED-Katode aktivieren

Do

Led0 = Not Led0                                             ' Blinkindikator

If Bfake = &H01 Then
Led1 = 1
Else
Led1 = 0
End If

If Bfake = &H02 Then
Led2 = 1
Else
Led2 = 0
End If

Waitms 500

Loop


I2c_master_has_data:
  'when your code is short, you need to put in a waitms statement
  'Take in mind that during this routine, a wait state is active and the master will wait
  'After the return, the waitstate is ended

  Waitms 1
  Bfake = _a1                                               ' this is not needed but it shows how you can store _A1 in a byte
                                                  'assign _A1 (R16)
Return


I2c_master_needs_data:

  Waitms 1
  _a1 = &B11111111                                          ' Get input from portB and assign it

Return
Master:

Code:
' Testprogramm 2 zur Nutzung eines MEGA8 als I2C-Master
' in Zus. mit "M8_I2C_slave_2.bas"

'
' I2C Port am Master MEGA8:     SDA = Port.C4   --------> PD4 (T0)
'                               SCL = Port.C5   --------> PD2 (INT0)
'


$regfile = "m8def.dat"                                      ' MC-Definitionen laden
$crystal = 1000000                                          ' 1Mhz int. Quarzfrequenz
$baud = 4800


Config Sda = Portc.4
Config Scl = Portc.5

Config I2cdelay = 10

Do

Print "Wert: 01 senden"

I2csend &H40 , &H01

Waitms 500

Print "Wert: 02 senden"

I2csend &H40 , &H02

Waitms 500

Loop
Die beiden Leitungen (SCL &SDA) habe ich am Slave mit je einem PullUp 4k7 abgeschlossen. Wenn ich SCL & SDA nicht anschließe blinkt die Indikator-LED (meine Hauptschleife läuft also). Sind sie jedoch angeschlossen sind und der Master sendet munter seine Daten (Kontrolle via Terminal-Prog.) friert der Slave quasi ein (LED leuchtet dauernd, oder ist aus). Habe seitens des Masters auch schon die I2C-Befehle: I2INIT, I2CSTART, I2CWBYTE, I2CSTOP verwendet - funktionierte aber auch nicht.

Hat jemand eine Idee, woran das liegen kann?

Gruss,
Ulf