Ok, hab mal im TWI-Praxis rumgewühlt.
Morgen werde ich mal diesen Code ausprobieren:
Code:
$regfile = "m8def.dat"
$crystal = 1000000
$baud = 1200
$swstack = 128
$hwstack = 128
$framesize = 128
'Nun eine Temperatur messen:
Twcr = &B10100100 ' Start erzeugen
Gosub Twiloopsub ' Warten bis Start erzeugt
If Status = &H08 Or Status = &H10 Then ' falls start gesendet
Twdr = &B10010000 ' Slave Adresse senden (w)
Twcr = &B10000100 ' Aktion auslösen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H18 Or Status = &H40 Then ' falls ack empfangen
Twdr = &B1010001 ' Befehl zum Messen senden
Twcr = &B10000100 ' Aktion auslösen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H28 Then
Twcr = &B10010100 ' Stop
' warten bis stop-flag gelöscht:
Do
Loop Until Twcr.twsto = 0
Else
Print "byte nicht gesendet"
Print Status
End If
Else
Print "kein addressack"
Print Status
End if
Else
Print "Startfehler"
Print Status
End If
' nun auslesen:
Twcr = &B10100100 ' Start erzeugen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H08 Or Status = &H10 Then
Twdr = &B10010000 ' Slave Adresse senden (w)
Twcr = &B10000100 ' Aktion auslösen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H18 Then ' falls ack vom slave
Twdr = &B10101010 ' Befehl senden
Twcr = &B10000100 ' Aktion auslösen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H28 Then ' falls ack vom slave
Twcr = &B10100100 ' Erneut Start erzeugen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H08 Or Status = &H10 Then ' falls 2.start gesendet
Twdr = &B10010001 ' Slave Adresse senden (lesen)
Twcr = &B10000100 ' Aktion auslösen
Gosub Twiloopsub ' Warten bis fertig
If Status = &H40 Then ' falls slave addr. gelesen raus
Twcr = &B11000100 ' Ack erzeugen
Gosub Twiloopsub ' warten bis empfangen
If Status = &H58 Or Status = &H50 Then ' dann auslesen
Twidaten1 = Twdr
Else
Print "nichts empfangen 1"
Print Status
End If
Twcr = &B10000100 ' Nack erzeugen
Gosub Twiloopsub
If Status = &H58 Or Status = &H50 Then
Twidaten2 = Twdr
Else
Print "nichts empfangen 2"
Print Status
End If
Twcr = &B10010100 ' Stop
Else
Print "kein lese-slave"
Print Status
End If
Else
Print "kein 2.Start raus"
Print Status
End If
Else
Print "kein command gesendet"
Print Status
End If
Else
Print "kein slaveschreib"
Print Status
End If
Else
Print "kein Start"
Print Status
End If
' Twidaten1/2 enthalten den Temperaturwert.
Print Twidaten1
Print Twidaten2
Twiloopsub:
Do : Loop Until Twcr.twint = 1
Status = Twsr And &HF8
Return
Mal schauen, was sich da so tut...
Lesezeichen