Hallo
Versuche mich zur Zeit am folgenden Beitrag:
https://www.roboternetz.de/phpBB2/ze...=246777#246777
Um das ganze zu verstehen wollte ich anstatt 2 Servos 2 LED' ansteuern. Diese sind aber auf dem PortD und so hab ich aus dem vorhandenen Prog die Ports von B auf D geändert und alle Dinge die auf D waren auskommentiert (siehe Code).
Leider wollen die LED's sich aber nicht umschalten lassen egal welche kombination ich nehm (1/0 1/1 2/0 2/1). Die beiden LED's leuchten seit der Programmierung unverändert um die Wette.
Was hab ich falsch gemacht?
Danke für Eure Hilfe.
Code:$regfile = "M32def.dat" ' the used chip $crystal = 16000000 ' frequency used '$baud = 38400 ' brauchen wir nicht Waitms 100 ' TWI init Gosub Twi_init_slave Config Servos = 2 , Servo1 = Portd.1 , Servo2 = Portd.6 , Reload = 8 ' Ports für Servo auf Ausgang Config Portd.1 = Output Config Portd.6 = Output 'Config Portd = Output ' Musik, wegen Stimmung usw. :-) 'Sound Portb.0 , 300 , 450 ' BEEP Servo(1) = 0 Servo(2) = 0 Const Maxanzahlbyte = 10 ' Wenn mehr Zeichen kommen werden diese verworfen ! Dim Messagebuf(maxanzahlbyte) As Byte Dim Anzahlbuf As Byte ' Anzahl Zeichen die gesendet wurden Dim Neuemsg As Byte ' zeigt an wenn eine neue Message gültig ist Dim Twi_control As Byte ' Controlregister lokale kopie Dim Twi_status As Byte Dim Twi_data As Byte Const Eigene_slave_adr = &H40 ' Adresse evtl. Anpassen ' wegen der Servos, TWI braucht das hier nicht Enable Interrupts Twi_data = 0 Neuemsg = 0 ' Paket ungültig Anzahlbuf = 0 ' Anzahl empfangener Bytes Portd = &HFF ' alle LEDs aus 'Print "M8 servo test" Do ' schauen ob TWINT gesetzt ist Twi_control = Twcr And &H80 ' Bit7 von Controlregister If Twi_control = &H80 Then Twi_status = Twsr And &HF8 ' Status 'Portd = Not Twi_status ' test auf die LEDs Select Case Twi_status ' Slave Adress received, wir sind gemeint ! Case &H60 : Twcr = &B11000100 ' TWINT löschen, erzeugt ACK Anzahlbuf = 0 Neuemsg = 0 ' Flag für Message ungültig ' Byte mit ACK Case &H80 : If Anzahlbuf < Maxanzahlbyte Then Incr Anzahlbuf ' zähler +1 Messagebuf(anzahlbuf) = Twdr End If Twcr = &B11000100 ' TWINT löschen, erzeugt ACK ' Stop oder restart empfangen Case &HA0 : Twcr = &B11000100 ' TWINT löschen, erzeugt ACK ' es müssen 3 Byte sein, damit das Paket OK ist If Anzahlbuf = 3 Then Neuemsg = 1 ' Flag für Message gültig Else Neuemsg = 0 ' Flag für Message ungültig End If ' letztes Byte mit NACK, brauchen wir nicht Case &H88 : Case &HF8 : ' Fehler, dann reset TWI Case &H00 : Twcr = &B11010100 ' TWINT löschen, reset TWI ' was anderes empfangen, sollte nicht vorkommen Case Else : Twcr = &B11000100 ' TWINT löschen, erzeugt ACK End Select End If ' ein gültiges Paket angekommen If Neuemsg = 1 Then Neuemsg = 0 ' Flag wieder löschen ' nur wenn das erste Zeichen ein "S" ist tun wir was damit ! If Messagebuf(1) = "S" Then Servo(messagebuf(2)) = Messagebuf(3) 'Sound Portb.0 , 300 , 450 ' Roger-BEEP End If End If Waitms 10 Loop End ' TWI als slave aktivieren Twi_init_slave: Twsr = 0 ' status und Prescaler auf 0 Twdr = &HFF ' default Twar = Eigene_slave_adr ' Slaveadresse setzen Twcr = &B01000100 ' TWI aktivieren, ACK einschalten Return







Zitieren

Lesezeichen