Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » перезагрузчик usb-модема


перезагрузчик usb-модема

Сообщений 1 страница 24 из 24

1

Доброго времени суток, други!
Уверен, тема будет интересна многим.
Несколько дней бьюсь, ничего не выходит, вынужден в очередной раз просить Вас о помощи.
Суть проблемы: имеется usb-модем Yota с внешней антенной. подключен к wifi роутеру. все это хозяйство стоит в труднодоступном месте. раз в несколько дней соединение рубится и помогает только физическое отключение/подключение модема. Возникла идея создать девайс, который будет это делать за меня.
Железо: решил заказать все модулями:
1) ethernet контроллер
http://viewitem.eim.ebay.ru/New-W5100-E … 9716131016
2) плата с контроллером (заменил atmega8 на atmega168)
http://viewitem.eim.ebay.ru/ATMEL-ATMeg … 7491218018
3) модуль релюшек (одна для питания Yota, вторая - служебная)
http://viewitem.eim.ebay.ru/2Channel-5V … 7435761018

За основу взял исходник с сайта http://members.home.nl/bzijlstra/softwa … z810mj.htm

Немного изменил под свои нужды:

Код:
$regfile = "m168def.dat"
$crystal = 8000000

$hwstack = 80
$swstack = 80
$framesize = 90

Dim Second As Byte
Dim Minute As Byte
Dim Hour As Byte
Dim Count As Byte
Dim Day As Word
Dim A As Byte
Dim Wert As Byte
Dim Status As Byte
Dim Oldstatus As Byte
Dim Pointer As Word
Dim Tmp_value As Byte
Dim Tmp_str As String * 1
Dim Highbyte As Byte
Dim Lowbyte As Byte
Dim X As Integer
Dim Userpass As String * 20
Dim Tmp_auth As String * 20
Dim Authentification As Byte
Dim Website As Byte                                         'Flag for website ok / websitewrong selection
Dim Buffer As String * 700                                  '700 Bytes should be enough for the great header of firefox browsers
$eeprom
Dim B As Byte
Label1:
Data 1 , 2 , 3 , 4 , 5
$data

Const Http_auth = 0                                         '0= no HTTP-AUTH, 1= with HTTP-AUTH

Userpass = "admin:demo"                                     'Place a : between username and password (max. 20 character all together)
Tmp_auth = Base64enc(userpass)

'Other used ports and pins
Relais1 Alias Portc.0
Relais2 Alias Portc.1
Readeeprom B , Label1

'Config Led = Output
Config Relais1 = Output
Config Relais2 = Output
Relais1 = 0
Relais2 = B



Config Watchdog = 2048                                      'Watchdog configuration for stable reboot if system hangs

'Configuration of the SPI-bus
Wiz5100_cs Alias Portb.2                                    'Chipselect WIZ810MJ
Wiz5100_res Alias Portb.0                                   'Reset WIZ810MJ

'configure Wiz5100 pins
Config Wiz5100_cs = Output
Config Wiz5100_res = Output
Wiz5100_res = 1
'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

Const Ip[1] = 192
Const Ip[2] = 168                                           'Own IP-Adress
Const Ip[3] = 1
Const Ip[4] = 50

Const Sn[1] = 255                                           'Own Networkmask
Const Sn[2] = 255
Const Sn[3] = 255
Const Sn[4] = 0

Const Gw[1] = 192                                           'IP-Adress of the gateway
Const Gw[2] = 168
Const Gw[3] = 1
Const Gw[4] = 1

Const Mac[1] = &H00                                         'Own MAC-Adress
Const Mac[2] = &H20
Const Mac[3] = &H18
Const Mac[4] = &HB1
Const Mac[5] = &H15
Const Mac[6] = &H5F

Const Wiz5100_opcode_read = 15                              'OP-Code for Read from the Wiz5100
Const Wiz5100_opcode_write = 240                            'OP-Code for write to the Wiz5100

