Ok, hab mal im TWI-Praxis rumgewühlt.
Morgen werde ich mal diesen Code ausprobieren:
Mal schauen, was sich da so tut...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







Zitieren

Lesezeichen