LusoRobótica - Robótica em Português

Robótica => Iniciantes => Tópico iniciado por: LoneWolf em 09 de Julho de 2010, 13:27

Título: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 13:27
Ola e boas tardes a todos, tenho aqui um LCD 16x1 ( HMC16102-SY-PY-2) que retirei de um alarme e já segui os post's do fórum e não consegui escrever nele, para ligar o led dele tive de ligar o pino 15 ao GND e o pino 16 a 5+ os outro pinos fiz igual ao tutorial e só consigo fazer o contraste dos 8 primeiros espaços que devia aparecer caracteres. Não sei o que fazer já vi montes de post's e nada isto teima em não dar, será que esta avariado  :'( ? se poderem ajudar agradecia.

Obrigado e boa continuação  ;) 
Título: Re: LCD 16x1 + Arduino
Enviado por: amando96 em 09 de Julho de 2010, 13:40
Tens o datasheet? nem todos têm o pinout igual.
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 13:41
os pinos de alimentação e o data Bus do LCD 16 x 1 são os mesmos que o 16 x 2 ( a unica difrença é o nº de colunas)?

penso que deve ser, mas convem confirmares pelo dataheet,
se realmente forem os mesmos segue este tutorial:

http://www.earthshineelectronics.com/optoelectronics/34-16x2-lcd-display-green-on-black.html (http://www.earthshineelectronics.com/optoelectronics/34-16x2-lcd-display-green-on-black.html)

vais a "download" e sacas o dataheet do LCD, segue o que lá está , eu quando consegui meter o meu a funcionar pela 1ª vez foi com esse tutorial...

depois dá novidades :) e boa sorte..
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 14:20
Boas, obrigado fred gomes, agora já da alguma coisa sem ser o contraste, mas agora aparece a palavra escrita mas só " Hello, w" ver onde esta o problema agora mas já é um começo, e mais uma vez obrigado.

Abraços e boa continuação  ;)
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 09 de Julho de 2010, 14:26
Boas kilobyte
Se reparares o teu display só mostra os 8 primeiros caracteres "Hello, w"
É muito provável que ele seja um display de 16x1 mas internamente esteja como um de 8x2, ou seja para escreveres bem Hello, world deves enviar para a segunda linha "orld". Tenta escrever um A na 1 linha e um B na 2 linha e talvez te apareçam caracteres de meio display para a frente.
cumps
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 15:13
Boas, e como adiciono a 2ª linha ao código? a pouco ainda consegui por números a contar a seguir a palavra "hello, w" agora nem isso  :-\
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 09 de Julho de 2010, 15:24
Em arduino não sei como funciona, voces devem ter ja as bibliotecas feitas, eu uso umas modificadas por mim e sao do genero.
putCHAR(linha,caracter), em linha ponho a linha que o quero por, em caracter meto a posiçao, no meu caso voa de 0 a 15, no teu deve ir de zero a 7. Tenta ver as bibliotecas do arduino, devem haver uma função onde dizes que queres o texto na linha x.
No meu por exemplo tem 4 zonas de memoria que são as linhas
Linha1 - 80 - 8F
Linha2 - C0 - CF, etc
Se souberes o datasheet desse é uma questão de fazeres uma função deste género

void    LCDgoto(char line, char x){
if (line == 1) lcd_cmd(0x80+(x));
if (line == 2)lcd_cmd(0xC0+((x)));
if (line == 3)lcd_cmd(0x90+((x)));
if (line == 4)lcd_cmd(0xD0+((x)));
            }
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 15:29
http://arduino.cc/en/Reference/LiquidCrystalBegin (http://arduino.cc/en/Reference/LiquidCrystalBegin)

consulta a biblioteca...
tens de fazer no setup "lcd.begin(8,2)no caso do teu display..

depois para escreveres onde queres (linha e coluna, basta escrever   lcd.setCursor(linha,coluna);(nao te esqueças que a coluna 1 é identificada por 0, e a 2ª por 1, para escreves na 2ª coluna podes fazer por exemplo . lcd.setCursor(0,1);

Boa sorte ;)

Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 18:12
Boas, obrigado pelas dicas  ;) prob resolvido, e so mais uma coisa eu escrevi varias "mensagens" e queria que elas se repetissem que comando tenho de introduzir?

