TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Mensaje iniciado 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.

-
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
-
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.
-
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.
-
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,

-
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.
-
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
. 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
-
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,
-
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
,
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
. 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
-
¡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é.
-
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
-
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.
-
Gracias por su apoyo
, 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
. 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
.
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.
-
Upssssssssssssssssssss. disculpen este es el link correcto

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.
-
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)
-
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.

-
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.


-
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 ![Noche Noche]()
haber si mañana seguimos.
P.D.: Siempre y cuando mi esposa me deje, sino ya saben porque no se pudo! 

-
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.
-
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
.
Aqui los link por si no cargan.
http://img45.imageshack.us/img45/3725/kit0rk.jpg
http://img152.imageshack.us/img152/6773/kita4gs.jpg
-
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
-
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
, para que diablos sirve
.
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 
. (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? 
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.
-
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
-
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
-
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).
-
Pues tienes razon pocher, tanto el 11 como el 12 presentan el mismo problema
.
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
.
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.