Byte zusammenfassen und schieben

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Michael schrieb:

      katipefendi schrieb:

      Liege ich da richtig mit mein Fehler?
      Ich sehe da noch andere Fehlermöglichkeiten:- 1ms, also 1000 mal pro Sekunde TCP-Verkehr ist m.E. nicht machbar, warum so schnell?
      - vor der SPI-Konfiguration als Master muss der SS-Pin zwingend auf Ausgang gesetzt sein
      - Stackwerte vergrößern
      - Absturz des WIZ abfangen
      - Watchdog
      und natürlich auch
      -Debug-LEDs nutzen, damit du siehst, wo der AVR hängen bleibt.
      - vor der SPI-Konfiguration als Master muss der SS-Pin zwingend auf Ausgang gesetzt sein
      ??

      Stackwerte vergrößern
      was wäre eine optimale Größe für die Stacks?
    • Michael schrieb:

      katipefendi schrieb:

      - vor der SPI-Konfiguration als Master muss der SS-Pin zwingend auf Ausgang gesetzt sein
      ??
      und High sein ;)
      Edit:
      Master.png
      Es reicht, wenn der Pin High ist oder als Ausgang konfiguriert.
      Die älteren AVRs hatten da ein Problem.
      Und nein, das ist kein Bascom-Bug.
      Hi Michael,

      BASCOM-Quellcode

      1. $regfile = "m328PBdef.dat"
      2. $crystal = 16000000
      3. '$baud = 19200
      4. $hwstack = 130
      5. $swstack = 180
      6. $framesize = 200
      7. Myss Alias Portb.2
      8. Config Myss = Output
      9. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
      10. Spiinit
      11. Enable Interrupts
      12. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Manuellen IP Taster
      13. Config Pinb.0 = Input
      14. Portb.0 = 1
      15. Ipreset Alias Pinb.0
      16. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Schieberegister
      17. Config Portc.1 = Output
      18. Config Portc.2 = Output
      19. Config Portc.3 = Output
      20. Dout1 Alias Portc.1
      21. Sck1 Alias Portc.2
      22. Rck1 Alias Portc.3
      23. Config Portd.2 = Output
      24. 74hc595_g Alias Portd.2
      25. 74hc595_g = 1
      26. Config Portc.5 = Output
      27. Hc595_reset Alias Portc.5
      28. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Power LED Grün LED
      29. Config Portd.5 = Output
      30. Betriebsled Alias Portd.5
      31. Betriebsled = 1
      32. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den W5500 RESET-- ----------------
      33. Config Portb.1 = Output
      34. W5500_nreset Alias Portb.1
      35. '######################### VARIABLEN FÜR DIE ETHERNET VERBINDUNG ###############
      36. Dim Xid(4) As Byte
      37. Dim Mac_add(6) As Byte
      38. '----- Zeitinterval für den W5500, damit das W5500 initialisieren kann ---------
      39. Reset W5500_nreset
      40. Waitms 5
      41. Set W5500_nreset
      42. Waitms 400
      43. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      44. Xid(1) = 220
      45. Xid(2) = 05
      46. Xid(3) = 80
      47. Xid(4) = 91
      48. Mac_add(1) = 0
      49. Mac_add(2) = 8
      50. Mac_add(3) = 220
      51. Mac_add(4) = 05
      52. Mac_add(5) = 80
      53. Mac_add(6) = 80
      54. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      55. Dim Ee_ip(4) As Eram Byte 'At 4
      56. Dim Ee_mask(4) As Eram Byte 'At 6
      57. Dim Ee_gateway(4) As Eram Byte 'At 14
      58. Dim Ee_port As Eram String * 5 'At 18
      59. Dim Eth_ip(4) As Byte
      60. Dim Eth_mask(4) As Byte
      61. Dim Eth_gateway(4) As Byte
      62. Dim Eth_port As String * 5
      63. Dim Ip_ As Long
      64. Dim Subnetmask_ As Long
      65. Dim Gateway_ As Long
      66. Dim Port_ As Long
      67. Config Tcpip = Noint , Mac = 0.8.220.05.80.91 , Ip = 192.168.0.11 , Submask = 255.255.255.0 , Gateway = 192.168.0.254 , Localport = 2005 , Chip = W5500 , Spi = 1 , Cs = Myss
      68. '######################## ENDE DER ETHERNET VARIABLEN ##########################
      69. Dim Bclient As Byte
      70. Dim Idx As Byte
      71. Dim Flags As Byte
      72. Dim Result1 As Word
      73. Dim Tmp As Byte
      74. Dim Sfc As String * 100
      75. Dim Y As String * 100
      76. Dim Command_array(14) As String * 35
      77. Dim Channel1 As String * 3
      78. Dim Channel2 As String * 3
      79. Dim Channel3 As String * 3
      80. Dim Channel4 As String * 3
      81. Dim Channel5 As String * 3
      82. Dim Channel6 As String * 3
      83. Dim Channel7 As String * 3
      84. Dim Channel8 As String * 3
      85. 'Dim Senddata1 As Byte
      86. 'Dim Senddata2 As Byte
      87. 'Dim Senddata3 As Byte
      88. 'Dim Senddata4 As Byte
      89. 'Dim Senddata5 As Byte
      90. 'Dim Senddata6 As Byte
      91. 'Dim Senddata7 As Byte
      92. 'Dim Senddata8 As Byte
      93. Dim Senddatato1 As Byte
      94. Dim Senddatato2 As Byte
      95. Dim Senddatato3 As Byte
      96. Dim Senddatato4 As Byte
      97. Dim Senddatato5 As Byte
      98. Dim Senddatato6 As Byte
      99. Dim Senddatato7 As Byte
      100. Dim Senddatato8 As Byte
      101. 'Dim Datenschieben As Double
      102. 'Dim Senddata(8) As Byte At Datenschieben Overlay
      103. 'Dim Temp_byte As Byte
      104. Dim Datenschieben As Double
      105. Dim Lsbdata8 As Byte At Datenschieben Overlay
      106. Dim Senddata7 As Byte At Datenschieben + 1 Overlay
      107. Dim Lsbdata6 As Byte At Datenschieben + 2 Overlay
      108. Dim Senddata5 As Byte At Datenschieben + 3 Overlay
      109. Dim Senddata1 As Byte At Datenschieben + 4 Overlay
      110. Dim Lsbdata2 As Byte At Datenschieben + 5 Overlay
      111. Dim Senddata3 As Byte At Datenschieben + 6 Overlay
      112. Dim Lsbdata4 As Byte At Datenschieben + 7 Overlay
      113. Dim Senddata8 As Byte
      114. Dim Senddata6 As Byte
      115. Dim Senddata2 As Byte
      116. Dim Senddata4 As Byte
      117. Wait 1
      118. Hc595_reset = 1
      119. '-------------------------------------------------------------------------------
      120. Local_port = Port_
      121. Settcp Mac_add(1) . Mac_add(2) . Mac_add(3) . Mac_add(4) . Mac_add(5) . Mac_add(6) , Ip_ , Subnetmask_ , Gateway_
      122. Do
      123. Debounce Ipreset , 0 , Set_ip_reset , Sub
      124. 'Start Watchdog
      125. For Idx = 0 To 3
      126. Result1 = Socketstat(idx , 0) ' get status
      127. Select Case Result1
      128. Case Sock_established
      129. If Flags.idx = 0 Then
      130. Sfc = "Verbindung aufgebaut"
      131. Flags.idx = 1
      132. Result1 = Tcpwritestr(idx , Sfc , 255 )
      133. End If
      134. Result1 = Socketstat(idx , Sel_recv) ' get number of bytes waiting
      135. If Result1 > 0 Then
      136. Do
      137. Result1 = Tcpread(idx , Sfc)
      138. Tmp = Split(sfc , Command_array(1) , "|")
      139. Select Case Command_array(1)
      140. Case "1"
      141. Command_array(1) = "-1"
      142. Channel1 = Command_array(2)
      143. Channel2 = Command_array(3)
      144. Channel3 = Command_array(4)
      145. Channel4 = Command_array(5)
      146. Channel5 = Command_array(6)
      147. Channel6 = Command_array(7)
      148. Channel7 = Command_array(8)
      149. Channel8 = Command_array(9)
      150. Senddata1 = Val(channel1)
      151. Senddata2 = Val(channel2)
      152. Senddata3 = Val(channel3)
      153. Senddata4 = Val(channel4)
      154. Senddata5 = Val(channel5)
      155. Senddata6 = Val(channel6)
      156. Senddata7 = Val(channel7)
      157. Senddata8 = Val(channel8)
      158. 'Temp_byte = Flip(senddata8)
      159. ' Senddata(1) = Temp_byte
      160. ' Senddata(2) = Senddata7
      161. ' Temp_byte = Flip(senddata6)
      162. ' Senddata(3) = Temp_byte
      163. ' Senddata(4) = Senddata5
      164. ' Senddata(5) = Senddata1
      165. ' Temp_byte = Flip(senddata2)
      166. ' Senddata(6) = Temp_byte
      167. ' Senddata(7) = Senddata3
      168. ' Temp_byte = Flip(senddata4)
      169. ' Senddata(8) = Temp_byte
      170. Lsbdata8 = Flip(senddata8)
      171. Lsbdata6 = Flip(senddata6)
      172. Lsbdata2 = Flip(senddata2)
      173. Lsbdata4 = Flip(senddata4)
      174. Shiftout Dout1 , Sck1 , Datenschieben , 0
      175. ' Shiftout Dout1 , Sck1 , Senddata8 , 2
      176. ' Shiftout Dout1 , Sck1 , Senddata7 , 0
      177. ' Shiftout Dout1 , Sck1 , Senddata6 , 2
      178. ' Shiftout Dout1 , Sck1 , Senddata5 , 0
      179. ' Shiftout Dout1 , Sck1 , Senddata1 , 0
      180. ' Shiftout Dout1 , Sck1 , Senddata2 , 2
      181. ' Shiftout Dout1 , Sck1 , Senddata3 , 0
      182. ' Shiftout Dout1 , Sck1 , Senddata4 , 2
      183. Rck1 = 1
      184. Rck1 = 0
      185. End Select
      186. Loop Until Sfc = ""
      187. End If
      188. Case Sock_close_wait
      189. Closesocket Idx
      190. Case Sock_closed
      191. Bclient = Getsocket(idx , Sock_stream , Local_port , 0)
      192. Socketlisten Idx
      193. Flags.idx = 0
      194. Case Sock_listen
      195. Case Else
      196. End Select
      197. Next
      198. 'Reset Watchdog
      199. Loop
      200. End
      201. '-------------------------------------------------------------------------------
      202. Set_ip_reset: 'IP SETZEN
      203. Eth_ip(1) = 192 : Eth_ip(2) = 168 : Eth_ip(3) = 55 : Eth_ip(4) = 55
      204. Eth_mask(1) = 255 : Eth_mask(2) = 255 : Eth_mask(3) = 255 : Eth_mask(4) = 0
      205. Eth_gateway(1) = 192 : Eth_gateway(2) = 168 : Eth_gateway(3) = 0 : Eth_gateway(4) = 254
      206. Eth_port = "1001"
      207. Ee_ip(1) = Eth_ip(1) : Ee_ip(2) = Eth_ip(2) : Ee_ip(3) = Eth_ip(3) : Ee_ip(4) = Eth_ip(4)
      208. Ee_mask(1) = Eth_mask(1) : Ee_mask(2) = Eth_mask(2) : Ee_mask(3) = Eth_mask(3) : Ee_mask(4) = Eth_mask(4)
      209. Ee_gateway(1) = Eth_gateway(1) : Ee_gateway(2) = Eth_gateway(2) : Ee_gateway(3) = Eth_gateway(3) : Ee_gateway(4) = Eth_gateway(4)
      210. Ee_port = Eth_port
      211. Goto _reset
      212. '-------------------------------------------------------------------------------
      213. Set_eth_values: 'BEIM START AUS DEM EEPROM LESEN
      214. Eth_ip(1) = Ee_ip(1) : Eth_ip(2) = Ee_ip(2) : Eth_ip(3) = Ee_ip(3) : Eth_ip(4) = Ee_ip(4)
      215. Eth_mask(1) = Ee_mask(1) : Eth_mask(2) = Ee_mask(2) : Eth_mask(3) = Ee_mask(3) : Eth_mask(4) = Ee_mask(4)
      216. Eth_gateway(1) = Ee_gateway(1) : Eth_gateway(2) = Ee_gateway(2) : Eth_gateway(3) = Ee_gateway(3) : Eth_gateway(4) = Ee_gateway(4)
      217. Eth_port = Ee_port
      218. Ip_ = Maketcp(eth_ip(1) , Eth_ip(2) , Eth_ip(3) , Eth_ip(4))
      219. Subnetmask_ = Maketcp(eth_mask(1) , Eth_mask(2) , Eth_mask(3) , Eth_mask(4) )
      220. Gateway_ = Maketcp(eth_gateway(1) , Eth_gateway(2) , Eth_gateway(3) , Eth_gateway(4))
      221. Port_ = Val(eth_port)
      222. Return
      223. '-------------------------------------------------------------------------------
      Alles anzeigen
      SS auf output gesetzt
      Stacks bis zum geht nicht her erhört
      $hwstack = 130
      $swstack = 180
      $framesize = 200

      leider ist das verhalten wie zu vor.
    • katipefendi schrieb:

      leider ist das verhalten wie zu vor.
      Warum muss der TCP-Verkehr 1000 mal pro Sekunde stattfinden?
      Schau dir mal den Traffic mit Wireshark an, ich denke nicht, dass das sauber läuft.
      Wenn der WIZ mehrere Pakete kriegt, droppt oder sammelt er die Daten vielleicht auf und du steigst falsch in den Datenstrom ein.
      Was macht die Debug-LED? Hast du schon rausbekommen, wo genau das Programm hängt?