So, ich hab jetzt noch mal einige Änderungen vorgenommen:
Mir scheint es so, als ob mein Programm nicht auf das ASCII Zeichen % also Dezimal 37 reagiert, obwohl ich das so festgelegt habe. Und das komische an der Sache ist, dass es auch schon mal funktioniert hat!Code:$regfile = "M8def.dat" '.dat-file ATmega8' $crystal = 8000000 'Taktfrequenz 8MHz' $hwstack = 350 'Größe Hardwarestack' $swstack = 350 'Größe Softwarestack' $framesize = 200 'Größe Frame' ''$lib "i2c_twi.lbx" ' Für Hardware TWI $baud = 19200 'Baudrate UART Declare Sub Serial0charmatch() Declare Sub Verarbeiten() Declare Sub Setzen() ''Config Scl = Portc.5 'SCL-Pin ''Config Sda = Portc.4 'SDA-Pin ''Config Twi = 400000 'Clockspeed für SCL ''Twcr = &B00000100 'TWI einschalten ''Const Pcf_write = &H39 'Adresse jeelabs LuxPlug ''Const Pcf_read = &H40 ''I2cinit 'SCL und SDA initialisieren Config Serialin = Buffered , Size = 4 , Bytematch = 37 '37=% Enable Interrupts Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Config Portb.0 = Output 'Kontroll-LED Config Portd.7 = Output '1. schaltbare LED Config Portd.6 = Output '2. schaltbare LED Dim I As Byte 'Splitting der Hauptschleife Dim Incoming_data As String * 4 'UART Buffer Dim Port As String * 2 'Portnummer (String) Dim Wert As String * 2 'Wert -> Port (String) Dim B_port As Byte 'Portnummer (Wert) Dim B_wert As Byte 'Wert -> Port (Wert) 'Dim Flag12 As Bit 'Zustand Pin 12 'Dim Flag13 As Bit 'Zustand Pin 13 B_port = 50 B_wert = 49 Cls Cursor On Blink Lcd "USB-IO_plus" Waitms 150 Locate 2 , 1 Lcd "." Waitms 150 Locate 2 , 2 Lcd "." Waitms 150 Locate 2 , 3 Lcd "." Waitms 150 Locate 2 , 4 Lcd "initialisiert" Do Toggle Portb.0 'Blinkende LED zur Kontrolle des Programmdurchlaufes For I = 0 To 200 Waitms 1 Next I Setzen 'Print "Port " ; B_port ; " Wert " ; B_wert 'Ausgabe zu Debuggingzwecken Loop End 'end program Sub Serial0charmatch() Input Incoming_data Noecho ' Daten aus Buffer auslesen Verarbeiten Clear Serialin ' Buffer leeren End Sub Sub Verarbeiten() Port = Left(incoming_data , 2) 'Byte 1 und 2 extrahieren Wert = Mid(incoming_data , 3 , 2) 'Byte 3 und 4 extrahieren B_port = Val(port) 'String zu Wert konvertieren B_wert = Val(wert) End Sub Sub Setzen() Select Case B_port 'zu setzenden Pin auswählen Case 50 : If B_wert = 49 Then Portd.6 = 1 Gosub Print_on Elseif B_wert = 50 Then Portd.6 = 0 Gosub Print_off End If Case 51 : If B_wert = 49 Then Portd.7 = 1 Gosub Print_on Elseif B_wert = 50 Then Portd.7 = 0 Gosub Print_off End If Case Else : !nop End Select End Sub Print_on: Print "Pin set high" B_port = 0 B_wert = 0 Return Print_off: Print "Pin set low" B_port = 0 B_wert = 0 Return
Und trotz meinem Noecho kommt immer mal wieder das, was ich sende zurück. Habs heut mehrmals kompiliert und auf den µC gebrannt. Ein mal kam nichts zurück, sonst kam immer das gesendete zurück, obwohl ich diesbezüglich gar nichts am Code geändert hab. Ich bin echt langsam ratlos.
Wär toll, wenn sich hier mal jemand die Zeit nehmen könnte und kurz über meinen Code schauen und mir nen Tipp geben wo ich was ändern muss...






Zitieren
Lesezeichen