'Here we declare the used sub routines
Declare Sub Wiz5100_init
Declare Sub Wiz5100_readvalue(byval Highbyte As Byte , Byval Lowbyte As Byte)
Declare Sub Wiz5100_writevalue(byval Highbyte As Byte , Byval Lowbyte As Byte , Byval Value As Byte)
Declare Sub Wiz5100_receive
Declare Sub Wiz5100_send
Declare Sub Wiz5100_disconnect
Declare Sub Wiz5100_reset

Call Wiz5100_init                                           'We initialize the Wiz5100

Start Watchdog                                              'Start the watchdog

Config Timer1 = Timer , Prescale = 256                      'Config timer1 fora 1 second interval
Enable Timer1

On Timer1 Isr_timer1                                        'Timer interrupt routine

Enable Interrupts                                           'Activate the Interrupts

Timer1 = 68570                                              '34285                                              'Startvalue for the second timer

Do
   Reset Watchdog                                           'Reset the watchdog

   'Get socket status
   Call Wiz5100_readvalue(&H4 , &H3)
   Status = Wert

   If Status <> Oldstatus Then
      Oldstatus = Status
   End If

   'Connection was closed, we start the socket new
   If Status = &H0 Or Status = &H1C Then
      Call Wiz5100_disconnect()
   End If

   'As long as connection is etablished (&H17) we will look if client send new data
   If Status = &H17 Then
      Buffer = ""
      Call Wiz5100_receive()
   End If
Loop

End

'Disconnect connection: close socket, reopen socket and wait for new connection
Sub Wiz5100_disconnect
   Call Wiz5100_writevalue(&H4 , &H1 , &H0)                 'CLOSE
   Call Wiz5100_writevalue(&H4 , &H1 , &H1)                 'OPEN
   Call Wiz5100_writevalue(&H4 , &H1 , &H2)                 'LISTEN
End Sub

