TODOPIC

Simuladores, editores de PCB, etc => Simuladores de circuitos => Mensaje iniciado por: Veguepic en 09 de Febrero de 2006, 22:34:00

Título: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 22:34:00
Saludos

La intencion de abrir este foro es para aprender, preguntar y compartir sobre el programa PROTEUS y tambien el lenguaje ASEMBLER, este no es un tutorial, pues como yo recien empiezo con PROTEUS y a las justas algo de ASEMBLER dificilmente puedo enseñar a algo.

Lo que vaya aprendiendo en el camino lo podre explicar, lo que no pueda esperaremos la ayuda siempre desinteresada de los amigos del foro. Bueno manos a la obra.

En este lugar podran encontrar un tutorial que baje de internet de quien sabe donde el cual es muy bueno para hacer el primer programa en asembler, por lo cual tambien puede servir a todo aquel como yo que quiere empezar.

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4187307

Luego de leer el tutorial adjunto estamos listos para poner el primer circuito, prender y apagar un led. Hay que ir a la librería o dar doble clic debajo de device. Aparece la siguiente ventana:



escojemos pick device /symbol y aparece:



Escojemos el microprocesador pic16f84a, con doble clic sobre este aparece en la caja de dialogo de device.



Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 22:40:00
Luego las resistencias



el cristal para el pic, como pueden ver es mas rapido poner las primeras letras del dispositivo buscado en KEYWORD y las coincidencias aparecen al costado derecho.



los capacitores o condensadores

Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 22:49:00
el led, en este caso selección varios para poder probar con ellos.



Cerramos la ventana y estamos listos para empezar a poner los componentes.

Seleccionamos el pic, con un clic sobre  el lado derecho este aparece, con un clic basta si dan otro clic aparece otro.



si le dan un clic con el boton derecho este se colorea de rojo



es posible rotarlo con los botones de abajo a la derecha.

Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 22:58:00
mientras esta de color rojo es posible moverlo cogiendolo con el boton derecho y arrastrarlo a la posición deseada y luego soltar el boton. Un clic en cualquier lugar vacio y se deselecciona el componente, pasa a color azul.



Seguimos con los condensadores y el cristal.



para unir los componentes se hace clic en la punta del componente y en la punta del otro componente. Cuidar que el color de los componentes sea azul, si es rojo al hacer clic se borrara, me paso muchas veces, usar el boton deshacer y asuto arreglado.

Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 23:06:00
Se me olvido la fuente de poder:



PRIMERA PREGUNTA .- En que parte del proteus esta el símbolo de positivo y el de masa, los he buscado por todos lados y na



Faltaba el pulsador de reset



los ponemos en el circuito,



Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 23:15:00
en la ventanita arriba de device  hay un recuadro verde que sirve para ir moverse en el circuito y con los botones siguientes podemos acercar o alejar



Reacomodamos para tener mas espacio, y damos un clic con el boton derecho sobre el capacitor este se pone de color rojo



y un clic con el boton izquierdo, aparece la siguiente ventana, fijarse bien donde dan el clic pues si le das sobre text  solo pueden editar esa parte, igual para los rotulos 1nf   y  para C1.



cambian el valor en los otros componentes de acuerdo al diagrama del curso.

Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 23:29:00
ya tienen que tener el programa escrito, en este caso es 1.asm


;   Prender y apagar un led con un pic16f84a

STATUS          equ         0x3
TRISA             equ         0x5
PORTA            equ        0x5
TRISB             equ        0x6
PORTB           equ         0x6

RP0               equ         5
RB0               equ         0

                ORG          0
                BSF           STATUS,RP0          ; da lo mismo poner RP0 o 5   
                MOVLW     B"00000"
                MOVWF    TRISA
                MOVLW    B"00000000"
                MOVWF    TRISB
                BCF          STATUS,RP0

INICIO

                BSF          PORTB,0

                END


donde encuentren un espacio en blanco usan tab para que el programa se vea mas ordenado aqui no se como separarlo mas loco. Este ejemplo difiere un poco al que esta en el CURSO, en este caso solo prende el led en RB0. No usamos Include p16f84a.inc mas adelante lo usaremos.

Van a la barra y seleccionan SOURCE y escojen ADD / REMOVE SOURECE FILES



al seleccionar aparece la ventana



seleccionan new y buscan el archivo 1.asm , luego en code generation tool ponen MPASM.

