Hallo,
den Fehler kann ich tatsächlich am MSB festmachen: Belieb viele Bytes mit MSB=0 => kein Problem.
Auch mit einen anderen ATMega ist der Effekt noch vorhanden
Ich habe nicht erwähnt (oder vernachlässigt) dass ich noch vor dem Ziel-Slave einen Buffer in Form PCA9515 hängen habe. Das Problem bleibt bestehen, das Aussehen ändert sich: Nach einem ACK geht der Slave auf SCK=1 (??), MSB=1 liegt an (=ungültiger Datenwechsel währen CLK=1 ist), beim nächsten Clock merkts der Slave offensichtlich und zieht den Clock runter.
Momentan kann ich den Fehler bei AVR auf AVR nachvollziehen, indem ich zwischen dem Senden des Commandworts und des ersten Datenbytes eine Delay von 1 ms einbaue => somit gleiches Fehlerbild wie beim PC-Interface, also wenn MSB=1 dann Fehler! Wenn das mal nicht kurios ist!
Der Mastercode sieht dann so aus:
Code:
$regfile = "M8def.dat" ' the used chip
$crystal = 8e6 ' frequency used
$baud = 9600
Config Sda = Portc.4
Config Scl = Portc.5
Config Pind.4 = Input
Config Pind.5 = Input
$lib "i2c_twi.lbx" ' Für Hardware TWI
Waitms 100
Config Twi = 100000 ' setzt die TWI-Register
Twsr = 0 ' Status reset
Twbr = 220 ' Bus Geschwindigkeit 400kHz @ 16MHz
Twcr = &B00000100 ' TWI Modul aktivieren, nur TWEN
Dim Nr As Byte ' Servo-Nr
Dim Position As Byte ' Position
Do
I2cstart
I2cwbyte &H64
'I2cwbyte &H53 ' "S" Kennzeichen für Servo ansteuern
If Pind.4 = 0 Then
Waitms 1
End If
If Pind.5 = 0 Then
I2cwbyte &HAA 'MSB =1
Else
I2cwbyte &H53 'MSB=0
End If
'I2cwbyte &HBB
I2cstop
Wait 1
Loop
End
Per Taste an PD4 und PD5 kann der Fehler provoziert werden
Lesezeichen