¿Podría programar un microcontrolador sin una computadora?

16

Digamos que tenías un microcontrolador bastante simple y pequeño y no tenías interfaz, ni computadora, ni depurador, compilador ni ensamblador. ¿Podría escribir su código en ensamblaje, convertirlo (manualmente) en código de máquina, y luego aplicar energía a los pines apropiados usando una fuente de voltaje?

Entiendo que necesitaría la E / S y la memoria adecuadas para realmente hacer cualquier cosa, pero si estuviera tan inclinado y tuviera tiempo, ¿podría hacer esto? Supongo que, históricamente, ¿cómo se hizo esto cuando no había una computadora / compilador / ensamblador para empezar? Siéntase libre de vincularme a un recurso externo. ¡Gracias! :)

    
pregunta idle_engineer

12 respuestas

37
  

¿Podría escribir su código en ensamblaje, convertirlo (manualmente) a código de máquina,

¡Sí!
El código se puede escribir "fuera de tu cabeza" en binario, si lo deseas.
Hace mucho (mucho tiempo) así es como empecé a usar (entonces) microprocesadores.
Yo y mis amigos escribimos el código en lenguaje ensamblador, lo compilamos manualmente en código de máquina (algo que puede hacer "por inspección" después de cierta práctica) y luego lo ingresamos en el procesador por varios medios. En un sistema que construimos, configuramos la dirección en interruptores binarios (on off) o usamos una función de incremento automático del procesador, ingresamos 8 bits de datos en interruptores binarios y luego presionamos un interruptor de "reloj" para ingresar los datos a la memoria.

La funcionalidad equivalente podría lograrse con incluso menos interruptores en un microcontrolador moderno que utiliza la programación en serie SPI; consulte a continuación.

  

... y luego aplica energía a los pines apropiados usando una fuente de voltaje?

¡Sí!
¡Pero sería increíblemente lento de hacer!
Muchos microcontroladores modernos permiten el uso de una interfaz "SPI" para la programación.
Por lo general, esto consiste en líneas de datos de entrada y salida y una línea de "reloj", y generalmente una línea de restablecimiento.

Muchos procesadores permiten que el reloj y los datos SPI sean "estáticos", lo que significa que no hay un límite en cuanto al tiempo que puede tomar para configurar los datos entre bits. Puede programar un procesador de este tipo utilizando una línea de datos y una línea de reloj que se accionan mediante interruptores operados manualmente. La línea del reloj debe estar "libre de rebotes"; debe ser capaz de establecerla alta o baja en una única transición por operación, por lo que es posible que una interfaz mínima incluya una puerta activada por Schmitt. Puede "salirse con la suya" solo con un retraso RC y un interruptor de botón pulsador, pero una entrada activada por Schmitt es más segura. La línea de datos no necesita estar libre de rebotes ya que su estado solo se lee en el límite del reloj.

Algunas interfaces son interactivas: el procesador envía los datos durante la programación (por ejemplo, data out = MISO = Master In Serial Out en procesadores AVR). Para leer esto, deberá agregar, por ejemplo, un LED y una resistencia (y tal vez un búfer o un transistor si la capacidad de la unidad era REALMENTE baja).

MC6800:

De la memoria semifundida (¡casi 40 años!)

LDI A, $ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, $ 2734 ... CE 27 34 ... 1100 1110 0010 0111 0011 0100
...

    
respondido por el Russell McMahon
10

Originalmente, en las máquinas programables, los programas se insertaban manualmente en cintas de papel o tarjetas. Más tarde, utilizaron una especie de máquina de escribir para hacer el puñetazo, e incluso más tarde, las computadoras (como ya se conocían) podían perforar su propia cinta de papel.

Estaba, literalmente, sentado allí con una tarjeta y haciendo agujeros manualmente.

Cada columna es una instrucción o bit de datos que la máquina de estado de la CPU interpreta para realizar tareas.

Ahora, por supuesto, todo es memoria flash, y sí, obtener los datos allí, en primer lugar, normalmente necesita una computadora para hacerlo. Pero eso no es estrictamente 100% cierto.

Después de todo, ¿qué hace un programador de computadoras y hardware, pero establece el estado de los pines IO en el momento adecuado? Entonces, si eres lo suficientemente masoquista, puedes construir un sistema que te permita enviar las instrucciones correctas a los pines de programación del microcontrolador de la manera correcta para instalar algunas instrucciones en la memoria flash para su ejecución.

Tal vez algo que involucre muchos interruptores, algunos registros de turnos, un generador de reloj, etc.

Recuerdo que en la universidad teníamos un nuevo sistema de programación basado en Z80 - una unidad del tamaño de una maleta con una Z80, una pequeña cantidad de RAM, un montón de pantallas LED de 7 segmentos y una gran fila de interruptores . Programe cargando manualmente las instrucciones en la RAM usando los interruptores.

    
respondido por el Majenko
7

