Boa noite, estou tentando resolver um problema de voltagem no meu projeto...

Atualmente troquei meu Arduino MEGA (5v) por um Arduino DUE (3.3v), fiz toda a adequação dos sensores e etc (nenhum precisou de um level shifter), porém meu display um Nextion 3.5" funciona em 5v e estou tentando fazer os pinos RX e TX funcionarem em 3.3v.

Aqui está o esquema de ligação que eu fiz:

Porém o Display não responde aos meus comandos, tentei usar essa seguinte linha:

Serial2.print("page carregamento");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);

Esse código funcionava quando eu usava ele em 5v, então o problema não é o código mas sim a ligação...

Dai eu pensei na hipótese de o conversor lógico ter que estar energizado, então tentei ligar dessa maneira:

Porém também não deu certo...

O display está ligando normalmente, porém a comunicação entre o display e o arduino é zero...

O que será que estou fazendo errado? Obrigado.

Exibições: 441

Responder esta

Respostas a este tópico

Olá Heitor, bom dia.

     Se vc realmente fez as ligações conforme mostrou nos seus desenhos, então de fato não irá funcionar. Vou mostrar como devem ser feitas.

     Veja a figura a seguir, que mostra a plaquinha do Conversor de Níveis:

      No seu caso, o terminal "HV" da plaquinha deve ser ligado ao 5V. Esta alimentação de 5V,  deve ser a mesma que alimenta o Display Nextion. Você pode obtê-la do Arduino. Mas o Fabricante do Nextion recomenda usar uma fonte com capacidade extra de corrente. Fica a seu critério (e testes), e caso resolva ligar ao 5V do Arduino, observe se não está esquentando demais o regulador de tensão do Arduino (principalmente se vc alimentar o DUE através do conector DC dele), e caso ache que está esquentando demais então é melhor ligar a uma fonte própria de 5V (conforme recomenda o Fabricante do Nextion).

     Já o terminal "LV" da plaquinha, deve ser ligado ao 3.3V do Arduino. Neste caso o dreno de corrente é muito baixo, e o 3.3V do Arduino dá conta tranquilamente.

     A pinagem do conector do Nextion é mostrada na figura a seguir, cujos fios tem as mesmas cores que vc usou no seu desenho original aqui do post:

        Os sinais "TX" e "RX" do Nextion, devem ser ligados em terminais da plaquinha conversora, no lado em que fica o terminal "HV".

        Já os sinais "TX" e "RX" do Arduino devem ser ligados em terminais da plaquinha, mas no lado em fica o terminal "LV".

        Claro que indiretamente, o "TX" de um deve ir para o "RX" do outro. A figura a seguir mostra todas as ligações, seguindo o mesmo padrão de cores que vc usou originalmente:

(clique na figura para "zoom")

     Procurei deixar o desenho o mais claro possível.

     Observe que os terminais "sobrantes" da plaquinha, podem ser deixados sem conexão (devido à característica elétrica do circuito).

     Importante:  se optar pela fonte adicional de 5V, não esqueça de ligar o GND dessa fonte também ao GND do circuito mostrado na figura anterior (estou mencionando isto apenas como lembrança, pois esta conexão vc já tinha feito corretamente nos seus desenhos originais).

     Caso tenha alguma dúvida a respeito, não deixe de perguntar aqui.

     Espero ter ajudado.

     Abrçs,

     Elcids

Bom dia Elcids, fiz a ligação conforme seu desenho e funcionou perfeitamente!

Agora meu display está respondendo aos comandos do Arduino.

Porém surgiram 2 novas dúvidas, você falou sobre o regulador de tensão do Arduino, eu posso usar o mesmo como referência para o meu circuito? Por exemplo: Caso ele esteja esquentando muito é porque meu circuito está puxando demandando muita energia?

Outra dúvida é em relação aos pinos LV1, LV2, LV3 e LV4, se eu usar LV1 e LV4, funcionará normalmente? Ou eu preciso casar os pinos? Por exemplo: LV1+LV2 ou LV3+LV4 ?

