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:
Per Taste an PD4 und PD5 kann der Fehler provoziert werdenCode:$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







Zitieren
Lesezeichen