Also bei den Testprogrammen rührt sich leider auch nichts.
Ich hab dann mal aus dem TWI-Multimasterbeispiel den Code verwendet und hab mittlerweile rausgefunden, dass bei diesem Code TWINT nicht gesetzt wird...
Jetzt halt die Frage: Warum wird TWINT nicht gesetzt?
Im Beispiel ist das letzte Bit (TWIE, Interrupt Enable) immer 0; muss dieses aber nicht 1 sein, damit TWINT (Interrupt) überhaupt gesetzt werden kann?
Ausschnitt:
Code:
Sub Twi_send_byte(byval slave As Byte , byval Zeichen As Byte)
Print #4 , "Sub Started"
Error = 0 ' Fehler zurücksetzen
' Startbedingung
Twcr = &B10100100 ' TWINT
Print #4 , "Set Start Cond." ; hex(TWCR)
' warten bis TWINT gesetzt ist
Gosub Twi_wait_int
Print #4 , "TWINT OK"
' wenn Zugriff auf den Bus erlaubt, Slaveadresse ausgeben
If Twi_status = &H08 Or Twi_status = &H10 Then
Print #4 , "Bus Access"
Twdr = Slave And &HFE ' slave adresse + Write
Twcr = &B10000100 ' TWINT löschen, Byte senden
' warten bis TWINT gesetzt ist
Gosub Twi_wait_int
' Slave hat sich gemeldet
If Twi_status = &H18 Or Twi_status = &H20 Then
Print #4 , "Slave OK"
Twdr = Zeichen ' Daten
Twcr = &B10000100 ' TWINT löschen, Byte senden
' warten bis TWINT gesetzt ist
Gosub Twi_wait_int
' Zeichen wurden gesendet
If Twi_status = &H28 Or Twi_status = &H30 Then
Print #4 , "Char Sent"
Error = 0 ' kein Fehler
Else
Error = Twi_status ' Fehler
End If
Else
' kein slave
Error = Twi_status ' Fehler
Print #4 , "Error: " ; Hex(Error)
End If
' STOPbedingung kommt hier immer im Ablauf, egal welcher Status
Twcr = &B10010100 ' TWINT löschen, STOP senden
' nach einem STOP wird TWINT nicht mehr gesetzt,
' man darf/kann also nicht darauf warten !
Else
' Bus belegt, wird er wieder freigegeben
Twcr = &B10000100 ' TWINT löschen, Bus freigeben
Error = Twi_status ' Fehler
End If
End Sub
Twi_wait_int:
Do
Twi_control = Twcr And &H80
waitms 500
Print #4 , "Wait... TWCR: " ; HEX(TWCR)
Loop Until Twi_control = &H80
Twi_status = Twsr And &HF8 ' status
Print #4 , "ErrStat:" ; Hex(twi_status)
Return
Lesezeichen