Obrigado por ter ajudado, você foi muito claro na resposta. Abraços, Heitor.

Boa noite Heitor.

      Ok, vou abordar então estes pontos que vc perguntou, mas com algumas informações adicionais, que podem ser úteis. Vamos começar pela "plaquinha" conversora.

      Observe o circuito da plaquinha conversora, mostrado na figura a seguir:

(clique na figura para "zoom")

        Como vc pode ver, são 4 circuitos idênticos, e independentes.
        Cada circuito corresponde a um "canal" conversor de nível lógico. No seu caso, vc está usando para converter níveis de 5V para 3.3V e vice-versa. Cada canal conversor, é composto por três componentes: dois resistores de 10k, e um transistor MOSFET. O diodo que aparece na figura está "dentro" do MOSFET, e não conta. Então como pode verificar, cada canal conversor é um circuito bem simples, mas muito eficiente na função que desempenha. Uma característica dessa configuração, é que se vc não usar um determinado canal, os terminais desse canal podem ser "largados" sem ligação alguma (sem risco algum, e sem aumento acidental do consumo de energia).


       Como cada circuito é um canal conversor independente, vc usa os canais que precisar. Claro que o sinal "entrando" em um canal, vai "sair" naquele canal. Por exemplo, se o TX do Nextion entrar no terminal "HV3" (pois é o lado de maior tensão, 5V), então vai sair convertido para 3.3V no terminal "LV3", ou seja, vc usou o "canal 3" para fazer a conversão de níveis lógicos.
       Vc não é obrigado a usar esse ou aquele canal, desde que respeite a regra "se o sinal entrou nesse canal, vai sair neste canal também". Ok?


       Duas curiosidades:

       1) vc pode usar a plaquinha para converter outros níveis lógicos. Por exemplo entre 5V e 12V. No entanto veja que todos os quatro canais operam nas mesmas tensões, pois o terminal de alimentação de cada lado ("LV" e "HV") é comum a todos os quatro canais. Então cuidado para não generalizar de forma errada. E claro, o lado "HV" (high voltage) é o lado de maior tensão, e o "LV" (low voltage) é de menor tensão.


       2) o conversor é bidirecional. Ou seja, não tem um lado que é obrigatoriamente "entrada" e um que é "saída". Em qualquer dos canais, o sinal pode entrar em qualquer lado (desde que se respeite quem é  o lado do "HV" e o lado do "LV"), e ele "sairá" do outro lado já convertido. Isto torna este conversor ainda mais versátil e prático. Esta característica, permite por exemplo usá-lo numa linha de dados I2C (mesmo os resistores do circuito da plaquinha sendo de 10k), que é um sinal "bidirecional". O mesmo vale para aqueles sensores de temperatura com protocolo "One Wire", tipo DS18B20, e o mesmo vale pra qualquer dispositivo "One Wire" que tenha alimentação diferente do processador usado. Isso permite por exemplo alimentar o sensor DS18B20 a 5V e interfacear o mesmo com o Arduino DUE a 3.3V, usando o "conversor de níveis" (a comunicação é bidirecional, mas o conversor permite isto automaticamente).



       Sobre a questão do Regulador de 5V, para entender, veja a figura a seguir:

(clique na figura para "zoom")

       Observe os dois conectores USB (indicados pelas setas "azuis"). Vc pode alimentar o DUE por qualquer um destes dois, e claro, por ser USB vai fornecer 5V. Neste caso, a alimentação de 5V já está "pronta" para ser usada (veja que está disponível no conector fêmea na lateral da placa).


       Mas e de onde vem os 3.3V? essa tensão vem de um Regulador de Tensão na placa do DUE. Veja que marquei isto em verde na figura anterior. Este regulador, recebe os 5V existentes na placa, e então regula para 3.3V. Independente da origem dos 5V, essa tensão sempre "entra" neste Regulador "verde", assim gerando 3.3V (que também está disponível no conector fêmea na lateral da placa).


       Dito isto, observe onde marquei na cor laranja na figura anterior. É um conector de entrada de tensão DC, e pode receber tensões entre 7V e 12V (na verdade a faixa é mais ampla, mas não é bom forçar, pelos motivos que irei explicar mais adiante). E para onde vai essa tensão? Ela vai para outro Regulador de Tensão na placa, que eu marquei na cor rosa. Ou seja: uma tensão que seja fornecida através do conector DC, vai ser regulada para 5V. Mas neste caso como fica o 5V vindo de qualquer dos conectores USB ??? Simples: é desligado automaticamente. Há um circuito que desliga automaticamente (e bem rápido) a tensão vinda dos conectores USB, sempre que vc aplica tensão suficiente no conector DC fazendo com que o Regulador "rosa" regule para 5V a tensão fornecida. Por que isso? Porque assume-se que a fonte de tensão conectada ao conector DC, tem maior capacidade de fornecer energia (maior capacidade de corrente), por isso ela tem prioridade sobre a tensão fornecida via USB.

       Ok, mas o que isso tem a ver com esquentar o Regulador? Ocorre que o calor gerado por um Regulador de tensão, é proporcional à corrente que este fornece. Maior corrente, mais calor gerado (isto tudo é facilmente calculado, mas não vamos entrar nestes detalhes).
       Logo, se vc alimentar o Nextion através dos 5V fornecido pela placa do Arduino (isto vale para o DUE, UNO, Mega, e outros), duas situações podem ocorrer: o 5V do Arduino pode estar vindo do conector USB, ou então se vc conectar uma fonte ao conector DC os 5V do Arduino estarão sendo fornecidos pelo Regulador "rosa" de 5V.

       No primeiro caso, quando os 5V vem do USB, quem esquenta é o Regulador existente lá na placa da Porta USB (por exemplon no Computador ou "carregador de parede"). Então esse calor será um problema lá na origem dos 5V USB, e não na Placa do Arduino.

       Ok, mas quanto de energia gasta o Nextion??? Veja a figura a seguir, tirada de um documento do Nextion:

(clique na figura para "zoom")

         Veja na marcação em azul dentro do retângulo verde. O Nextion consome 145mA. Na verdade, para um Display desse porte, nem é muito. Mas também não é uma correntezinha desprezível. Estes quase 150mA são muito significativos em qualquer sistema.

          O interessante, é ver (na mesma figura) que o Fabricante recomenda vc usar uma fonte de 5V com capacidade de fornecer até 500mA. Exagero? talvez. Eu não posso afirmar, pois não fiz o projeto do Nextion e não tenho os circuitos do mesmo pra avaliar se isso é um exagero. Em geral, costuma-se especificar uma margem de pelo menos 50% a mais na capacidade de corrente, o que no caso do Nextion seria algo próximo a 220mA. O fabricante recomendou mais que o dobro disso. Talvez eles não queiram se arriscar, ou talvez o Nextion tenha picos de consumo que embora durem muito pouco tempo (alguns mili-segundos), causam problemas de estabilidade na alimentação, e acabam por provocar mal-funcionamento dos circuitos (eu apostaria que o problema é esse, mesmo que disfarçado pelo fabricante).


        Note: uma porta USB "normal", tem capacidade de fornecer até 500mA. Ou seja, não seria problema alimentar o Nextion com os 5V do Arduino vindo do conector USB. Em minha opnião, pode ser feito sem problemas, e deverá funcionar estável. Mas certifique-se de usar bons cabos USB, pois existem cabos "ruins" no mercado, que tem queda de tensão, e quando a tensão chega na placa do Arduino, já está abaixo de 4,5V, e aí não vai funcionar direito.


         Mas e sobre alimentar via conector de entrada DC? Neste caso, a tensão recebida via conector, é regulada para os 5V pelo Regulador "rosa", e automaticamente desliga os 5V vindos do USB (conforme vimos antes). Assim quem fornece energia para o Nextion,  agora é esta fonte externa, e ela deve ter capacidade de corrente suficiente para isso. No entanto, lembre-se de quem regula para 5V, é o Regulador "rosa" na placa do Arduino, e que quanto mais corrente vc "puxa" dele, mais ele vai esquentar. Estes Reguladores são muito "modernos", e tem várias proteções "embutidas". Por exemplo se vc der um curto-circuito na saída deste regulador, uma proteção (dentro do Regulador) vai atuar e limitar a corrente de curto-circuito (a níveis que não destruam o Regulador). E ele também tem proteção térmica: se esquentarem demais (em geral mais de 100 graus), eles desligam sozinho, e ficam assim até que a temperatura baixe a níveis seguros, quando então ligam novamente (ficando num ciclo de liga/desliga se a temperatura voltar a subir novamente além do ponto considerado seguro).


        Assim, a questão de esquentar o Regulador (o "rosa"), é quando vc alimentar o Arduino através do conector DC. É preciso ver se ele não está esquentando demais. E importante: evite que a fonte conectada ao conector DC, tenha mais que 7,5V (sete volts e meio) pois quanto maior a tensão desta fonte, também mais esquentará o Regulador "rosa" de 5V (o ideal é uma fonte entre 7V e 7,5V pra ter ótima regulação e sem esquentar muito).


         A maneira como vc vai decidir, em geral depende de onde estará o seu Sistema. Se tiver um USB por perto (computador ou "carregador de parede"), não convém usar uma fonte conectada à entrada DC do Arduino. Mas se desejar, pode também alimentar pelos 5V vindos do Regulador "rosa" (5V regulado a partir da tensão do conector DC), e sempre observando os pontos que eu já coloquei.

        Espero ter ajudado.

        Abrçs,

        Elcids

