collapse

* Posts Recentes

strobe lights por KammutierSpule
[25 de Outubro de 2019, 11:08]


Robot Extreme - Lisboa Games Week 2019 por guilhermexbot
[15 de Outubro de 2019, 15:21]


tecnologias web para servidor num MCU por jm_araujo
[09 de Outubro de 2019, 14:47]


Limitador de corrente simples por jm_araujo
[08 de Outubro de 2019, 10:29]


Assemblagem de PCBs - JLCPCB por jm_araujo
[06 de Outubro de 2019, 13:46]


"Arduino vs PIC" por jm_araujo
[06 de Outubro de 2019, 13:42]


UTC555D vs NE555N ? por jm_araujo
[03 de Outubro de 2019, 17:57]


Caixa de música por Alhiados
[02 de Outubro de 2019, 00:30]


Trituradora/Destruidora de cartão em tiras por m90mine
[01 de Outubro de 2019, 21:30]


Perfil 30x30 400mm? por brunus
[30 de Setembro de 2019, 23:35]

Autor Tópico: ENC28J60 e MFRC522  (Lida 10091 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: ENC28J60 e MFRC522
« Responder #15 em: 20 de Março de 2014, 13:25 »
Não, apenas respostas aos pings

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.433
    • Tróniquices
Re: ENC28J60 e MFRC522
« Responder #16 em: 20 de Março de 2014, 14:45 »
Podes estar a ter um problema de stack. O stack começa no final da RAM "utilizável" e cresce para baixo. As variáveis estáticas estão armazenadas no inicio da RAM. Eventualmente o crescimento do stack pode corromper as variáveis estáticas. Acho que podes dizer ao GCC para ligar um "stack checker", mas com o ambiente de Arduino não sei se te safas ;P . Tenta eliminar ou encolher o tamanho de variáveis estáticas, evitar chamadas eliminando funções e metendo o código inline em vez da chamada, reduzir ou eliminar o número de parametros de funções, encolher ou eliminar variáveis locais, ...

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: ENC28J60 e MFRC522
« Responder #17 em: 20 de Março de 2014, 19:47 »
usei esta função para verificar a RAM livre:

Código: [Seleccione]
int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

estão 1210 bytes livres

Já tentei diminuir o tamanho do buffer do TCP para metade, mas não adiantou em nada, começo a ficar frustrado com isto  :(

Offline zedlav

  • Mini Robot
  • *
  • Mensagens: 78
Re: ENC28J60 e MFRC522
« Responder #18 em: 20 de Março de 2014, 20:16 »
Testa com este. Eu não tenho maneira de testar.

Código: [Seleccione]
#include <SPI.h>
#include <MFRC522.h>
#include <EtherCard.h>

MFRC522 mfrc522(10, 14); // Create MFRC522 instance.

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // Endereço MAC
static byte myip[] = { 192,168,2,2 }; // Endereço IP
static byte gwip[] = { 192,168,2,1 }; // Endereço GW
static byte hisip[] = { 192,168,2,1 }; // Endereço servidor remoto
char website[] PROGMEM = "192.168.2.1"; // Nome do servidor remoto
byte Ethernet::buffer[500];   // Buffer do TCP/IP
String id, lastId;

unsigned char end_tcp_resp = 0;
static uint32_t timer;


void setup()
{
  Serial.begin(57600);
  ether.begin(sizeof Ethernet::buffer, mymac, 8);
  ether.staticSetup(myip, gwip);
  ether.copyIp(ether.hisip, hisip);
  SPI.begin();
  mfrc522.PCD_Init();
}

void loop()
{
 
  ether.packetLoop(ether.packetReceive());
 
  id = "";
 
 
 
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() && end_tcp_resp == 0){
    for (int i = 0; i < 4; i++)
    {
     
      if (mfrc522.uid.uidByte[i] < 0x10) //adds a leading zero
        id += "0";
     
      id += String(mfrc522.uid.uidByte[i], HEX);
     
    }
   
 
    mfrc522.PICC_HaltA();
    delay(1000);
  }
 
 
   if (id != lastId && end_tcp_resp == 0){
     
     
        end_tcp_resp = 1;
        Serial.println(id);
        ether.browseUrl(PSTR("/?id="), id, website, reply);
        //tone(9, 2300, 500);
        lastId = id;
timer = millis() + 5000;


   }else{
   
     
        if (millis() > timer && end_tcp_resp == 1) {

     // SE entrar aqui é porque não recebemos resposta do servidor
     // por isso voltamos a por end_tcp_resp a zero
     end_tcp_resp = 0;
 
}

     /*
        tone(9, 2300, 100);
        delay(200);
        tone(9, 2300, 100);
      */
     
   }
 
 
}

// Resposta do servidor
static void reply (byte status, word off, word len)
{
  end_tcp_resp = 0;
  Serial.println((const char*) Ethernet::buffer + off);
}

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: ENC28J60 e MFRC522
« Responder #19 em: 20 de Março de 2014, 20:33 »
não funciona, mesmo problema, vou procurar outra biblioteca para o enc28j60 não vá o problema ser daí...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.616
  • Helpdesk do sitio
Re: ENC28J60 e MFRC522
« Responder #20 em: 20 de Março de 2014, 20:44 »
Presumo que isso seja só o uso de ram em compile time, porque não estou ai a ver nada que coloque um padrão(tipo AA ou 55) na ram toda e que depois vá ver até onde é que encontra esse padrão, essa seria a maneira de saber realmente a ram usada, porque tudo quanto é strings/arrays e afins são passados da flash para a ram durante a execução.
Avr fanboy

Offline LoneWolf

  • Mini Robot
  • *
  • Mensagens: 763
  • ..Ser ou não ser não tem questão nenhuma...
    • A Visão do Lobo
Re: ENC28J60 e MFRC522
« Responder #21 em: 20 de Março de 2014, 20:59 »
boas,

Citar
vou procurar outra biblioteca para o enc28j60 não vá o problema ser daí...

... é que é mesmo dai, ando a tentar fazer uma coisa deste  género e algumas bibliotecas não funcionam correctamente e ao add mais bibliotecas os problemas aumentam.

tenta uma dessas duas em anexo ( a mim so deixa fazer alguma coisa se usar a lib enc28j60)

Abraço.
Blog: A Visão do Lobo

Nick antigo: kilobyte

Offline zedlav

  • Mini Robot
  • *
  • Mensagens: 78
Re: ENC28J60 e MFRC522
« Responder #22 em: 20 de Março de 2014, 21:02 »
Em ultimo caso comunica com a pessoa que fez a lib para o enc28j60 ele melhor do que ninguém poderá respoder qual é o problema.

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: ENC28J60 e MFRC522
« Responder #23 em: 20 de Março de 2014, 23:40 »
boas,

Citar
vou procurar outra biblioteca para o enc28j60 não vá o problema ser daí...

... é que é mesmo dai, ando a tentar fazer uma coisa deste  género e algumas bibliotecas não funcionam correctamente e ao add mais bibliotecas os problemas aumentam.

tenta uma dessas duas em anexo ( a mim so deixa fazer alguma coisa se usar a lib enc28j60)

Abraço.

a enc28j60 está bastante desactualizada, tentei usar a versão mais recente, mas sem sucesso, a ethercard é a que estou a usar, tentei também usar a arduino_uip também sem sucesso...

obrigado

Offline LoneWolf

  • Mini Robot
  • *
  • Mensagens: 763
  • ..Ser ou não ser não tem questão nenhuma...
    • A Visão do Lobo
Re: ENC28J60 e MFRC522
« Responder #24 em: 21 de Março de 2014, 10:32 »
Boas,

Citar
a enc28j60 está bastante desactualizada,

Obrigado pelo alerta, eu já nao toco nesse projecto a algum tempo assim que voltar a ele vou tentar usar a mais recente a ver se tem melhoras

Abraço.
« Última modificação: 21 de Março de 2014, 10:39 por LoneWolf »
Blog: A Visão do Lobo

Nick antigo: kilobyte

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.616
  • Helpdesk do sitio
Re: ENC28J60 e MFRC522
« Responder #25 em: 21 de Março de 2014, 11:20 »
Possivelmente maior parte do pessoal agora prefere usar os chips da Wiznet, tem muito mais coisas implementadas em hardware.
Avr fanboy

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: ENC28J60 e MFRC522
« Responder #26 em: 21 de Março de 2014, 17:23 »
é verdade, mas para a maior parte das aplicações o enc28j60 é mais do que suficiente, é menos de metade do preço e tem samples grátis  :P

em relação às bibliotecas, testei quatro, ethercard, ethershield, enc28j60 e arduino_uip, a única que com que consegui transmitir alguma coisa foi com a ehtercard e em termos de recursos penso que seja a mais bem optimizada, foi escrita de raiz, ao contrario da arduino_uip que é um port para arduino, as outras duas estão obsoletas.

Vou tentar por alguma das outras a funcionar para ter a certeza de que o problema é da biblioteca da ethernet, visto já ter testado outra para o mofulo rfid e o problema manter-se...

edit: consegui por a biblioteca arduino_uip a funcionar, assim que adiciono o código do leitor rfid deixa de funcionar, definitivamente o problema está na biblioteca do mfrc522, de volta a mergulhar no código da biblioteca  ::)

edit: finalmente luz ao fundo do túnel, continuei a insistir com a biblioteca arduino_uip e lembrei-me de adicionar um delay de 100ms, só porque sim, na linha seguinte à ultima chamada a uma função da biblioteca MFRC522 e não é que funcionou  :o

2 semanas a bater com a cabeça na parede por causa de um simples delay de 100ms...



esta biblioteca torna o código 10k maior, mas pelo menos funciona
« Última modificação: 21 de Março de 2014, 20:21 por CBX »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.616
  • Helpdesk do sitio
Re: ENC28J60 e MFRC522
« Responder #27 em: 21 de Março de 2014, 22:20 »
10K de flash?  :o
Avr fanboy

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: ENC28J60 e MFRC522
« Responder #28 em: 21 de Março de 2014, 22:43 »
parece que a biblioteca implementa TCP, UDP, IP, ARP, ICMP e mais uns quantos protocolos daí o seu tamanho