collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[22 de Abril de 2024, 14:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)  (Lida 57086 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #30 em: 02 de Junho de 2009, 21:04 »
@metRo_
lol é isso que o Ricardo disse. lol nao como já havia dito nos posts anteriores esta lá porque sou nabo (a pensar que estava a ser muito cauteloso).  :D

@ricardo-reis
epá ainda não tive tempo para acabar o tutorial :)
a ideia era isto ser um tutorial mas por nunca ter soldado tive que parar, so hoje é que consegui alguma coisa...
como ate ao final da semana nao devo avançar nada com o tutorial deixo aqui um resumo, mas tambem podem ver pelo pdf.

1)
LCD       ARDUINO
1 VSS    GND
2 VDD   +5V
3 V0      Usar Saida de Potenciometro de 10K (regula o contraste)
4 RS      12
5 R/W   11 ou GND porque em princípio só queremos escrever para o ecrã (LOW como diz no pdf)
6 EN     10
7 DB0   ---- NC (versão 4bits por isso só usamos DB4~DB7)
8 DB1   ---- NC (versão 4bits por isso só usamos DB4~DB7)
9 DB2   ---- NC (versão 4bits por isso só usamos DB4~DB7)
10 DB3   ---- NC (versão 4bits por isso só usamos DB4~DB7)
11 DB4  ----  5
12 DB5  ----  4
13 DB6  ----  3
14 DB7  ----  2
15 BL LED   +5V
16 BL LED   GND

O software não conhecia, é uma pérola! Obrigado por partilhares. Deu uma olhadela vi a Arduino mas não vi LCDs experimenta fazeres tu se tiveres à vontade com o software apartir dos dados acima.

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

Pelo código podem ver a equivalencia dos pinos do lcd com os do arduino. usei no esquema acima o default do codigo da biblioteca LiquidCrystal do arduino.
Bem depois disto acho que já não é preciso tutorial loool.
Se tiverem dúvidas digam.
Twitter: @joaoamaral | Skype: joaoamaral

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Twitter: @joaoamaral | Skype: joaoamaral

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #32 em: 03 de Junho de 2009, 22:53 »
lol.. nós aqui gostamos mt de fazer tudo À pata..

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #33 em: 03 de Junho de 2009, 23:04 »
::) tens razao. é mais giro fazer tudo de raiz mas as vezes tambem é giro experimentar coisas feitas ;)
assim da para ver o maximo das potencialidades que as coisas dao para fazer :D
Twitter: @joaoamaral | Skype: joaoamaral

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.064
  • El RoboSapiens
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #34 em: 03 de Junho de 2009, 23:04 »
joaoamaral, o lcd smartie comunica com o arduino? sempre tive essa duvida....lol

tive agora a tentar ligar o meu lcd mais uma vez.....experimentei o teu codigo e como o costume nao deu nada....só quadradinhos :P ja perdi as esperanças neste bixo....deve ter morrido mesmo :(

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #35 em: 03 de Junho de 2009, 23:46 »
amanha experimento o lcd smartie
deve dar aquilo tem opcao para serie :)

e vais ver que o teu lcd esta bom ;)
Twitter: @joaoamaral | Skype: joaoamaral

Offline jorge_rc

  • Mini Robot
  • *
  • Mensagens: 521
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #36 em: 14 de Junho de 2009, 23:44 »
Boas...

novidades do lcd?

o meu arduino chega na terça feira, por isso, deve ser das primeiras coisas que vou começar.... a chatear o pessoal..


Um abraço

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #37 em: 15 de Junho de 2009, 08:19 »
O LCD é muito simples de ligar. Ligar cada cabo como coloquei em cima.

a) Ligar todos os cabos para o LCD ligar

1 VSS    GND
2 VDD   +5V

15 BL LED   +5V
16 BL LED   GND

Vai aparecer isto:


b) Ligar potenciometro 10k para regular o contraste ao pino 3 do
3 V0      Usar Saida de Potenciometro de 10K (regula o contraste)
basta ligar ao ground e saida
em alternativa pode-se ligar uma resistencia com um bom valor de resistencia ate 10k que de o contraste que se queira

c) Ligar os cabos de dados

4 RS      12
5 R/W   11 ou GND porque em princípio só queremos escrever para o ecrã (LOW como diz no pdf)
6 EN     10
7 DB0   ---- NC (versão 4bits por isso só usamos DB4~DB7)
8 DB1   ---- NC (versão 4bits por isso só usamos DB4~DB7)
9 DB2   ---- NC (versão 4bits por isso só usamos DB4~DB7)
10 DB3   ---- NC (versão 4bits por isso só usamos DB4~DB7)
11 DB4  ----  5
12 DB5  ----  4
13 DB6  ----  3
14 DB7  ----  2

do 7 ao 10 nao se liga nada, vamos usar o lcd a 4bits

d) por volta desta altura ja devem ter o cabo usb ligado ao arduino que usaram para testar os passos anteriores
correr o IDE e vao a

File > Sketchbook > Examples > Library-LiquidCrystal > HelloWorld

fazem upload para o arduino do sketch e já está :)
deve aparecer isto



para escrever na segunda linha devem usar
lcd.setCursor(0,1);

verifiquem se os pinos estao bem ligados, foi a minha unica dificuldade
para tudo funcionar tive que soldar os pinos ao lcd (porque queria colocar numa breadboard).
Twitter: @joaoamaral | Skype: joaoamaral

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #38 em: 15 de Junho de 2009, 11:19 »
Muito bom!

Já agora qual a diferença que sentes ao usar 4bits para 8bits no lcd? é o tipo de caracteres que podes fazer? velocidade de refresh?

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #39 em: 15 de Junho de 2009, 12:03 »
Muito bom!

Já agora qual a diferença que sentes ao usar 4bits para 8bits no lcd? é o tipo de caracteres que podes fazer? velocidade de refresh?

tirando o facto de usar mais cabos não notei diferença nenhuma mas ainda não fiz testes intensivos
Twitter: @joaoamaral | Skype: joaoamaral

Offline delphi

  • Mini Robot
  • *
  • Mensagens: 217
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #40 em: 20 de Junho de 2009, 11:07 »
joaoamaral, o lcd smartie comunica com o arduino? sempre tive essa duvida....lol

Como o Lcd Smartie  (http://lcdsmartie.sourceforge.net/) dá para configurar para enviar os dados para a porta série, logo, o arduino recebe esses dados.

Para que o LCD Smartie envie os dados para serem utilizados neste tipo de LCDs  (16x2 Paralelo 4 Bits/8Bits) é necessário entrar em Setup, em Display Settings seleccionar como plugin "matrix.dll", e em startup parameters escolher a porta  do arduino e velocidade de comunicação. Na tab de baixo (Screen) escolher 2x16.

Da parte do LCD Smartie é só isto para comunicar. Da parte do arduino temos de fazer o upload do seguinte código, para ele saber o que fazer com o que recebe:

Código: [Seleccione]
#include <LiquidCrystal.h>

// LiquidCrystal display with:
// rs on pin 12
// rw on pin 11 --------connected to GND (not used)
// enable on pin 10
// d4, d5, d6, d7 on pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
  
  lcd.clear();
  lcd.print("**LCD  SMARTIE**");
  delay(4000);
  Serial.begin(19200);
}

byte serial_getch(){
  
  int incoming;  
  while (Serial.available()==0){}
  // read the incoming byte:
  incoming = Serial.read();
  return (byte) (incoming &0xff);
}

void loop(){
  
  byte rxbyte;
  byte temp;
  
  rxbyte = serial_getch();

  if (rxbyte == 254) //Matrix Orbital uses 254 prefix for commands
        {
                switch (serial_getch())
                {
                        case 66: //backlight on (at previously set brightness)
                                // not implemented                              

                                break;
                        case 70: //backlight off
                                // not implemented                              
                                break;
                        case 71:  //set cursor position
                                temp = (serial_getch() - 1);  //get column byte
                                switch (serial_getch())  //get row byte
                                {
                                        //line 1 is already set up
                                        case 2:
                                                temp += 0x40;
                                                break;
                                        case 3:
                                                temp += 0x14;
                                                break;
                                        case 4:
                                                temp += 0x54;
                                                break;
                                        default:
                                                break;
                                }
                                lcd.command(0b10000000 + temp);
                                break;
                        case 72:  //cursor home (reset display position)
                                lcd.command(2);
                                break;
                        case 74:  //show underline cursor
                                lcd.command(0b00001110);
                                break;
                        case 75:  //underline cursor off
                        case 84:  //block cursor off
                                lcd.command(0b00001100);
                                break;
                        case 76:  //move cursor left
                                lcd.command(16);
                                break;
                        case 77:  //move cursor right
                                lcd.command(20);
                                break;
                        case 78:  //define custom char
                                lcd.command(64 + (serial_getch() * 8));  //get+set char address
                                for (temp = 7; temp != 0; temp--)
                                {
                                        lcd.print(serial_getch()); //get each pattern byte
                                }
                                break;
                        case 83:  //show blinking block cursor
                                lcd.command(0b00001111);
                                break;
                        case 86:  //GPO OFF
                                //implement later
                                break;
                        case 87:  //GPO ON
                                /*temp = serial_getch();
                                if (temp == 1)
                                {
                                        GPO1 = GPO_ON;
                                }*/
                                break;
                        case 88:  //clear display, cursor home
                                lcd.command(1);
                                break;
                        case 152: //set and remember (doesn't save value, though)
                        case 153: //set backlight brightness
                                //not implemented
                                break;

                        //these commands ignored (no parameters)
                        case 35: //read serial number
                        case 36: //read version number
                        case 55: //read module type
                        case 59: //exit flow-control mode
                        case 65: //auto transmit keypresses
                        case 96: //auto-repeat mode off (keypad)
                        case 67: //auto line-wrap on
                        case 68: //auto line-wrap off
                        case 81: //auto scroll on
                        case 82: //auto scroll off
                        case 104: //init horiz bar graph
                        case 109: //init med size digits
                        case 115: //init narrow vert bar graph
                        case 118: //init wide vert bar graph
                                break;
                        default:
                                //all other commands ignored and parameter byte discarded
                                temp = serial_getch();  //dump the command code
                                break;
                }
                return;
        } //END OF COMMAND HANDLER

        //change accented char to plain, detect and change descenders
        //NB descenders only work on 5x10 displays. This lookup table works
        //  with my DEM-20845 (Display Elektronik GmbH) LCD using KS0066 chip.
        switch (rxbyte)
        {
                //chars that have direct equivalent in LCD charmap
/*                case 0x67: //g
                        rxbyte = 0xE7;
                        break;
                case 0x6A: //j
                        rxbyte = 0xEA;
                        break;
                case 0x70: //p
                        rxbyte = 0xF0;
                        break;
                case 0x71: //q
                        rxbyte = 0xF1;
                        break;
                case 0x79: //y
                        rxbyte = 0xF9;
                        break;
*/                case 0xE4: //ASCII "a" umlaut
                        rxbyte = 0xE1;
                        break;
                case 0xF1: //ASCII "n" tilde
                        rxbyte = 0xEE;
                        break;
                case 0xF6: //ASCII "o" umlaut
                        rxbyte = 0xEF; //was wrong in v0.86
                        break;
                case 0xFC: //ASCII "u" umlaut
                        rxbyte = 0xF5;
                        break;

                //accented -> plain equivalent
                //and misc symbol translation
                case 0xA3: //sterling (pounds)
                        rxbyte = 0xED;
                        break;
/*                case 0xB0: //degrees symbol
                        rxbyte = 0xDF;
                        break;
*/                case 0xB5: //mu
                        rxbyte = 0xE4;
                        break;
                case 0xC0: //"A" variants
                case 0xC1:
                case 0xC2:
                case 0xC3:
                case 0xC4:
                case 0xC5:
                        rxbyte = 0x41;
                        break;
                case 0xC8: //"E" variants
                case 0xC9:
                case 0xCA:
                case 0xCB:
                        rxbyte = 0x45;
                        break;
                case 0xCC: //"I" variants
                case 0xCD:
                case 0xCE:
                case 0xCF:
                        rxbyte = 0x49;
                        break;
                case 0xD1: //"N" tilde -> plain "N"
                        rxbyte = 0x43;
                        break;
                case 0xD2: //"O" variants
                case 0xD3:
                case 0xD4:
                case 0xD5:
                case 0xD6:
                case 0xD8:
                        rxbyte = 0x4F;
                        break;
                case 0xD9: //"U" variants
                case 0xDA:
                case 0xDB:
                case 0xDC:
                        rxbyte = 0x55;
                        break;
                case 0xDD: //"Y" acute -> "Y"
                        rxbyte = 0x59;
                        break;
/*                case 0xDF: //beta  //mucks up LCDSmartie's degree symbol??
                        rxbyte = 0xE2;
                        break;
*/                case 0xE0: //"a" variants except umlaut
                case 0xE1:
                case 0xE2:
                case 0xE3:
                case 0xE5:
                        rxbyte = 0x61;
                        break;
                case 0xE7: //"c" cedilla -> "c"
                        rxbyte = 0x63;
                        break;
                case 0xE8: //"e" variants
                case 0xE9:
                case 0xEA:
                case 0xEB:
                        rxbyte = 0x65;
                        break;
                case 0xEC: //"i" variants
                case 0xED:
                case 0xEE:
                case 0xEF:
                        rxbyte = 0x69;
                        break;
                case 0xF2: //"o" variants except umlaut
                case 0xF3:
                case 0xF4:
                case 0xF5:
                case 0xF8:
                        rxbyte = 0x6F;
                        break;
                case 0xF7: //division symbol
                        rxbyte = 0xFD;
                        break;
                case 0xF9: //"u" variants except umlaut
                case 0xFA:
                case 0xFB:
                        rxbyte = 0x75;
                        break;
                default:
                        break;
        }

        lcd.print(rxbyte);  //otherwise a plain char so we print it to lcd
        return;

}