Boa noite Elcids, mais uma vez você foi super didático, a aula foi ótima!

Porém com o aprendizado surgem novas dúvidas né...

Fiquei apenas com uma dúvida, que é em relação a primeira curiosidade que você citou:


"1) vc pode usar a plaquinha para converter outros níveis lógicos. Por exemplo entre 5V e 12V. No entanto veja que todos os quatro canais operam nas mesmas tensões, pois o terminal de alimentação de cada lado ("LV" e "HV") é comum a todos os quatro canais. Então cuidado para não generalizar de forma errada. E claro, o lado "HV" (high voltage) é o lado de maior tensão, e o "LV" (low voltage) é de menor tensão."

Você mencionou que posso converter outros níveis lógicos, se por exemplo eu usasse 12v em HV, minha voltagem em LV seria maior que 3.3v, correto? Ou seria sempre 3.3v independente da voltagem de entrada?

Bom, em relação ao meu projeto, creio que o mesmo está energizado corretamente, o mesmo é alimento da seguinte forma

   

                            Regulador de voltagem 3.3v  > Alimentação de sensores 3.3v

Fonte 9V 2A   >   Alimentação direta do arduino pelo conector DC

                            Regulador de voltagem 5v     > Alimentação Exclusiva do Display

E mais uma questão, a ligação com o level-shifter funcionou... O Display está respondendo, porém agora a maioria dos comandos estão falhando, quando eu usava o MESMO código com o Arduino MEGA, eu tinha um sucesso de 90% dos comandos, agora com o DUE, eu tenho uma FALHA de 90% dos comandos...

Isso seria algum ruído do circuíto? Algum problema de código? Ligação?.....

Caso tenha tempo, dê uma olhada nesse blog que eu achei, o link está abaixo... Tem vários logs, a maioria deles o rapaz fala sobre o Nextion.

https://hackaday.io/project/16483-building-the-thor-robot/log/62421...