Usted dijo "pequeño microcontrolador y no tenía interfaz, ni computadora, ni depurador, compilador ni ensamblador". Bueno, puedes arreglártelas sin la computadora, el depurador, el compilador o el ensamblador, pero debes tener algún tipo de interfaz para conectarte con el microcontrolador para cargar el programa.

Primero que nada, olvídate de cualquier lenguaje de alto nivel como C. Luego, la forma más fácil es escribir tu programa en lenguaje ensamblador, pero no uses el ensamblador para traducirlo al código de máquina. En su lugar, busque cada una de las instrucciones de ensamblaje en el manual de programación, encuentre su código hexadecimal equivalente y escríbalo.

Tendrá que asignar sus propias variables, de modo que pueda completar las direcciones apropiadas en la parte del operando de las instrucciones. También olvídate de usar la pila y el montón, demasiado trabajo. Cuando termine, tendrá un programa de máquina que se puede cargar directamente en la memoria flash del microcontrolador, sin que sea necesario un enlazador.

Debido a la falta de direcciones externas y buses de datos en casi todos los microcontroladores (ya que ocuparían demasiados pines que necesitan los puertos de E / S y los periféricos), prácticamente todos los microcontroladores están programados a través de una interfaz especial como esta:

Normalmente,el"programador" de la izquierda se conectaría a una PC, que descargaría un archivo de máquina generado por un compilador / enlazador.

Sin embargo, si el programador tiene un teclado, como el de abajo:

luego, uno puede ingresar los códigos hexadecimales para un programa generado manualmente en el programador, y programar el dispositivo sin necesidad de un compilador, enlazador o PC, que era lo que estaba preguntando. (El teclado también se usa para editar archivos hexadecimales y generar sumas de comprobación).

Por supuesto, muy pocos programadores tienen teclados como este. Este no sería adecuado para un aficionado, ya que probablemente cuesta unos dos mil dólares.

Este programador en particular programa partes antes de colocarlas en un tablero; Las interfaces y los sockets están disponibles para varios PIC y también para AVR Atmel, entre otros.

    
respondido por el tcrosley
6

Como cuestión práctica, algo como alternar los pines JTAG manualmente sería muy propenso a errores. Ingresar un programa de cualquier tamaño decente tomaría miles de cambios. Pero en teoría, es posible.

Si se le permite preparar el microcontrolador por adelantado (o escribir una ROM de arranque para él), podría implementar fácilmente algo como los conmutadores externos usados en los mainframes tempranos. Si permites la lógica externa, incluso puedes usar un teclado hexadecimal para acelerar las cosas.

Finalmente, aunque no es tan común en estos días, puedes comprar un microcontrolador basado en ROM con un código personalizado. Tendría que ofrecer algo de dinero por adelantado y garantizar un cierto volumen, pero he visto que los clientes lo hacen para ahorrar dinero en la producción de alto volumen. En ese caso, no se necesitarían señales externas para programar el microcontrolador. El código se integraría en el diseño físico del chip.

Por supuesto, también puedes usar un microcontrolador que ejecuta el código desde una interfaz de memoria externa, pero eso es trampa. :-)

    
respondido por el Adam Haun
3

Absolutamente. De hecho, el primer curso de microprocesador que tomé (alrededor del 87) usó una placa Motorola 68000. Trabajaríamos el código en conjunto, buscaríamos el hex para el conjunto y escribiríamos el hex en un terminal para programar la placa. Si editó, tenía que asegurarse de que el código que ingresó fuera más corto que el código que estaba reemplazando y luego almacenar el resto con NOP. Si el coDE fuera más largo, ¡tendrías que volver a escribir todo! Aprendimos a agregar un montón de NOPs.

    
respondido por el Scott Seidman
2

Absolutamente. Una vez que tenga un formato binario de las instrucciones reales (fácil de hacer para conjuntos de instrucciones bien especificados), todo lo que necesita es implementar el protocolo de programación.

Por ejemplo, tome algo pequeño como AVR Tiny 4 . La Sección 14 detalla la interfaz de programación incluyendo el protocolo y la capa física. Es relativamente simple y solo necesitas unos pocos botones y resistencias pullup / down para enviar / recibir un 1 o un 0. Si te sientes ambicioso, agrega algunos LED para volver a leer la salida.

El último problema restante es si puede hacerlo lo suficientemente rápido, lo que afortunadamente * para AVR Tiny 4 (sección 16), no tiene una frecuencia mínima cuando se trata de programarlo.

* nota: en la medida en que la hoja de datos lo especifica. Esto puede diferir en la realidad ... Dudo que alguien haya intentado programarlo a velocidades de reloj de mHz.

Siéntase libre de automatizarlo tanto o poco del proceso como desee. Esto es lo que hace la mayoría de los dispositivos de programación: automatizar el proceso.

    
respondido por el helloworld922
2