Obrigado por tudo e boa continuação  ;)
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 19:42
se repetissem como assim?
não percebi...
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 20:00
Boas, eu meti 3 mensagens, aparece a 1ª, 3s depois a 2ª e mais 3s aparece a 3ª e depois faz clear e para por ali e eu queria que as mensagens depois da 3ª volta-se a 1ª. espero que tenha percebido e mais uma vez obrigado pela a ajuda  ;)

Abraços e óptima continuação.
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 09 de Julho de 2010, 20:29
Faz um while(1) e poe essa sequência lá dentro
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 20:31
mostra o código que fizeste..
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 20:37
boas já tentei return, while e não deu deve faltar alguma coisa, mas ai vai o código

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
  lcd.begin(8, 2);
  lcd.setCursor(0, 0);
  lcd.print("Ola, Mun");
  lcd.setCursor(0, 1);
  lcd.print("do Nasci");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LusoRobo");
  lcd.setCursor(0, 1);
  lcd.print("tica.com");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Obrigado");
  lcd.setCursor(0, 1);
  lcd.print(" a todos");
  delay(3000);
  lcd.clear();
 
}
void loop () {
}
 

....é certo que ainda não percebo de programação mas estou lendo guias e tentando aplicar.
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 20:51
o setup por norma so é executado uma vez (digo por norma pq se estiveres a a usar o algum timer, por exemplo, é executado mais que uma vez...),

se queres que isso te esteja sempre aparecer mais que uma vez tens de colocar no loop, ( o numero de linhas e colunas fica colocado no setup, pq basta ao arduino obter esse informaçao uma vez "para saber" que o display tem 2 colunas e 8 linhas, é como quando declaras o estado dos pinos (pinMode´s, etc) o numero de linhas e colunas do display funciona da mesma forma, entendes?...
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 22:01
Ol, pois esta parte esta difícil de perceber, foi isto que quis dizer?

 void loop () {

" e aqui dentro introduzo o código outra vez?"
}

obrigado pela ajuda que me tem dado mas não perca mais tempo com o meu problema, mais umas horas de leitura talvez resolva isto.

Abraços e boa continuação  ;)
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 22:08
sim, ao introduzires o codigo o setup so é corrido uma vez , como referi anteiormente, e ao colocares lá o codigo é natural que so escreva uma vez, pois o programa nao volta a correr no setup (so no inicio) já o loop está sempre a ser corrido.
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 22:32
Bem, obrigado mais uma vez, eu já tinha tentado isso mas incluía tudo e dava erro e depois pensei, se vou incluir tudo se fosse algo muito grande ia ocupar a memoria toda e assim ia ter "problemas", e pensava que tinha de ser de outra maneira, introduzindo um simples código tipo: return, while, etc e assim ocuparia menos espaço.

Abraços e boa continuação e mais uma vez obrigado por tudo, e já agora posso usar por ex. o ecrã de telemóvel ao invés deste tipo de lcd ? é que tenho alguns nokia 5110 e outros modelos e marcas também.
Título: Re: LCD 16x1 + Arduino
Enviado por: fred gomes em 09 de Julho de 2010, 22:41
deves poder..
mas eu nunca usei e nao sei como se programa..

Ps: digo que deves poder pq ah aí tutoriais com display´s desses.
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 09 de Julho de 2010, 22:56
Boas, sim por isso é que perguntei já tinha visto o do tutorial do 3310, e estava a interrogar-me se poderia usar o de outro modelo (5110 por ex.). Outra ideia que tinha era ver se dava para ligar uma pen bluetooth ao arduino entre outras coisas mas isto é só ideias e talvez disparatadas lol.
Título: Re: LCD 16x1 + Arduino
Enviado por: senso em 11 de Julho de 2010, 22:58
Usar outros lcd's procura na internet antes para saber se existe datasheet do controlador do lcd na rua para poderes criar software e saber o que cada pino é, se não é muito dificil fazer alguma coisa.
Que tipo de erros estavas a ter?
É que até encheres o arduino precisas de muito muito código mesmo.
Ligar uma pen bluetooth é dificil pois o arduino não é capaz de se fazer de host de usb, existe um shield que faz isso mas é muito limitado.
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 11 de Julho de 2010, 23:13
Podes sempre fazer o teu arduino bluetooth shield, algo deste genero http://www.flickr.com/photos/21847757@N08/2958709025/in/pool-make (http://www.flickr.com/photos/21847757@N08/2958709025/in/pool-make)
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 12 de Julho de 2010, 00:56
Boas noites,

