'------------------------------------------------------------------ ' Atmega168 and WIZ810MJ All you need to get a PING and UDP working '------------------------------------------------------------------ $regfile = "m168def.dat" $crystal = 8000000 $baud = 9600 $hwstack = 64 $swstack = 64 $framesize = 64 $include "w5100.inc" Dim Value As Byte Dim Adres As Word Dim Adresl As Byte At Adres Overlay Dim Adresh As Byte At Adres + 1 Overlay Dim X As Word Dim Wtempb As Word Dim Wtempe As Word Dim Size As Word Dim Sizel As Byte At Size Overlay Dim Sizeh As Byte At Size + 1 Overlay Dim Pointer As Word Dim Pointerl As Byte At Pointer Overlay Dim Pointerh As Byte At Pointer + 1 Overlay Dim Bpointer As Word Dim Epointer As Word Const W5100_s3_rx_base = &H7800 Const W5100_s2_rx_base = &H7000 Const W5100_s1_rx_base = &H6800 Const W5100_s0_rx_base = &H6000 Const W5100_s3_tx_base = &H5800 Const W5100_s2_tx_base = &H5000 Const W5100_s1_tx_base = &H4800 Const W5100_s0_tx_base = &H4000 Const W5100_sn_rx_mask = &H07FF Const W5100_sn_tx_mask = &H07FF ' 0 = long board ' 1 = sandwichboard Const Board = 0 'Used Wiz5100 ports and pins Wiz5100_cs Alias Portb.2 'Chipselect WIZ810MJ Print "Start.." Wait 1 #if Board 'sandwichboard Wiz5100_res Alias Portd.3 'reset of WIZ810MJ 'Other used ports and pins Relais1 Alias Portd.4 Relais2 Alias Portd.5 Relais3 Alias Portd.6 Relais4 Alias Portd.7 #elseif Wiz5100_res Alias Portc.0 'long board Relais1 Alias Portc.1 Relais2 Alias Portc.2 Relais3 Alias Portc.3 Relais4 Alias Portc.4 #endif 'Used ports and pins Config Wiz5100_cs = Output Config Wiz5100_res = Output 'Configuration of the SPI-bus Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0 'Init the spi pins Spiinit 'Here we declare the used sub routines Declare Sub Wiz5100_init Declare Sub Wiz5100_readvalue(byval Reg As Word) Declare Sub Wiz5100_writevalue(byval Reg As Word , Byval Value As Byte) Declare Sub Wiz5100_reset Declare Sub Ntp1 Declare Sub Ntp2 Dim Wiz5100_opcode_read As Byte Wiz5100_opcode_read = 15 Dim Wiz5100_opcode_write As Byte Wiz5100_opcode_write = 240 Call Wiz5100_init 'We initialize the Wiz810MJ 'now open a UDP-socket 'Assign all 2k memory to every socket for RX Call Wiz5100_writevalue(w5100_rmsr , &B01010101) ' 'Assign all 2k memory to every socket for TX Call Wiz5100_writevalue(w5100_tmsr , &B01010101) 'protocol = UDP Call Wiz5100_writevalue(w5100_s0_mr , Sn_mr_udp) Call Wiz5100_writevalue(w5100_s0_port0 , &H13) ' port 5000 Call Wiz5100_writevalue(w5100_s0_port1 , &H88) 'give the open command Call Wiz5100_writevalue(w5100_s0_cr , Sn_cr_open) 'wait for socket to come online Do Call Wiz5100_readvalue(w5100_s0_sr) Loop Until Value = Sock_udp 'check on RECV Do Call Wiz5100_readvalue(w5100_s0_ir) If Value.2 = 1 Then Print "Received something on Socket 0" Print 'read the Read Pointer 'Print "Read RX_RD0/1" Call Wiz5100_readvalue(w5100_s0_rx_rd0) 'Print "W5100_s0_rx_rd0 " ; Hex(value) Pointerh = Value Call Wiz5100_readvalue(w5100_s0_rx_rd1) 'Print "W5100_s0_rx_rd1 " ; Hex(value) Pointerl = Value 'Print "Read Pointer = " ; Hex(pointer) Bpointer = Pointer 'Socket 0 RX Received Size Call Wiz5100_readvalue(w5100_s0_rx_rsr0) Sizeh = Value Call Wiz5100_readvalue(w5100_s0_rx_rsr1) Sizel = Value Pointer = Pointer + Size Epointer = Pointer Print "Begin is = " ; Bpointer Print "End is = " ; Epointer Print "Size is = " ; Size Wtempb = W5100_s0_rx_base + Bpointer Wtempe = Wtempb + Size 'we still have to take care of the MASK of &H07FF (later) Print "Begin WIZ810MJ RX-memory = " ; Hex(wtempb) Print "End WIZ810MJ RX-memory = " ; Hex(wtempe) Print 'skip 8 byte header Wtempb = Wtempb + 8 Decr Wtempe Print "Received UDP-string" Print For X = Wtempb To Wtempe Call Wiz5100_readvalue(x) Print Chr(value); Next X Print Print 'update pointer Call Wiz5100_writevalue(w5100_s0_rx_rd0 , Pointerh) Call Wiz5100_writevalue(w5100_s0_rx_rd1 , Pointerl) Call Wiz5100_writevalue(w5100_s0_cr , Sn_cr_recv) 'reset interrupt Call Wiz5100_writevalue(w5100_s0_ir , &B100) End If Loop End Sub Wiz5100_init Call Wiz5100_reset 'Hardware reset 'Register reset Call Wiz5100_writevalue(w5100_mr , &H80) 'Set gateway IP adress Call Wiz5100_writevalue(w5100_gar0 , 192) '192.168.0.254 My gateway Call Wiz5100_writevalue(w5100_gar1 , 168) Call Wiz5100_writevalue(w5100_gar2 , 0) Call Wiz5100_writevalue(w5100_gar3 , 254) 'Set Subnetmask Call Wiz5100_writevalue(w5100_subr0 , 255) '255.255.255.0 networkmask Call Wiz5100_writevalue(w5100_subr1 , 255) Call Wiz5100_writevalue(w5100_subr2 , 255) Call Wiz5100_writevalue(w5100_subr3 , 0) 'Set MAC Call Wiz5100_writevalue(w5100_shar0 , &H00) 'MAC-address Call Wiz5100_writevalue(w5100_shar1 , &H10) Call Wiz5100_writevalue(w5100_shar2 , &H20) Call Wiz5100_writevalue(w5100_shar3 , &H30) Call Wiz5100_writevalue(w5100_shar4 , &H40) Call Wiz5100_writevalue(w5100_shar5 , &H50) 'Set own IP adress Call Wiz5100_writevalue(w5100_sipr0 , 192) 'IP-number of device Call Wiz5100_writevalue(w5100_sipr1 , 168) Call Wiz5100_writevalue(w5100_sipr2 , 0) Call Wiz5100_writevalue(w5100_sipr3 , 50) End Sub Sub Wiz5100_readvalue(reg) Adres = Reg Reset Wiz5100_cs Spiout Wiz5100_opcode_read , 1 Spiout Adresh , 1 Spiout Adresl , 1 Spiin Value , 1 Set Wiz5100_cs End Sub Sub Wiz5100_writevalue(reg , Value ) Adres = Reg Reset Wiz5100_cs Spiout Wiz5100_opcode_write , 1 Spiout Adresh , 1 Spiout Adresl , 1 Spiout Value , 1 Set Wiz5100_cs End Sub Sub Wiz5100_reset Wiz5100_res = 1 Waitms 10 Wiz5100_res = 0 Waitms 30 'Minimum 20 µs Wiz5100_res = 1 End Sub