Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
chacalgbi

Como desabilitar a resposta de PING do Arduino

Recommended Posts

Olá pessoal, estou fazendo um monitor de temperatura e preciso que ele pare de responder a um pedido de PING externo para seu IP(do arduino) quando a temperatura chegue a um valor.

 

Seria algo do tipo

 

if(temp > 30) {desabilita resposta ao ping}

else {habilita resposta ao ping}

Alguém sabe algum comando desses?

Se não houver um comando específico para o PING, pode ser algo que desabilite o shild de internet tb, não será usado pra mais nada.

 

Uso o Shild padrão. Wiznet W5100, acho que é esse o nome.. rs

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • nada gente? Kd a galera do forum? rsrsrs

     

    Fiz os seguintes testes, mudei o estado do PINO 10 para alto, segundo li, ele é quem habilita o módulo, o ping ficou perdendo pacote mas não parou de todo. Desabilitei o SPI com esse comando "SPI.end()" mas não teve nenhum efeito, o PC continuou pingando pro arduino.

    Alguma ideia?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 13 minutos atrás, ViniciusKruz disse:

    Segundo o datasheet, é o bit 4 do registrador MR (Mode Register) quem controla o ping.

     

    Veja na página 19:

     

    Datasheet W5100

     

    Olhei aqui e vi isso.

     

    Ping Block Mode
    0 : Disable Ping block
    1 : Enable Ping block
    If the bit is set as ‘1’, there is no response to the ping request.

     

    Agora vou mudar a pergunta... rsrs

     

    Qual seria o comando pra Habilitar ou desabilitar esse BIT ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 3 minutos atrás, ViniciusKruz disse:

    Qual biblioteca você está usando? Creio que seja a Ethernet.h, seria esta?

     

    Isso, uso essas duas:

    #include <SPI.h>
    #include <Ethernet.h>

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 3 minutos atrás, ViniciusKruz disse:

    Qual biblioteca você está usando? Creio que seja a Ethernet.h, seria esta?

     

    Isso, uso essas duas:

    #include <SPI.h>
    #include <Ethernet.h>

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Amigo, eu revirei esta biblioteca e não encontrei nada que fizesse referência ao registrador de habilitação do PING, logo, você terá que implementar esta função ou então encontrar alguma opção onde ela já tenha sido criada por alguém. 

     

    Para criar a função, não sei se vai te ajudar, mas encontrei um site onde o cara mexe nestas opções com umas funções criadas por ele, veja o site completo:

    https://mcuoneclipse.com/2014/01/07/frdm-with-arduino-ethernet-shield-r3-part-2-ping/

     

    Só que esse exemplo aí não foi feito para Arduíno, então você precisará pegar as funções dele e adaptá-las para o seu sistema, pelo que analisei, você vai precisar dos seguintes códigos dele:

     

    Função para escrever nos registradores:

    uint8_t W5100_MemWriteByte(uint16_t addr, uint8_t val) {
      W5100_GetBus();
      SPIWriteByte(W5100_CMD_WRITE);
      SPIWriteByte(addr>>8); /* high address */
      SPIWriteByte(addr&0xff); /* low address */
      SPIWriteByte(val); /* data */
      W5100_ReleaseBus();
      return ERR_OK;
    }

     

    Função para ler os registradores:

    uint8_t W5100_MemReadByte(uint16_t addr, uint8_t *val) {
      W5100_GetBus();
      SPIWriteByte(W5100_CMD_READ);
      SPIWriteByte(addr>>8); /* high address */
      SPIWriteByte(addr&0xff); /* low address */
      *val = SPIReadByte(); /* data */
      W5100_ReleaseBus();
      return ERR_OK;
    }

     

    Definição do registrador do PING:

    #define W5100_MR    0x00 /* MR (Mode Register */
    #define W5100_MR_BIT_IND    (1<<0) /* indirect bus interface mode */
    #define W5100_MR_BIT_AI     (1<<1) /* address auto-increment in indirect bus interface, 1 to enable */
    #define W5100_MR_BIT_PPPoE  (1<<3) /* PPPoE mode, 1 to enable */
    #define W5100_MR_BIT_PB     (1<<4) /* ping block bit, 1 to block pings */
    #define W5100_MR_BIT_RST    (1<<7) /* reset bit, 1 to reset internal registers */

     

    Função para resetar o módulo:

    CLS1_SendStr((unsigned char*)"Reset W5100.\r\n", CLS1_GetStdio()->stdOut);
    /* reset device */
    if (W5100_MemWriteByte(W5100_MR, W5100_MR_BIT_RST)!=ERR_OK) {
      CLS1_SendStr((unsigned char*)"Failed to reset device!\r\n", CLS1_GetStdio()->stdErr);
    }

     

    Esta função de reset, será praticamente a mesma para habilitar/desabilitar o PING, só precisa alterar um pouquinho: o endereço passaria de W5100_MR_BIT_RST  para W5100_MR_BIT_PB.

     

    Como eu disse antes, esses códigos NÃO SÃO PARA ARDUÍNO, e precisarão ser adaptados, mas de qualquer forma a lógica é a mesma.

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Ok amigo, vou estudar esse site e esses códigos. Vou ver se sai algo.

    Mas meu nível que programação ainda é fraco. Parece ser complicado.

    Mas de qualquer forma obrigado pelo tempo dedicado a me ajudar, vou esforçar aqui pra ver se sai algo. Qualquer dúvida posto aqui.

    se eu resolver tb... rs

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Encontrei esta opção: https://github.com/lstoll/arduino-libraries/tree/master/Ethernet/utility

     

    Nos arquivos tem o w5100.c e .h, e estes são para arduíno, com eles é possível acessar os registradores.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 23 minutos atrás, ViniciusKruz disse:

    Encontrei esta opção: https://github.com/lstoll/arduino-libraries/tree/master/Ethernet/utility

     

    Nos arquivos tem o w5100.c e .h, e estes são para arduíno, com eles é possível acessar os registradores.

     

    No arquivo  w5100.h tem as seguintes linhas de código

     

    /* MODE register values */
    #define MR_RST			0x80 /**< reset */
    #define MR_PB			0x10 /**< ping block */
    #define MR_PPPOE		0x08 /**< enable pppoe */
    #define MR_LB  			0x04 /**< little or big endian selector in indirect mode */
    #define MR_AI			0x02 /**< auto-increment in indirect mode */
    #define MR_IND			0x01 /**< enable indirect mode */

    Creio que a linha que preciso seria essa:

    #define MR_PB      0x10        /**< ping block */

     

    Por onde eu começaria a inserir isso no código?

    Tenho que baixar esses arquivos e substitui-los? (Me parece que já existem eles na pasta \libraries\Ethernet\src\utility)

    pelo menos o W5100.h tem. Ou devo colocar eles em outro lugar e indicar no começo do código os dois?

     

    Desculpe tantas perguntas.. rs

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×