'------------------------------------------------------------------ ' Atmega168 and WIZ810MJ All you need to get a PING and UDP working '------------------------------------------------------------------ $regfile = "m168def.dat" $crystal = 8000000 $baud = 38400 $hwstack = 128 $swstack = 128 $framesize = 128 $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 Temp As Word Dim Wtemp As Word Dim Wtempb As Word Dim Wtempe As Word Dim Pointer As Word Dim Pointerl As Byte At Pointer Overlay Dim Pointerh As Byte At Pointer + 1 Overlay Dim Size As Word Dim Sizel As Byte At Size Overlay Dim Sizeh As Byte At Size + 1 Overlay Dim Startpos As Word Dim Tx_wr As Word Dim Offset As Word Dim Offsend As Word Dim Bpointer As Word Dim Uppersize As Word Dim Startadress 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 Wait 1 '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 'Socket 0 RX Received Size Call Wiz5100_readvalue(w5100_s0_rx_rsr0) Sizeh = Value Call Wiz5100_readvalue(w5100_s0_rx_rsr1) Sizel = Value Startpos = Pointer Offset = Startpos And &H7FF Startadress = &H6000 + Offset Offsend = Offset + Size 'sendsize Bpointer = Startadress Print "Startpos = " ; Hex(startpos) Print "Offset = " ; Hex(offset) Print "Startadress = " ; Hex(startadress) Print "Offsend = " ; Hex(offsend) Print "Uppersize = " ; Hex(uppersize) Print "Size = " ; Hex(size) Print If Offsend > &H800 Then Print "Offsend > &H800" Uppersize = &H800 - Offset Print "Uppersize nu " ; Hex(uppersize) Temp = 0 For X = 1 To Uppersize 'skip header 8 byte Incr Temp If Temp > 8 Then Call Wiz5100_readvalue(bpointer) Print Chr(value); End If Incr Bpointer Next X Bpointer = &H6000 Incr Uppersize For X = Uppersize To Size Incr Temp If Temp > 8 Then Call Wiz5100_readvalue(bpointer) Print Chr(value); End If Incr Bpointer Next X Else Temp = 0 For X = 1 To Size 'skip header 8 byte Incr Temp If Temp > 8 Then Call Wiz5100_readvalue(bpointer) Print Chr(value); End If Incr Bpointer Next X End If Print Pointer = Pointer + Size 'Print "Pointerh " ; Hex(pointerh) 'Print "Pointerl " ; Hex(pointerl) '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) ' Call Wiz5100_readvalue(w5100_s0_cr) 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 Waitms 250 Wiz5100_res = 1 Waitms 250 Wiz5100_res = 0 Waitms 250 'Minimum 20 µs Wiz5100_res = 1 End Sub