'Send headers and websites
Sub Wiz5100_send
   Local Sendsize As Integer , Pos_tx As Word , Freesize As Word , Offset As Word , Tx_wr As Word
   Local Startadress As Word , Offsend As Word , Uppersize As Word , Glaenge As Word , Startpos As Word
   Local Adctemp As Word , Tablewidth As Word , Color As String * 7

   'We restore the used website data
   If Website = 0 Then
      Restore Websitewrong
   Elseif Authentification = 0 Then
      Restore Websiteok
   Else
      Restore Websiteauth
   End If

   Do
      Read Buffer

      'Look for the end of a website
      If Buffer = "%END%" Then
         Exit Do
      End If


      'Look for variable and replace them, here we can insert new own variables if we want
     If Buffer = "%MRELAIS1%" Then
            Buffer = "<br/><form action=" + Chr(34) + "/" + Chr(34) + " method=" + Chr(34) + "POST" + Chr(34) + ">"
            Buffer = Buffer + "<input type=" + Chr(34) + "hidden" + Chr(34) + " name=" + Chr(34) + "MRELAIS1" + Chr(34) + " value=" + Chr(34) + "0" + Chr(34) + ">"
            Buffer = Buffer + "<input type = " + Chr(34) + "submit" + Chr(34) + " value = " + Chr(34) + "Перезапуск Yota" + Chr(34) + "></form>"
     End If
     If Buffer = "%STATUS%" Then
            If Relais2 = 1 Then
            Buffer = "<font color = green>Включено</font>"
            Else
            Buffer = "<font color = red>Выключено</font>"
            End If
      End If
     If Buffer = "%MRELAIS2%" Then

            Buffer = "<br/><form action=" + Chr(34) + "/" + Chr(34) + " method=" + Chr(34) + "POST" + Chr(34) + ">"
            Buffer = Buffer + "<input type=" + Chr(34) + "hidden" + Chr(34) + " name=" + Chr(34) + "MRELAIS2" + Chr(34) + " value=" + Chr(34) + "0" + Chr(34) + ">"
            Buffer = Buffer + "<input type = " + Chr(34) + "submit" + Chr(34) + " value = " + Chr(34) + "Переключение реле" + Chr(34) + "></form>"
     End If

     If Buffer = "%DAY%" Then
         Buffer = Str(day)
     Elseif Buffer = "%COUNTER%" Then
        Buffer = Str(count)
      Elseif Buffer = "%HOUR%" Then
         Buffer = Str(hour)
      Elseif Buffer = "%MINUTE%" Then
         Buffer = Str(minute)
      Elseif Buffer = "%SECOND%" Then
         Buffer = Str(second)
      End If

      Sendsize = Len(buffer)

      Freesize:
         Call Wiz5100_readvalue(&H4 , &H20)
         Freesize = Wert
         Shift , Freesize , Left , 8
         Call Wiz5100_readvalue(&H4 , &H21)
         Freesize = Freesize + Wert

         If Freesize < Sendsize Then
            Goto Freesize
         End If

      Call Wiz5100_readvalue(&H4 , &H24)
      Tx_wr = Wert
      Shift , Tx_wr , Left , 8
      Call Wiz5100_readvalue(&H4 , &H25)
      Tx_wr = Tx_wr + Wert

      Startpos = Tx_wr

      Offset = Tx_wr And &H7FF

      Startadress = &H4000 + Offset

      Offsend = Offset + Sendsize

      Pointer = Startadress

      If Offsend > &H800 Then

         Uppersize = &H800 - Offset

         For X = 1 To Uppersize
            Highbyte = High(pointer)
            Lowbyte = Low(pointer)
            Tmp_str = Mid(buffer , X , 1)
            Tmp_value = Asc(tmp_str)
            Call Wiz5100_writevalue(highbyte , Lowbyte , Tmp_value)
            Incr Pointer
         Next X

         Pointer = &H4000
         Incr Uppersize

         For X = Uppersize To Sendsize
            Highbyte = High(pointer)
            Lowbyte = Low(pointer)
            Tmp_str = Mid(buffer , X , 1)
            Tmp_value = Asc(tmp_str)
            Call Wiz5100_writevalue(highbyte , Lowbyte , Tmp_value)
            Incr Pointer
         Next X
      Else
         For X = 1 To Sendsize
            Highbyte = High(pointer)
            Lowbyte = Low(pointer)
            Tmp_str = Mid(buffer , X , 1)
            Tmp_value = Asc(tmp_str)
            Call Wiz5100_writevalue(highbyte , Lowbyte , Tmp_value)
            Incr Pointer
         Next X
      End If

      Call Wiz5100_readvalue(&H4 , &H24)
      Startpos = Wert
      Shift , Startpos , Left , 8
      Call Wiz5100_readvalue(&H4 , &H25)
      Startpos = Startpos + Wert

      Glaenge = Startpos + Sendsize

      'Send Site
      Highbyte = High(glaenge)
      Call Wiz5100_writevalue(&H4 , &H24 , Highbyte)

      Lowbyte = Low(glaenge)
      Call Wiz5100_writevalue(&H4 , &H25 , Lowbyte)

     'Set SEND flag
      Call Wiz5100_writevalue(&H4 , &H1 , &H20)
   Loop

   'Set DISCON flag
   Call Wiz5100_writevalue(&H4 , &H1 , &H8)
End Sub