Ahora seleccionan el pic y abren la ventana

Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 23:43:00
en program file buscan el archivo 1.hex.

Estamos listos para correr el programa. Presionamos  el boton PLAY, abajo a la derecha.

Sale lo siguiente:



creo que las luces azules azules significan 0 volts y las rojas 5 volts. Quien nos lo puede confirmar  por favor.

SEGUNDA PREGUNTA .- por que  RB0, RB1, RB2 y RB7 estan a 5 volts, si bien solo he definido todo el port b como salida mas no les he puesto ningun valor, supongo que el micro aleatoriamente les pone este valor, esto es asi?

Como veran este led no se enciende por lo cual lo cambio por otro,

Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 09 de Febrero de 2006, 23:50:00
al final el unico que me encendio fue el LED-RED pero dentro de la ventana tuve que cambiarlo por digital y encendio. Tengo la versión 6 de proteus profesional con service pack 3 pero creo que me faltan un monton de dispositivos, y eso que he cargado las librerias que pusieron en el foro.





bueno señores es hora de dormir Noche,

adjunto pongo los links de las imagenes por si alguna no sale, estan en orden, mañana voy a postear como sufri para tratar de prender 8 leds y hacer un efecto tipo auto fantastico Avergonzado. Y por favor no se olviden de responder las preguntas en rojo pues me quedaron esas dudas, gracia anticipadas.

http://img259.imageshack.us/img259/3770/013wv.jpg
http://img136.imageshack.us/img136/4452/026tc.jpg
http://img283.imageshack.us/img283/3633/036oy.jpg
http://img267.imageshack.us/img267/2931/045yl.jpg
http://img137.imageshack.us/img137/9131/055hz1.jpg
http://img137.imageshack.us/img137/3269/063rm.jpg
http://img137.imageshack.us/img137/9018/078cq.jpg
http://img137.imageshack.us/img137/3772/082nq.jpg
http://img137.imageshack.us/img137/3377/091tu.jpg
http://img70.imageshack.us/img70/2519/09a4su.jpg
http://img70.imageshack.us/my.php?image=104kf.jpg
http://img70.imageshack.us/img70/8638/119jd.jpg
http://img70.imageshack.us/img70/7567/122vr.jpg
http://img134.imageshack.us/img134/2980/138rn.jpg
http://img328.imageshack.us/img328/1246/147hp.jpg
http://img134.imageshack.us/img134/9007/14a0da.jpg
http://img380.imageshack.us/img380/5355/150ud.jpg
http://img472.imageshack.us/img472/3280/161ge.jpg
http://img141.imageshack.us/img141/5987/16a4mw.jpg
http://img374.imageshack.us/img374/7292/177ie.jpg
http://img141.imageshack.us/img141/4700/186ir.jpg
http://img374.imageshack.us/img374/8503/197tx.jpg
http://img149.imageshack.us/img149/9261/19a9hu.jpg
http://img374.imageshack.us/img374/6802/200yz.jpg
http://img141.imageshack.us/img141/7898/217nl.jpg
http://img368.imageshack.us/img368/9341/227sy1.jpg
http://img51.imageshack.us/img51/329/231eq.jpg
http://img51.imageshack.us/img51/808/240yf.jpg
http://img69.imageshack.us/img69/1178/253dc.jpg
Título: RE: Proteus y Asembler desde cero
Publicado por: RedPic en 09 de Febrero de 2006, 23:57:00
¡Ese es el espiritu del Foro que me gusta! ¡Olé por veguepic! Aprendiendo, experimentando y compartiendo. Lo siento pero no puedo contestar a tus preguntas en rojo porque no tengo ni idea de cómo funciona PROTEUS pero te aplaudo por tu iniciativa y por la manera en que la has puesto en marcha.

Gracias.

P.D. Ya he aprendido una cosa muy importante. El amigo pocher ha realizado las simulaciones para mis Ejemplitos 16F876A y me los descargué para ver como funcionaban ... pero no tenía ni idea de como cargar los .HEX en el simulador. Gracias a tí ya lo sé.

Título: RE: Proteus y Asembler desde cero
Publicado por: pocher en 10 de Febrero de 2006, 07:22:00
Si señor, a eso se le llama interés por aprender.

Te contesto a tus 2 preguntas:

1.- Los símbolos de masa y Vcc los tienes en el Icono Inter-Sheet Terminal

2.- Si no inicializas las salidas que no uses a 0 por ejemplo, estas pueden tomar cualquier valor aleatorio.

