Páginas

miércoles, 21 de agosto de 2013

Display LCD EL-1602 con Picaxe

La conexión entre un display paralelo y un microcontrolador Picaxe es sencilla. Aquí presento un programa realizado a partir del firmware del axe133.

Lo he realizado con un axe401kit, equipado con un 28X2 porque formará parte de un proyecto mayor. Se puede usar un 18M2 hacia arriba, o un 28Xx hacia arriba.
Lo que es necesario es que haya un bus completo de 8 bits, de lo contrario se dificultaría el programa, por lo que descartamos los 08xx y los 14xx.

Adicionalmente hacen falta dos líneas más de control:
- Enable: Mediante un pulso se habilita la lectura de la informacion presente en los pines del display.
- RS: Habilita el modo comando o el modo caracter.

Las entradas del LCD A y K corresponden con los leds de retroiluminacion que estan soldados internamente con resistencias en serie, por lo que podemos llevar el A a +5V y el K a GND.
También podemos regular la retroiluminación mediante un transistor usando una entrada más de control. para controlar la corriente por A y K.




 





'LCD EL1602 con shield PICAXE-28X2
'JCO-Robotics, Agosto 2013.
'Programado a partir del SW del kit AXE133 (Conversor serie-paralelo para LCD)

#picaxe 28x2

symbol longitud = 16  
symbol enable     = C.1    ; Enable High:Enable  Low:Disable
symbol rs         = C.0    ; RS     High:Ascii   Low:Comando

let dirsC = 000011    ; PortC pines 0 y 1 control
let dirsB = %11111111    ; PortB datos LCD
setfreq m16          

EEPROM $00, ("JCO-Robotics    ")     ; Almacena mensaje en EEPROM
EEPROM $10, ("Pruebas EL-1602 ")     ; Almacena mensaje en EEPROM
EEPROM $20, ("Modo Memoria    ")     ; Almacena mensaje en EEPROM
EEPROM $30, ("Modo Búsqueda   ")     ; Almacena mensaje en EEPROM
EEPROM $40, ("Concurso 40x40cm")     ; Almacena mensaje en EEPROM
EEPROM $50, ("Maqueta 20x20cm ")     ; Almacena mensaje en EEPROM
EEPROM $60, ("Mensaje Nº 6    ")     ; Almacena mensaje en EEPROM
EEPROM $70, ("Mensaje Nº 7    ")     ; Almacena mensaje en EEPROM
EEPROM $80, ("Mensaje Nº 8    ")     ; Almacena mensaje en EEPROM
EEPROM $90, ("Mensaje Nº 9    ")     ; Almacena mensaje en EEPROM
EEPROM $A0, ("Mensaje Nº 10   ")     ; Almacena mensaje en EEPROM
EEPROM $B0, ("Mensaje Nº 11   ")     ; Almacena mensaje en EEPROM
EEPROM $C0, ("Mensaje Nº 12   ")     ; Almacena mensaje en EEPROM
EEPROM $D0, ("Mensaje Nº 13   ")     ; Almacena mensaje en EEPROM
EEPROM $E0, ("Mensaje Nº 14   ")     ; Almacena mensaje en EEPROM
EEPROM $F0, ("Mensaje Nº 15   ")     ; Almacena mensaje en EEPROM


main:

pause 15
gosub LCD_init

'Muestra mensajes 0 y 1 durante 3 sg
let b1 = 0
gosub msg  
gosub segunda
let b1 = 1
gosub msg
pause 3000

'Limpia pantalla
gosub clsc
pause 100

'Muestra mensajes 2 y 4    durante 3 sg
let b1 = 2          
gosub msg          
gosub segunda
let b1 = 4          
gosub msg
pause 3000
goto main
      
'Inicializa LCD
LCD_init:

low rs                  ; Modo comando
let pinsB = 110000     ; 8 bit, 2 lineas
pulsout enable,1      ; Pulso en enable para enviar datos
pause 5             ; Espera 5 ms
pulsout enable,1          ; Envía 48 otra vez
pulsout enable,1      ; Envía 48 otra vez
   
let pinsB = 111000     ; LCD  - 8 bit, 2 line, 5x8
pulsout enable,1
let pinsB = 000001    ; Borra pantalla
pulsout enable,1   
pause 8            ; 8 = 2ms a 16MHz
let pinsB = 000010     ; CR
pulsout enable,1
let pinsB = 000011    ; Modo Entry
pulsout enable,1   
let pinsB = 001100    ; Enciende LCD sin cursor ni parpadeo
pulsout enable,1   

high rs            ; Modo caracter
return

'Borra pantalla
clsc:
low rs
let pinsB = 000001
pulsout enable,1   
pause 8          
high rs          
return

'Salta a segunda línea
segunda:
low rs      
let pinsB = 192        ; Mueve a linea 2, instruccion 192
pulsout enable,1
high rs
return

'Visualiza mensajes almacenados en EEPROM
msg:
let b2 = b1 & 001111 * longitud ; Calcula direccion del primer caarcter del mensaje
let b3 = b2 + longitud - 1         ; Calcula direccion del ultimo caracter
for b4 = b2 to b3                   ; Bucle n veces
read b4,b1                       ; Introduce caracter en B1
let pinsB = b1                    ; Muestra el caracter en puerto B
pulsout enable,1                 ; Envía informacion.
next b4
return
    

9 comentarios:

  1. Hola,te acabo de añadir al grupo de Facebook Picaxe Inside NUEVO., ya que al antiguo ni puedo entrar ni ver los mensajes. El quiera que se una.
    Con el 18M2 sería igual, los puertos con el mismo nombre y el programa igual. Me gusta usar el 20m2 por la disposición de pines, un puerto a un lado y el Otro al otro.

    ResponderEliminar
  2. como haria para que en la pantalla lcd me muestra valores de medicion de un sensor analogo

    ResponderEliminar
  3. Hola, no sé que sensor analógico usarás pero harían falta varias cosas:
    - Conectar el sensor a una entrada analogica.
    - Leer el valor del sensor, y convertir dicho valor numérico a una cadena ascii. Esto es, si envias un valor 42 al display no te aparecera un 42, sino el caracter ascii Que debe ser un numero o una letra.
    - Una vez convertido el valor a una cadena ascii hay que enviar al display caracter por caracter para representarlo.
    - Volver al principio para realizar una nueva lectura.

    Un saludo.

    ResponderEliminar
    Respuestas
    1. pero este recorrido del código ascii es dentro del código de arriba o dentro de otro picaxe, porque intento recorrer dentro del código de arriba pero me toma los valores que están en la EEPROM si recorro b1 con el numero 1 asignado para mostrarlo: let pinsB = b1

      Eliminar
  4. podrias enviarme como queda el diagrama de conexion picaxe-lcd, estoy intentado convertir esa lcd paralela a serial, pero al armar el circuito y enviarle mensajes desde otro picaxe no me muestra nada a pesar de haber cargado codigo parecido al que esta en esta entrada para la conversion

    ResponderEliminar
    Respuestas
    1. Perdona, no habia vistu tu mensaje. Si quieres el convertidor serie a paralelo con un 18m2, está en www.picaxe.com.

      Eliminar
    2. El esquema que describo es entre la shield de 28x2 y un lcd 1602. Los datos que te van a aparecer en el display son lo que tengas almacenado en el programa, no lo que envies por serie.

      Eliminar
    3. El esquema que describo es entre la shield de 28x2 y un lcd 1602. Los datos que te van a aparecer en el display son lo que tengas almacenado en el programa, no lo que envies por serie.

      Eliminar