Por cualquier medio que ingrese el programa a la unidad de control, está "interconectándose" con él, porque eso es lo que significa interconectarse. Incluso un grupo de interruptores que giras manualmente son una "interfaz".

Por lo tanto, trataré esta pregunta como "¿cómo me conecto a una unidad de usuario con un hardware de interfaz en gran parte -mecánico- (en lugar de electrónico), y de la manera más fresca posible?"

A lo que mi respuesta es, ingresa el programa como un rollo de piano. La "barra de seguimiento" del rodillo de piano de un reproductor de piano básicamente le brinda al menos 65 (según el formato) bits que puede activar y desactivar de forma independiente según las perforaciones del papel. El resto es trabajo exacto con un cuchillo exacto. Pero al menos su programa, una vez que se está ejecutando, está (de alguna manera) almacenado de forma permanente (a diferencia de un enfoque manual).

    
respondido por el Atsby
2

No solo es posible programar un microcontrolador sin una computadora, sino que puede comprar una computadora hoy que está específicamente diseñada para ser programada con interruptores de conmutación de hardware. El kit se llama una Tarjeta de membresía , y es una recreación de la computadora Elfo de COSMAC de los años 70 . El kit se describió en un artículo reciente en IEEE Revista Spectrum . También es posible programar versiones más recientes de la tarjeta de membresía desde una PC.

    
respondido por el Craig Finch
2

Está bien. ¿Qué tal esto? Usted escribe el programa en el ensamblador y busca usted mismo los códigos de operación, como se sugirió anteriormente. Cómo obtenerlo en la computadora: tome un viejo reproductor de cintas, retire el cabezal de reproducción, pero deje el cabrestante y el rodillo de presión. Este será tu transporte. Si tiene un reproductor de carrete a carrete, puede dejar el cabezal de reproducción en su lugar.

Luego tome una tira de papel larga y estrecha, o incluso mejor, una cinta transparente. Aquí es donde codificas tu programa. Usas tantas pistas como tengas para programar. En una pista pones puntos negros a intervalos regulares; este es tu reloj En las otras pistas, coloca puntos o tiras negras y deja espacios en blanco de acuerdo con los datos y las señales. Enciende toda la luz y la detecta con pequeños fototransistores (o enciende un LED en la cinta y detecta la luz con otras similares) y maneja el reloj y las líneas de señal con transistores. Esto requiere un poco de espacio en el reproductor de cintas, por lo que es posible que deba quitar el cabezal de reproducción.

Por supuesto, también puede codificar las señales como audio, pero es un poco más complicado de descodificar. O puedes detectar la luz reflejada en lugar de la transmitida. O puede perforar agujeros en una cinta oscura, o en una cinta de papel, en lugar de hacer marcas negras en una cinta transparente. Lo que sea. El reproductor de cintas conduce la cinta a una velocidad constante, por lo que puede ingresar una señal de reloj sin computadora.

    
respondido por el Angus McG
1

Sí. El problema principal puede estar interactuando con la interfaz de programación. Si tiene una dirección simple y un bus de datos, las cosas son un poco más fáciles. ¿Alguna vez has visto algunas de las computadoras realmente tempranas? Los programas se ingresan una instrucción a la vez en la RAM con los interruptores en la parte frontal.

    
respondido por el alex.forencich
1

computadoras mixtas PDP-8 de Equipos Digitales de más de 40 años atrás no tenían capacidad de arranque automático. Los programas normalmente se cargaban desde cintas de papel perforadas, pero el cargador para cargar las cintas de papel tenía que ingresarse manualmente en los interruptores del panel frontal.

EnlossitiosdelosclientesdeDigitalyPDP-8,comolosfabricantesdeequiposoriginalesquelosutilizaroncomocontroladoresintegradosdeldía,noerararoquelosusuariosmemorizaranloscargadoresdearranqueycompitieranentresíporeltiempomásrápidoparaIntroduzcaelcargadordearranqueenlamáquina.Lasmáquinasusabanmemoriasdenúcleomagnético(atadasamanoenpartesremotasdelmundo,pormujerescondedospequeños,usandoagujasyalambrefinocomouncabello).

Como el contenido de la memoria magnética no es volátil, los cargadores de arranque sobrevivieron a un apagado y la entrada manual solo fue necesaria después del ensamblaje inicial, el cargador fue eliminado por un error de programa o un programa necesario para usar el espacio del cargador.

    
respondido por el JRobert
0

La respuesta es sí , puede programar un microcontrolador sin computadora, depurador, etc. Lo que necesitaría sería proporcionar los distintos voltajes, datos, reloj y secuencias de programación especificados por El fabricante de Estados Unidos (no es un trabajo fácil).

    
respondido por el Guill

Lea otras preguntas en las etiquetas