hier der Code:
Master:
Code:$regfile = "M8def.dat" ' the used chip $crystal = 16000000 ' frequency used $baud = 9600 ' baud rate Declare Sub Twi_send_byte(byval Slave As Byte , Zeichen As Byte ) Dim Twi_control As Byte ' Controlrgister lokale kopie Dim Twi_status As Byte Dim Twi_data As Byte Dim Mybyte(24) As Byte Dim A As String * 24 At Mybyte Overlay Dim B As Byte Dim C As Byte ' Zeichen von UART Dim Error As Byte ' Fehlermerker 'TWI init Twcr = &B00000100 ' erstmal nur TWI aktivieren Twsr = 0 ' Status und Prescaler Register Twbr = 72 ' Bit Rate Register, 100kHz Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Portc = Input 'Startausgabe Print "TWI Master" 'Hauptschleife Do Mybyte(1) = Getadc(0) Mybyte(2) = Getadc(1) 'Den Wert zum Slave senden Call Twi_send_byte(&H40 , Mybyte(1)) 'Ausgabe, damit wir sehen was geschehen ist Print Mybyte(1) ; Print " Error : " ; Print Hex(error) ' error status Ausgeben If Twi_status = &H18 Then Call Twi_send_byte(&H40 , Mybyte(2)) ' Ausgabe, damit wir sehen was geschehen ist Print Mybyte(2) ; Print " Error : " ; Print Hex(error) ' error status Ausgeben End If Loop End ' Unterprogramme ' TWI send_byte ' sendet ein Byte und schliesst die Übertragung ab Sub Twi_send_byte(byval Slave As Byte , Zeichen As Byte) Error = 0 ' Fehler zurücksetzen ' Startbedingung Twcr = &B10100100 ' TWINT | TWSTA | TWEN ' warten bis TWINT gesetzt ist Gosub Twi_wait_int ' wenn Zugriff auf den Bus erlaubt, Slaveadresse ausgeben If Twi_status = &H08 Or Twi_status = &H10 Then 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 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 Error = 0 ' kein Fehler Else Error = Twi_status ' Fehler End If Else ' kein slave Error = Twi_status ' Fehler End If ' Stopbedingung kommt hier immer im Ablauf, egal welcher Status Twcr = &B10010100 ' TWINT löschen, Stop senden Else ' Bus belegt, wird er wieder freigegeben Twcr = &B10000100 ' TWINT löschen, Bus freigeben Error = Twi_status ' Fehler End If End Sub ' warten bis TWINT gesetzt ist, status auslesen Twi_wait_int: Do Twi_control = Twcr And &H80 Loop Until Twi_control = &H80 Twi_status = Twsr And &HF8 ' status ' status nur zu Debugzwecken ausgeben, weil Bus sehr langsam wird ! Print "Err " ; Hex(twi_status) Return
Slave:
ich würde sagen das der Master schon fast in Ordnung ist, jedoch fehlt mir beim Slave die Rückmeldung das was angekommen damit der Master weiter macht.Code:$regfile = "m8def.dat" ' the used chip $crystal = 7372800 ' frequency used '$baud = 9600 ' keine baud rate angeben ! Config Portd = Output ' kompletter PortD als Ausgang Dim Twi_control As Byte ' Controlrgister lokale kopie Dim Twi_status As Byte Dim Twi_data As Byte Dim Neuesbyte As Byte ' Bytemerker Declare Sub Twi_init_slave Twi_data = 0 Call Twi_init_slave ' TWI aktivieren ' Hauptschleife Do ' Merker zurücksetzen Neuesbyte = 0 ' schauen ob TWINT gesetzt ist 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 Neuesbyte = 1 ' merken das ein neues Byte da ist '----------------------------------------neu If Twi_status = &H80 Then End If '----------------------------------------bis hier hin End If ' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht Twcr = &B11000100 ' TWINT löschen, erzeugt ACK End If ' wenn ein neues Byte gekommen ist, dieses über RS232 ausgeben If Neuesbyte <> 0 Then Print Twi_data End If Loop End ' Unterprogramme ' TWI als slave aktivieren Sub Twi_init_slave Twsr = 0 ' status und Prescaler auf 0 Twdr = &HFF ' default Twar = &H40 ' Slaveadresse setzen Twcr = &B01000100 ' TWI aktivieren, ACK einschalten End Sub
da könntet ihr mir glaube ich nochmal helfen.
gruß
patrick







Zitieren

Lesezeichen