Hallo zusammen,
Hab den Bus zum Laufen gebracht und bin richtig happy!!!
Ich habe nun nach einigen Versuchen das erste richtige Programm
für den Master und den Slave geschrieben. Das Master-Programm
scheint soweit zustimmen, aber beim Slave läuft dauernd etwas schief
und zwar funktioniert das Case 20 nicht.
Wenn der Slave den Wert 20 erhält, soll er den Ablauf in Case 20
durcharbeiten. Jedoch fährt er alle 3 Servos auf eine undefinierte Positon
und mehr nicht.
Was stimmt mit Case 20 nicht?
Habt ihr eine Idee???
Slave-Code:
Grüße High LightCode:$regfile = "m88def.dat" $crystal = 16000000 'I2C Konfiguration Dim Twi_control As Byte ' Controlregister 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 'Servokonfiguration Config Portb = Output Config Servos = 3 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Reload = 10 Enable Interrupts Dim Xpos1 As Byte 'StatusLED Config Portd.0 = Output Statusled Alias Portd.0 Statusled = 1 'Variablen Dim Freigabe As Byte Freigabe = 0 ' 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 End If ' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht Twcr = &B11000100 ' TWINT löschen, erzeugt ACK End If 'Start If Twi_data = 10 Then Statusled = 0 ' StatusLED anschalten Freigabe = 1 End If 'Stop If Twi_data = 100 Then Statusled = 1 ' StatusLED ausschalten Freigabe = 0 End If 'Ablauf start If Freigabe = 1 Then Select Case Twi_data Case 20: Servo(1) = 100 Servo(2) = 105 Servo(3) = 80 For Xpos1 = 100 To 103 Servo(1) = Xpos1 Waitms 167 Next For Xpos1 = 103 To 106 Servo(1) = Xpos1 Waitms 167 Next Servo(1) = 98 Servo(2) = 140 Servo(3) = 50 Waitms 250 Servo(1) = 91 Servo(2) = 105 Servo(3) = 80 Waitms 250 For Xpos1 = 91 To 94 Servo(1) = Xpos1 Waitms 167 Next For Xpos1 = 94 To 97 Servo(1) = Xpos1 Waitms 167 Next For Xpos1 = 97 To 100 Servo(1) = Xpos1 Waitms 167 Next End Select End If Loop End ' Unterprogramme ' TWI als slave aktivieren Sub Twi_init_slave Twsr = 0 ' status und Prescaler auf 0 Twdr = &HFF ' default Twar = &HCA ' Slaveadresse setzen Twcr = &B01000100 ' TWI aktivieren, ACK einschalten End Sub







Zitieren

Lesezeichen