Ich hab es jetzt hingekriegt dass der M32 dem M8 etwas senden kann. Allerdings kommen keine Daten an wenn er etwas vom M8 anfordert.
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 19200
Dim Send_data As Byte ' was gesendet wird
Send_data = 5
Declare Sub Twi_init_slave
Declare Function Twi_wait() As Byte
Dim Twi_control As Byte ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte
Twi_data = 0
Call Twi_init_slave ' TWI aktivieren
Do
Twi_status = Twi_wait()
If Twi_status = &H80 Then
Cls
Locate 1 , 1
Lcd "Angekommen!"
Locate 2 , 1
Lcd "Daten: " ; Twi_data
Elseif Twi_status = &HA8 Or Twi_status = &HB8 Then
Cls
Locate 1 , 1
Lcd "Daten gesendet!"
End If
Loop
End
' TWI als slave aktivieren
Sub Twi_init_slave
Twsr = 0 ' status und Prescaler auf 0
Twdr = &HFF ' default
Twcr = &B00000100 ' erstmal nur TWI aktivieren
Twar = &H40 ' Slaveadresse setzen
Twcr = &B01000100 ' dann ACK einschalten
End Sub
Function Twi_wait() As Byte
Twi_control = Twcr And &H80 ' Bit7 von Controlregister
If Twi_control = &H80 Then
Twi_status = Twsr And &HF8 ' Status
' wurde ein Byte geschickt
If Twi_status = &H80 Or Twi_status = &H88 Then
Twi_data = Twdr ' neue Daten merken
' wird ein Byte angefordert
Elseif Twi_status = &HA8 Or Twi_status = &HB8 Then
Twdr = Send_data
End If
Twcr = &B11000100 ' damit es weitergeht
End If
End Function
Das ist mein Code bis jetzt. Im Prinzip sind die zwei Wiki Beiträge (transmitter & receiver) zusammengefasst. Aber leider klappt es nicht!
Elseif Twi_status = &HA8 Or Twi_status = &HB8 Then <--- das is leider niemals wahr und deshalb gehe ich mal davon aus dass der Slave nichts versendet hat!
Findet jemand den Fehler?
MfG
Lesezeichen