Por ejemplo un PIC10F200T
Prácticamente cualquier código que escriba será más grande que eso, a menos que sea un chip de propósito único. ¿Hay alguna forma de cargar más memoria de programa desde un almacenamiento externo o algo así? Solo tengo curiosidad, no veo cómo esto podría ser muy útil ... pero debe serlo.
microcontroller
pic
memory
storage
codificador543
fuente
fuente
Respuestas:
¡Chicos, salgan de mi césped!
384 bytes es mucho espacio para crear algo bastante complejo en ensamblador.
Si revisas la historia de cuando las computadoras eran del tamaño de una habitación, encontrarás algunas hazañas de arte verdaderamente sorprendentes ejecutadas en <1k.
Por ejemplo, lea la historia clásica de Mel - Un programador real . Es cierto que esos tipos tenían 4096 palabras de memoria para jugar, los infieles decadentes.
También mire algunas de las viejas competencias de demoscene donde el desafío era encajar una "introducción" en el bloque de arranque de un disquete, los objetivos típicos son 4k o 40k y generalmente logran incluir música y animación.
Editar para agregar : Resulta que puedes implementar la primera calculadora científica de $ 100 del mundo en 320 palabras.
Editar para los jóvenes 'uns:
fuente
Los microcontroladores son lo suficientemente baratos como para que a menudo se usen para hacer cosas realmente simples que en años anteriores probablemente se habrían hecho con lógica discreta. Cosas realmente simples. Por ejemplo, uno podría desear que un dispositivo encienda una salida durante un segundo cada cinco segundos, más precisamente de lo que un temporizador 555 podría hacer.
Esa sería una aplicación real, utilizable, en menos de 32 palabras (48 bytes) de espacio de código. Uno podría agregar fácilmente algunas opciones para que algunos pines de E / S controlen las opciones de temporización y aún tenga mucho espacio de sobra, pero incluso si todo el chip fuera precisamente lo que se muestra arriba, aún podría ser más barato y más fácil que cualquier otra alternativa usando discreto lógica. Por cierto, las
clrwdt
instrucciones podrían trasladarse a la subrutina, pero hacerlo haría las cosas menos robustas. Tal como está escrito, incluso si una falla causa que la pila de la dirección de retorno se corrompa, el perro guardián no se alimentará hasta que la ejecución regrese al bucle principal. Si eso nunca sucede, el perro guardián reiniciará el chip después de un par de segundos.fuente
clrwdt
instrucciones. Esta no es la disposición de contador más segura posible a prueba de fallas, pero se da cierta consideración a los problemas de seguridad (por ejemplo, evitarclrwdt
dentro de una subrutina)."SOLO" 384 bytes?
En el pasado, tenía el trabajo de escribir un sistema operativo completo (solo) para una computadora especializada que servía a la industria de la gestión de buques, tuberías y refinerías. El primer producto de este tipo de la compañía se basó en 6800 y se estaba actualizando a 6809, y querían un nuevo sistema operativo junto con el 6809 para poder eliminar los costos de licencia del sistema operativo original. También aumentaron el tamaño de la rom de arranque a 64 bytes, en lugar de 32. Si recuerdo bien, ¡fue hace unos 33 años! - Convencí a los ingenieros de que me dieran 128 bytes para poder poner todos los controladores de dispositivo del sistema operativo en la rom y así hacer que todo el dispositivo sea más confiable y versátil. Esto incluyó:
Sí, todos estos fueron tan simples como se ve, y optimizados a mano para eliminar cada ciclo extraño, pero perfectamente reparables y confiables. Sí, calcé todo eso en los bytes disponibles; oh, TAMBIÉN configuró el manejo de interrupciones, las diversas pilas e inicialicé el sistema operativo en tiempo real / multitarea, solicité al usuario las opciones de arranque y reinicié el sistema.
¡Un amigo mío que todavía está afiliado a la compañía (su sucesor) me dijo hace unos años que mi código todavía está en servicio!
Puedes hacer MUCHO con 384 bytes ...
fuente
Puede usar esto para aplicaciones muy pequeñas (por ejemplo , inicio retrasado de la fuente de alimentación , reemplazo del temporizador 555 , control basado en triac , parpadeo de LED, etc.) con una huella más pequeña de la que necesitaría con puertas lógicas o un temporizador 555.
fuente
Diseñé un sensor de humedad para plantas que rastrea la cantidad de agua que tiene la planta y parpadea un LED si la planta necesita agua. Puede hacer que el sensor aprenda el tipo de planta y, por lo tanto, cambie su configuración mientras se ejecuta. Detecta bajo voltaje en la batería. Me quedé sin flash y ram, pero pude escribir todo en código C para que este producto funcionara perfectamente.
Usé el pic10f que mencionas.
Aquí está el código que hice para mi sensor de agua de la planta. Utilicé el pic10f220 ya que tiene un módulo ADC, tiene la misma memoria que el pic10f200, intentaré encontrar el Esquema mañana.
El código está en español, pero es muy simple y debe entenderse fácilmente. Cuando el Pic10F se activa desde el modo de suspensión, se reiniciará, por lo que debe verificar si fue un PowerUp o un reinicio y actuar en consecuencia. La configuración de la planta se mantiene en ram ya que nunca se apaga realmente.
C PRINCIPAL
PRINCIPAL.H
Avíseme si tiene preguntas, intentaré responder según lo que recuerdo. Lo codifiqué hace varios años, así que no verifiquen mis habilidades de codificación, han mejorado :).
Nota final Usé el compilador Hi-Tech C.
fuente
Algo que no he visto mencionado: el microcontrolador que mencionó cuesta solo $ 0.34 cada uno en cantidades de 100. Por lo tanto, para productos baratos producidos en masa, puede tener sentido ir al problema de codificación adicional impuesto por una unidad tan limitada. Lo mismo podría aplicarse al tamaño o al consumo de energía.
fuente
Cuando estaba en la escuela secundaria, tenía un maestro que insistía en que atenuar la luz era una tarea demasiado difícil para un estudiante como yo.
Así desafiado, pasé bastante tiempo aprendiendo y entendiendo la atenuación de la luz basada en fases usando triacs y programando el 16C84 desde el microchip para realizar esta hazaña. Terminé con este código de ensamblaje:
Por supuesto, necesitaría modificar esto para el chip que menciona, y tal vez agregar una rutina serial barata para la entrada ya que su chip no tiene un puerto de 8 bits de ancho para escuchar, pero la idea es que un trabajo aparentemente complejo puede debe hacerse en muy poco código: puede colocar diez copias del programa anterior en el 10F200.
Puede encontrar más información sobre el proyecto en mi página de Atenuación de luz . Por cierto, nunca le mostré esto a mi maestro, pero terminé haciendo una serie de equipos de iluminación para mi amigo DJ.
fuente
Bueno, hace años escribí un controlador de temperatura con E / S en serie (golpeando la E / S en serie porque el MCU no tenía un UART) y un simple intérprete de comandos para hablar con el controlador. MCU era un MC68HC705K1 de Motorola (ahora Freescale) que tenía 504 bytes de memoria de programa (OTPROM) y unos 32 bytes de RAM. No es tan pequeño como el PIC al que hace referencia, pero recuerdo que me queda algo de ROM. Todavía me quedan algunas unidades ensambladas, 17 años después; quieres comprar uno?
Entonces sí, se puede hacer, al menos en conjunto.
En cualquier caso, recientemente he escrito programas C muy simples que probablemente habrían encajado dentro de 384 bytes cuando estén optimizados. No todo requiere un software grande y complejo.
fuente
Puede escribir un parpadeo de un LED con 384 bytes de memoria de programa, y aún más.
Hasta donde yo sé, no es posible extender la memoria del programa con un chip externo (a menos que esté construyendo un intérprete ASM completo en los 384 bytes , lo que sería lento). Sin embargo, es posible ampliar la memoria de datos con un chip externo (EEPROM, SRAM).
fuente
En realidad es peor de lo que piensas. Su página vinculada de Mouser es confusa cuando especifica que este procesador tiene 384 bytes de memoria de programa. El PIC10F200 en realidad tiene 256 palabras de 12 bits de de memoria de programa.
Entonces, ¿qué puedes hacer con eso? El conjunto de instrucciones PIC de 12 bits utilizado por los dispositivos PIC10F20 x son todas instrucciones de una sola palabra, por lo que después de restar algunas instrucciones para la configuración del procesador, tiene suficiente espacio para un programa de aproximadamente 250 pasos. Eso es suficiente para muchas aplicaciones. Probablemente podría escribir un controlador de lavadora en ese tipo de espacio, por ejemplo.
Acabo de mirar los compiladores PIC C disponibles, y parece que aproximadamente la mitad ni siquiera intentará emitir código para un PIC10F200. Aquellos que probablemente publican tanto código repetitivo que es posible que solo pueda escribir una luz intermitente LED en el espacio restante. Realmente desea utilizar lenguaje ensamblador con dicho procesador.
fuente
agitando mi bastón en mi día, ¡tuvimos que grabar nuestras propias partes en la arena!
En 1976 (o por ahí), el sistema Atari 2600 VCS era una de las "plataformas de videojuegos" más populares de la época. En él, el microprocesador (MOSTEK 6507) funcionaba a una velocidad de ~ 1 MHz y tenía **** 128 bytes de RAM **.
Un segundo ejemplo que recuerdo de un microcontrolador con RAM extremadamente limitada (~ 128 bytes) fue un PIC12F utilizado en un convertidor DC-DC. Este micro también tuvo que usar lenguaje ensamblador para poder ejecutarse.
fuente