Los LEDS funcionan todos, creo recordar. Pón el símbolo de masa en el circuito.

Un saludo
Título: RE: Proteus y Asembler desde cero
Publicado por: elmasvital en 10 de Febrero de 2006, 17:32:00
Este es el problema de este foro... cuando hay un mensaje realmente interesante sus imagenes están alojadas en un servidor de imagenes. A ver si alguien puede cederte algo de espacio web para alojarlas si no en un futuro seran imposibles de ver pq las borran.




1 saludo.
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 10 de Febrero de 2006, 22:22:00
Gracias por su apoyo Giño, creo que es la idea el compartir y aprender, he aprendido y preguntado mucho en este foro y siempre han estado dispuestos a ayudarme de manera desinteresada. Voy a ver donde pongo las imagenes para evitar que se borren y tratar de no abusar para evitar saturar el foro Avergonzado. En el siguiente link he puesto los archivos del 1 al 10 que tienen ASM, HEX y el DSN de proteus, para evitar ocupar mucho espacio, espero no incomode Angelito.

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4187307

seguimos ahora con el segundo programa 2.asm

Aquí pongo a RB0 y RB6 y cambio la velocidad del cristal y el pic a 100 Hz para asi poder visualizar los cambios. Hay que volver a cargar 2.asm y 2.hex al circuito.





presionamos play



se encienden los dos leds.
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 10 de Febrero de 2006, 22:30:00
Upssssssssssssssssssss. disculpen este es el link correcto Avergonzado

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4191438

Ahora cargamos el archivo 3.asm

Como ya explico el amigo pocher debemos poner a cero todo el port b y luego solo encendemos RB0 y RB6.

Notaran que las lucesitas al costado de port b pasan todas a color azul y luego RB0 y RB6 pasan a color rojo.



el cristal y el pic estan a 100 Hz lo cual no es importante porque el programa los deja permanentemente encendidos sin ninguna otra accion.
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 10 de Febrero de 2006, 22:35:00
Ahora cargamos 4.asm

En este caso agregamos NOP que si mal no recuerdo consume 4 ciclos de reloj sin hacer ninguna accion, es como una especie de delay o demora. Luego ponemos a cero todo port b, de nuevo una pausa y prendemos todo port b, y usamos goto para ir al inicio y hacer que el ciclo se repita indefinidamente.



hemos agregado leds de  otro color y reorganizado para hacer mas sitio.

TERCERA PREGUNTA .- cuando conecto el quinto led ninguno se enciende!, pero las luces del pic si se apagan y encienden  (cuadraditos rojos y azules)
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 10 de Febrero de 2006, 22:42:00
5.asm .
Aquí cambio los nop por retardo y prendo y apago RB0. Como se habran dado cuenta elimine el cristal y los dos condensadores, pues me di cuenta que no eran necesarios, basta con definir el clock del pic. Tuve que cambiaro la velocidad del pic a 10 KHz pues con 100Hz se hacia muy lento.  Tambien borre el pulsador y su  resistencia pues no los usaba. Solo dejo la resistencia del reset que debe ser positiva para que el pic funcione normalmente, si se pone a masa resetea el pic.


Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 10 de Febrero de 2006, 22:46:00
6.asm
Agrego un segundo retardo (retardo1) y tengo que volver a cambiar la velocidad del pic a 1 MHZ, en este caso no pongo una imagen porque es igual a la anterior.

7.asm
Aqui he eliminado las resistencias de los leds y he podido poner ocho leds, he cambiado el clock a 2 MHz y todo el circuito funciona. Primero se prenden todas los leds y luego se apagan, en ambos casos de arriba hacia abajo.




Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 10 de Febrero de 2006, 22:54:00
8.asm
Ahora al codigo anterior le agregamos para que tambien lo haga de abajo hacia arriba. No pongo imágenes pues son iguales que las anteriores. Ya se va pareciendo en algo al efecto deseado (auto fantastico).

9.asm
Elimino los retardos y cambio la velocidad del CLOCK a 30 Hz, es para ver si funciona sin los retardos. Creo que no hace falta poner el imagen.

10.asm
Aquí prendemos, ponemos retardo y apagamos cada led primero de arriba hacia abajo y luego de abajo hacia arriba y repetimos el ciclo indefinidamente.



Ahora si ya funciona como debe, por si acaso el reloj lo he vuelto a poner a 2 MHZ.

Bueno señores es hora de dormir de nuevo NocheNoche haber si mañana seguimos.


P.D.: Siempre y cuando mi esposa me deje, sino ya saben porque no se pudo! Muchas risasMuchas risas


Título: RE: Proteus y Asembler desde cero
Publicado por: pocher en 10 de Febrero de 2006, 22:55:00
Si quieres que se enciendan los diodos, como ya te comenté más arriba pon la masa a las resistencias de los diodos.

Si no quieres dibujar tantas cosas puedes eliminar el regulador, la batería y hasta la resistencia que resetea al PIC ... funciona igual.
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 12 de Febrero de 2006, 00:30:00
Hola pocher aqui los cambios que hice, en el primer dibujo que es como lo venia haciendo he puesto al costado si es del tipo analogico o digital a cada componente, se me cuelgan D3 y D4, justo con las resistencias analogicas.



Aqui segui tu consejo, cambie conectando las resistencias a masa y ya no se me cuelga D3 pero D4 se sigue colgando, tengo la version 6.7 de Proteus con SP3. Adicionalmente he cargado las librerias que pusieron en el foro.



Haber si nos tiras un salvavidas Vacilando.

Aqui los link por si no cargan.
http://img45.imageshack.us/img45/3725/kit0rk.jpg
http://img152.imageshack.us/img152/6773/kita4gs.jpg
Título: RE: Proteus y Asembler desde cero
Publicado por: pocher en 12 de Febrero de 2006, 05:22:00
He estado provando el ejercicio 10 con tu .hex y poniendo resistencias a todos los diodos y va bien independientemente si eliges digital o analog tanto para diodos como para resistencias.

Te envio la simulación y el .hex: http://miarroba.com/foros/ver.php?foroid=348538&temaid=4195949

Por cierto en el .asm que enviaste falta la cabecera con el PIC, FUSES etc.

Un saludo
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 12 de Febrero de 2006, 09:30:00
Pues tienes razon, cuando cargo el archivo el hex que has puesto en el almacen me funciona perfecto por lo cual veo que no es problema del proteus (como pensaba inicialmente) sino del codigo asm.

He cargado tu hex en el ic-prog y he revisado el asm que este genera y me sale el siguiente encabezado:



http://img133.imageshack.us/img133/262/icprog3qh.jpg

lo he agregado al ejemplo 10.asm que habia puesto y al inicio ne me reconocia ni INHX8M ni P16FXX.inc, luego de probar varias veces me reconocio INHX8M, he leido en el archivo de ayuda que dice lo siguiente (ojo traducido por babelfish)

El formato 8-bit partido del archivo produce dos archivos de salida: el hxl y el hxh. el formato es igual que el formato 8-bit normal, a menos que eso los octetos bajos de la palabra de datos se almacene en el archivo del hxl, y los altos octetos de la palabra de datos se almacenan en el archivo del hxh, y las direcciones son divididas por dos. Esto se utiliza para programar palabras 16-bit en pares de EPROMs 8-bit, un archivo para el octeto bajo, un archivo para el alto octeto.

ni idea para que se usa asi que probe a eliminarlo y si me funciono, si tuvieras la amabilidad de decirnos en correcto castellano, como dice el amigo redpic Muchas risas, para que diablos sirve Helado.

Con el que si no pude fue con p16fxx.inc asi que lo remplace por p16f84a y todo perfecto.

El programa me queda como sigue:

            LIST      P=16F84, F=INHX8M
            include "P16F84a.inc"
            ORG     0x0000

RP0   equ   5
RB0   equ   0

CONTADOR   RES   1
CONTADOR1   RES   1

   ORG   0


El resto es igual al que 10.asm que esta en el almacen. Ahora si corre perfectamente. Reitero las gracias por la ayuda RebotadoRebotado. (Al poner este encabezado ya no se hace necesario definir STATUS, TRISA,TRISB, PORTA, y PORTB; pues estos ya los define este encabezado, especifico para el 16f84a)

El problema entre analogico y digital lo debe solucionar este encabezado pues definira  las salidas correctamente, es asi? RollEyes

No defini el include pues es ejemplo del tutorial no lo hacia y pensaba hacerlo mas adelante, Pues queria probar que tan facil era cambiar por ejemplo a un 12C508A o a un 12F629, me funciono el 12C508A (pero tuve que leerme la hoja de datos y definir varias cosas para que funcione) aun tengo problemas con el 12F6629, pero eso lo veremos mas adelante.
Título: RE: Proteus y Asembler desde cero
Publicado por: pocher en 12 de Febrero de 2006, 12:02:00
No recuerdo la F=INHX8M para que era, yo nunca lo puse cuando programaba en ensamblador.