'Receive data
Sub Wiz5100_receive
   Local I As Word
   Local Top As Word
   Local Bytes_rcv As Word
   Local Headerend As String * 4

   'Check for new incomming data
   Call Wiz5100_readvalue(&H4 , &H26)
   Bytes_rcv = Wert
   Shift , Bytes_rcv , Left , 8
   Call Wiz5100_readvalue(&H4 , &H27)
   Bytes_rcv = Bytes_rcv + Wert

   If Bytes_rcv > 0 Then
      Bytes_rcv = Bytes_rcv - 1

      For I = 0 To Bytes_rcv
          Top = I + &H6000
          Highbyte = High(top)
          Lowbyte = Low(top)
          Call Wiz5100_readvalue(highbyte , Lowbyte)

          'We only use correct header, correct header must be < 700 bytes!
          If Bytes_rcv < 700 Then
             Buffer = Buffer + Chr(wert)
          End If
      Next

      'Is header complete or is it a post reply?
      Headerend = Chr(13) + Chr(10) + Chr(13) + Chr(10)

      If Instr(buffer , Headerend) > 0 Then

         Website = 1

         #if Http_auth
            If Instr(buffer , Tmp_auth) > 0 Then
               'Authentification Found And Correct
               Authentification = 0

        If Instr(buffer , "POST /") = 1 Then

               'Toggle RELAIS1
               If Instr(buffer , "MRELAIS1=0") > 0 Then
                  Relais1 = 1
                  Waitms 500
                  Relais1 = 0
               End If

               'Toggle RELAIS2
               If Instr(buffer , "MRELAIS2=0") > 0 Then
                  Toggle Relais2
               End If


               End If
            Else
               'Authentification not found or not correct
               Authentification = 1
            End If
         #else

            Authentification = 0

            If Instr(buffer , "POST /") = 1 Then

               'Toggle RELAIS1
               If Instr(buffer , "MRELAIS1=0") > 0 Then
                  Relais1 = 1
                  Wait 2
                  Relais1 = 0
                  Incr Count
               End If

               'Toggle RELAIS2
               If Instr(buffer , "MRELAIS2=0") > 0 Then
                  Toggle Relais2
                  B = Relais2
                  Writeeeprom B , Label1
               End If


            End If
         #endif

         'Set RECV flag
         Call Wiz5100_writevalue(&H4 , &H1 , &H40)

         Call Wiz5100_send()
      Elseif Bytes_rcv > 700 Then
         'Set RECV flag
         Call Wiz5100_writevalue(&H4 , &H1 , &H40)

         Website = 0

         Call Wiz5100_send()
      End If
   End If
End Sub

Sub Wiz5100_init
    Call Wiz5100_reset                                      'Hardware reset

   'Register reset
   Call Wiz5100_writevalue(&H0 , &H0 , &H80)

   'Set gateway IP adress
   Call Wiz5100_writevalue(&H0 , &H1 , Gw[1])
   Call Wiz5100_writevalue(&H0 , &H2 , Gw[2])
   Call Wiz5100_writevalue(&H0 , &H3 , Gw[3])
   Call Wiz5100_writevalue(&H0 , &H4 , Gw[4])

   'Set Subnetmask
   Call Wiz5100_writevalue(&H0 , &H5 , Sn[1])
   Call Wiz5100_writevalue(&H0 , &H6 , Sn[2])
   Call Wiz5100_writevalue(&H0 , &H7 , Sn[3])
   Call Wiz5100_writevalue(&H0 , &H8 , Sn[4])

   'Set MAC
   Call Wiz5100_writevalue(&H0 , &H9 , Mac[1])
   Call Wiz5100_writevalue(&H0 , &HA , Mac[2])
   Call Wiz5100_writevalue(&H0 , &HB , Mac[3])
   Call Wiz5100_writevalue(&H0 , &HC , Mac[4])
   Call Wiz5100_writevalue(&H0 , &HD , Mac[5])
   Call Wiz5100_writevalue(&H0 , &HE , Mac[6])

   'Set own IP adress
   Call Wiz5100_writevalue(&H0 , &HF , Ip[1])
   Call Wiz5100_writevalue(&H0 , &H10 , Ip[2])
   Call Wiz5100_writevalue(&H0 , &H11 , Ip[3])
   Call Wiz5100_writevalue(&H0 , &H12 , Ip[4])

   'Initialize socket 0 with TCP on port 80
   Call Wiz5100_writevalue(&H4 , &H0 , &H1 )                'TCP

   Call Wiz5100_writevalue(&H4 , &H4 , &H0 )                'Port 80 HTTP
   Call Wiz5100_writevalue(&H4 , &H5 , &H50 )

   Call Wiz5100_disconnect()
