Sugestões para burlar o loopback da serial

52 views
Skip to first unread message

Marcelo Boá

unread,
Apr 16, 2018, 8:26:41 PM4/16/18
to arduino-...@googlegroups.com
Olá pessoALL


Eu acabei de finalizar um projetinho e caí em um probleminha antigo do Arduino. 

Quando programamos o Arduino e encapsulamos para projeto longe do PC, utilizamos a Serial para alguma tarefa que é complementar. Tipo trocar dados com algum shield ou alguma comunicação similar onde é preciso iniciar a Serial.

Quando a placa está no PC toda a comunicação lançada na Serial vai para um Buffer que é descarregado somente quando a comunicação é efetivamente estabelecida. Ou seja, quando clicamos na IDE do Aduino na opção Ferramentas>>Monitor Serial o aplicativo Java estabelece a comunicação enviando um ACK que dá o aval ao envio do pacote.


Problema é que quando o Arduino está somente na bateria, desconectado do PC, não tem o Monitor Serial Java para abrir essa comunicação.

Alguém já tentou burlar esse loopback ou sabe como fazer? De repente setando alguma entrada do Arduino para receber o sinal dos pinos de comunicação?


Eu dei uma pesquisada aqui mas se alguém possuir algum atalho ou se já tiver feito isso.









--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

Felipe Estrella Barros

unread,
Apr 18, 2018, 4:03:14 AM4/18/18
to arduino-...@googlegroups.com
Marcelo,

Se não tem ninguém para ouvir o Serial, o código não pára. Ele até fica mais rápido porque a comunicação serial é lenta.

Seu projeto trava, quando não está ligado no PC?

Felipe.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/arduino-brasilia.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/arduino-brasilia/CALzf54vW9YqKCxgbdZqeqCe22VoNvmXLm8enL%3Dqgg_gB0Gzm1g%40mail.gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Marcelo Boá

unread,
Apr 19, 2018, 8:21:02 AM4/19/18
to arduino-...@googlegroups.com
Felipe,

Na verdade, se não tem ninguém para ouvir ele nem inicia. A serial, quando você inicia o serial monitor, envia um bit avisando que está preparado para receber os dados. Sem esse bit a serial não inicia e não descarrega. A questão é burlar esse loopback. Não sei se tem alguma gambiarra para fazer como enviar um write() ou tentar fazer um direcionamento. Por exemplo se eu colocasse outro Arduino para ouvir ou tentasse simplesmente redirecionar a saída para outro pino de entrada. Talvez eu tenha que pegar o osciloscópio e colocar na serial mesmo, não vai ter jeito. O duro é que isso toma tempo.



Em 18 de abril de 2018 05:03, Felipe Estrella Barros <festrell...@gmail.com> escreveu:
Marcelo,

Se não tem ninguém para ouvir o Serial, o código não pára. Ele até fica mais rápido porque a comunicação serial é lenta.

Seu projeto trava, quando não está ligado no PC?

Felipe.

On Mon, 16 Apr 2018 at 21:26 Marcelo Boá <marcelo...@gmail.com> wrote:
Olá pessoALL


Eu acabei de finalizar um projetinho e caí em um probleminha antigo do Arduino. 

Quando programamos o Arduino e encapsulamos para projeto longe do PC, utilizamos a Serial para alguma tarefa que é complementar. Tipo trocar dados com algum shield ou alguma comunicação similar onde é preciso iniciar a Serial.

Quando a placa está no PC toda a comunicação lançada na Serial vai para um Buffer que é descarregado somente quando a comunicação é efetivamente estabelecida. Ou seja, quando clicamos na IDE do Aduino na opção Ferramentas>>Monitor Serial o aplicativo Java estabelece a comunicação enviando um ACK que dá o aval ao envio do pacote.


Problema é que quando o Arduino está somente na bateria, desconectado do PC, não tem o Monitor Serial Java para abrir essa comunicação.

Alguém já tentou burlar esse loopback ou sabe como fazer? De repente setando alguma entrada do Arduino para receber o sinal dos pinos de comunicação?


Eu dei uma pesquisada aqui mas se alguém possuir algum atalho ou se já tiver feito isso.









--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Felipe Estrella Barros

unread,
Apr 19, 2018, 2:44:13 PM4/19/18
to arduino-...@googlegroups.com
Fala Marcelo,

Estranho. Eu rodo tranquilo com ou sem estar plugado no PC.
Atmega328P, presente no arduino UNO, pro-mini, etc.
Se vc está rodando Leonardo, tem uma instrução para inicializar a porta, pode ser isso.

