View previous topic :: View next topic |
Author |
Message |
sielcon
Joined: 16 Mar 2006 Posts: 74 Location: Argentina
|
Posted: Tue Apr 11, 2017 4:11 pm Post subject: Problem with Arduino Mega2560 and Ethernet Shield (W5100) |
|
|
Hello everyone, the problem is the following, I am doing a simple UDP communication, after initializing SPI, TCP, etc. I run GETSOCKET and SCKETSTAT without any problems, after about 30 seconds or when I send a package it is reset.
I have enabled the interruption of the W5100 that goes to PE.4 of 2560.
I did a lot of testing and I can not get it to work, thank you if anyone can help me.
I attach the code and the result of the terminal.
Thank you very much.
Code: |
'-----------------------------------------------------------------------------------------
'name : udptest.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : start the easytcp.exe program after the chip is programmed and
' press UDP button
'micro : Mega161
'suited for demo : no
'commercial addon needed : yes
'-----------------------------------------------------------------------------------------
$regfile = "m2560def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 64 ' default use 32 for the hardware stack
$swstack = 64 ' default use 10 for the SW stack
$framesize = 50 ' default use 40 for the frame space
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
'Init the spi pins
Spiinit
Dim Idx As Byte
Dim Leng_udp As Word ' result
Dim Buf_udp(80) As Byte
Dim Sstr As String * 20
Dim Temp As Byte , Temp2 As Byte
Print "Init , set IP to 192.168.1.15" ' display a message
Enable Interrupts ' before we use config tcpip , we need to enable the interrupts
Config Tcpip = Int4 , _
Mac = 12.128.12.34.56.78 , _
Ip = 192.168.1.15 , _
Submask = 255.255.255.0 , _
Gateway = 192.168.1.1 , _
Localport = 5000 , _
Tx = $55 , Rx = $55 , _
Chip = W5100 , _
Spi = 1 , _
Cs = Portb.4
Idx = Getsocket(idx , Sock_dgram , 5000 , 0) ' get socket for UDP mode, specify port 9092
Print "Socket:" ; Idx
Leng_udp = Socketstat(idx , Sock_closed)
Print "Stat:" ; Hex(leng_udp)
Do
Leng_udp = Socketstat(idx , Sel_recv) ' get number of bytes waiting
If Leng_udp > 0 Then
Print "Leng:" ; Leng_udp
Temp2 = Leng_udp - 8 'the first 8 bytes are always the UDP header which consist of the length, IP number and port address
Print
Print Peersize ; " " ; Peeraddress ; " " ; Peerport ' these are assigned when you use UDPREAD
Print Ip2str(peeraddress) ' print IP in usual format
Temp = Udpread(idx , Buf_udp(1) , Leng_udp) ' read the result
Print "Error:" ; Temp
For Temp = 1 To Leng_udp
Print Chr(buf_udp(temp));
Next Temp
Print
End If
Loop
End |
Init , set IP to 192.168.1.15
UDP demo
Socket 0
Bytes waiting : 771
Peersize = 0
Peeraddress = 0.0.0.0
Peerport = 0
read 0
Init , set IP to 192.168.1.15
UDP demo
Socket 0
Bytes waiting : 771
Peersize = 0
Peeraddress = 0.0.0.0
Peerport = 0
read 0
(BASCOM-AVR version : 2.0.8.0 , Latest : 2.0.7.8 ) |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5913 Location: Holland
|
Posted: Tue Apr 11, 2017 8:26 pm Post subject: |
|
|
you need to use Udpreadheader for the w5100.
you best start with a sample from the samples\tcpip\w5100 folder
you can best use Config Tcpip = NOINT
or increase the $hwstack _________________ Mark |
|
Back to top |
|
|
bzijlstra
Joined: 30 Dec 2004 Posts: 1179 Location: Tilburg - Netherlands
|
Posted: Tue Apr 11, 2017 11:38 pm Post subject: $stack and $framesize... W5100 |
|
|
The first thing I noticed, you should increase $stacks en $framesize.
Check on other examples.
Have fun
Ben Zijlstra |
|
Back to top |
|
|
sielcon
Joined: 16 Mar 2006 Posts: 74 Location: Argentina
|
Posted: Wed Apr 12, 2017 2:04 am Post subject: |
|
|
Hello Mark, thank you very much for your quick response. Probe your suggestions regarding stack and NOINT but nothing changes. Then probe the PING_SPI.BAS and if it worked, later probe the UDP_SWITCH_SPI_MEGA.BAS and it did not work either. In all cases do the same as I said in my previous post. For the doubts also change the whole HARD but nothing change, it would seem that the problem is when it reads UDP because in the example PING_SPI.BAS uses Udpwrite and it works.
Also run another application that developed some time ago and does not work. It's very strange, I wanted to try with an earlier version of BASCOM but I do not have any.
Hope someone can help me.
Best regards. |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5913 Location: Holland
|
Posted: Wed Apr 12, 2017 1:15 pm Post subject: |
|
|
you need to pay attention to this :
Udpreadheader Idx ' read the udp header
#if Showresult
Print
Print Peersize ; " " ; Peeraddress ; " " ; Peerport ' these are assigned when you use UDPREAD
Print Ip2str(peeraddress) ' print IP in usual format
#endif
If Peersize > 0 Then ' the actual number of bytes
Print "read" ; Peersize
Temp = Udpread(idx , S(1) , Peersize) ' read the result
when using an old UDP sample for the W3100 you need to include the UDPREADHEADER _________________ Mark |
|
Back to top |
|
|
sielcon
Joined: 16 Mar 2006 Posts: 74 Location: Argentina
|
Posted: Tue Apr 18, 2017 12:38 pm Post subject: |
|
|
Dear Mark, I am using W5100, I also use UDPHEADER but the results do not change, it transmits without problems but when it receives the CPU is reset. The strangest thing is that if through EASYTCP send data to another IP is also reset.
Best regards |
|
Back to top |
|
|
bzijlstra
Joined: 30 Dec 2004 Posts: 1179 Location: Tilburg - Netherlands
|
Posted: Tue Apr 18, 2017 1:13 pm Post subject: Questions about hardware |
|
|
Still some questions:
Are you using an Arduino Mega 2560 with W5100 Ethernet shield?
Do you have other shields on it?
How is the power to this board managed? An USB cable? Power through the external Arduino jack? 7-12 volt? Enough amps?
Have you checked the software on a similair board?
You have changed the code, stacks etc, is it possible to show your latest version?
Fusebits?
Ben Zijlstra |
|
Back to top |
|
|
EDC
Joined: 26 Mar 2014 Posts: 971
|
Posted: Tue Apr 18, 2017 1:43 pm Post subject: |
|
|
Im the author of this video and can confirm that there is no any problem for programming arduino boards Mega2560 and even Uno328P for WS5100 and UDP communication. Look that even my tablet get acces to this Arduino boards via WiFi
The problem is in Your code.
My program it is written once, but by configuring (IP, Gate, ports, etc.) with AT commands it allows you to use it on multiple boards.
I can pack this program and share but if you resolve problem by searching in your code an learn something, give you more satisfaction |
|
Back to top |
|
|
bzijlstra
Joined: 30 Dec 2004 Posts: 1179 Location: Tilburg - Netherlands
|
Posted: Tue Apr 18, 2017 1:58 pm Post subject: Some more to 'PEEK' |
|
|
EDC
Before there were libraries I have written software for the W5100 and AVR. But exact as you stated perhaps the best to first get this hardware running.
If you want to have a peek at what 'I' did (it started with a small program from Thomas Held), here is that page
http://members.home.nl/bzijlstra/software/examples/wiz810mj.htm
My two cents
Ben Zijlstra |
|
Back to top |
|
|
EDC
Joined: 26 Mar 2014 Posts: 971
|
Posted: Tue Apr 18, 2017 2:06 pm Post subject: |
|
|
@bzijlstra
I know Your work Ben
There is even polish tutorial how to play with ENC28J60 writted by Piotr Rzeszut and You get special thanks in this publication on the first page
So I am full of respect for your work
Thanks. |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5913 Location: Holland
|
Posted: Tue Apr 18, 2017 2:20 pm Post subject: |
|
|
A crash : check your power supply. _________________ Mark |
|
Back to top |
|
|
|