Ligando um monte de componente no arduino - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-29T01:46:20Zhttps://labdegaragem.com/forum/topics/ligando-um-monte-de-componente-no-arduino?commentId=6223006%3AComment%3A892822&xg_source=activity&feed=yes&xn_auth=noOlá, André!
tag:labdegaragem.com,2023-05-21:6223006:Comment:8928262023-05-21T01:30:10.259ZD. T. Ribeirohttps://labdegaragem.com/profile/DanielTozziRibeiro
<p>Olá, André!</p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/11131404066?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/11131404066?profile=RESIZE_710x" class="align-full" width="631" height="312"/></a></p>
<p>Olá, André!</p>
<p></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/11131404066?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/11131404066?profile=RESIZE_710x" class="align-full" width="631" height="312"/></a></p> Gostaria muito de ver os arqu…tag:labdegaragem.com,2023-05-20:6223006:Comment:8928222023-05-20T04:32:04.454ZAndré Luiz Albrichhttps://labdegaragem.com/profile/AndreLuizAlbrich
Gostaria muito de ver os arquivos do anexo para ver qual era a forma do código desenvolvido na epoca
Gostaria muito de ver os arquivos do anexo para ver qual era a forma do código desenvolvido na epoca olá Edgar.
Vi seu probl…tag:labdegaragem.com,2018-06-14:6223006:Comment:6750242018-06-14T19:01:09.424ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá Edgar.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Vi seu problema em acrescentar mais <strong>I/Os</strong> para o <strong>Arduino</strong>. Realmente existem "soluções prontas", mas percebi sua empreitada em "botar a mão na massa" (como vc mesmo disse). Também vi no seu perfil que vc é um <strong><em>programador</em></strong>, então acredito que vc também apreciará a solução que estou postando aqui (além de que certamente, espero ser útil…</span></p>
<p><span style="font-size: 12pt;">olá Edgar.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Vi seu problema em acrescentar mais <strong>I/Os</strong> para o <strong>Arduino</strong>. Realmente existem "soluções prontas", mas percebi sua empreitada em "botar a mão na massa" (como vc mesmo disse). Também vi no seu perfil que vc é um <strong><em>programador</em></strong>, então acredito que vc também apreciará a solução que estou postando aqui (além de que certamente, espero ser útil para muitos outros garagistas).</span></p>
<p><span style="font-size: 12pt;"> Mas antes de um bom código, vem um bom Hardware. A solução que estou propondo, já uso em Sistemas embarcados há mais de 25 anos. Então posso garantir que é extremamente funcional e versátil (sempre funcionou perfeitamente sem um único problema). Também já vi implementações semelhantes por aí, mas geralmente nunca há um pacote completo. Uso apenas dois "tipos" de CIs: o <strong>74HC595</strong> (ou o <strong>74HC594</strong>, vc escolhe qual vai usar) e o <strong>74HC166</strong>.</span></p>
<p><span style="font-size: 12pt;"> Com esta configuração que estou apresentando, você pode expandir a quantidade de Displays e a quantidade de Entradas e Saídas Digitais, de forma independente, e em qualquer combinação. Por exemplo: vc pode implementar 4 Displays, 8 Entradas Digitais, 24 Saídas Digitais. Para a quantidade de Entradas e Saídas Digitais, sempre teremos um múltiplo de 8, já que o CIs usados comportam 8 bits cada. Para os Displays, a quantidade pode ser impar ou par.</span></p>
<p><span style="font-size: 12pt;"> No exemplo que mostro aqui, fiz a implementação de <strong>8 Displays</strong>, <strong>16 Entradas Digitais</strong>, e <strong>16 Saídas Digitais</strong>. Ou seja <strong>Edgar</strong>, praticamente uma solução completa pra sua necessidade. Mas se vc precisar de mais Displays ou I/Os, basta expandir.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> A principal característica do Hardware, é sua grande simplicidade, isto sem usar "gambi" alguma. São todas técnicas rigorosamente clássicas, portanto fundamentadas. Observe que <span style="text-decoration: underline;"><strong><em>apenas 6 pinos do Arduino</em></strong></span> são necessários na implementação, e isso <span style="text-decoration: underline;"><em><strong>é independente da quantidade de Displays e I/O implementados</strong></em></span>. Um sinal adicional é usado para controle das saídas e displays, de acordo com o CI usado: <strong>HC595</strong> ou <strong>HC594</strong>. Mas esse sinal (chamado de "<strong>OUTS_ON</strong>") não é absolutamente necessário e pode ser facilmente eliminado. Mas aconselho deixá-lo pois ele impede que as saídas tenham valores aleatórios quando a alimentação é aplicada ao sistema (quando a energia é ligada).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> O hardware do exemplo que implementei, é mostrado na figura a seguir (<strong>Proteus</strong>):</span></p>
<p><span style="font-size: 12pt;"><a href="http://storage.ning.com/topology/rest/1.0/file/get/1939727384?profile=original" target="_self"><img width="721" src="http://storage.ning.com/topology/rest/1.0/file/get/1939727384?profile=RESIZE_1024x1024" width="721" class="align-full"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Neste exemplo, note que implementei <strong>16 Saídas Digitais</strong>, sendo que conectei <strong>8 LEDs</strong> em 8 dessas saídas, deixando as demais "livres". Também foram implementadas <strong>16 Entradas Digitais</strong>, sendo que conectei <strong>8 chaves</strong> (tipo "DIP Switch") em 8 dessas entradas, deixando as demais "livres". </span><span style="font-size: 12pt;">Note também que há <strong>resistores</strong> de "<strong>pulldown</strong>" em cada entrada implementada. Isto é necessário porque Entradas Digitais que não sejam usadas, <span style="text-decoration: underline;"><em>não podem ficar "flutuando"</em></span> (sem conexão), e isso vale pra qualquer sistema digital. Mas os resistores são de 100k e portanto não precisam ser removidos quando a entrada for usada.</span></p>
<p><span style="font-size: 12pt;"> Outra observação é sobre a tabela no esquemático, que mostra a configuração de <strong>R1</strong> e <strong>R2</strong> conforme o CI usado: <strong>HC594</strong> ou <strong>HC595</strong>. Esta configuração, refere-se ao caso quando o sinal "<strong>OUTS_ON</strong>" é usado, ou seja, quando vc liga esse sinal a um pino do <strong>Arduino</strong>. Caso não se use um pino do Arduino para o "<strong>OUTS_ON</strong>", então <strong><span style="text-decoration: underline;"><em>inverta a lógica mostrada na tabela</em></span></strong> (por exemplo, se estiver usando HC595, R1 não seria montado e R2 seria montado), e claro: neste caso não haverá a conexão do sinal "OUTS_ON" ao Arduino (mas no Hardware o sinal ainda existirá, sendo provido ou por R1 ou por R2).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre o código, é simples, mas técnico, já que técnicas de controle </span><span style="font-size: 12pt;">de Hardware são necessárias. No código, as primeiras rotinas são as de mais baixo nível, seguindo a regra geral de implementação de código em <strong>C</strong>. Como vc é programador, não terá dificuldades em identificar e usar as funções da interface, pois o código está totalmente organizado e os diversos blocos estão separados e completamente identificados. O código também está comentado, conforme necessário, assim descrevendo todas as funções, sejam de baixo ou alto nível.</span></p>
<p><span style="font-size: 12pt;"> Esta organização do código, permite que vc facilmente implemente uma <strong>Classe</strong>, e portanto uma "<strong>LIB</strong>", caso deseje (o que auxilia uma reutilização do código).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Sobre as temporizações, veja a de escrita em <strong>8 Displays</strong>:</span></p>
<p><span style="font-size: 12pt;"><a href="http://storage.ning.com/topology/rest/1.0/file/get/1939731327?profile=original" target="_self"><img width="721" src="http://storage.ning.com/topology/rest/1.0/file/get/1939731327?profile=RESIZE_1024x1024" width="528" height="346" class="align-center"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Note que o tempo de <em><strong>1.36ms</strong></em> (<em>1.36 mili-segundos</em>) mostrado na figura , é o <em>total</em> quando todos os 8 Displays são atualizados juntos. Alguns poderão achar que o tempo está inflacionado. Ocorre que usei tempos de "<strong><em>setup</em></strong>" e "<em><strong>hold</strong></em>" de <strong>1us</strong> (1 micro segundo), para cada bit. Embora isso resulte em até quadruplicar o tempo total resultante, ele garante o perfeito funcionamento, já que nas funções básicas do <strong>Arduino</strong> não há temporização menor que <strong>1us</strong> (isto é possível, mas usando a "<strong>LIB AVR</strong>" do <strong>C GNU</strong>). Claro, qualquer código escrito estará também inflacionado pelas funções de background da plataforma (no caso a do Arduino), mas isso sempre será assim (do contrário teria-se que desabilitar <strong>IRQs</strong>, o que não é aconselhável).</span></p>
<p><span style="font-size: 12pt;"> Da mesma forma, mostro a temporização para a escrita em <strong>16 Saídas Digitais</strong>, na figura a seguir:</span></p>
<p><span style="font-size: 12pt;"><a href="http://storage.ning.com/topology/rest/1.0/file/get/1939733715?profile=original" target="_self"><img src="http://storage.ning.com/topology/rest/1.0/file/get/1939733715?profile=original" width="531" height="345" class="align-center"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Novamente, <em><strong>0,34 ms</strong></em> é o tempo de atualização de todas as 16 saídas juntas.</span></p>
<p><span style="font-size: 12pt;"> A temporização da leitura de todas as 16 Entradas Digitais, é mostrada na figura a seguir:</span></p>
<p><span style="font-size: 12pt;"><a href="http://storage.ning.com/topology/rest/1.0/file/get/1939733733?profile=original" target="_self"><img src="http://storage.ning.com/topology/rest/1.0/file/get/1939733733?profile=original" width="539" height="351" class="align-center"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Mais uma vez, <em><strong>0,35 ms</strong></em> é o tempo de leitura de todas as 16 entradas juntas.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Note também a extremamente reduzida quantidade de memória <strong>RAM</strong> usada nesta implementação, conforme a saída compilada/linkada da <strong>IDE</strong> do <strong>Arduino</strong>:</span></p>
<p><span style="font-size: 12pt;"><a href="http://storage.ning.com/topology/rest/1.0/file/get/1939735646?profile=original" target="_self"><img width="721" src="http://storage.ning.com/topology/rest/1.0/file/get/1939735646?profile=RESIZE_1024x1024" width="721" class="align-full"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Esse total muito reduzido de memória usada, libera praticamente toda a memória do Arduino para ser usada nas funções do seu Sistema em específico, dando a vc uma grande alternativa de uso.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> No <strong>anexo</strong> ao final deste post, vc encontrará o <em><strong>código</strong></em> do <em><strong>Arduino</strong></em>, os <em><strong>arquivos do Proteus</strong></em> para simulação (com esquemático também impresso em PDF), <strong>datasheets</strong>, e as figuras da temporização medida).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <span style="text-decoration: underline;"><em><strong>Informação final importante</strong></em></span>: no código, implementei no "<strong>loop</strong>" do <strong>Arduino</strong>, uma <strong>demonstração</strong> de como usar as funções da Interface de alto-nível, que você também poderá ver em ação na simulação no Proteus (a última parte parece "parada", mas são 15 segundos nos quais o que vc colocar nas chaves DIP, será copiado para os LEDs). Também note que as <em><strong>configurações do Hardware</strong></em> estão logo no início do código (como tradicional). Estas configurações permitem você determinar o <em><strong>total de Displays</strong></em> e <strong><em>total de I/Os</em></strong>, <em><strong>tipo do Display</strong></em> (anodo ou katodo comum), como os <em><strong>LEDs</strong></em> são ligados (acionados por "<strong>1</strong>" ou por "<strong>0</strong>"), o tipo do CI usado (<strong>HC594</strong> ou <strong>HC595</strong>), além é claro de <em><strong>quais pinos do Arduino são usados</strong></em> para os <em><strong>sinais de controle do Hardware</strong></em>. Tudo muito facilmente acessível e identificado.</span></p>
<p><span style="font-size: 12pt;"> Ah, e claro: como um programador, vc verá que também é fácil acrescentar tabelas adicionais para outros caracteres que deseje mostrar nos Displays, assim personalizando seu Sistema.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero ter contribuído para solucionar seu problema. Quaisquer dúvidas, post aqui que certamente irei responder.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids.</span></p>
<p></p> Ferrou então! Só encomendando…tag:labdegaragem.com,2018-06-12:6223006:Comment:6744882018-06-12T19:35:38.767ZEd Vellosohttps://labdegaragem.com/profile/Edgar
<p>Ferrou então! Só encomendando o PCF8574...</p>
<p></p>
<p>Ferrou então! Só encomendando o PCF8574...</p>
<p></p> Boa tarde E,
o 74HC595 não é…tag:labdegaragem.com,2018-06-12:6223006:Comment:6746412018-06-12T18:25:36.117Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Boa tarde E,</p>
<p>o 74HC595 não é substituto do PCF8574.</p>
<p>RV</p>
<p>Boa tarde E,</p>
<p>o 74HC595 não é substituto do PCF8574.</p>
<p>RV</p> Mineirin,Muito obrigado mesmo…tag:labdegaragem.com,2018-06-12:6223006:Comment:6747452018-06-12T15:55:01.087ZEd Vellosohttps://labdegaragem.com/profile/Edgar
<p>Mineirin,<br></br>Muito obrigado mesmo pela ajuda! Estou tentando por a mão na massa...</p>
<p>Seguinte, fui nas lojas de eletrônicas da minha cidade pra comprar o CI PCF8574... Eles tem um monte de PCF, menos o 8574 (tem o 8572 e 8576)... </p>
<p>Bem, dai eu comprei um que o cara falou que rola substituir (74HC595)... Era o ultimo da loja... Mas fiz o exemplo do link <a href="https://www.arduino.cc/en/Tutorial/ShiftOut" target="_blank">https://www.arduino.cc/en/Tutorial/ShiftOut</a> mas não…</p>
<p>Mineirin,<br/>Muito obrigado mesmo pela ajuda! Estou tentando por a mão na massa...</p>
<p>Seguinte, fui nas lojas de eletrônicas da minha cidade pra comprar o CI PCF8574... Eles tem um monte de PCF, menos o 8574 (tem o 8572 e 8576)... </p>
<p>Bem, dai eu comprei um que o cara falou que rola substituir (74HC595)... Era o ultimo da loja... Mas fiz o exemplo do link <a href="https://www.arduino.cc/en/Tutorial/ShiftOut" target="_blank">https://www.arduino.cc/en/Tutorial/ShiftOut</a> mas não acende nem um LED.</p>
<p></p> Opa, errei !!!Onde se lê:
"Ai…tag:labdegaragem.com,2018-06-10:6223006:Comment:6747012018-06-10T18:16:26.032ZEduardohttps://labdegaragem.com/profile/EduardoHenriqueMarcondes
<p>Opa, errei !!!<br/>Onde se lê:</p>
<p>"Aih ficaria 14 linhas e 4 colunas. = 28 fios.</p>
<p>7+7+1+28=15+28=43"</p>
<p>Leia-se:</p>
<p>"Aih ficaria 14 linhas e 4 colunas. = 18 fios.</p>
<p>7+7+1+18=15+28=33</p>
<p><span>33 é uma quantidade super tranquila pra um Arduino Mega.</span>"</p>
<p></p>
<p>Opa, errei !!!<br/>Onde se lê:</p>
<p>"Aih ficaria 14 linhas e 4 colunas. = 28 fios.</p>
<p>7+7+1+28=15+28=43"</p>
<p>Leia-se:</p>
<p>"Aih ficaria 14 linhas e 4 colunas. = 18 fios.</p>
<p>7+7+1+18=15+28=33</p>
<p><span>33 é uma quantidade super tranquila pra um Arduino Mega.</span>"</p>
<p></p> Bom dia Sr. E,
os display tam…tag:labdegaragem.com,2018-06-10:6223006:Comment:6745182018-06-10T15:57:32.958Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Bom dia Sr. E,</p>
<p>os display também podem ser ligados via I2C, usando somente 2 ports do arduino, (PCF8574)</p>
<p> <a href="http://www.picmicrolab.com/7-segment-led-display-pcf8574-i2c-arduino/" rel="nofollow noopener" target="_blank">http://www.picmicrolab.com/7-segment-led-display-pcf8574-i2c-arduino/</a></p>
<p> 7 botões + 7 LEDs + 1 Buzzer + 2 I2C </p>
<p>Vc pode usar os botões usando um ou 2 ports analógicos, …</p>
<p></p>
<p>Bom dia Sr. E,</p>
<p>os display também podem ser ligados via I2C, usando somente 2 ports do arduino, (PCF8574)</p>
<p> <a rel="nofollow noopener" href="http://www.picmicrolab.com/7-segment-led-display-pcf8574-i2c-arduino/" target="_blank">http://www.picmicrolab.com/7-segment-led-display-pcf8574-i2c-arduino/</a></p>
<p> 7 botões + 7 LEDs + 1 Buzzer + 2 I2C </p>
<p>Vc pode usar os botões usando um ou 2 ports analógicos, </p>
<p><a rel="nofollow noopener" href="http://automacaoerobotica.blogspot.com/2013/03/multiplos-botoes-usando-uma-porta.html" target="_blank">http://automacaoerobotica.blogspot.com/2013/03/multiplos-botoes-usa...</a></p>
<p>ficando então assim: </p>
<p>2 ports I2C (Dispalys), 2 ports analógicos (botões) e 7 ports digitais(LEDs), 1 port digital (buzzer).</p>
<p>Total: 2 ports analógicos, 10 ports digitais.</p>
<p>Qualquer Arduíno (Uno/Mini/Nano) servirá.</p>
<p></p>
<p>RV</p> Bom dia
Minha sugestão - use…tag:labdegaragem.com,2018-06-10:6223006:Comment:6740952018-06-10T15:02:16.860ZJosé Gustavo Abreu Murtahttps://labdegaragem.com/profile/GustavoMurta
<p>Bom dia </p>
<p>Minha sugestão - use um Shield Multi função para Arduino:</p>
<p><a href="https://wiki.eprolabs.com/index.php?title=Multi-functional_Learning_Board_for_Arduino" target="_blank">https://wiki.eprolabs.com/index.php?title=Multi-functional_Learning_Board_for_Arduino</a></p>
<p>Bom dia </p>
<p>Minha sugestão - use um Shield Multi função para Arduino:</p>
<p><a href="https://wiki.eprolabs.com/index.php?title=Multi-functional_Learning_Board_for_Arduino" target="_blank">https://wiki.eprolabs.com/index.php?title=Multi-functional_Learning_Board_for_Arduino</a></p> Olá.
O que mais gasta aí são…tag:labdegaragem.com,2018-06-10:6223006:Comment:6740902018-06-10T13:56:41.256ZEduardohttps://labdegaragem.com/profile/EduardoHenriqueMarcondes
<p>Olá.</p>
<p>O que mais gasta aí são os displays.</p>
<p>O costume é ligar displays multiplexados. Que eu saiba todos os circuitos comerciais são assim.</p>
<p><a href="https://www.google.com.br/search?q=multiplex+7+segment+display&source=lnms&tbm=isch" rel="nofollow noopener" target="_blank">https://www.google.com.br/search?q=multiplex+7+segment+display&...</a></p>
<p>Isso derruba as 56 ligações para 7+8=15.</p>
<p>Vc pode ainda tratar os 7 leds como um display de 7 segmentos,…</p>
<p>Olá.</p>
<p>O que mais gasta aí são os displays.</p>
<p>O costume é ligar displays multiplexados. Que eu saiba todos os circuitos comerciais são assim.</p>
<p><a rel="nofollow noopener" href="https://www.google.com.br/search?q=multiplex+7+segment+display&source=lnms&tbm=isch" target="_blank">https://www.google.com.br/search?q=multiplex+7+segment+display&...</a></p>
<p>Isso derruba as 56 ligações para 7+8=15.</p>
<p>Vc pode ainda tratar os 7 leds como um display de 7 segmentos, assim vc faria leds+8 displays com 7+9=16 pinos.</p>
<p>Daria 7+16+1=24 pinos.</p>
<p>24 pinos é bem pouco...</p>
<p>Mas a economia pode gerar perda de qualidade. Pode ser que com 1/9 do tempo ligado o display fique um pouco fraco... Aih a solução seria fazer um barramento de 14 pinos para o display.</p>
<p>Aih ficaria 14 linhas e 4 colunas. = 28 fios.</p>
<p>7+7+1+28=15+28=43</p>
<p>43 é uma quantidade bem tranquila pra um Arduino Mega.</p>
<p></p>
<p></p>