boa noite Heitor.

      Ok, vamos a estes pontos que vc perguntou.

      Sobre a plaquinha conversora de níveis lógicos, veja a figura que preparei para ficar mais claro para vc como ela deve ser usada:

     Observe que há dois lados distintos na figura. À esquerda temos o lado chamado de "baixa tensão". À direita temos o lado chamado de "alta tensão".

     Identificado isto, observe que há apenas uma ligação comum entre os dois lados, e esta ligação é o fio de "GND" (cor preta). Isto é necessário, porque embora os lados sejam "independentes", eles tem que ter a mesma referência de tensão, ou seja, um ponto em comum em relação ao qual todas as tensões no circuito são medidas. Sem este ponto em comum, a tensão "LV" não tem significado (ou "peso") em relação à tensão "HV", e vice-versa. Veja: "LV" é medido em relação ao "GND" da esquerda. E "HV" é medido em relação ao "GND" da direita. Logo, basta interconectar o "GND" da esquerda com o "GND" da direita, para que todos tenham a mesma referência de tensão. Sem isto, o circuitos não funcionarão como esperado. Este é motivo de que sempre o "GND" de um lado será conectado ao "GND" do outro lado. Ok?

      Na verdade, na própria plaquinha, já existe uma conexão entre os dois "GNDs", através de trilhas de circuito. Mas costumamos fazer uma conexão adicional "por fora" entre os "GNDs", como uma espécie de reforço. Mas se vc não fizer a ligação "por fora", ainda assim os dois "GNDs" estarão interligados na própria plaquinha conversora.

     Agora vamos nos atentar para os demais "fios" conectados à plaquinha.

     Do lado esquerdo temos o "LV" (em verde claro), que é a alimentação do circuito de "baixa" tensão da plaquinha. Do lado direito temos o "HV" (em vermelho), que é a alimentação do circuito de "alta" tensão da plaquinha. Ou seja, cada lado da plaquinha, tem sua própria tensão de alimentação, afinal os circuitos precisam ser alimentados para funcionarem, e isto é feito através destes dois terminais, o "LV" e o "HV".

     Ocorre que, além de alimentar os circuitos de cada lado da plaquinha, estes dois terminais de alimentação, também determinam quais os níveis lógicos de cada lado da plaquinha. Exemplo:  se vc alimenta o lado "LV" com 3.3V, então este lado trabalha com níveis lógicos de 3.3V, ou seja, os sinais conectados aos canais deste lado da plaquinha deverão obrigatoriamente trabalhar com 3.3V. Outro exemplo: se vc alimentar o "HV" com 12V, então os sinais conectados a este lado da plaquinha, deverão trabalhar com níveis lógicos de 12V.

      Ou seja: você alimenta um lado, e automaticamente os níveis lógicos deste lado ficam determinados por essa tensão de alimentação. Simples assim.

      Mas vc não pode violar uma regra: a tensão de alimentação do lado "LV" deve ser sempre menor que a do lado "HV". Se violar essa regra, os transistores MOSFET existentes no circuito da plaquinha não vão atuar corretamente, e vc ainda correrá o risco de danificar as placas conectadas a cada lado (além da própria plaquinha conversora).

     Entendido isto, e alimentando corretamente cada lado (o "LV" e o "HV"), então basta usar os canais para converter os níveis de um lado para outro. Os canais estão representados na figura anterior, por fios de cores diferentes.

     Assim por exemplo, um sinal de 3.3V no fio azul do lado "LV", será convertido para um sinal de 5V no fio azul do lado "HV", e vice-versa (e claro:  supondo-se que vc alimentou o lado "LV" com 3.3V e o lado "HV" com 5V). Ok?

     E é assim que se usa a plaquinha conversora de níveis lógicos. Não estou entrando em detalhes de funcionamento elétrico, porque não sei se vc tem formação em eletrônica, e caso não tenha, iria ficar um tanto "maçante" e também indigesto.

     Já sobre a alimentação do seu Sistema, através da Fonte de 9V conectada ao conector DC do DUE, apenas verifique se o Regulador de 5V na placa do Arduino DUE, não está muito quente. Este regulador é aquele que marquei na cor rosa no post anterior. Veja que este Regulador, tem um "corpo" bem pequeno (bem menor que o Regulador de 3.3V), e por isso mesmo, ele não tem capacidade de suportar temperaturas muito altas. Mas quanto seria o normal??? Faça o seguinte: toque de leve com um dedo, o corpo do Regulador (mas sem tocar nos seus terminais metálicos!!!!!!!!), e caso consiga ficar com o dedo ali sem o calor te incomodar (como eu disse, de leve, sem apertar!!!), é porque a temperatura está normal. Do contrário, talvez seja melhor alimentar o Sistema com uma fonte entre 7V e 7,5V via conector DC, a fim de diminuir o calor produzido no Regulador em questão (veja que falei sobre isto no post anterior).

      E sobre a questão de falha de 90% que vc mencionou na comunicação entre o DUE e o Nextion, pode ser sim um "problema de ruído". Mas provavelmente não seria um ruído como vc deve estar imaginando. Vou esclarecer.

      Ocorre que, quem faz a conversão de níveis lógicos na plaquinha conversora, são os transistores MOSFET que tem nela. No entanto, estes MOSFETs da plaquinha, não são excepcionalmente "rápidos". Mas como assim rápidos???  Veja: quando um nível lógico muda de "0" para "1", ou de "1" para "0", essa mudança ("comutação") deve ser a mais rápida possível. Do contrário, o circuito deixa de ser digital, e passa a ser analógico. Em Sistemas Digitais, só existem dois níveis: o "0" e o "1". Em Sistemas Analógicos existem infinitos níveis. Assim se a mudança de níveis for "lenta", passaremos a ter infinitos níveis, o que confundirá o circuito digital fazendo que ele interprete erroneamente se é "0" ou se é "1". Então a encrenca estará feita, pois os comandos a que vc se refere são enviados como sequências de "1" e "0". As placas não se entenderão, pois um ou outro nível ("0" ou "1") será interpretado erroneamente.

     Infelizmente, estes MOSFETs da plaquinha, não são nenhum foguete, e na verdade são até lentos, o que pode provocar a interpretação errônea dos níveis em um ou outro lado (geralmente a falha ocorre no lado "HV", mas não vou entrar neste detalhe). E não vale a pena trocá-los por MOSFETs mais rápidos, a não ser que vc queira fazer isso de qualquer forma.

     O que fazer então???   Há diversas outras soluções, inclusive usando outros conversores digitais, e realmente rápidos. Há uma infinidade deles no mercado (mas no Brasil nem sempre é fácil encontrá-los). E claro, tem que saber escolher o conversor adequado para cada circuito.

     Esta plaquinha conversora funciona sim, mas tem suas limitações onde sinais de transição rápidos são necessários (o que é quase certo no caso do Nextion).

     O que fazer então?  Primeiro, precisa ter certeza que o problema é a velocidade de transição (mais comumente chamada de velocidade de "comutação"). Isto pode ser tecnicamente trabalhoso, e exigiria algum conhecimento técnico mais aprofundado.

    Mas no seu caso, há uma forma muito segura e confiável de conseguir o mesmo resultado, sem usar a plaquinha conversora. Como? veja o circuito que preparei na figura a seguir:

(clique na figura para "zoom")

      Você só precisará de dois resistores: um de 2k e outro de 1.2k (também chamado de "1k2"). Eu calculei estes dois resistores, para converter os níveis de 5V do sinal "TX" do Nextion, para os níveis de 3.3V do "RX" do DUE, e sem forçar estes dois sinais. E eles conseguem fazer isso na velocidade necessária.

      Observe que devem estar ligados exatamente como eu mostro na figura, e inclusive, os dois resistores devem estar fisicamente mais próximos do DUE do que do Nextion (veja que está dessa forma na figura).

       A tolerância dos resistores pode ser 5% (a famosa faixa "dourada"), e a potência não é relevante neste caso.

      E sobre o outro sinal na cor amarela???  Este NÃO precisa de conversor!!!  ocorre que o sinal de saída digital de 3.3V é totalmente compatível com uma entrada digital de 5V. E este é o caso do sinal de saída "TX" do DUE que vai para o sinal de entrada "RX" do Nextion.

     Faça o teste, e verificará o funcionamento. E vamos esperar que o problema dos 90% que vc relatou seja isso. Se não for, vamos ver outras alternativas. Mas torça pra essa que eu te mostrei, pois é bastante simples, né?

      Ah, olhei o link sobre o Nextion que vc passou, e achei muito legal. Recomendo a todos que estiverem lendo este post.

      Abrçs,

      Elcids