End Sub

Sub Wiz5100_writevalue(byval Highbyte As Byte , Byval Lowbyte As Byte , Byval Value As Byte)
   Reset Wiz5100_cs
   A = Wiz5100_opcode_write
   Spiout A , 1
   A = Highbyte
   Spiout A , 1
   A = Lowbyte
   Spiout A , 1
   Spiout Value , 1
   Set Wiz5100_cs
End Sub

Sub Wiz5100_readvalue(byval Highbyte As Byte , Byval Lowbyte As Byte)
   Reset Wiz5100_cs
   A = Wiz5100_opcode_read
   Spiout A , 1
   A = Highbyte
   Spiout A , 1
   A = Lowbyte
   Spiout A , 1
   Spiin Wert , 1
   Set Wiz5100_cs
End Sub

'The W5100 gets its reset from the general Arduino reset
Sub Wiz5100_reset
 Wiz5100_res = 0
   Waitus 30                                                'Minimum 20 µs
 Wiz5100_res = 1
End Sub

Isr_timer1:                                                 'ISR of Timer1
Timer1 = 68570                                              'Timer1 must start from 34285 again

Incr Second                                                 'Here we increase the seconds
If Second = 60 Then
   Second = 0
   Incr Minute                                              'Here we increase the minutes
   If Minute = 60 Then
      Minute = 0
      Incr Hour                                             'Here we increase the hours
      If Hour = 24 Then
         Hour = 0
         Incr Day                                           'Here we increase the days
      End If
   End If
End If
Return

'Every Website must end with a stand alone Data "%END%" in the last line
Websiteauth:
Data "HTTP/1.0 401 Unauthorized{013}{010}Server: YOTA{013}{010}WWW-Authenticate: Basic realm={034}Website{034}{013}{010}Content-Type: text/html{013}{010}{013}{010}"
Data "<html><head><meta http-equiv={034}Pragma{034} Content={034}no cache{034}/>"
Data "<title>МОДЕМ YOTA</title></head><body><center><table width={034}600{034}><tr><td align={034}center{034}><font face={034}courier{034} color={034}#000000{034}>"
Data "<H1>МОДЕМ YOTA<br></H1><br/>"
Data "<b>Для входа необходимо ввести логин и пароль<br><br><br>"
'Data "<br><br><font face={034}verdana{034} color={034}#000000{034}><a href={034}Ben's HobbyCorner{034}>"
Data "</b></a></font></body></html>"
Data "%END%"

Websitewrong:
Data "HTTP/1.0 200 Document follows{013}{010}Server: webserver{013}{010}Content-Type: text/html{013}{010}{013}{010}"
Data "<html><head><meta http-equiv={034}Pragma{034} Content={034}no cache{034}/>"
Data "<title>МОДЕМ YOTA</title></head><body><center><table width={034}600{034}><tr><td align={034}center{034}><font face={034}courier{034} color={034}#000000{034}>"
Data "<H1>Remote reboot<br></H1></font><br/>"
Data "<font face={034}verdana{034} color={034}#C00000{034}>"
Data "</b></font></body></html>"
Data "%END%"

