Hallo alle Zusammen,
Nachdem ich nun schon seit ein paar Tagen dieses Forum nach einer Lösung durchforste, diese aber nicht finde muß ich hier meine Frage
loswerden:
Mein Master ist ein Mega128, mit dem habe ich eigentlich kein Problem,
dieser sendet brav seine I2C Kommandos wie ich mit dem Oszi sehen
kann.
Der Slave ist das Problem, ich hab die Slave Library von MCS gekauft,
und auf einen Tiny13 ein Programm geschrieben, wenn ich das Programm
auf dem Master starte funktioniert der erste Slave einmal, danach sind alle Slaves tot, der I2C-Bus aber nicht, der sendet brav weiter, wie oben schon erwähnt. Der Slave muß auch nur Daten empfangen, also keine zurück senden.
Nun ein paar Code Schnipsel:
Master:
Slave1:Code:$regfile = "M128def.dat"
$crystal = 2000000
$lib "i2c_twi.lbx"
Config Scl = Portd.0
Config Sda = Portd.1
Config Twi = 4000
I2cinit
Ddra = &B0000000
Porta = &B11111111
Ddrf = &B11111111
Dim Poweron As Bit
Dim S As Byte
Declare Sub An
Declare Sub Prg1
Do
Debounce Pina.0 , 0 , An , Sub
Debounce Pina.1 , 0 , Prg1 , Sub
Loop
An:
Toggle Poweron
If Poweron = 1 Then
Portf.0 = 1
Else
Portf.0 = 0
End If
Return
Prg1:
If Poweron = 1 Then
Portf.1 = 1
S = 5
Waitms 2
I2cstart
Waitms 20
I2cwbyte &H0A 'Motor1
Waitms 20
I2cwbyte S
Waitms 20
I2cstop
Waitms 12000
I2cstart
Waitms 20
I2cwbyte &H0E 'Motor3
Waitms 20
I2cwbyte S
Waitms 20
I2cstop
Waitms 12000
Goto Prg1
Else
Portf.1 = 0
Return
End If
End
bitte Code-Tags verwenden (PicNick)Code:$regfile = "attiny13.dat"
$crystal = 9600000
Config Pinb.3 = Output
Config Pinb.4 = Input
Config I2cslave = &B00001010 , Int = Int0 , Timer = Timer0
Dim Bfake As Byte
Declare Sub Stop1
Do
If Bfake = 5 Then
Portb.3 = 1
Waitms 3000
Goto Stop1
Else
Loop
End If
Stop1:
If Pinb.4 = 1 Then
Goto Stop1
Else
Waitms 50
Portb.3 = 0
Bfake = 0
End If
Return
I2c_master_has_data:
Waitms 10
Bfake = _a1
Return