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







Zitieren

Lesezeichen