Abraços,
Felipe.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Marcelo Boá

unread,
Apr 19, 2018, 6:14:11 PM4/19/18
to arduino-...@googlegroups.com
Olá, Felipe,

Primeiramente obrigado pelo seu retorno. Vou explicar melhor para você. Pegue o código abaixo e jogue no teu Arduino.



void setup() {
  
  Serial.begin(9600);
  Serial.println("Teste");  
 
}

void loop() { 
  
  for(int i=0; i > -1; i++){
    Serial.println(i);
    delay(10); 
  }
}

Pelo calculo, se o tempo de impressão fosse zero teríamos apenas o print do contador em loop infinito. Se fossem 100 milisegundos eu teria 10 impressões por segundo. Como são 10 mili eu teria aproximadamente 100 impressões por segundo. Não chega a isso por causa do tempo de impressão. 

100 x 60 (min) x 5 (5 min) = 30000 impressões.


Abra o teu monitor serial e veja a impressão. Aguarde alguns instantes e feche o monitor serial, anote aproximadamente o ultimo numero que você viu. Em seguida, aguarde alguns minutos e abra o monitor serial novamente pela segunda vez e me diga a partir de onde a impressão retomou quando seu monitor foi aberto pela segunda vez.







Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Felipe Estrella Barros

unread,
Apr 19, 2018, 6:42:07 PM4/19/18
to arduino-...@googlegroups.com
Marcelo, tudo bem?

Farei sim esse teste, porém já estou fora da empresa. Farei amanhã logo cedo.

Tenho 4 versões de placas:
- arduino uno R3;
- arduino pro mini;
- arduino mega;
- arruino Leonardo, encapsulada como kit iot 2.0 da Campus Party da Telefonica (fui eu que projetei e forneci, com orgulho).

Vou mencionar o que vejo.

AAAAHHH... aliás!!!!!!
Já sei o que é!!!!

Quando vc abre o monitor, o atmega16u2 (dedicado em converter ttl em USB nas principais placas arduino  com exceção da pro mini e nano) boota o atmega 328P, que é o controlador do Arduino..... aaaaahm....

Vc tem duas soluções:
1 (mais difícil) - caçar o circuito de reset da atmega328P e arrancar esse sinal do atmega16U2. Ela não vai mais bootar, mas em compensação, vc terá que apertar o botão de reset todas vez que quiser carregar um novo firmware;
2 (precisa comprar) - gastar e comprar um conversor ttl para USB (exemplo, FTDI) e ligar nos terminais 1 e 2 do arduino que sao os sinais TX e RX. Então, ao invés de fazer a conexão via USB pelo atmega16U2 da placa, vc usa o conversor externo, que não está ligado ao reset do atmega328P.


Entendeu?

Agora vc vai conseguir.

Abraços,
Felipe.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Felipe Estrella Barros

unread,
Apr 19, 2018, 6:54:38 PM4/19/18
to arduino-...@googlegroups.com
Marcelo,

Em tempo!
Tem a 3a opção mas é mais complicada, e depois, se quiser carregar firmware no futuro, vc só vai conseguir se fizer um programador de alta tensão para o atmega328P: vc pode baixar o programador da ATMEL, e mexer no fusível que cancela o reset, transformando ele num i/o normal.

Essa opção é beeem mais modo hard, mas eu tinha que falar dela tbm.

Pronto. 3 caminhos para vc.

Abraços,
Felipe.

Marcelo Boá

unread,
Apr 19, 2018, 8:09:49 PM4/19/18
to arduino-...@googlegroups.com
Felipe,

Na verdade, essa informação de que o monitor da boot no Arduino é novidade para mim. Se você puder, me envia uma referencia que você tenha lido sobre isso. Você diz que o pino 1 RST recebe um pulso, seria isso?


Quanto as soluções, minha ideia seria talvez de ligar o TX em alguma porta e de repente forçar um start bit. 

Ou melhor, talvez definir uma porta como digital read e curto circuitar com outra como output, junto com TX, jogar um zero na output e deixar que TX transmita. Ou, algo similar que não provoque um curto. Desse modo a serial seria enganada e transmitiria os dados. 