De todas formas si te interesa, en el subforo de asm (el primero de todos) te contestaran enseguida.

También faltaría en el caso de querer programarlo realmente la palabra de configuración con el tipo de oscilador y demás FUSES.

Un saludo
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 13 de Febrero de 2006, 22:36:00
Luego del ultimo post me puse a revisar detalladamente el ejemplo y creo que hay varias correcciones que hacer:

   LIST   P=16F84
   include   "P16F84a.inc"


   ORG   0
   BSF   STATUS,RP0
   MOVLW   B"11110000"
   MOVWF   TRISA
   MOVLW   B"00000000"
   MOVWF   TRISB
   BCF   STATUS,RP0

CONTADOR   EQU   0xC
CONTADOR1   EQU   0xD


la primera era listar el pic que ya lo habia hecho en el post anterior, la segunda es definir las variable CONTADOR y CONTAODR1 en una ubicacion fija de la memoria de datos, en el registro de proposito general, cuando usaba

CONTADOR             RES          1
CONTADOR1           RES          2

y dejaba al programa ubicarlos al parecer creaba conflictos.


Luego cuando pongo el siguiente codigo el programa corre sin ningun problema, incluso cambiando la velocidad del reloj a 10 MHz. Esta en el almacen como Ejemplo 11.

            BSF              PORTB,0
            CALL            RETARDO
            BCF              PORTB,0
            CALL            RETARDO

            BSF              PORTB,1
            CALL            RETARDO
            BCF              PORTB,1
            CALL   RETARDO...........

Cuando hago el siguiente cambio me genera problemas:


            BSF              PORTB,0
            CALL            RETARDO
            BCF              PORTB,0
            CALL            NOP

            BSF              PORTB,1
            CALL            RETARDO
            BCF              PORTB,1
            CALL   NOP...........

En velocidades de 1 MHz no da problemas, pero cuando es arriba de 2 MHz los leds D3 y D4 se quedan colgados, ejemplo 12.



http://img106.imageshack.us/img106/2333/386yh.jpg

Ya he probado todo lo que se me ha ocurrido y siempre me sucede lo mismo, esto es un BUG o no se debe usar el NOP en estos casos?

Espero no estar abusando de tu ayuda POCHER.

Aqui el link con los ejemplos 11 y 12.

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4203552
Título: RE: Proteus y Asembler desde cero
Publicado por: pocher en 14 de Febrero de 2006, 10:03:00
Si te fijas bien, tanto la simulación del 11.asm (sin NOPs) como la simulación del 12.asm no van bien. Es porque la temporización con los 2 contadores es muy corta y nos les dá tiempo a encenderse a los LEDs.

Para hacer temporizaciones te recomiendo que lo hagas con el TMR0 (16F84) y si son muy largas pués añádele al TMR0 los contadores que hagan falta.

Respecto a la inclusión de los NOPs en el programa que has puesto, no le veo sentido, es una pérdida de tiempo, valga la dedundancia (NOP=no operación).
Título: RE: Proteus y Asembler desde cero
Publicado por: Veguepic en 20 de Febrero de 2006, 23:11:00
Pues tienes razon pocher, tanto el 11 como el 12 presentan el mismo problema loco.

He probado de todo, usar el TMR0, tiempos mas largos, etc y nada. Por lo cual he llegado a la conclusion que son las resistencias analogicas pues es en estas dos que ocurre el problema, como dicen que lo bueno es enemigo de lo perfecto he optado por poner las resistencias como digitales, los leds digitales y asunto arreglado Enfurruñado.

He encontrado unos ejercicios muy buenos que incluyen entradas, interrupciones, EEPROM, TMR0 y display LCD estan bastante claros y muy didacticos, si bien el hex se genera tal cual, aparecen unos mensajes y warnings que hay que depurar, lo cual fue bastante didactico para aprender, estan en el almacen junto con el primer ejercicio.

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4232414

La verdad no quiero abusar del espacio del foro ni del almacen que son limitados, si ocupan mucho espacio los puedo eliminar y reubicarlos en otro lugar.

Si no se entienden los comentarios que he puesto en el ejemplo 1 pueden postear sus dudas, correcciones y demas.

Saludos.