Hallo
um das I2C besser zu verstehen will ich zwei m16 verbinden und I2C über
die Hardware-TWI register steuern .
Der Master Transmitter sieht so aus:
ich weiß zwar nicht ob er geht aber soweit konnt ichs aus dem datasheet entnehmenCode:I2c_senden: Set Twcr.twen 'TWI-Hardware wird aktiviert Twbr = 72 'Bitrate auf 100Khz bei 16Mhz CPU und Prescaler =0 Twsr = 0 'Prescaler auf 0 Set Twcr.twsta 'TWI-Start wird erzeugt Bitwait Twcr.twint , Set 'wartet bis TWI-Start gesendet wurde 'Print "sende TWI Start" If Update_twistatus() = &H08 Then 'wenn start gesendet 'Print "Start erfolgreich" 'Print "sende SLA/W" Twdr = Slaveid And &B11111110 'SLA-W wird geladen Reset Twcr.twsta Set Twcr.twint 'Twint wird gelöscht Bitwait Twcr.twint , Set 'wartet bis Hardware fertig If Update_twistatus() = &H18 Then 'wenn SLA-W empfang bestätigt 'Print "SLA/W übertragen" 'Print "sende Datenbyte" Twdr = Sendebyte 'daten werden geladen Set Twcr.twint Bitwait Twcr.twint , Set If Update_twistatus() = &H28 Then 'wenn Datenempfang bestätigt Print "datenbyte übertragen" Else 'Print "TWI-Fehler kein Daten Ack" End If Else 'Print "TWI-Fehler kein SLA-R/W Ack" End If Set Twcr.twsto 'Stop Condion Set Twcr.twint 'wird gesendet Print "sende TWI Stop" Print "" Else Print "TWI-Fehler kein Start gesendet" End If Return Function Update_twistatus() As Byte Update_twistatus = Twsr And &B11111000 'Twistatus wird gelsen prescaler wird maskiert End Function
nun jedoch zum Slave da hakt es etwas
hab folgenden code der nicht funktioniert
die LED2 soll dabei so oft blinken wie der empfangene Wert vom Master istCode:do if twi_flag=1 gosub i2c_schreibe loop I2cschreibe: Reset Twi_flag If Update_twistatus() = &H60 Then Set Twcr.twea Set Twcr.twint Bitwait Twcr.twint , Set If Update_twistatus() = &H80 Then I2cbyte = Twdr Else I2cbyte = 0 End If Set Twcr.twint End If While I2cbyte > 0 Set Led2 Waitms 100 Reset Led2 Decr I2cbyte Wend Return Function Update_twistatus() As Byte Update_twistatus = Twsr And &B11111000 'Twistatus wird gelsen prescaler wird maskiert End Function Twi_isr: Set Twi_flag Return
Danke für Hilfe
Lesezeichen