Melhor, talvez setar uma segunda serial seria mais indicado, fechando o loopback. Fazer com que o Arduino transmita para ele mesmo. Eu não vou precisar olhar nada de impressão, mas o Arduino tem que startar a serial sem a ajuda do monitor serial. Até onde percebo isso não acontece. Então, não acho que o monitor serial esteja realmente reiniciando o Arduino. Até onde eu sei ele só faz o disparo depois de fechar o loopback, é quando ele descarrega o que está acumulado na serial. No Arduino Uno com dip da pra ver o led de serial trabalhando e fazendo essa descarga rapidamente quando o loopback é fechado. Mas nessa placa realmente é preciso apertar o reset para subir o código.




Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasilia+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-brasilia@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Felipe Estrella Barros

unread,
Apr 20, 2018, 6:15:35 AM4/20/18
to arduino-...@googlegroups.com
Oi Marcelo, tudo bem?

Eu não li isso em lugar nenhum. Apenas lembrei que quando o monitor é aberto, ocorre sim o boot.
Você solicitou alguma prova disso, a pergunta procede, eu te mostro:

Segue o diagrama do Arduino UNO R3. Nele, estou detalhando o comando que o próprio projeto chama de "USB Enable Boot", que sai da porta PD7 do ATMEGA 16U2 e vai para o RESET do ATMEGA328P. Então, o reset ocorre com o ATMEGA16U2 derrubando o sinal para TERRA. Está aí.


Por isso, não adiantaria simular uma comunicação entre TX e RX, pois o ATMEGA16U2 sempre derrubará a tensão. Você corre até o risco de sobrecarregar o ATMEGA328P com muita corrente drenada para entre TX e RX, curto-circuito é fria.

Pensei em mais umas soluções:
- Se vc estiver usando o UNO, que tem o ATMEGA328P com encapsulamento DIP, você pode remover o chip, entortar para fora o pino 1 de RESET, e colocar o chip de volta no soquete. Dessa forma, o RESET fica fora do respectivo contato (e espero que a flutuação não faça ele dar RESET sozinho);
- Vc também pode tentar reprogramar o 16U2, carregando um firmware modificado, que não dê esse degrau para zero na porta PD7. Se quiser modificar em hardware, infelizmente o 16U2 é SMD, então não dá para arancar ele, MAS, se vc for bom, vc pode fazer um pouco de açougue na placa, cortando com um estilete a trilha que destaquei em verde (no layer de cima da placa), OU, até mesmo arrancar o que existir no RESET-EN que tem na placa, só que aí, esse RESET EN foi mal feito, pois inutiliza até o botão de reset (a opção de romper a trilha em verde é melhor):


Ainda assim, se vc não quiser alterar nada no arduino, basta utilizar um conversor USB externo, que nem eu disse no E-mail anterior. Se vc tiver um segundo arduino, vc pode até utilizá-lo como esse conversor USB, basta não desligar nunca da USB o arduino atuando como conversor, apenas religue os contatos TX e RX.

OUTRAS PLACAS:
Vou assumir que esse RESET também ocorre no Leonardo, que é muito parecido. Deixa eu ver a MEGA..... mesma coisa, eles só mudaram o CHIP que faz a interface USB, que passa a ser o ATMEGA8U2:


Agora sim, sabemos a causa do problema e traçamos uma quantidade razoável de soluções. Me avise quando você obtiver sucesso!


Sucesso no seu projeto!
Felipe.


Marcelo Boá

unread,
Apr 20, 2018, 6:29:12 AM4/20/18
to arduino-...@googlegroups.com
Felipe,

O smd quando eu preciso levantar eu geralmente uso uma agulha de costura ou alfinete e levanto com ferro de solda. 

Eu vou experimentar abrir o monitor serial com esse mesmo programa e em um dado momento vou botar um jumper no pino 1 do 328 para o terra e ver o que acontece.

Até onde eu sei o circuito que você me mostrou existe porque upload do código precisa dele. Tenho mais alguns testes em mente. De qualquer formar encontrei um código aqui que utiliza duas seriais nos exemplos da IDE. Você me ajudou bastante.


Obrigado!




Para mais opções, acesse https://groups.google.com/d/optout.

Felipe Estrella Barros

unread,
Apr 20, 2018, 6:53:25 AM4/20/18
to arduino-...@googlegroups.com
Marcelo,

Perfeito! Só uma sugestão, deixe o pino 1 no vcc, pq o Reset é sinal invertido. No gnd o arduino não vai bootar.

Abs,
Felipe.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.



--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Best Regards,

Marcelo Boá



Electronics Technician
Bachelor of Information Systems 
Twitter: @marceloboah

--
Você recebeu essa mensagem porque está inscrito no grupo "arduino-brasilia" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para arduino-brasil...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para arduino-...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages