⚡ Descuentos en cursos en video - Lleva tu aprendizaje técnico al siguiente nivel y aprovecha precios especiales antes de que termine la oferta. 🔥 Aprovechar oferta ahora 🔥
Microcontroladores y sistemas digitales

Desde picaxe a lcd 16 x 2 a travez de pic 16f84a

wichocar
hace 16 años
hace 16 años
Hola gente de yo reparo. estuve leyendo la publicacion acerca del seminario de picaxe y espero me puedan ayudar. necesito mandar varios mensaje desde una patas de salida de un picaxe a un lcd 16 x 2 tipo hitachi, atravez del comando serout. el problema es que no consigo el controlador pic o el programa picaxe que se encargue de recibir los mensajes del picaxe 18a y los mande a la pantalla. se que viene un controlador picaxe para lcd pero aca en argentina no lo consigo por ningun lado he hecho un par largo de practicas sacados de algunas paginas de internet pero no han dado buenos resultados. y al meterme con ubicaciones de memoria picaxe o con pic voy perdido. se que se puede hacer con pic16f84a o con picaxe(tengo todo el hardware necesario) pero lo que no se es como hacer el programa. agradeceria mucho un programita para dicho pic o un programita para picaxe que permita hacer eso (y como deberia colocar las db4 a db7 del display al pic o al picaxe) desde ya muchas gracias
torres.electronico
hace 16 años
hace 16 años
Hola amigo, tenes varias maneras de trabajar un display.... Si bien tratar display con un sencillo PIC nos puede resultar sencillo, el manejo de estos con los microcontroladores PICAXE tiene sus mañas, asi que a modo sintesis, te hago un mini tutorial de como manejar un display con cualquier microcontrolador de la gama PICAXE.... El manejo de la pantalla con un micro picaxe puede ser: [list][*]Puede implementar un picaxe cualquiera (esceptuando el -PICAXE08-) y un HD44780. [*]Puedes implementar un picaxe esclavo al display sin el HD, como figura en el mismo manual de programacion basica de picaxe, pero estas limitado a una determinada cantidad de mensajes por cantidad de entradas que tienes libre en el picaxe. Si bien podriamos trabajar este tema con algun metodo de busqueda en binario, no s tan facil de la palabra al hecho...[/list:u] Mirá, te dejo un ejemplo basico de un hardware en base a un modulo de display con el HD44780 (si tenes alguna radio fuera de funcionamiento con un display de esta caracteristicas, podes aprovechar este) [list][/list:u] Definir salidas: Las siguientes son definiciones de interfaz comunes para todas las configuraciones de hardware [list]SYMBOL RS = 2 ; 0 = Command 1 = Data SYMBOL E = 3 ; 0 = Idle 1 = Active SYMBOL DB4 = 4 ; LCD Data Line 4 SYMBOL DB5 = 5 ; LCD Data Line 5 SYMBOL DB6 = 6 ; LCD Data Line 6 SYMBOL DB7 = 7 ; LCD Data Line 7 SYMBOL RSCMDmask = %00000000 ; Select Command register SYMBOL RSDATmask = %00000100 ; Select Data register[/list:u] Definiendo variables en LCD Las siguientes variables deben ser definidos segun la instruccion de la linea en que estemos, por ejemplo: [list]SYMBOL get = b11 SYMBOL byte = b12 SYMBOL rsbit = b13[/list:u] Hay que tener en cuenta que la variable 'get' sólo se utiliza dentro de la rutina de "InitialiseLcd", l que nos dice que 'B11' se puede volver a utilizarse con su propio programa después de que el LCD se ha inicializado. La variable 'byte' sólo se utiliza en la rutina de inicicializacion del LCD ('InitialiseLcd') para especificar los datos que se envían a través de los comandosl "SendDataByte 'y' SendCommandByte" , por tanto, "B12" al igual que "B11" se pueden volver a utilizarse dentro de su propio programa. La variable "rsbit" que por el comando symbol la renombramos como "B13" (y en consecuencia la W6), debe ser preservada e intacta durante la operación del programa . Esto implica que no debe ser utilizado por su propio código a menos que la coloques en algún otro lugar y se restaure su valor defecto después de su uso. Tené en cueta que si moves esta variable, perdes todo los bytes almacenados, osea, reseteas esa memoria de almacenamiento ya que esta se implementa para mantener un seguimiento de los bytes manejados. Controlando nuestro LCD Existen tres rutinas basicas que se utilizan para inicializar el control de la pantalla LCD ... [list]GOSUB InitialiseLcd ;Inicializar el LCD byte = ... ; Enviar un bit de registro de datos al LCD GOSUB SendDataByte byte = ... ; Enviar un byte al comando de registro del LCD GOSUB SendCmdByte[/list:u] La inicializacion de la rutina del LCD ('InitialiseLcd), debe ser llamado una vez al inicio del programa. Las variables "SendDataByte" y "SendCmdByte", se utilizan para enviar bytes de datos a la pantalla y los registros de comandos, respectivamente. Osea que esto permite que los datos que mandamos se visualizen en el LCD en una posicion del cursor previamente definida. Antes de llamar a cualquiera de las dos rutinas, el byte de datos que se enviarán debe ser colocado en el 'byte' de la variable. El valor puesto en el 'byte' de la variable no cambia cuando las rutinas son llamadas. Ejemplo de Control: [list]GOSUB InitialiseLcd ; Inicializar el LCD byte = "A" ; dato a colocar en el LCD "A" GOSUB SendDataByte byte = $80 | $00 ; Poner el cursor al principio de la linea1 GOSUB SendCmdByte byte = $80 | $40 ; Poner el cursor al principio de la linea2 GOSUB SendCmdByte byte = 2 * 8 | $40 ; Programa de caracteres ya definido por el usuario GOSUB SendCmdByte byte = %00100 : GOSUB SendDataByte ; # byte = %01110 : GOSUB SendDataByte ; ### byte = %11111 : GOSUB SendDataByte ; ##### byte = %00100 : GOSUB SendDataByte ; # byte = %00100 : GOSUB SendDataByte ; # byte = %00100 : GOSUB SendDataByte ; # byte = %00100 : GOSUB SendDataByte ; # byte = %00000 : GOSUB SendDataByte ; byte = 2 ; Display de caracteres ya definido por el usuario GOSUB SendCmdByte[/list:u] Ejemplo de Inicializacion: [list]InitialiseLcd: FOR get = 0 TO 5 READ get,byte GOSUB SendInitCmdByte NEXT ' Implementar estos comandos para inicializar en modo 4bits EEPROM 0,( $33 ) ; %0011---- %0011---- 8-bit / 8-bit EEPROM 1,( $32 ) ; %0011---- %0010---- 8-bit / 4-bit ' bytes de configutracion de la pantalla LCD EEPROM 2,( $28 ) ; %00101000 %001LNF00 Display Format EEPROM 3,( $0C ) ; %00001100 %00001DCB Display On EEPROM 4,( $06 ) ; %00000110 %000001IS Cursor Move ; L : 0 = 4-bit Mode 1 = 8-bit Mode ; N : 0 = 1 Line 1 = 2 Lines ; F : 0 = 5x7 Pixels 1 = N/A ; D : 0 = Display Off 1 = Display On ; C : 0 = Cursor Off 1 = Cursor On ; B : 0 = Cursor Steady 1 = Cursor Flash ; I : 0 = Dec Cursor 1 = Inc Cursor ; S : 0 = Cursor Move 1 = Display Shift EEPROM 5,( $01 ) ; Clear Screen RETURN[/list:u] Ejemplo de una rutina para cualquier hardware: [list]SendInitCmdByte: PAUSE 15 ; generar un ratardo de 15mS a 4MHz SendCmdByte: rsbit = RSCMDmask ; Enviar el comando de registro SendDataByte: pins = byte & %11110000 | rsbit ; poner MSB en 1er lugar PULSOUT E,1 ; mandar un pulso de 10uS en E pins = byte * %00010000 | rsbit ; poner LSB en 2do lugar PULSOUT E,1 ;mandar un pulso de 10uS en E rsbit = RSDATmask ;Enviar un registro de datos para la siguiente accion RETURN[/list:u] Como puede verse, las tres rutinas están estrechamente ligadas entres si en lo que respecta el código de la rutina en un programa con LCD. Como yo en un principio te recomende implementar modulos LCD en base al HD44780, los codigo que te dejé, te van a funcionar perfectamente en cualquier proyecto con este tipo de hardware. En la mayoría de los LCD, el código de inicialización, puede variar segun hardware, en este caso se implementaron tiempo que rondan los 10/15mS. Esto, dependiendo el proyecto que tengas en mente, en ves de implementar el microcontrolador en RC, puedes anexar un cristal y cambiar estos retardos; Igualmente, tenes que tener en cuenta que a veces, manejar otras velocidades, te puede crear otros conflictos, u bien, hay veces que no implementar el cristal, puede generarte un armonico no ciclico y traer problemas cuando se satura el microcontrolador. Es breve lo que te dejo, pero no es tan dificil.. Como veras, no hay mucho de picaxe y uno tiene que irse armando a los golpes :D pero sinceramente, es asi como uno aprende cuando está escaso de material informativo ..no? :mrgreen:
wichocar
hace 16 años
hace 16 años
muchas gracias torres.electronico. agradezco la prontisima respuesta. a los ponchazos duros habia hecho andar un lcd esta madrugada con picaxe18x( es el que me quedaba), pero con tu explicacion he logrado entender bien que habia hecho anoche, dado que el ingles no es mi fuerte. me fui anoche pensando en que cmando podria usar para sobreescribir la eeprom (0 a 255 en el caso de picaxe 18x) asi cada vez que me llegara desde otro picaxe un texto yo podria tomarlo, colocarlo en la memoria sobre esribiendo y mandarlo al lcd con la tranquilidad de que la eeprom nunca se me llenaria. intente asignarle a un variables (b4 - b8 por ejemplo)un caracter ascii ("H""E""L""L""O" por ejemplo) y cada variable me tomaba ese valor que le asignaba (creo, porque la verif. de sintaxis no me acusaba ningun error)pero cuando lo mandaba a imprimir al lcd este no lo mostraba. o en algo me equivoque respecto de la impresion o este metodo definitivamente no es viable para los efectos deseados. seguire peleando este tema, agradecere cualquier ayuda extra para llegar a buen puerto. saludos y muchas gracias.-
torres.electronico
hace 16 años
hace 16 años
tenes la rutina a mano??? si la tenes, subila con el diseño del hardware...Vamos a sacar adelante este proyecto, y despues, si te interesa, lo subimos a modo de ejemplo con el resto de los ejemplos que subi acá en el link de 2_Todo sobre micros PICAXE (cursos, notas tecnicas, ejemplos de programacion)
wichocar
hace 16 años
hace 16 años
mirao que he hecho hasta aca es lo que veras en este link al final . hice esto para aprender a manejar los picaxe(de niño me mendaron a aprender el basic de las compus talent msx). y asembler recien estuve viendo algo anoche. de turbo c no me acuerdo nada. ja ja. Aprendiendo a manejar el display puedo saber que esta haciendo el lavarropas o donde se edtuvo por alguna falla. cuando veas el programa veras que esta hecho muy al estilo del basic de talent. (nunca use el comando symbol, ja ja). pero la idea de esto fue aprender a crear un plc cn tidas las letras y que me brinde info en pantalla. para lo cual no me haga falta cambiar la rutina del controlador del display. creo yo (y agradezco tu interes) que vale la pena luchar este proyecto, mas alla de las ganacias, por todo lo que se puede aprender haciandolo. estos son los links donde esta la publicacion (si queres mas detalles avisame) http://proyectoselectronics.iespana.es/lavarropas.htm
wichocar
hace 16 años
hace 16 años
mil perdones por la ortografia y sintaxis
torres.electronico
hace 16 años
hace 16 años
No me funciona el link :?
wichocar
hace 16 años
hace 16 años
por favor, proba en este link que es el de un amigo de guatemala, ahi podras entrar en todos los detalles. disculpa las molestias. http://solopicaxe.blogspot.com/
torres.electronico
hace 16 años
hace 16 años
claro :D , pero yo me refería a la rutina ya la conexiones de hardware que tenias vos para tu display...
wichocar
hace 16 años
hace 16 años
ahhhh!!!! perdon. mira estaba basando todo en o que encontre en una pagina pero no he podido llegar a concretarlo. por alguna causa no me anda. te paso el link http://ladecadence.net/blog/?cat=3 fijate que hay un controlador para lcd picaxe , y es eso lo que en realidad estoy buscando, por necesidad, porque , como ya te dije en lineas anteriores no consigo aca en argentina ese producto http://www.decelectronics.com/html/PICAXE/DISPLAY%20SERIAL%20PICAXE%20INSTRUCTIVO.pdf
torres.electronico
hace 16 años
hace 16 años
aaaaaaaaaaaaaa, claro, bueno, te comento que ahi estas tirando un picaxe en modo esclavo y lo que te ocupa de memoria es infartante, cuando bien podes implementar un modulo como el que te mostre yo (es el mismo que etsan vendiendo como quit de picaxe, busca mas info y vas a ver que es un hitachi similar), y consumis un 25% MENOS de espacio en el micro. El problema que estas teniendo, debe de ser el comando "goto" al finalizar alguna subrutina. En ves de decirle que siga, le estas diciendo que vuelva a comenzar...Para el caso de implementacion de estados y funciones multiples, implementa el comando "return", entonces, cuando termina la subrutina, hace el scan hasta finalizar todas las lineas y vuelve a comenzar... si implementas un cristal, esta funcion es mucho ms lucrativa, osea, mas rapida... mira este ejemplo bobo que te hago: [list]inicio_programa: gosub selector_prog gosub selector_msg goto inicio_programa selector_prog: if input1=1 then goto prelavado if input2=1 then goto lavado if input3=1 then goto centrifugado if input4=1 then programa_largo return selector_msg: if input1=1 then goto lcd_lavado `saltar el prelavado if input2=1 then goto lcd_prelavado if input3=1 then goto lcd_centrifugado if input4=1 then lcd_programa_largo return prelavado: en este sub programa, hacemos todo lo que tenias en el otro programa, pero al finalizar, implementamos dos comandos: "gosub fin_prog" y debajo de este, "return" para que siga con el scan lavado: en este sub programa, hacemos todo lo que tenias en el otro programa, pero al finalizar, implementamos dos comandos: "gosub fin_prog" y debajo de este, "return" para que siga con el scan centrifugado: en este sub programa, hacemos todo lo que tenias en el otro programa, pero al finalizar, implementamos dos comandos: "gosub fin_prog" y debajo de este, "return" para que siga con el scan programa_largo: en este sub programa, hacemos todo lo que tenias en el otro programa, pero al finalizar, implementamos dos comandos: "gosub fin_prog" y debajo de este, "return" para que siga con el scan lcd_prelavado: serout 6,T2400,(254,"1”,"3"," PROG ") serout 6,T2400,(254,"1”,"a"," PRELAVADO ") pause 250 return lcd_lavado: serout 6,T2400,(254,"1”,"3"," PROG ") serout 6,T2400,(254,"1”,"a"," LAVADO ") pause 250 return lcd_centrifugado: serout 6,T2400,(254,"1”,"3"," PROG ") serout 6,T2400,(254,"1”,"a"," CENTRIFUGADO ") pause 250 return lcd_programa_largo: serout 6,T2400,(254,"1”,"3"," PROGRAMA ") serout 6,T2400,(254,"1”,"a"," COMPLETO ") pause 250 return fin_prog: serout 6,T2400,(254,"1”,"3"," FIN ") serout 6,T2400,(254,"1”,"a"," PROGRAMA ") pause 250 return[/list:u] Recordá, que dependiendo el tiempo que le des a los retardos, tendras un scan rapido o lento.... osea, que dependiendo del tiempo que tenes en el scan, tendras un efecto visual en el LCD de mensaje titilante; Ya que cuando entra en el 1er sub programa, recorre las lineas, actua segun las señales y vuelve a la linea siguiente hasta llegar al final, donde nuevamente le dice el comando return volver alprograma raiz, pero al siguiente sub programa. Esto es asi susecivamente y te va a servir para que no tengas conflictos con el display.. si usas "goto", corres el riesgo que en algunas ocaciones, no llegue nunca a la linea o al sub programa de mensajes. Ojo, este es un ejemplo bobo que te doy para que veas como manejar el programa de mensajes de display dentro de tu diseño... obviamente, hay que pensar en renombrar la funcion y que se activen a partir del estado de alguna memori word o cualquiera e las otras... total, tienes 13 :P comentame si mas o menos entedes la idea muy pero muy simplificada de como trabajar con un picaxe en modo esclavo. saludos
Reparaciones similares solucionadas

¿Conoces una solución?

¡Aprende a reparar con estos cursos YoReparo!

4.73
(22)

Curso Reparación de Fuentes Conmutadas de PC y Equipos Electrónicos

Maximiliano Resch
$ 40 USD
$ 20 USD
4.87
(15)

Curso Diseño de Amplificadores de Máxima Fidelidad

Maximiliano Resch
$ 29 USD
$ 13 USD
4.71
(7)

Curso TV OLED y QLED con el Ing. Picerno

Ing. Alberto H. Picerno
$ 29 USD
$ 10 USD
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos?
Regístrate gratis