LusoRobótica - Robótica em Português
Electrónica => Electrónica Geral => Tópico iniciado por: zordlyon em 19 de Março de 2018, 00:05
-
Boa noite malta,
Ora bem eu estou aqui a inventar um sistema de "picagens" por rfid só para demonstração de conceito e queria perguntar se alguém já se deparou ou sabe me ajudar.
Eu estou a montar um Arduino Mega + Placa Ethernet + Leitor Rfid RC522 + LCD 16x2 acontece que tenho 3 coisas a pedir-me portas MISO, MOSI, SCK.
Pelo datasheet do LCD temos ali o D11 e D12 com MISO e MOSI (img1).
Pela placa de Ethernet dizem que os pinos são os mesmos (img2)
No leitor Rfid RC522 temos os mesmos pinos (img3)
Pelo que andei a ver do Arduino Mega temos os pinos distribuidos entre 50-53 (img4)
Portanto faltam-me pinos, quero pinos.. ;D ;D
Neste momento já tenho o Arduino Mega a funcionar com o Rfid e o Ethernet a escrever numa BD online impecável, mas ao ligar o LCD há partilha de pinos claramente, porque o Ethernet deixa de conectar-se à BD ou então o LCD fica "branco".
Se alguém me conseguir dar uma ajudinha agradecia.
Já agora este projecto depois posso fazer a partilha de todo o código para quem quiser fazer algo idêntico em casa.
Cumps,
André.
-
boas.. já pensaste em usar o 16x2 por i2c em vez de spi?
-
Se o LCD é como indicas, tem a clássica interface série e podes ligar o mesmo a que pinos te apetecer, não estás fixo ao MOSI/MISO.
Se usas a biblioteca LiquidCrystal já estás a passar os pinos como parâmetros ao construtor, é só mesmo mudar os mesmos fisicamente e refletir no código. Até está bem explicito na documentação da mesma:
https://www.arduino.cc/en/Reference/LiquidCrystalConstructor
Syntax
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Parameters
rs: the number of the Arduino pin that is connected to the RS pin on the LCD
rw: the number of the Arduino pin that is connected to the RW pin on the LCD (optional)
enable: the number of the Arduino pin that is connected to the enable pin on the LCD
d0, d1, d2, d3, d4, d5, d6, d7: the numbers of the Arduino pins that are connected to the corresponding data pins on the LCD. d0, d1, d2, and d3 are optional; if omitted, the LCD will be controlled using only the four data lines (d4, d5, d6, d7).
Quer-me parecer que sofreste de um ataque de cut&paste na variante de falta de olhar crítico ;D
Se fosse SPI também com um bocado de jeito não há crise. SPI pode ser partilhado porque cada dispositivo tem de ter um SS (slave select) e só deve aceitar comandos e responder quando está selecionado.
Mais uma vez está na documentação:
https://www.arduino.cc/en/Reference/SPI
It is, however, possible to use any pin as the Slave Select (SS) for the devices. For example, the Arduino Ethernet shield uses pin 4 to control the SPI connection to the on-board SD card, and pin 10 to control the connection to the Ethernet controller.
-
Bom dia,
Ricardo obrigado pela dica, não coloquei essa hipótese porque como tenho a Ethernet directamente ligada no Arduino Mega a shield ocupa-me os pinos do ICSP.
jm_araujo, obrigado também e sim isto não está "bonito", foi copy+paste com os exemplos e só adequei à necessidade..(o prazo é 1 semana não me preocupei muito agora, depois tenho tempo para refazer isto mais bonito) ::) ::) :P :P
De qualquer forma eu experimentei outros pinos como falas-te com a liquidCrystal mas sem sucesso, coloquei a ligação nos pinos 28-33 e tinha essa dúvida se era obrigatório usar os MISO/MOSI ou podia ser outro pin digital à escolha.
Logo quando chegar a casa, vou dar uma olhada mais a fundo na documentação e já digo algo.
Cumps,
André.
-
Bom dia,
Podes postar uma foto do LCD ?
Hoje em dia é mais normal usar um backpack I2C que só precisa de 4 pinos do que gastar 16 pinos a ligar diretamente ao LCD, tá bem que o mega tem um monte de pinos, portanto deve ser apenas questão de escolheres pinos que não entrem em conflito com o que já estás a usar.
-
não percebi a relação entre pinos ICSP e os do I2C..
-
não percebi a relação entre pinos ICSP e os do I2C..
My mistake, li ICSP :P (hoje é segunda tenho desconto).
Por acaso i2C nao vi...
Edit: Estive a espreitar e tenho que comprar uma placa a parte para comunicar via i2c certo?
"esgana-me" um pouco o tempo, mas vou ponderar encomendar isso hoje e quarta está cá. Obrigado pela dica desconhecia. ;)
Olá Vasco, o LCD é este: https://www.banggood.com/pt/Keypad-Shield-Blue-Backlight-For-Arduino-Robot-LCD-1602-Board-p-79326.html?rmmds=search&cur_warehouse=CN
Mas não tem o shield porque eu dessoldei o LCD do shield.
-
ou comprar a placa ou comprar o LCD já com ela.. sim..
-
ou comprar a placa ou comprar o LCD já com ela.. sim..
Obrigado pela dica ;)
-
Viva,
Só para avisar que já funciona.
Vou arrumar a fiarada e o código, e depois partilho cá o projecto.
De qualquer forma fui aos nossos fornecedores estrangeiros do outro lado do mundo e mandei vir LCD's com i2c para futuros projectos e quem sabe para depois melhorar este.. :)
Obrigado aos que contribuíram.. :)
Cumps,
André.
-
vale a pena ir ver uns videos ao youtube das diferenças de desempenho nos displays i2c e spi, só pra ter uma ideia..
qual foi a solução? remapear os pinos do liquidCrystal?
-
O problema estava na Shield que vinha com o LCD.
Aquilo tem um Keypad (que não precisava) e de alguma forma não inicializava o LCD só remapeando os pinos.
A solução passou por sacar o LCD fora e ficar somente com o LCD sem keypad e depois liga-lo normalmente dos pinos 22-27 e ficou logo a funcionar :)
Relativamente a ver os videos, depois vou dar uma vista de olhos :)
Cumps,
André.
-
isso é bom, então..
outra solução podia passar por ligar X arduinos uns aos outros até teres pinos suficientes.. :D
serial/master
-
Eheh sim verdade, mas overkill para isto :D
-
Com esses botões todos é provável que estejam ocupados uma serie de pinos, pelo que deve complicar escolher pinos que estão realmente livres.
A principio pensei que os pinos ao pé do potenciómetro azul era a interface i2c, só depois é que vi que eram 6 e estava lá escrito icsp, que para o caso do lcd não ajuda absolutamente nada.
Embora esteja completamente de acordo que displays bitmap oleds, lcd, etc, que devem ser SPI, considero ser irrelevante para os displays character based.
O backpack I2S pode ser comprado separadamente, pensei que hj em dia quase todos os lcd 16x2 já vinham com o backpack mas não, no e-bay vem quase tudo sem ele.
-
pensei que hj em dia quase todos os lcd 16x2 já vinham com o backpack mas não, no e-bay vem quase tudo sem ele.
depende do que se procurar..
olha aqui um exemplo: https://www.ebay.com/sch/i.html?_nkw=16x2+i2c+display
zordlyon, sem duvida seria overkill, mas provavelmente tens mais que um arduino, e se tivesses que esperar por outro display, era solução.. ;)
-
Ou usem logo um 128x64 OLED que custam tipo 1€ e falam SPI ou i2c, mais flexivel que um 16x2, e usa menos energia, e é gráfico.
Ou 3€ por um TFT 128x160 a cores.
Tenho lá por casa 10 16x2 que me custaram para ai 1.5€ cada um e não os uso porque funcionam a 5v e tenho muita tralha feita que nem sequer tem rail de 5v, só 3.3v..
-
eu tb prefiro os OLEDs, mas são muito mais pequenos.. n sei se dão pra esta aplicação..
OLEDs maiores ficam caros..
-
Viva,
Aqui usei os 16x2 porque era o que tinha cá por casa... :)
Cumps,
André.
-
Malta obrigado pela ajuda, a demonstração serviu perfeitamente.
Nos próximos dias mais tardar até ao fim da próxima semana partilho o tutorial. :)
Cumps,
André.
-
Obrigado aos que me ajudaram, criei o tutorial, vou fechar este tópico.
Continuação em:
https://lusorobotica.com/index.php?topic=9319.msg104514#msg104514