TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: fin en 10 de Diciembre de 2007, 19:38:32
-
Hola a todos,
Soy nuevo en el foro y también muy muy nuevo en esto de los micros de microchip.
Bueno les comento mi idea, que quizás no es lo mejor para iniciarse en el tema, pero es lo que me ha llevado a meterme en este mundo.
Quiero controlar la actividad de un circuito casero a 220V a través de 3 salidas de un micro 16F877 que exciten las bobinas de tres relés. Esta actividad quiero que sea seleccionada en un display LCD de 20x4 a través de pulsar un teclado de 4 teclas en columna (cada linea correspondería a una opción y a un boton del teclado).
Pues bien tengo el circuito exterior prácticamente dimensionado según especificaciones de los componentes, he intentado montarlo en proteus aunque no tengo librería de todos los componentes, pero más o menos he hecho un apaño (dentro de lo poco que conozco el programa). Al introducirme en la programación del micro la verdad es que me estoy volviendo loco.
He revisado mil veces las especificaciones del micro para comprender el foncionamiento de las instrucciones y registros, y he consultado estos días atrás desde que estoy registrado el foro sobre todo para los temas del LCD y el teclado (dandole vueltas también a los ejemplos que se proponen en un link que puso alguno de ustedes ("http://www.x-robotics.com/")), pero no hay forma de enterarme de nada. Logro entender algo las configuraciones, pero cuando se mete en las instrucciones de inicialización y transferencia de datos no lo comprendo.
Podría alguno ayudarme con este tema o si tiene alguna guía que pueda compartir explicando algo de esto un poco para torpes (que es mi caso), se lo agradecería bastante.
Otra cosa que les quería preguntar es qué me recomiendan usar para la programación lenguaje C o ensamblador? Tengo algunas nociones de C (aunque algo olvidadas de la poca práctica y nunca he trabajado con micros, sólo porgramas básicos en el ordenador) y empiezo de 0 en ensamblador.
Muchas gracias de antemano.
Un saludo.
P.D. Sinceramente no sabía donde colocar este tema, si en proyectos o aquí, así que pido disculpas si no lo he puesto en el adecuado al final.
-
Pues como tienes algo de nocion de C entonces deberia comenzar por ese lenguaje. una vez que te decidas por el lenguje entonces recien podras buscar informacion sobre el funcionamiento del LCD para ese lenguaje :mrgreen: :mrgreen:
-
caballero debes postear un avance
saludos
-
Yo de ti empezaría simplificando tu gran problema a varios problemas pequeñitos.
En vez de mover 3 relés y mostrar la info en un LCD, intenta hacer parpadear un led, de lo que encontrarás multitud de ejemplos en el foro. Cuando parpadee un led, podrás poner un transistor+relé y también conmutará.
A partir de ahí, triplicar el sistema no te costará nada.
Y para mostrar información en LCD también hay cientos de ejemplos.
Te recomiendo que te centres en lenguaje C y busques en ese subforo.
-
Muchas gracias a todos por su respuesta.
Finalmente gracias a que lo que antes encontré fueron rutinas en ensamblador, y después de estrujarme un poco el coco durante este tiempo para ver como iba más o menos el tema, decidí empezar la programación en este lenguaje.
Como aconsejó Nocturno, he intentado plantearlo más simple, es más en Proteus (cuando logre la programación) la simulación la haré con leds que será lo más fácil quizás para ver que funciona. Aparte también intento hacer todo a partir de subrutinas para simplicar algo la programación.
Ahora el problema me surje en el inicio del programa. De momento sólo tengo la declaración de variables y que funcione sólo para mostrar el Menu 1 por el LCD, pero al compilar en el MPlab me salen millones de errores. He corregido alguno como el de los caracteres en blanco del menu que me faltaba el espacio y que no se puede repetir CBLOCK-ENDC, pero a parte de esos me salen errores de sintaxis con la declaración de constantes en decimal con d' ' y binario con b' ' (he probado los decimales con .XXX y tampoco) y con la declaración del micro en el inicio.
No me atrevo a continuar escribiendo el código en MPlab para no engordar de errores el tema por si es algo que tenga común con el resto poder evitarlo ahora que igual después es más dificil de ir depurando.
Les adjunto el fichero asm por si alguien puede echarle un vistazo y comentarme.
Ante todo muchas gracias y FELICES FIESTAS.
-
Tu codigo esta muy desordenado, las declaraciones de variables que haces tienen que ir antes del ORG 0x00 , ademas que declaras dos veces el ORG 0x00 , es por eso que tienes tantos errores.
-
Aunque no es indispensable ordenar el código (al fin y al cabo el compilador no le interesa eso) si es necesario para que después no te pierdas cuando depures el programa.
ahí van mis comentarios (que no son inmutables)
- los registros SFR no hace falta declararlos porque ya lo haces al poner
list p=16f877 ; list directive to define processor
#include <p16f877.inc> ; processor specific variable definitions
- los registros GPR van TODOS dentro de un solo
CBLOCK 0x(dirección del primer GPR del uC que uses)
....
ENDC
- organiza las rutina principal en una zona principal, o por lo menos identificalo con un comentario para que se sepa que es lo que siempre se ha de repetir, el resto son rutinas secundarias (que también deben ir organizadas).
- una forma de organizar es siguiendo las reglas sintacticas de programación, ej: 2 o 3 tabulaciones para los mnemonicos, sin tabulación para las etiquetas (y con 2 puntos al final), un par de enter entre rutinas, y comentarios entre mnemonicos.
la verdad que el código que subiste está un poco dificil de analizar por falta de organización.
-
completamente de acuerdo con palitroquez, trate de entender el codigo pero casi me estalla el cerebro :z) :z) :z), si lo ordenas podriamos ayudarte de una manera mas eficiente :mrgreen:
-
Muchas gracias por vuestras respuestas,
tienen razon, la verdad es que el orden y yo nunca hemos sido buenos amigos... . Trataré de organizar el código siguiendo las reglas que comenta palitroquez y corregiré lo que comenta sander a ver cómo va quedando el tema. Ya les postearé otra vez una vez hecho este paso.
Un saludo
-
Hola de nuevo,
He modificado el archivo siguiendo sus consejos. La verdad es que el orden hace bastante, sólo hay que ver el resultado, se ve todo más claro, al menos bastante más que antes.
He vuelto a compilarlo y ahora sólo me devuelve un error: "Error [939] No file arguments"
usando la búsqueda en el foro he encontrado algunos temas con errores sobre "arguments" que me hacen pensar que el error puede venir de que no haya configurado bien el MPlab para el micro o que no encuentre el fichero 16F877.inc, pero no he logrado avanzar mucho... he probado poniendo la ruta entera del archivo en disco duro, pero este mensaje no cambia.
Aparte de por este error, les querría preguntar por la parte del codigo de "ORG...." (este lo he copiado dell archivo 16F877 que aconsejaba un minimanual de mplab insertar en el codigo) la verdad es que no me entero muy bien. Leyendo artículos he conseguido saber que el org situa en una dirección de memoria... y por los comentarios de otros programas, configura el tema de las interrupciones, pero realmente no descifro bien el tema ya que incluso en programas con el mismo fin he visto esta parte completamente diferente entre ellos. Supongo que para conseguir que si ocurre una determinada entrada para todo y realice una salida o una determinada rutina hay que usar alguna interrupcion y con ello configurar bien esta parte del inicio, pero no llego a mucho mas...
Les dejo el codigo.
Un saludo
-
El archivo que posteas tiene extension .as , primero creo que deberias modificarlo a .asm, luego he creado un proyecto en MPLAB le cambie el nombre a tu archivo por uno mas corto y me salen otros errores pero son errores facilmente corregibles pero el error que mencionas no aparece.
Que version del MPLAB usas?
Has creado un proyecto?
Saludos
-
Hola Sander,
Sí, cree un nuevo proyecto y añadí el fichero ese .as a la carpeta "Source files" de ese proyecto. Configuré en "Device..." el micro al 16F877; en "Debugger" seleccioné la herramienta MPLABSIM y en settings le puse la frecuencia a 4 Mhz que es la frecuencia del cristal con la que quiero trabajar físicamente (todo esto lo hice siguiendo el minimanual que comenté antes). En cuanto a la versión... es la última que encontré en la página de microchip, la 8.00.
El problema es que al ponerle la extensión ".asm" ya no me lo incluye en Source files, sino en Other files. De todas formas en cuanto pueda probaré a compilar desde ahí a ver si puede y te comentó qué me sale.
Gracias.
Un saludo
-
Intenta usar el 16f877A, que es la version mejorada del 16f877, ademas al darle una ojeada a tu programa esta mas ordenado y ya se entiende, ahora si piensas usar el portA como i/o digitales debes asegurarate de que este puerto trabaje de esta manera ya que por defecto inicia como entradas analogicas, en el datasheet del pic esta las instrucciones que debes colocar en tu programa, algo a tener en cuenta. Ademas que la extension del archivo debe ser asm y no as, sobre lo del error del mplab 8.00 no se si sera un bug de este, lo vere ahora mismo :mrgreen:
-
Bueno, acabo de bajarme la version 8.00 del mplab y dejame decirte que si acepta el asm, debes estar haciendo algo mal. Cuando trate de compilar tu programa me arrojo errores, los cuales la mayoria son errores de sintaxis, por ejemplo en la primera columna se coloca las etiquetas, en la segunda van las instrucciones, cuando cominzas un cblock desde comenzar en la 2da columna y de esta manera:
cblock 20h
reg1
reg2
regn
endc
como usas el inc del pic que trae el mpsam, ahi el nombre de los registro es en mayusculas, las intrucciones pueden ser en mayusculas o minusculas pero el nombre de los registros debe ser en mayusculas. En el mismo inc esta las palabras de configuracion que soporta este pic y en ningun lado veo la _WRT_ENABLE_ON. Los inc de los pics que puede compilar el mplab estan el la carpeta C:\......\MPLAB IDE\MCHIP_Tools. Un poco de lectura no hace daño, hasta ahora no :mrgreen: :mrgreen:. Espero que mis palabras no te ofendan, ya sabes que estamos aqui para ayudarte y hacerte ver en que estas fallando. "Nosotros te enseñamos la puerta; pero depende de ti en cruzarla o no"
-
Hola poseidon,
No me ofende, al contrario, es de agradecer la ayuda que me están dando.
En cuanto al error, no se qué podía ser... la verdad es que he ido creando nuevos proyectos con el asistente y ahora sí me ha admitido el .asm, y claro está ha salido una retaíla de errores. He depurado los errores de sintaxis que me has comentado, la verdad es que creía que en el código de programación no se distinguía entre mayúsculas y minúsculas, sólo para declarar cadenas de caracteres. Aparte lo del cblock y lo de la configuración del puertoA con E/S digitales.
Ahora mismo el programa compila, con algunos mensajes de advertencia para que compruebe el banco cuando uso registros del banco 1 como los TRIS,etc., que ya he comprobado y creo que están bien configurados según el datasheet de microchip.
En cuanto a lo del _WRT_ENABLE_ON... es cierto, he mirado el archivo del pic y no aparece, pero sin embargo en el fichero "16F877atemp" (creo recordar) que usé siguiendo el manual para la estructura del programa sí aparece (en mi fichero todo lo que está en inglés es la parte que he copiado de ese fichero). La verdad es que no se para qué sirve, si crees que sólo me puede dar problemas, lo borro.
Sobre lo de usar un pic 16f877A, si son sólo ventajas y no supone ningún cambio importante en la configuración de patillas y en la programación, pues hombre es bienvenido. Voy a echarle un vistazo al datasheet a ver qué encuentro distinto.
De momento voy a continuar insertándole las rutinas para escanear el teclado.
Les dejo el último código modificado por si alguno puede echarle un vistazo por si, por experiencia, detecta algún fallo que, aunque no sea detectado para compilar, pueda salir funcionalmente una vez implementado en el chip.
Les iré posteando los avances que vaya haciendo durante estos días.
Un saludo y de nuevo gracias.
-
una pregunta. El archivo de cabecera P16F877.INC hay que incluirlo en el proyecto?, o basta con nombrarlo en la linea de codigo del fichero source?...
-
Por cierto. A mi tampoco me deja colocar el .asm en sources. Se me mete en other files. ¿Como correjiste eso?
al dar a source files , add files, solo me deja coger .c y .h (tengo la version 7.50)
-
una pregunta. El archivo de cabecera P16F877.INC hay que incluirlo en el proyecto?, o basta con nombrarlo en la linea de codigo del fichero source?...
no hace falta, el propio mplab lo hace por tí una vez que compilas
Por cierto. A mi tampoco me deja colocar el .asm en sources. Se me mete en other files. ¿Como correjiste eso?
al dar a source files , add files, solo me deja coger .c y .h (tengo la version 7.50)
el asm lo aceptará en esa y en cualquier versión, si te lo guarda en other files quiere decir que no le dijiste al asistente que era en ensamblador que ibas a trabajar. En el asistente basta seleccionar las tool del mpasm de microchip para la familia que estes trabajando (no recuerdo es algo como 12/16/ ...)
Intenta usar el 16f877A, que es la version mejorada del 16f877, ...
no creo que resuelva el problema porque según entiendo hay un malentendido con el asistente del mplab, (y además que si hay diferencias con/sin la A)
-
Muchas gracias PalitroqueZ, eran dos grandes misterios para mi.
saludos
-
Hola afisicos
Como ha dicho palitroquez es configuracion en el asistente. Se ve que en el asistente en el primer proyecto no elegí la herramienta adecuada (MPASM... o algo así... la primera que sale en el asistente...). En los últimos ya lo tengo configurado así y me acepta los .asm
En cuanto a lo del 16f877A que comenta palitroquez... entonces continuaré en el normal si hay diferencias. Creo que con este va de sobra, ya que creo que al final aunque use todos los puertos... seguramente esto sea por novato ya que creo que no uso ni la mitad de las posibilidaddes de este pic tal y como he visto en otros proyectos del foro.
Iré posteando los avances tanto para dudas como por si pueden servir de guia a otros usuarios que como yo se inicien en este tema.
Un saludo.
-
Hola fin. Si, ya he podido hacer el proyecto en asm. Así pude probar lo del led y ver que iba, ahora mis problemas vienen con c... jeje pero me paso a otro post que ya he invadido mucho el tuyo. Gracias.
chao.
-
Intenta usar el 16f877A, que es la version mejorada del 16f877, ...
no creo que resuelva el problema porque según entiendo hay un malentendido con el asistente del mplab, (y además que si hay diferencias con/sin la A)
Claro que no, solo que si hay una version mejor, para que trabajar con una anterior, es solo mi opinion. Pero es valedero trabajar con ese pic.
Acabo de bajar la ultima version de tu programa. Ahora esta mejor, ya no me sale los errores anteriores. solo mensajes pero no es relevante eso, pero cuando sale warning si hay que chequearlos y ni que decir con el error. Bueno esperamos las ultimas noticias de tu proyecto :D
-
Hola,
¿qué tal fueron las fiestas navideñas?
Después de descansar unos días he vuelto al lío... prácticamente he completado el código (faltan algunos retoques pero lo básico está o al menos compila en MPLAB). Ahora es el momento de ver cómo funciona todo simulando en Proteus, y surgen problemas nada más empezar y es que no saca los caracteres por el LCD y se queda ahí colgado el circuito (sólo funciona el Reset, creo). Mirando por el foro y por internet, he cogido otras rutinas (me he quedado con una de Pocher que colgó en el foro, - gracias Pocher -) para el control del LCD ya que según he leído en Proteus dan problema con los tiempos del LCD (hay que poner retardos y demás creo). Sin embargo por muchos cambios que haga no da ningun caracter.
De hecho el último código que le he metido es prácticamente una copia del código que pillé en el foro (ya que corto el resto del código con un bucle a sleep) y aún así nada. No se si puede ser por el micro (la rutina original es para el 16F84).
Si alguien le pudiera echar un ojo se lo agradecería bastante.
Os adjunto el circuito y los tres códigos:
-Codigo con teclado es el mio original.asm
-Proteus.asm es la primera modificación
-Proteus2.asm es la última modificación que es casi copiado.
(En el primer código uso RA.1, RA.2 y RA.3 para RS, R/W y E que es como está en el circuito mientras que en los otros dos uso los pines 0,1y2)
Muchas gracias,
Un saludo
-
lo que pasa es que en la configuracion de los fuses estaba habilitado el WDT, enonces el porgrama apenas acanzaba unas lineas y se desbordaba el WDT provocando un reset en tu programa, deberias cambiar en tu codigo asi:
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
entus 3 programas, has la prueba y veras como se visualiza en el LCD el mensaje que quieres, ahora creoq ue lo que tratas de hacer es capturar que tecla se pulso generando interrupciones en un determinado intervalo de tiempo, no esta mal la idea pero si te fijas en la parte de tu programa que trata las interrupciones, cuando se produce una interrupcion esta parte del programa no hace nada
solo ingres a este pero no hace nada y luego sale de el, creo que deberias leer mas el datasheet del pic, y darte una vuleta por el foro ya que este tema de generar interrupciones con el timer0,1 o 2 se a tocado ampliamente.
-
Gracias de nuevo Poseidon por tu respuesta.
Ya funciona la pantalla. Sin embargo los dos primeros codigos parpadean de forma extraña y no muestra todas las lineas. No se si esto es por causa de la media rutina que uso para los menus, pero bueno la verdad es que en el tercer codigo funciona esto a la perfeccion y no tengo problema en ponerlo así.
Ahora es lo del teclado lo que no me funciona como también me has dicho. Echaré un ojo por el foro a lo que me comentas de interrupciones. Cuando hice esta parte del código, buscando por el foro, pensé en hacer esto como interrupción de programa (creo que es lo que me comentas con el timer0,1 o 2) pero mirando ejemplos veia que estas interrupciones se podían producir en cualquier parte del programa saltando al vector de interrupicon, y al interesarme (al menos al principio) que sólo se pudieran dar en unos momentos determinados y que el programa se quedase en espera hasta que se produjera alguna... traté de buscar una alternativa. Ahora supongo que esto tambien se puede hacer con estas interrupciones habilitandolas o no en el código cuando me interese. De todas formas buscaré por el foro.
Seguiré dando noticias cuando avance con esto.
Otra pregunta, ¿tú verías necesario activar el Watchdog en alguna parte del programa como seguro? o no lo ves especialmente útil o al menos para esto?
De nuevo gracias,
Un saludo
-
Hola de nuevo,
pues bien fui retocando el código y el circuito de simulación y la verdad es que conseguí que fuera bien, como yo quería. Sin embargo empecé a reestructurar el código para ordenarlo, ponérmelo más claro para cuando por lo que fuera tuviera que consultarlo pasado un tiempo me acordase del tema, así que usé más subrutinas y demás y ahora no sé por qué la simulación no da los mismos resultados (y la cosa de ir sobreescribiendo el código me ha dejado sin saber bien cómo lo tenía exactamente). Llevo 3 días dando vueltas qué he podido tocar para reventarlo pero iendo linea a linea veo correcto el código. El tema entre otros es que cuando abro el switch de la puerta la primera vez que me lo pide se me activa el buzzer (sin yo tenerlo así) y me cambia de menú en pantalla como una rutina que uso más adelante (en la rutina de chequeo la ITERR2). Aparte en el segundo menu de seleccion (el que aparece A) 80 B)160....) tengo configurado para que al pulsar el tercer boton no haga nada pero éste sí que hace, casí igual que la opcion de volver. Y por último (creo) al final, cuando termina el proceso tengo escrito que me saque la salida del puertoD 6 y 2 y la dos no se activa, aparte de esperar a que se abra y cierre el switch de la puerta que tampoco lo hace (sólo me espera a que abra para volver al primer menú). Sinceramente no entiendo el porqué de esto.
A ver si me pudierais echar una mano por si hay algo que se me haya escapado.
Gracias, os adjunto el circuito y el código.
Saludos
-
Intenta hacer la simulacion paso a paso para ver por que es que hace cosas raras tu programa :mrgreen:
-
¿Qué tal?
No logro simularlo paso a paso. En el MPLAB se me queda siempre pillado en las comprobaciones del LCD. Por mucho que le de a "Step Out" se queda pillado el sistema en "Stepping..." y de ahi no sale.
Con la ayuda descubrí la opcion de Stimulus... por si podría ir metiendo yo las entradas de los puertos a mano para simular por ejemplo el teclado... pero no llegué a nada con eso.
¿Cómo se puede hacer?
Un saludo
-
Disculpen que les lleve la contraria a los que le aconsejan al amigo Fin simular con assembler su proyecto y eso... pero como el dice, es "muy nuevo" con los micros... yo pienso que lo mejor será que trabajes con picbasic... es muy sencillo! y luego tú mismo le irás agarrando el truco a la cosa y podrás experimentar con otros lenguajes... por ejemplo, para usar lcd en assembler requiere largas líneas de código (que para los expertos ok, pero para los nuevos no son nada agradables)... en cambio, pic basic bastará decirle:
lcdout "lo que quiero mandar"
y más nada!! sólo hace falta que le digas al principio del programa en qué pines del pic tienes conectadas qué pines del lcd y si la transmisión será a 4 o a 8 bits y otras cosillas tontas...
Lo mismo para leer el teclado.. simplemente puedes usar un:
if (pin=0) ... (en caso de que se coloque cero al presionar, que es común).
Bueno Fin si deseas ahorrarte problemas usa pic basic, te lo digo como un buen consejo.
Y el compilador es facilísimo de usar.
Lo corres desde la cónsola de windows con una instrucción:
pbp -p16f877 nombre_del_programa.bas
Si quieres métete en la sección del foro de pic basic o me dices y te puedo facilitar información...
Exito en tu proyecto! :mrgreen:
-
Hola firepic,
gracias por tu respuesta. La verdad es que he tenido que dejar un poco colgado el proyecto este por falta de tiempo, aunque espero poder retomarlo en breve.
La verdad es que aunque a duras penas y con ayuda de este hilo ya tenía bastante avanzado el tema con assembler, así que éste creo que lo terminaré así más que nada por no tener que volver a empezar.
Sin embargo me voy a ir dando vueltas por la sección de pic basic ya que tal y como me lo presentas suena sencillo, y para los próximos proyectos que se me vayan ideando seguramente lo intenté con esa herramienta a ver qué tal.
Gracias de nuevo.
Un saludo.
-
Ok amigo Fin, no te preocupes... todos tenemos a veces nuestras obligaciones... no todo en la vida es diversión jejeje... bueno me alegra que estés dispuesto a echarle ganas a lo de los pics, cuando tengas chance sólo dígalo y estaremos para ayudar...
Que la pases bien! :mrgreen:
-
Buf! Ya te digo firepic, es lo más chungo, el tiempo. Además que me está gustando bastante esto, sobre todo la parte de montaje, aunque me siento bastante torpe muchas veces... a ver si me llega la satisfacción de ver el primer proyectito funcionando y me pongo con otro.
Pero bueno, este puente de Semana Santa ha sido productivo.
La verdad es que me quedaba menos de lo que pensaba (o se me habrán olvidado cosas que quería meter en un principio). He terminado el código e incluso he montado el circuito ya que los componentes los compré hace tiempo y estaban ahí esperando a ser usados.
La simulación en Proteus salió bastante bien (o al menos funciona según el código). Sin embargo, a la hora de la verdad la cosa falla. He testeado el circuito completamente con el polímetro y las señales van bien, pero la pantalla no me muestra los menús, sólamente cuadrados negros (siempre con la misma forma, ya que no todos son igual de grande, y en la misma posición). He mirado en el foro que problemas a la hora de la verdad con el display es frecuente y se suele solucionar aumentando los retardos, sin embargo he probado unas pocas de configuraciones metiendo más retardos entre los comandos del LCD y nada.
En un principio me vino la duda si era por el sistema de alimentación, ya que el trafo que tenía daba muy poco amperage, pero haciendo apaños para conectarlo a un trafo externo que tenía de videoconsola que entrega 12v y hasta 2A y dejando sólo el LM7805 para regular a 5v tampoco variaba el resultado.
Estoy casi convencido de que el fallo tiene que ser en la programación, o puede que el programador del pic no vaya bien. He usado uno comercial, el K8076 PIC Programmer de Velleman y usando su software PICprog 2006, ya que no encontré otra cosa para el PIC 16F877.
A ver si alguno sabe por experiencia el fallo o puede localizarme algo porque la verdad le doy vueltas tanto al circuito como a la programación y no veo nada.
La pantalla que compré es una de la marca Densitron (modelo LC4307BG-HNG), por aquello a que fuera lo más similar a la que simula el Proteus y evitarme estos fallos que me aparecen. De hecho su hoja de especificaciones es igual que la que viene en la ayuda de las pantallas del proteus. Os pongo el link donde están en la página del fabricante ya que como adjunto pesa mucho para subirlo. La tengo conectada a 8bits, y conectando a parte de esto sólo los pines de RW, RS y E, y los de Vdd a 5v Vss a tierra y Vo a un potenciometro de 5k para contrastar entre 5 y 0v.
En este link se encuentran las hojas técnicas
http://www.densitron.com/content.aspx?id=538 (http://www.densitron.com/content.aspx?id=538)
Y en este el documento propio del modelo
http://www.densitron.com/Displays/Displays.aspx?nCategoryID=1 (http://www.densitron.com/Displays/Displays.aspx?nCategoryID=1)
Gracias,
Un saludo!
-
Epale Fin! Yo también he estado ful con unos proyectos, ahorita me estoy metiendo con herramientas de los pics que no conocía porque no había trabajado anteriormente con ellas, así que me ha tocado investigar y leer y leer muchísimo... creo que tengo unos documentos para el manejo de lcd que te pueden ser útiles, trataré de hacértelos disponibles lo más pronto posible. Por lo que me dices que has revisado todas las conexiones (mueve el potenciómetro no vaya a ser que el problema sea simplemente el contraste en la pantalla), lo más seguro es que el problema sea en la programación, específicamente en los retardos entre las instrucciones de configuración. En lo que tenga un chance te ayudo.
Te deseo éxito! :mrgreen:
-
Gracias firepic.
Qué va ya pensé lo del potenciómetro, pero nada, ni anulándolo ni moviendo el contraste salen caracteres.
Encontré un pequeño puente entre la pista de la señal de RS y de MCRL en el circuito del micro que pensé que iba a ser el error, pero después de solucionarlo sigue lo mismo.
Sigo revisando el circuito y la programación e incluso estoy intentando pillarme otra pantalla a ver si pudiera ser error de ésta.
Espero con ganas esos documentos!!
Muchas gracias de nuevo.
Hasta luego
-
Saludos Fin! Disculpa la tardanza... he estado verdaderamente imbuido en mis proyectos... pero aquí estoy otra vez en el foro... Aquí esta la Hoja de Datos (http://www.solopic.com.ve/SharedFiles/LCD_1.pdf) de un LCD que yo usé, lo malo es que está en inglés. Y este otro Manual (http://www.solopic.com.ve/SharedFiles/LCD_2.pdf) si está en español y está muy completo. Léelos con detenimiento. E insisto, trata primero con pic basic, es más fácil porque ya sabes que si hay un error es hardware y no software, pues el compilador lo hace todo. Si estás interesado te puedo orientar con el software para probar el lcd y luego tú sigues solo. Ok estamos en contacto.
Que tengas éxito! :mrgreen:
-
Muy buen día buscando información acerca de microcontoladores PIC, me encontre con su página, y veo que realmente saben del tema, y por eso les pido por favor que me ayuden con el siguiente inconveniente, no puedo simular adecuadamente un programita sencillo para el PIC 16F684, coloco todas las centanas para la simulación: fsr, stimulus, watch. El workbook de stimulus lo salve y lo compile dentro de la carpeta del proyecto y lo unico que quiero por los momentos es cambiar un valor de un pin de entrada. Para ello en la ventana de stimulus busco "asincrono", le di a "high", "low", es decir, las opciones del estimulo asincrono y no logro cambiar el valor del registro asociado al puerto A, y por ende la ejecucion del programa no cambia.
Estoy usando MPLAB 8.0. Anexo el programa que lo baje de la página de Microchip
De antemano, muchas gracias
Freddy Pérez
Caracas, Venezuela
;
; Software License Agreement
;
; The software supplied herewith by Microchip Technology Incorporated
; (the “Company”) for its PICmicro® Microcontroller is intended and
; supplied to you, the Company’s customer, for use solely and
; exclusively on Microchip PICmicro Microcontroller products. The
; software is owned by the Company and/or its supplier, and is
; protected under applicable copyright laws. All rights are reserved.
; Any use in violation of the foregoing restrictions may subject the
; user to criminal sanctions under applicable laws, as well as to
; civil liability for the breach of the terms and conditions of this
; license.
;
; THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
; WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
; TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
; PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
; IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
;
;************************************************************
; PIC18CXX2 EXAMPLE CODE FOR PICDEM-2
;
; TITLE: Button Press Demonstration
; FILENAME: bttn.asm
; REVISION HISTORY: A 5/13/00 jb format change
; HARDWARE: PICDEM-2 board
; FREQUENCY: 4MHz
;
;************************************************************
; This program demonstrates how to read a push-button and control LED's.
;
; Port B is connected to 8 LEDs.
; RA4 is connected to a switch (S2).
; This program increments a file register count every time S2 is pressed.
; The value of count is displayed on the LEDs connected to Port B.
; The LEDs should increment in a binary manner each time S2 is pressed.
; list p=18c452
#include <P16F684.INC>
;************************************************************
; variables
Count equ 0x000
;************************************************************
; reset vectors
org 00000h ; Reset Vector
goto Start
;************************************************************
;program code starts here
org 0005h ; Beginning of program EPROM
Start
clrf PORTA ; Clear PORTA output latch
clrf TRISA ; Make PORTA pins all outputs
clrf Count ; Clear Count
Loop
btfsc PORTA,4 ; Has S2 been pressed? (Normally high, goes low when pressed.)
goto Loop ; No, check again
IncCount
incf Count,1 ; Increment Count
movf Count,PORTC ; move Count to PORTC
Debounce
btfss PORTA,4 ; Has key been released?
goto Debounce ; No, wait some more
goto Loop ; yes, wait for next key press
END ; directive indicates end of code
-
Hola slayer
la mejor explicación se encuentra en un videotutorial, el amigo leon pic creó unos estupendos cursos sobre como manejar el mplab.
en tu caso te sirve el tercero
Breakpoint y Estímulos parte 1 (http://mihd.net/suxjrl)
el resto lo puedes bajar en
http://www.todopic.com.ar/foros/index.php?topic=19177.msg137055#msg137055
saludos
-
Saludos Fin! Disculpa la tardanza... he estado verdaderamente imbuido en mis proyectos... pero aquí estoy otra vez en el foro... Aquí esta la Hoja de Datos (http://www.solopic.com.ve/SharedFiles/LCD_1.pdf) de un LCD que yo usé, lo malo es que está en inglés. Y este otro Manual (http://www.solopic.com.ve/SharedFiles/LCD_2.pdf) si está en español y está muy completo. Léelos con detenimiento. E insisto, trata primero con pic basic, es más fácil porque ya sabes que si hay un error es hardware y no software, pues el compilador lo hace todo. Si estás interesado te puedo orientar con el software para probar el lcd y luego tú sigues solo. Ok estamos en contacto.
Que tengas éxito! :mrgreen:
Muchas gracias por los archivos, les voy a echar el ojo ahora mismo. En cuanto a lo del pic basic... me lo estoy pensando la verdad. Si tienes algún manual te agradecería que me lo pasaras y así ir aprendiendo poco a poco antes de meterme de lleno. Me voy a pasar también por la seccion del foro e ir echando un vistazo.
Un saludo
-
Saludos Fin! Disculpa la tardanza... he estado verdaderamente imbuido en mis proyectos... pero aquí estoy otra vez en el foro... Aquí esta la Hoja de Datos (http://www.solopic.com.ve/SharedFiles/LCD_1.pdf) de un LCD que yo usé, lo malo es que está en inglés. Y este otro Manual (http://www.solopic.com.ve/SharedFiles/LCD_2.pdf) si está en español y está muy completo. Léelos con detenimiento. E insisto, trata primero con pic basic, es más fácil porque ya sabes que si hay un error es hardware y no software, pues el compilador lo hace todo. Si estás interesado te puedo orientar con el software para probar el lcd y luego tú sigues solo. Ok estamos en contacto.
Que tengas éxito! :mrgreen:
Muchas gracias por los archivos, les voy a echar el ojo ahora mismo. En cuanto a lo del pic basic... me lo estoy pensando la verdad. Si tienes algún manual te agradecería que me lo pasaras y así ir aprendiendo poco a poco antes de meterme de lleno. Me voy a pasar también por la seccion del foro e ir echando un vistazo.
Un saludo
En mi mas sincera opinion, si empiezas casi desde cero y vas a dedicarte bastante a esto, tal vez deberias plantearte C. CCS por ejemplo. Para proyectos gordos picbasic se te quedará corto enseguida.
-
En mi mas sincera opinion, si empiezas casi desde cero y vas a dedicarte bastante a esto, tal vez deberias plantearte C. CCS por ejemplo. Para proyectos gordos picbasic se te quedará corto enseguida.
No discuto que C es mucho más poderoso lenguaje de programación. Yo actualmente uso CCS para todos mis proyectos. Pero para personas que a penas están iniciándose en el mundo de los pics, que casi no han manejado ninguno de los lenguajes existentes y que no tienen mucha idea de cómo trabajar con pics... estoy seguro que trabajar con un lenguaje que sea sencillo, como el pic basic, con el que puedas montar proyectos que veas te den resultado sin tanta conmplicación... es muy alentador para seguir adelante... y si quieres después darle con algo más fuerte como el c... una vez que ya le hayas agarrado el truco al asunto...
Y por supuesto, nadie se mete con "proyectos gordos" cuando está empezando.
Primero se aprende a gatear, luego te paras, caminas, y por último es que corres... no crees?
Un cordial saludo.