...senso, eu quando falei dos erros não os estava a ter( fiz-me intender mal, desculpa) o que eu queria dizer era que pensava a que havia outra forma de fazer repetir o texto sem ter de escrever o código outra vez no loop, por exemplo, imaginando que o código já era enorme ( que não era o caso ) mas supondo que era, ter que voltar a escrever o código todo podia não caber no arduino ou que fica-se a a justa podia vir a ter erros de funcionamento e devido a isso pensei que pode-se haver um comando que realizasse isso tipo " repetir função x" e assim poupando espaço na memoria, ver se agora me fiz intender. Quanto ao Bluetooth sei que há esse shield bluetooth que faz isso, mas como já vi coisas incríveis na net feitas com o arduino e dai a ideia de se usar um pen bluetooth para o efeito mas pelos vistos é difícil fazer tal coisa, a não ser que o link que o  FET_Destroyer postou  seja isso, mas não deve de ser pois ao que me pareceu aquele bluetooth tem muitos pin's ao contrario das pen's que só tem 4. Agora o caso dos LCD's de telemovel ao que vejo so mesmo o 3310, pois este tem pin's que se veja para soldar os fios de ligação, porque os LCD's de tele que tenho aqui comigo são os da nokia 5110, 6150, 8210, 6610 ou 3100 ( não porque so tenho mesmo o lcd do tele ao contrario dos outros ) da SamSung tenho SGH-R210S, SGH-600 (x2), Sony Ericsson o T610 hei-de ter mais alguns so não sei onde infelizmente, estes modelos pelos vistos são aqueles do tipo 2 como explica o post aqui no forum do LCD 3310, que tem uma fita de borracha, ou la o que é aqui, que difícil ou impossível de soldar seja o que for.

... e já me alonguei demais outra vez  :-[
obrigado  FET_Destroyer pelo link que da sempre jeito.

Abraços e boa continuação  ;)     
Título: Re: LCD 16x1 + Arduino
Enviado por: senso em 12 de Julho de 2010, 01:10
Mas o setup não foi de todo feito para colocar lá código, o setup como o nome diz foi criado com a intenção de fazeres lá a inicialização do teu programa/sistema e depois no loop é que colocas o teu código todo, se quiseres que só corra uma vez usa um if e uma variavel, depois de correr uma vez metes a variavel a false e deixa de satisfazer o if e já não corre mais essa parte do código.
E se queres repetir algo fazes uma função, não metes pedaços gigantes de código iguais no teu programa.
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 12 de Julho de 2010, 01:41
Boas, não sei leu os post's  anteriores mas o código que fiz para o lcd 16x1 estar a passar continuamente foi assim:
Citar
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
  lcd.begin(8, 2);
  lcd.setCursor(0, 0);
  lcd.print("Ola, Mun");
  lcd.setCursor(0, 1);
  lcd.print("do Nasci");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LusoRobo");
  lcd.setCursor(0, 1);
  lcd.print("tica.com");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Obrigado");
  lcd.setCursor(0, 1);
  lcd.print(" a todos");
  delay(3000);
  lcd.clear();
 
}
void loop () {
  lcd.setCursor(0, 0);
  lcd.print("Ola, Mun");
  lcd.setCursor(0, 1);
  lcd.print("do Nasci");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LusoRobo");
  lcd.setCursor(0, 1);
  lcd.print("tica.com");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Obrigado");
  lcd.setCursor(0, 1);
  lcd.print(" a todos");
  delay(3000);
  lcd.clear();
}


...foi assim que fiz ai com as dicas os membros, não sei é o mais certo mas deu para fazer a experiência. Se acha que não devia ser assim se poder dizer como é que devia ter feito agradecia para não ficar na ignorância.

Obrigado, abraços e boa continuação  ;)   
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 12 de Julho de 2010, 02:08
Boas kilobyte
O facto de ter 4 pinos e o shield ter mais não quer dizer que não sirvam para a mesma coisa. Os da pen só tem 4pinos pois usam USB, mas se comprares módulos bluetooth serial (não sei se existem), provavelmente só terias 3pinos de interface. Se os módulos bluetooth forem por SPI, tens 4pinos + alimentação. Ambos devem fazer a mesma coisa, utilizam é protocolos diferentes para transferir os dados.

Cumps
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 12 de Julho de 2010, 02:27
Boas  FET_Destroyer,

...obrigado pela explicação já começo a intender um pouco mais de bluetooth, então é como o senso disse :

Citar
"Ligar uma pen bluetooth é dificil pois o arduino não é capaz de se fazer de host de usb"
..mas é pena lol, foi como eu disse num post anterior, ideia disparatada.

Abraços e boa continuação  ;)

Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 12 de Julho de 2010, 11:47
Boas
Quanto ao arduino não sei, mas o PIC24 já tem USB host e as bibliotecas da microchip tem exemplos disso, mas nunca mexi neles.
Cumps
Título: Re: LCD 16x1 + Arduino
Enviado por: senso em 12 de Julho de 2010, 14:38
Tecnicamente e segundo o que li, o bluetooth não é mais que uma ligação serial sem fios, supostamente não é muito dificil de o meter a funcionar, mas o atmega não tem qualquer capacidade usb em hardware, só em software é que se pode fazer algumas coisas, mas host não, existem chips da atmel com algumas capacidades em hardware para usb, mas nenhum deles está disponivel em PDIP.
Quando ao código, podes fazer assim:
include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
  lcd.begin(8, 2);
}
void loop () {
  lcd.setCursor(0, 0);
  lcd.print("Ola, Mun");
  lcd.setCursor(0, 1);
  lcd.print("do Nasci");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LusoRobo");
  lcd.setCursor(0, 1);
  lcd.print("tica.com");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Obrigado");
  lcd.setCursor(0, 1);
  lcd.print(" a todos");
  delay(3000);
  lcd.clear();
}

Que vai fazer exactamente o mesmo.
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 12 de Julho de 2010, 15:10
O bluetooth é mais que uma ligação serial sem fios, é considerado uma WPAN. O bluetooth é parecido com o Zigbee e permite-te fazer redes até 8 nós ou algo do género. O que muitas vezes acontece é os PC interpretarem isso como uma porta serie virtual.
Agora como os dados são interpretados pela porta serie isso também não sei, nunca usei bluetooth.
Título: Re: LCD 16x1 + Arduino
Enviado por: LoneWolf em 12 de Julho de 2010, 15:55
Ola e boas tardes, desde já não posso deixar de agradecer aos dois pelas explicações, vocês tem sido excelentes obrigado.
       Senso, assim o código esta muito melhor sempre tinha de haver uma forma de aplicar sem escrever tudo 2x, o que aconteceu quase de certeza foi eu que intendi mal a explicação do caro  fred gomes que também me tem ajudado bastante, pois ele falou em colocar o código no loop e devia ser dessa maneira que citou.
       FET_Destroyer, pois é bem possivel que de para aplicar o bluetooth de alguma forma eu é que ainda nõa percebo disto, esta a ser muita coisa nova ao mesmo tempo lol e assimilar tudo não esta ser facil, quanto as PIC's ainda não sei o que é, bem sei que são CI, não sei se os exemplos que vou dar o são, mas aqui fica: (PAL16R5DCN, AMPAL16L8BPC, M2764A-2F1, TIBPAL 16L8-10CN, MX16C450(MX8007-5) )estou a dar esses exemplos porque são CI que tenho comigo (coisas que fui retirando de aparelhos que guardei ou desmantelei) se forem melhor um dia poderem brincar com eles  ;D ou então tambem podem ser peças de museu lol.
       Como tinha dito ainda é tudo novo para mim e ando a ler muita coisa e tanto de electrónica como de programação deste ultimo ando a ler um livro que só tem 1180 paginas  ;D  mas tenho mais 2 para ler, e com a vossa ajuda acaba por ser "fácil" de entender.
Não me queria alongar mas já me alonguei novamente  :-[
bem mais uma vez obrigado por tudo, abraços e óptima continuarão,
...sem mais nada de momento assim me despeço  ;)   
Título: Re: LCD 16x1 + Arduino
Enviado por: FET_Destroyer em 12 de Julho de 2010, 16:00
Boas kilobyte.
Os integrados que nomeas-te nenhum é um PIC
Os PIC dizem no encapsulamento PICxxF bla bla bla e são um microcontrolador.
Do mesmo genero dos atmel usados no arduino. Há muita variedade de micros.
cumps