Adhiero a programar el microcontrolador a cada rato... no quiero gasta plata en el proteus y ya hace varios años que decidí hacer todo legal, nada crackeado.
Pero aparte de eso, una cuestión que creo que el simulador puede ser peligroso:
Estás haciendo un proyecto, para seguir con mis ejemplos anteriores supongamos que medimos algunas variables analógicas y queremos mandarlas a la pc, y ver algunos datos en un LCD con teclas para navegar y presentar más información en la pantalla.
Lo haces con proteus, ponés un micro, un lcd, un teclado de membrana, comunicación con la pc por uart, escribís el código, llegaste al punto en que el código funciona, nada elegante, funciona con lo justo.
Perfecto, ahora enchufas todo en un protoboard, programas el código y no funciona (que pasa el 99% de las veces).
¿Donde está el problema?, es el hardware?, ¿es el firmware?. Quizás hay alguna interrupción que no salta (por ejemplo al apretar una tecla del teclado), o el cristal que tiene los capacitores con valores inadecuados, o nos olvidamos de conectar alguna pata de alimentación del micro, quizás el simulador no tenía exactamente el micro que estamos usando y agarramos el más parecido, o que no simulaba el periférico al 100% sino que dejaba algunas características afuer... suele pasar que en el simulador algunas cosas funcionan sin haberlas configurado bien (sin escribir los registros de configuración correctamente).
En otras palabras el error se puede deber a decenas de cosas distintas, ¿cómo saber
?
Ojo!!!, no es culpa del simulador, sino del usuario.
Pero el simulador puede dar una falsa sensación de seguridad de que todo funciona, y al final llega ese punto en que enchufaste todo y no funciona nada, y te pasas el día revisando posibles causas hasta darte cuenta que en el simulador había un flag de interrupción que se limpiaba solo y en el micro real no :cabezon:. O que hacía falta poner un resistor en serie en una patita del uart por una errata del silicio (siempre revisar las erratas
!!!!). O por algo mucho más tonto por haber dejado cortocircuitada una pata del micro (la configuraste como salida escribiendo un 1 y en la proto la conectaste a GND porque quedaba cómodo para conectar los cables
uuuppssss). O quizás el LCD tiene una rutina de inicialización distinta a la del proteus...
Otra vez, no es culpa del simulador sino del usuario, pero de ninguna persona/grupo en particular, sino que es un comportamiento atribuible a la naturaleza humana.
¿Como se trabaja sin simulador?:
- Enchufás el micro solo, con un led, se arranca de entrada con la protoboard (o la placa de desarrollo... en el mundo físico me refiero)
- Escribo el código para encender 1 led. ¿Enciende?, si no revisar -> volver a 1. Esto que parece poco es un paso enorme, porque ya estás probando si el compilador y el enlazador funcionan bien, si el programador funciona, si incluiste las librerías del micro correctas, si no hay problemas de drivers con la pc, si el micro ejecuta el código!!! (y por lo tanto está bien alimentado y tiene alguna señal de reloj de algún lado)
- ¿Me anda el depurador, puedo ejecutar paso a paso?.
- Veo si la configuración del timer anda, ¿el led enciende y apaga cada 1 segundo?, si no revisar los cristales, configuración de reloj del micro, etc
- Pruebo si puede detectar la pulsación de 1 tecla del teclado, ¿salta bien la rutina de interrupción? -> se ve ejecutando paso a paso, manejo bien el rebote de las teclas (cosa que en el simulador no existe), puse bien los pull-up/pull-down?
- etc, etc
Y sí, en cada paso programaste el micro 10 veces en promedio, es más trabajo (pero solo en apariencia!!!
), y si tenés 50 pasos para el proyecto se llega fácil a las 500..1000 veces dependiendo de la complejidad y los problemas en el camino (cuidado con las erratas
!!!, ya lo dije no?).
Esa forma de trabajo (paso a paso) también se puede hacer con el simulador, pero TODOS los errores de hard/modelo del micro/erratas son invisibles.
Si uno trabaja sin simulador no queda otra que hacerlo de esa manera y está 100% asegurado de que el error va a estar visible.
Entonces, no abusar del simulador. SÍ lo utilizaría para ver si me calcula bien un filtro, o un algoritmo de control (PID por ej), o ver si el flujo general del programa es el esperado (al presionar la tecla salta la interrupción -> seteo un flag -> lo chequeo en el main -> llamo a la función de actualizar LCD -> ...).
Pero eso incluso lo podés probar escribiendo código en C en la PC usando gcc, que también es riesgoso!!! (la pc tiene 64 bits, el micro 8; en la pc llamás a una función desde otra función desde otra función mientras en el micro se te termino el espacio en la pila... y vuelta a empezar con que acá funciona y allá no
).
Pero un microcontrolador interactúa todo el tiempo con el mundo físico - esa es la gracia de usar un microcontrolador, no? - y el simulador actúa en el mundo lógico, y este último no puede representar las infinitas variantes del 1ro.
Es mi opinión nada más, usar cada herramienta para lo que fue diseñada, no usar un destornillador paleta para un tornillo phillips, o una llave de 1/2" para una tuerca 3/8" (a menos que uno no tenga herramientas, pero esa ya es otra historia).