Hallo Freunde des BASCOM'S
ich hab folgendes Problem, wie Elkokiller beschrieben hat bin ich dran einen Hausbus über RS485 zu realisieren. Hab mich durch etliche Seiten und Doku's gewälzt und festgestellt dass das schon oft beschrieben SNAP-Protokoll das Beste ist, und vor allem leicht zu verstehen. Ich hab 3 mega8 und 3 2313 am Bus laufen und es geht prima. Es sind mit dem 2313 eine Tastenmudul, ein Relaismodul und ein Rollomodul was sich vom Relaismodul nur in der Soft unterscheidet. Elektronisch verriegelung der Relais. Also über den Bus mit dem Tastmodul kann ich die Relais prima schalten, nur möchte ich an den Modulen auch Taster betreiben die mir die gleich Funktion bringen wie das Tastenmodul, aber ich bekmm's einfach nicht hin. Ich poste mal das Versuchsprogramm mit 2 Relais.
Wenn ich die Tasten benutze schalten die Relais je nach Taste, aber beim Tastenmodul wird zwar eeingschaltet, aber gleich darauf wieder aus.Code:'RS-485 4fach Relais für Hutschiene 'mit 4 Tasten und RS485 $regfile = "2313def.dat" $crystal = 4000000 $baud = 4800 Ddrb = &B00001111 Config Portd.2 = Output Config Portd.3 = Input : Portd.3 = 1 Config Portd.4 = Input : Portd.4 = 1 Config Portd.5 = Input : Portd.5 = 1 Config Portd.6 = Input : Portd.6 = 1 'Dim S As String * 10 Dim B(10) As Byte 'At S Overlay Dim N As Byte Const Preamble_ = &H55 'H55 Const Sync_ = &H54 'H54 Const Hdb2_ = &H51 'H51 Const Hdb1_ = &H42 'H42 'Const Myadress = &H 04 Dim Myadress As Byte : Myadress = 6 Dim Preamble As Byte Dim Sync As Byte Dim Hdb2 As Byte Dim Hdb1 As Byte 'Dim Dab2 As Byte Dim Dab1 As Byte 'Dim Sab2 as byte Dim Sab1 As Byte Dim Db1 As Byte Dim Db2 As Byte Dim Crc2 As Byte Dim Crc1 As Byte Dim X1 As Bit , X2 As Bit , X3 As Bit , X4 As Bit , X5 As Bit X1 = 0 : X2 = 0 : X3 = 0 : X4 = 0 : X5 = 0 '----- Programm On Urxc Onrxd Enable Urxc Enable Interrupts Portd.2 = 0 Main: If N = 10 Then Preamble = B(1) Sync = B(2) : Hdb2 = B(3) : Hdb1 = B(4) Dab1 = B(5): 'Dab2=B(x) Sab1 = B(6) : 'Sab2=B(x) Db2 = B(7) : Db1 = B(8) Crc2 = B(9) : Crc1 = B(10) N = 0 End If Gosub Ausgang If Sync <> Sync_ Then : Goto Main Elseif Hdb2 <> Hdb2_ Then : Goto Main Elseif Hdb1 <> Hdb1_ Then : Goto Main Elseif Dab1 <> Myadress Then : Goto Main End If '------------------------------------------------ Ausgang: If Pind.3 = 0 Or Db2 = &H01 And X1 = 0 And X2 = 0 Then : X1 = 1 : Portb.0 = X1 : Waitms 500 Elseif Pind.3 = 0 Or Pind.4 = 0 Or Db2 = &H01 Or Db2 = &H02 And X1 = 1 Then : X1 = 0 : Portb.0 = X1 : Waitms 500 Elseif Pind.4 = 0 Or Db2 = &H02 And X2 = 0 And X1 = 0 Then : X2 = 1 : Portb.1 = X2 : Waitms 500 Elseif Pind.4 = 0 Or Pind.3 = 0 Or Db2 = &H02 Or Db2 = &H01 And X2 = 1 Then : X2 = 0 : Portb.1 = X2 : Waitms 500 End If 'Goto Main Return Onrxd: Incr N B(n) = Udr Return End
Hier mal das Programm vom Tastenmodul
wen's Interessiert noch ein Programm für den Bus zu belauschenCode:$regfile = "2313def.dat" $crystal = 4000000 $baud = 4800 Ddrb = &B00000000 Portb = &B00011111 'Config Portd.3 = Input : Portd.3 = 1 'Config Portd.4 = Input : Portd.4 = 1 'Config Portd.5 = Input : Portd.5 = 1 Config Portd.6 = Input : Portd.6 = 1 Const Preamble_ = &B01010101 'H55 Const Sync_ = &H54 'H54 Const Crcpoly = &H1021 Const Hdb2_ = &H51 Const Hdb1_ = &H42 Const Myadress = &H03 Dim Preamble As Byte Dim Sync As Byte Dim Crc As Word Dim Hdb1 As Byte Dim Hdb2 As Byte Dim Dab1 As Byte Dim Dab2 As Byte Dim Db1 As Byte Dim Db2 As Byte Dim Sab1 As Byte Dim Crc2 As Byte Dim Crc1 As Byte Dim Temp1 As Byte Dim Temp2 As Byte Dim Tmpw1 As Byte Dim Tmpw2 As Byte 'Preamble = Preamble_ 'Sync = Sync_ 'Db1 = &H3 Db2 = &H0 Dab1 = &H06 ' Adresse des Empfänger Sab1 = Myadress 'Adresse des Senders Crc2 = &H01 Crc1 = &H01 Portd.2 = 0 '------------------------------------------------ 'hier Programmcode für Tastenabfage und Wertzuweisung 'unterbringen 'z.B.: ' If Pind.0 = 0 Then Db1=&h01 ' goto Send ' End IF ' 'oder eine Select Case-Anweisung ' '------------------------------------------------ Tasten: Db1 = &H0 If Pinb.4 = 0 Then : Db1 = &H01 : Goto _start Elseif Pinb.3 = 0 Then : Db1 = &H02 : Goto _start Elseif Pinb.2 = 0 Then : Db1 = &H04 : Goto _start Elseif Pinb.1 = 0 Then : Db1 = &H08 : Goto _start Elseif Pinb.0 = 0 Then : Db1 = &H0 : Goto _start Elseif Pind.6 = 0 Then : Db1 = &HF : Goto _start End If Goto Tasten _start: Portd.2 = 1 : Waitms 20 'RS485 PIN auf Senden Print Chr(preamble_) ; Chr(sync_) ; Print Chr(hdb2_) ; Chr(hdb1_) ; Print Chr(dab1) ; Chr(sab1); Print Chr(db1) ; Chr(db2); Print Chr(crc2) ; Chr(crc1); Waitms 10 : Portd.2 = 0 : Wait 1 'RS485 PIN auf Enpfang 'Goto _start Goto Tasten
das ist mit einem mega8 und LCDCode:'Einfacher String-Empfang $regfile = "m8def.dat" $crystal = 8000000 $baud = 4800 Dim S As String * 10 Dim B(10) As Byte 'At S Overlay Dim N As Byte Const Preamble_ = &H55 'H55 Const Sync_ = &H54 'H54 Const Hdb2_ = &H51 'H51 Const Hdb1_ = &H42 'H42 'Const Myadress = &H 04 Dim Myadress As Byte : Myadress = 4 Dim Preamble As Byte Dim Sync As Byte Dim Hdb2 As Byte Dim Hdb1 As Byte 'Dim Dab2 As Byte Dim Dab1 As Byte 'Dim Sab2 as byte Dim Sab1 As Byte Dim Db1 As Byte Dim Db2 As Byte Dim Crc2 As Byte Dim Crc1 As Byte Ddrd = &B00110100 Portd = &B11000000 Ddrc = &B00110110 Portc = &B00100100 Spkr Alias Portd.7 Config Lcd = 20 * 4 Cls Cursor Off Noblink On Urxc Onrxd Enable Urxc Enable Interrupts Portd.2 = 0 '------------------------------------------------ Main: If N > 9 Then Preamble = B(1) Sync = B(2) : Hdb2 = B(3) : Hdb1 = B(4) Dab1 = B(5) : Sab1 = B(6) : Db2 = B(7) Db1 = B(8) : Crc2 = B(9) : Crc1 = B(10) N = 0 End If Gosub Anzeige If Sync <> Sync_ Then : Goto Main Elseif Hdb2 <> Hdb2_ Then : Goto Main Elseif Hdb1 <> Hdb1_ Then : Goto Main 'Elseif Dab1 <> Myadress Then : Goto Main End If Goto Main Anzeige: Locate 1 , 1 : Lcd Hex(preamble) ; "-" ; Hex(sync) ; "-" ; Hex(hdb2) ; "-" ; Hex(hdb1) Locate 2 , 1 : Lcd "Empf:" ; Hex(dab1) Locate 2 , 10 : Lcd "Send:" ; Hex(sab1) Locate 3 , 1 : Lcd Bin(db1) ; "-" ; Bin(db2) Locate 4 , 1 : Lcd Hex(crc2) ; "-" ; Hex(crc1) Locate 4 , 10 : Lcd "Mya:" ; Hex(myadress) ; "-" ; Hex(dab1) Return Onrxd: Incr N B(n) = Udr Return
Hoffendlich kann mir jemand helfen ??







Zitieren

Lesezeichen