Websiteok:
Data "HTTP/1.0 200 Document follows{013}{010}Server: webserver{013}{010}Content-Type: text/html{013}{010}{013}{010}"
Data "<html><head><meta http-equiv={034}Pragma{034} Content={034}no cache{034}/>"
Data "<title>МОДЕМ YOTA</title></head><body><center><table width={034}600{034}><tr><td align={034}center{034}><font face={034}courier{034} color={034}#000000{034}>"
Data "<H1>Сторожевой сервер для <font color = #04aeec>Yota</font></H1>"
Data "<br><br></font>Модем<font color =#04aeec> Yota</font>"
Data "<body bgcolor = #cccccc>"
Data "%MRELAIS1%"
Data "<br>Реле ("
Data "%STATUS%"
Data ")"
Data "%MRELAIS2%"
Data "<br>"
Data "<br>"
Data "<br>"
Data "</b><br>Сервер в работе: <b>"
Data "%DAY%"
Data "</b> дней, <b>"
Data "%HOUR%"
Data "</b> часов, <b>"
Data "%MINUTE%"
Data "</b> минут <b>"
Data "%SECOND%"
Data "</b> секунд<br>"
Data "Модем перезагружен "
Data "%COUNTER%"
Data " раз"
Data "<br><br><hr>"
Data "</a></font></td></tr></table></center></body></html>"
Data "%END%"

Как web-сервер работает превосходно и вручную все переключается, проблема в другом.

У меня не получается переключить систему в режим клиента, т.е. попытаться подключиться к какому-нибудь хосту в интернет, и при отрицательном ответе перезагрузить модем.
Если я начинаю подключаться  внешнему ip-адресу, рубится текущее соединение и web-интерфейс становится недоступным.
Пните, пожалуйста в нужном направлении.

Отредактировано demonizer (2012-03-24 22:37:11)

+1

2

Неужели никто не игрался с W5100?

0

3

Я детально не занимался (не было надобности), вот это пробовали разобрать?
http://members.home.nl/bzijlstra/softwa … st.bas.txt

0

4

Ещё думаю можно в хелпе сделать поиск по слову "SOCKET" и там довольно много интересно будет.
Алгоритм весьма примитивен, надо просто подключиться к адресу и если подключение прошло успешно, то ничего не делать, если не удалось, то делать перезагрузку по питанию с задержками.

0

5

Весьма интересный пример по "SOCKETCONNECT":

Код:
$regfile = "m161def.dat"                                   ' specify the used micro
$crystal = 4000000                                         ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Const Sock_stream = $01                                     ' Tcp
Const Sock_dgram = $02                                     ' Udp
Const Sock_ipl_raw = $03                                   ' Ip Layer Raw Sock
Const Sock_macl_raw = $04                                   ' Mac Layer Raw Sock
Const Sel_control = 0                                       ' Confirm Socket Status
Const Sel_send = 1                                         ' Confirm Tx Free Buffer Size
Const Sel_recv = 2                                         ' Confirm Rx Data Size
 
'socket status
Const Sock_closed = $00                                     ' Status Of Connection Closed
Const Sock_arp = $01                                       ' Status Of Arp
Const Sock_listen = $02                                     ' Status Of Waiting For Tcp Connection Setup
Const Sock_synsent = $03                                   ' Status Of Setting Up Tcp Connection
Const Sock_synsent_ack = $04                               ' Status Of Setting Up Tcp Connection
Const Sock_synrecv = $05                                   ' Status Of Setting Up Tcp Connection
Const Sock_established = $06                               ' Status Of Tcp Connection Established
Const Sock_close_wait = $07                                 ' Status Of Closing Tcp Connection
Const Sock_last_ack = $08                                   ' Status Of Closing Tcp Connection
Const Sock_fin_wait1 = $09                                 ' Status Of Closing Tcp Connection
Const Sock_fin_wait2 = $0a                                 ' Status Of Closing Tcp Connection
Const Sock_closing = $0b                                   ' Status Of Closing Tcp Connection
Const Sock_time_wait = $0c                                 ' Status Of Closing Tcp Connection
Const Sock_reset = $0d                                     ' Status Of Closing Tcp Connection
Const Sock_init = $0e                                       ' Status Of Socket Initialization
Const Sock_udp = $0f                                       ' Status Of Udp
Const Sock_raw = $10                                       ' Status of IP RAW
 
 
 
