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







Zitieren
Lesezeichen