'------------------------------------------------------------------ ' Atmega168 and WIZ810MJ All you need to get a PING and NTP 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 Temp As Word Dim Size As Word Dim Sizel As Byte At Size Overlay Dim Sizeh As Byte At Size + 1 Overlay Dim Count As Byte Dim Clock(4) As Byte Dim L1 As Long At Clock Overlay Dim L2 As Long $lib "datetime.lbx" Config Date = Dmy , Separator = / 'Const Gs0_tx_base = &H4000 'Const Gs1_tx_base = &H4800 'Const Gs2_tx_base = &H5000 'Const Gs3_tx_base = &H5800 Const Gs0_rx_base = &H6000 'Const Gs1_rx_base = &H6800 'Const Gs2_rx_base = &H7000 'Const Gs3_rx_base = &H7800 'Const Gsn_rx_mask = &H07FF 'Const Gsn_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.." #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 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 'test 'Print "Value = " ; Value Call Wiz5100_readvalue(w5100_s0_sr) Loop Until Value = Sock_udp 'Print "value = " ; Value ' Sending a UDP-packet 'IP-number Call Wiz5100_writevalue(w5100_s0_dipr0 , 193) Call Wiz5100_writevalue(w5100_s0_dipr1 , 67) Call Wiz5100_writevalue(w5100_s0_dipr2 , 79) Call Wiz5100_writevalue(w5100_s0_dipr3 , 202) 'Destination port Call Wiz5100_writevalue(w5100_s0_dport0 , 0) Call Wiz5100_writevalue(w5100_s0_dport1 , 37) 'Data Call Wiz5100_writevalue(&H4000 , 88) ' X Call Wiz5100_writevalue(&H4001 , &H0D) Call Wiz5100_writevalue(&H4002 , &H0A) 'set size Call Wiz5100_writevalue(w5100_s0_tx_wr0 , 0) Call Wiz5100_writevalue(w5100_s0_tx_wr1 , 3) ' send Wait 1 ' Call Wiz5100_writevalue(w5100_s0_cr , Sn_cr_send) Do Call Wiz5100_readvalue(w5100_s0_cr) Loop Until Value = 0 Print "X CR/LF should have been send" Print 'let's have a look if interrupt is working while using SPI 'only on socket 0 Call Wiz5100_writevalue(w5100_imr , &B0000_0001) 'check on RECV Do Call Wiz5100_readvalue(w5100_s0_ir) 'Print Bin(value) If Value.2 = 1 Then Print "Received something on Socket 0" Call Wiz5100_writevalue(w5100_s0_ir , &B100) Exit Do End If Loop 'Socket 0 RX Received Size Call Wiz5100_readvalue(w5100_s0_rx_rsr0) Sizeh = Value Call Wiz5100_readvalue(w5100_s0_rx_rsr1) Sizel = Value Print "Received bytes " ; Size Decr Size Count = 1 Temp = Gs0_rx_base + Size For X = Gs0_rx_base To Temp Call Wiz5100_readvalue(x) Print Hex(x) ; " " ; Hex(value) ; " " ; Value; If X > &H6007 Then Print " <<" Clock(count) = Value Incr Count Else Print End If Next X Print Swap Clock(1) , Clock(4) Swap Clock(3) , Clock(2) L2 = L1 + 1139293696 L2 = L2 + 7200 Print "Date: " ; Date(l2) Print "Time: " ; Time(l2) '( Print 'Socket 0 RX Read Pointer Call Wiz5100_readvalue(w5100_s0_rx_rd0) Print "Readpointer " ; Value Call Wiz5100_readvalue(w5100_s0_rx_rd1) Print "Readpointer " ; Value Wait 10 Print "--------" ') 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) 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) 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) 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) 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