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:
Master: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
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.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
Hat jemand eine Idee, woran das liegen kann?
Gruss,
Ulf







Zitieren

Lesezeichen