$lib "tcpip.lbx"                                           ' specify the tcpip library
Print "Init , set IP to 192.168.0.8"                       ' display a message
Enable Interrupts                                         ' before we use config tcpip , we need to enable the interrupts
Config Tcpip = Int0 , Mac = 12.128.12.34.56.78 , Ip = 192.168.0.8 , Submask = 255.255.255.0 , Gateway = 0.0.0.0 , Localport = 1000 , Tx = $55 , Rx = $55
 
'Use the line below if you have a gate way
'Config Tcpip = Int0 , Mac = 12.128.12.34.56.78 , Ip = 192.168.0.8 , Submask = 255.255.255.0 , Gateway = 192.168.0.1 , Localport = 1000 , Tx = $55 , Rx = $55
 
Dim Bclient As Byte                                       ' socket number
Dim Idx As Byte
Dim Result As Word                                         ' result
Dim S As String * 80
Dim Flags As Byte
Dim Peer As Long
 
 
Do
For Idx = 0 To 3
   Result = Socketstat(idx , 0)                         ' get status
  Select Case Result
    Case Sock_established
          If Flags.idx = 0 Then                         ' if we did not send a welcome message yet
             Flags.idx = 1
             Result = Tcpwrite(idx , "Hello from W3100A{013}{010}")     ' send welcome
          End If
          Result = Socketstat(idx , Sel_recv)           ' get number of bytes waiting
          If Result > 0 Then
            Do
               Result = Tcpread(idx , S)
              Print "Data from client: " ; Idx ; " " ; S
               Peer = Getdstip(idx)
              Print "Peer IP " ; Ip2str(peer)
              'you could analyse the string here and send an appropiate command
              'only exit is recognized
              If Lcase(s) = "exit" Then
                  Closesocket Idx
              Elseif Lcase(s) = "time" Then
                  Result = Tcpwrite(idx , "12:00:00{013}{010}")     ' you should send date$ or time$
              End If
            Loop Until Result = 0
          End If
    Case Sock_close_wait
          Print "close_wait"
          Closesocket Idx
    Case Sock_closed
          Print "closed"
          Bclient = Getsocket(idx , Sock_stream , 5000 , 0)     ' get socket for server mode, specify port 5000
          Print "Socket " ; Idx ; " " ; Bclient
          Socketlisten Idx
          Print "Result " ; Result
          Flags.idx = 0                                   ' reset the hello message flag
  End Select
Next
Loop
End

Код явно можно упростить. ;)

0

6

спасибо всем за ответ завтра буду пробовать

0

7

Повесил на кнопку udp-соединение с сервером.
При нажатии - рубиться и не реагирует до перезапуска

Код:
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

' Sending a UDP-packet
'IP-number          64.90.182.55
Call Wiz5100_writevalue(w5100_s0_dipr0 , 64)
Call Wiz5100_writevalue(w5100_s0_dipr1 , 90)
Call Wiz5100_writevalue(w5100_s0_dipr2 , 182)
Call Wiz5100_writevalue(w5100_s0_dipr3 , 55)
'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

Call Wiz5100_writevalue(w5100_s0_cr , Sn_cr_send)
Do
Call Wiz5100_readvalue(w5100_s0_cr)
Loop Until Value = 0

