Autor Tema: Iniciando proyecto con PIC16F877  (Leído 14656 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fin

  • PIC10
  • *
  • Mensajes: 15
Iniciando proyecto con PIC16F877
« 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.

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Iniciando proyecto con PIC16F877
« Respuesta #1 en: 10 de Diciembre de 2007, 19:43:21 »
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:

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Iniciando proyecto con PIC16F877
« Respuesta #2 en: 10 de Diciembre de 2007, 21:03:07 »
caballero debes postear un avance

saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Iniciando proyecto con PIC16F877
« Respuesta #3 en: 11 de Diciembre de 2007, 05:36:22 »
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.

Desconectado fin

  • PIC10
  • *
  • Mensajes: 15
Re: Iniciando proyecto con PIC16F877
« Respuesta #4 en: 26 de Diciembre de 2007, 06:52:25 »
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.


Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Iniciando proyecto con PIC16F877
« Respuesta #5 en: 26 de Diciembre de 2007, 11:09:45 »
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.
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Iniciando proyecto con PIC16F877
« Respuesta #6 en: 26 de Diciembre de 2007, 15:07:49 »
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

Código: [Seleccionar]
list      p=16f877            ; list directive to define processor
#include <p16f877.inc>        ; processor specific variable definitions

- los registros GPR van TODOS dentro de un solo

Código: [Seleccionar]
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.


« Última modificación: 26 de Diciembre de 2007, 15:15:00 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Iniciando proyecto con PIC16F877
« Respuesta #7 en: 26 de Diciembre de 2007, 18:40:46 »
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:

Desconectado fin

  • PIC10
  • *
  • Mensajes: 15
Re: Iniciando proyecto con PIC16F877
« Respuesta #8 en: 26 de Diciembre de 2007, 19:45:20 »
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

Desconectado fin

  • PIC10
  • *
  • Mensajes: 15
Re: Iniciando proyecto con PIC16F877
« Respuesta #9 en: 27 de Diciembre de 2007, 09:26:02 »
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

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Iniciando proyecto con PIC16F877
« Respuesta #10 en: 27 de Diciembre de 2007, 10:29:03 »
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
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado fin

  • PIC10
  • *
  • Mensajes: 15
Re: Iniciando proyecto con PIC16F877
« Respuesta #11 en: 27 de Diciembre de 2007, 10:50:15 »
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

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Iniciando proyecto con PIC16F877
« Respuesta #12 en: 28 de Diciembre de 2007, 00:26:08 »
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:

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Iniciando proyecto con PIC16F877
« Respuesta #13 en: 28 de Diciembre de 2007, 01:16:35 »
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"


Desconectado fin

  • PIC10
  • *
  • Mensajes: 15
Re: Iniciando proyecto con PIC16F877
« Respuesta #14 en: 28 de Diciembre de 2007, 06:17:17 »
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.




 

anything