olá Heitor.

      Encontrei um problema nos valores dos dois Resistores que calculei anteriormente. Eu considerei que os níveis lógicos do Nextion eram mais próximos do padrão de um circuito HCMOS alimentado a 5V.

      No entanto, verificando as especificações (valor do "VOH" no datasheet), me surpreendi, pois os níveis não eram tão próximos do padrão. Surpreendentemente, o valor "VOH" pode chegar a apenas 3V, isto a uma corrente "IOH" de -1mA (e a corrente "IOH" para o circuito que eu tinha calculado, é quase este mesmo valor).

     Já o valor do "VIH" para o Processador do DUE (o ATSAM3X8EA - um ARM Cortex M3), é um valor "padrão" pra um circuito a 3.3V. Mas mesmo assim, como o "VOH" do Nextion pode ser bem mais baixo que o esperado, há risco do nível "1" não alcançar o valor necessário para o DUE.

     Por isso, NÃO use os valores dos Resistores da figura do post anterior (2k e 1.2k).

     Use os valores que eu recalculei, considerandos os níveis que encontrei no datasheet do Nextion. Estão na figura a seguir:

(clique na figura para "zoom")

      São de 15k e 1k.

      Sei que parecem bem diferentes do cálculo anterior. Mas agora estarão adequados para o "não tão bom" nível "VOH" do Nextion, sem risco de falha e sem risco de forçar os drivers de saída do Nextion.

      Apenas os valores dos dois resistores mudaram. Todas as outras considerações continuam valendo.

      Desculpe o descuido. Confiei demais na intuição, quando o correto seria ter olhado o datasheet do Nextion e do Processador do DUE antes de fazer o cálculo.

      Abrçs,

      Elcids

Boa noite Elcids, então, primeiramente eu acabei quebrando a entrada programming do meu arduino due, pisei no USB enquanto estava com o circuito na mao e a entrad micro usb foi pro pau...

Enfim, o código funciona e o circuito está sendo alimentado por uma fonte externa...

Eu fiz a ligação conforme você falou, com os resistores de 15k e 1k, funcionou! Porém eu senti que os comandos estavam bem demorados...

Dai tentei colocar o GND com o resistor de 15k mais perto do DUE, depois disso o display não respondeu mais os comandos... Tentei voltar a ligação original e nada... Como consigo saber se o pino TX do meu nextion foi pro pau tbm?