Encontrei estas configurações no link http://www.nuelectronics.com/estore/index.php?main_page=project_lcdsmartie.

Como não estava a conseguir colocar a funcionar com a biblioteca que eles sugerem ( LCD4Bit_mod ) mudei para utilizar a LiquidCrystal, (umas das diferenças é que esta última permite configurar os pins à vontade do "freguês").



« Última modificação: 20 de Junho de 2009, 11:14 por delphi »
www.saborapalco.com - Companhia de Teatro Amador
www.megavaquinha.com - Uma mega aposta no euromilhões de um grupo de mega amigos

Offline joaoamaral

  • Mini Robot
  • *
  • Mensagens: 218
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #41 em: 20 de Junho de 2009, 12:46 »
Ena pá!! Obrigado! Quando puder experimento já! :D

abraço e obrigado por partilhares
Twitter: @joaoamaral | Skype: joaoamaral

Offline jorge_rc

  • Mini Robot
  • *
  • Mensagens: 521
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #42 em: 21 de Junho de 2009, 15:04 »
Boas pessoal.. Hoje resolvi começar a tentar por isto a trabalhar...

Liguei apenas os pinos 1, 2, 15 e 16. Sendo que o 2 e o 15 liguei aos 5v e o 1 e o 16 liguei ao Gnd. Mas tentei utilizar utilizar a energia do arduino ligado ao USB, tenho o duemilanove com atmega 168, mas simplesmente nao aconteceu nada... o que pode ter sido?

Offline Ricardo_91

  • Mini Robot
  • *
  • Mensagens: 48
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #43 em: 21 de Junho de 2009, 15:16 »
A Luz de fundo também não acendeu?
se esta tiver acendido, o único problema é não teres ligado o pino 3 ao GND que serve para definir o contraste para o máximo.

cumpz ;)
Ricardo Vieira


Offline jorge_rc

  • Mini Robot
  • *
  • Mensagens: 521
Re:Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress)
« Responder #44 em: 21 de Junho de 2009, 15:37 »
nao acendeu nada...

supostamente o arduino é o suficiente para alimentar o lcd, nao é?

o pino 3 nao o liguei a lado nenhum-