(((

0

8

точнее, соединение он видит, модем перезагружает, но только один раз.

0

9

Ничего не понял...  :glasses: ... какая кнопка на UDP соединении? Что за код выше приведен (кусок какой-то)? Какая аппаратная реализация управление вкл/выкл микроконтроллером ЮСБ-модема?

0

10

кнопка в браузере. завтра все запечетлю и выложу

0

11

Выгладит в окне браузера это вот так:http://uploads.ru/t/o/C/1/oC1WI.jpg

И еще одна проблема:
При ручном переключении релюшка снимает +5V с питания usb, йота отключается, питается плата контроллера и ethernet - модуля от +5v USB (от роутера) через кренку 3.3V
После отключения контроллер виснет, хотя, если отключить модем йота, то просто релюшку переключает без сбоев.
Видимо, модем при включении сильно просаживает питание. Что посоветуете? запитать контроллер через диод и повесить электролит или есть еще варианты?
Заранее, спасибо

0

12

Можно ради эксперимента временно всё схему контроля запитать от внешнего источника.
Если уверены, что дело в просадке, то электролит спасет думаю, а дросель повесить от фильтра шума.
Но вообще, если стоит релюха, то она может своей катушкой вешать контроллер (само ЭДС), я не знаю какая у вас там связка реальная, но делал бы вообще на обычном ключе транзисторном, если низковольтное питание.

0

13

Там вот такая схема: http://viewitem.eim.ebay.ru/2Channel-5V … 7435761018
Через ключ включается релюшка, ЭДС гасится диодом Шоттки.

0

14

Вот такая конструкция получилась:
http://uploads.ru/t/5/F/0/5F0k9.jpg
Попробую отфильтровать питание
А вообще заметил, что на плате контроллера электролитов нет ни до, ни после кренки. Сэкономили китайцы)

Отредактировано demonizer (2012-04-11 20:07:28)

0

15

я смотрю, у вас там нет силовой части, надо было делать вообще без релюх и меньше размеры были..

0

16

Можно не на "Вы"?))) чувствую себя стариком, а ведь я еще так дьявольски молод)
Вторая релюха коммутирует мощный БП (12В 10А), но с ней-то как раз все в порядке, все переключается без проблем.
Впаял емкости по 5V и 3.3V - завтра посмотрю, как будет себя вести.

0

17

На входе кренки должно стоять в районе 0.1мкФ, а вот на выходе тоже самое + электролит. Вообще по плате должно быть разбросано по больше керамики, чтобы наводки гасились...

0

18

Виснуть перестало.
Осталось добиться автоматического ребута при потере соединения

0

19

Скажыте пожалуйста он работает только по локальной сети?

0

20

Ну, как бы, да, если перенаправить через роутер, будет по глобальной, но смысла в этом нет - девайс нужен для передергивания зависшего интернет-соединения, соответственно, извне до него не достучаться при надобности.

0

21

Доброго всем дня!

Немного переработал программу веб-сервера на модуле с w5100.

http://www.elechouse.com/elechouse/images/product/w5100/w5100_pin.jpg

Понадобилось удаленное управление фотоаппаратом и поворотной платформой.
Пока не написал тонну ненужного вам кода, выкладываю рабочий веб-сервер, вдруг кому пригодится:

-Кнопка сброса скидывает на настройки по-умолчанию:

Код:
192.168.0.111
255.255.255.0
192.168.0.1
пароль "admin"

Конфигурирование сети производится через веб-интерфейс. (В оригинале через uart)

В по ссылке файл протеуса 8(не ругать, делал быстро), исходник и фотки
http://s000.tinyupload.com/?file_id=089 … 1512910543

http://s010.radikal.ru/i312/1612/11/d9011763e769.jpg

http://s017.radikal.ru/i422/1612/c3/31870cd3ccd8.jpg

+1

22

demonizer написал(а):

Доброго всем дня!

Немного переработал программу веб-сервера на модуле с w5100
Понадобилось удаленное управление фотоаппаратом и поворотной платформой.
Пока не написал тонну ненужного вам кода, выкладываю рабочий веб-сервер, вдруг кому пригодится:

Спасибо, Забираю!

0

23

demonizer написал(а):

по ссылке

Почему-то выкидывает:
http://s9.uploads.ru/t/H07gE.gif

0

24

Вирусов не пихал, всё норм, на компе нод.
Может, файло протеуса не нравится антивирусу?

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » перезагрузчик usb-модема