boa noite Heitor.

       Se quebrou sua USB vc tem um problema. Se as trilhas não foram arrancadas, talvez ainda consiga soldar, mas é preciso uma certa perícia nisto.

       Sobre os comandos estarem lentos, não há relação com a ligação via resistores. Estes links seriais convencionais (entre UARTs) não costumam ter "retry", ou seja, se falham não ficam tentando até dar certo (o que causaria a impressão de lentidão).

       Mas eu me surpreendi com a baixa velocidade padrão da Serial do Nextion, que é 9600. Em geral para dispositivos com performance como a do Nextion, esta velocidade costuma ser de pelo menos 115200.

       Quando vi que ele tinha esta velocidade, já pensei: ou a transferência de dados para ele é muito lenta mesmo, ou então ele trabalha com comandos do tipo "vetor" (exemplo: ao invés de vc desenhar uma linha passando as coordenadas de todos os pixels individuais, com um comando tipo vetor vc passaria apenas as coordenadas XY iniciaisfinais da linha, e a GPU do Nextion calcularia sozinha as coordenadas de traçado da linha). Eu nunca programei o Nextion, mas acredito que seja por vetor, senão seria muito lento a 9600 Hz. Se for por vetor, então a velocidade da serial praticamente não teria impacto na performance gráfica do Nextion.

       Acredito que esta demora que vc relatou, seja por que algum problema já estava pra acontecer, que pode ser por causa do acidente com o USB, ou então devido às tentativas de conexões errôneas que vc fez incialmente com sua plaquinha conversora de níveis (veja estes circuitos são robustos, mas não são indestrutíveis, e muitas vezes danificam parcialmente e funcionam "capenga", pois por serem digitais eventualmente os bits "batem" fazendo funcionar, mas como já existe um dano,  hora ou outra o circuito "abre o bico").

      Posso te garantir que com esses valores de Resistores (15k e 1k) ligados da forma como mostrei, são totalmente seguros e sequer forçam o circuito do Nextion (inclusive se vc trocar acidentalmente um resistor com o outro, a comunicação não funciona, mas não há risco algum de dano). Eu os calculei levando justamente a questão da confiabilidade como parâmetro (confiabilidade lógica e elétrica).

      Também sobre a ligação direta do TX do DUE para o RX do Nextion, é totalmente confiável e inclusive padrão. E vc não precisa se preocupar com ela.

       Meu conselho:  verifique tudo e faça uma montagem "limpa" e cuidadosa. Lembre-se:  se o GND do DUE não estiver ligado ao GND do Nextion, não funciona de jeito algum. Verifique isto.

       E claro:  verifique o funcionamento do Nextion em separado, conectando o mesmo a um outro Arduino (UNO, Nano, etc). Caso esteja funcionando corretamente, então o seu problema pode ter sido no DUE, provavelmente devido ao acidente com o conector USB (tente ver se não arrancou alguma trilha e interrompeu circuitos, ou se nesse processo algum ponto metálico não entrou em curto com outro). E também seria ótimo vc verificar o próprio funcionamento do DUE em separado (apesar do USB ter danificado, talvez ainda seja possível programá-lo via JTAG). Em suma: vc precisa ter certeza de que ambos estão ok, senão não adianta tentar fazer os dois funcionarem juntos, porque se um deles estiver com problema vai impedir que funcionem juntos.

      Não desanime. Estes acidentes acontecem. Só não entendo como pisou na placa...   cuidado com estas técnicas, ainda mais em placas mais caras como o DUE e o Nextion.

      Fico no aguardo de um status de "alive" do seu Sistema.

     Abrçs,

     Elcids

Bom dia Elcids... Depois de quase 1 mês de espera, chegou minha nova placa DUE... Fiz a montagem nesse final de semana e dei upload no código... O display ainda continua sem resposta alguma...

Eu estava pensando aqui, como o cabo RX do Nextion não precisa de resistores nem nada, eu posso plugar direto.. Então teoricamente era para ele estar recebendo dados sem problema né? Posso concluir que meu display foi pro saco né?

Não tenho outro arduino para fazer o teste, infelizmente...

Em relação ao tipo de transmissão de dados com o display, ele não é do tipo que você "envia" a imagem pro display, ele tem um hardware próprio que já tem tudo pré-programado por vc, você uso o software deles, programa, bota em um cartão SD e faz upload no display.... Assim você só precisa do arduino para enviar um comando externo, como por exemplo alterar o valor de uma variável...

Bom dia, 

Acrescentando informações do fabricante do módulo conversor bidirecional de nível lógico :

https://learn.sparkfun.com/tutorials/bi-directional-logic-level-con...

Bom dia José, a library já está configurada para ser usada como hardware serial, e o display já está 100% configurado...

A questão é que tudo funcionava normalmente, de repente do nada parou de receber e enviar comandos.

Não alterei library, não alterei a flash do display, apenas mexi nos cabos e coloquei os resistores que o nosso colega Elcids recomendou, porém chequei tudo e tudo estava correto....

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço