Leer Primero

Como se utiliza este blog?

sábado, 25 de julio de 2020

USB a Serial en Arduino - Generalidades

Bienvenido a mi blog, hoy hablaremos un poco de la comunicación USB en las placas Arduino. Arduino es una plataforma de creación de electrónica de código abierto, la cual está basada en hardware y software libre, flexible y fácil de utilizar para los creadores o desarrolladores, para hacerlo, utiliza el lenguaje de programación Arduino (basado en Wiring) y el Software Arduino IDE (basado en Processing). Recordemos que Arduino es un proyecto, un ecosistema y no solo un modelo concreto de placa.

Arduino se conecta a nuestro ordenador a través del puerto USB, pero el puerto USB se debe conectar al microcontrolador a través de un puerto serial, esta interfaz USB en el ordenador, nos permite tener un puerto serie virtual, en un Arduino usamos el puerto USB para tres funciones: la primera cargar nuestro programa ya compilado en la memoria flash del micro, la segunda conectarnos al puerto Serie (UART) predefinido en cada Arduino para comunicarnos durante la ejecución del programa y la tercera, alimentar de corriente a Arduino. Dada la facilidad de uso y que hoy en día todos los ordenadores disponen de un puerto USB, esto nos facilita mucho hacer estas 3 operaciones.


El microcontrolador ATmega16U2, encontrado en las principales placas arduino originales, pertenece a la compañía Microchip, (recordemos que ya hace varios años microchip compro atmel) y utiliza una arquitectura AVR de 32 registros de 8 bits cada uno, este microcontrolador es de bajo consumo y cuenta con 16 KB de memoria flash, 512 bytes de memoria EEPROM y 512 bytes de memoria SRAM, también dispone de un oscilador interno para la sincronización de instrucciones, 22 pines de entradas y salidas, una interface UART, 2 de SPI y 5 pines PWM. En la placa electrónica Arduino UNO Rev3 y Arduino Mega2560, tenemos un chip ATmega16U2 programado con el firmware necesario para la transmisión de información con el protocolo USB, de esta manera cuando nos conectamos a través del puerto USB de nuestro ordenador a la placa Arduino, el encargado de comunicarse, situándose como intermediario entre el ordenador y el ATmega328P o ATmega2560, es el microcontrolador ATmega16U2.

ATmega16U2 no es el único microcontrolador programado con un firmware para actuar como conversor USB serial, en el Arduino Leonardo y Arduino UNO WiFi Rev2 tenemos al ATmega32U4 y en el Arduino NANO tenemos un chip de ftdi, por citar algunos ejemplos.

La UART o USART es el puerto serie que casi todos los microcontroladores tienen, en el caso de Arduino UNO Rev3 están conectados a los pines 0 y 1, y la comunicación serie es la base de casi cualquiera de las comunicaciones de los microcontroladores. Una USART puede trabajar igual que una UART, pero tiene la capacidad adicional de actuar como síncrona, esto significa, que los datos van sincronizados con una señal de reloj. En la placa Arduino UNO Rev3, se utiliza la UART para que el Atmega328P  se comunique con el otro microcontrolador ATmega16U2 que hace la interface al puerto USB. Los leds (Tx y Rx) parpadean para indicar actividad en el puerto serie a través de la UART.

Físicamente un USB tiene 4 pines:



  • Pin 1=> Alimentación con un voltaje de 5V DC y máximo 500 mA
  • Pin 2 y 3 => Sirven para la transmisión de datos del BUS
  • Pin 4 = GND, Masa o tierra

Como ya hemos visto, para que un Arduino tenga una interfaz USB, se necesita de un chip que ofrezca dicha interfaz, en algunos casos el propio microcontrolador ya dispone de ese interfaz embebida (como los PIC de microchip 18F25K50 y 18F45K50) y en otros casos, utiliza un segundo microcontrolador con interfaz USB, como es el caso de Arduino y sus Micros ATmega16U2 y ATmega32U4. Cuando conectamos un USB al ordenador, necesitamos un driver que nos implemente la comunicación con el USB y nos monte un puerto serie virtual, en el caso de Arduino los drivers ya están embebidos en el IDE, por ese motivo cuando conectamos un Arduino UNO Rev3 original o un Arduino Mega2560, automáticamente nos reconoce el dispositivo. También en el caso de Arduino UNO Rev 3 cuando se resetea la placa, se está reseteando el procesador principal ATmega328P sin cerrar la conexión USB, que es mantenida por el microcontrolador secundario ATmega16u2.

¿Cuál es la diferencia entre la placa ATmega328P ATmega16U2 Arduino Uno R3 original y la placa USB CH340G de Arduino Uno R3 ATmega328P china?

ATMEGA16U2 es un Microcontrolador en el que se puede escribir firmware y CH340G es un convertidor chino de USB a TTL que solo sirve para comunicar la placa con la computadora. En el caso del Atmega16U2 este ha sido programado o preconfigurado con un firmware, para actuar como convertidor USB a TTL en nuestra placa Arduino UNO Rev3 o Arduino Mega2560.

Comparaciones:

  • CH340 es más barato, 16U2 es más costoso.
  • CH340 es un IC (circuito integrado), 16U2 es un microcontrolador.
  • CH340 no puede reprogramarse, 16U2 puede reprogramarse y usarse como microcontrolador independiente (con el bootloader Hoodloader2) ejemplo Arduino USB Rubber Ducky.
  • Los driver para CH340 deben instalarse por separado, los drivers ATmega16U2 ya están embebidos en el IDE de arduino.
  • 16U2 es el método utilizado por Arduino UNO Rev3 original y Arduino Mega2560, CH340 es el clon chino, aunque en algunos casos también se encuentran placas clones con ATmega16U2.

Ejemplos de Conversores USB a Serial Comerciales para Arduino.


Arduino USB 2 Serial micro, el conversor oficial de arduino basado en el ATmega16U2, desafortunadamente lo descontinuaron y ya no lo venden, hasta lo borraron de la pagina oficial de Arduino.

Si es necesario restaurar el firmware del ATmega16U2 nos guiaremos por el siguiente pinout:



Debemos recordar que el firmware del ATmega16U2 "Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex" se encuentra en la propia ruta de instalación del IDE:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2

Pero para determinar si un ATmega16U2 realmente necesita restaurar su firmware, primero se debe hacer la prueba de loop-back.

El siguiente esquema nos muestra el circuito de una interfaz USB a serial, perfectamente funcional, que podríamos implementar en nuestros diseños pcb:




Se implementa un diodo shockley para proteger el puerto USB de nuestro ordenador de corrientes inversas y un regulador de +3,3v para obtener los +5v para arduino y adicional +3.3v para alimentar por ejemplo módulos wifi esp8266. Como ejemplo tenemos el siguiente video, donde veremos la construcción, la forma de mandar hacer nuestras propias placas SMD y aprender a utilizar plantillas Stencil para soldar componentes de montaje superficial:



Cortesía: elprofegarcia


Diseño Final del Conversor USB a Serial SMD

Puedes descargar el esquemático y diseño del pcb en Fritzing aquí
Puedes descargar los archivos gerber aquí



Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Finalmente recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.




También te puede interesar:









jueves, 16 de julio de 2020

Como Grabar el Bootloader de Arduino

Bienvenido a mi blog, hoy hablaremos un poco de la configuración mínima de los Microcontroladores ATmega, los cuales son una línea de microcontroladores fabricados por Atmel que utilizan la arquitectura AVR, para poder utilizarlos en el entorno Arduino, la idea es poder programar estos modelos de micros "con el IDE de Arduino" e integrarlos en nuestras placas de una forma profesional o en el caso de estudiantes universitarios, poder presentar un proyecto sin un Arduino del que salen muchos cables. Para llevar acabo este procedimiento vamos a utilizar como ejemplo un Arduino UNO Rev3 y vamos a diseñar y construir nuestra propia pcb para actuar como una Shield AVR ISP. Primero que todo recordar la definición de bootloader que vimos en el post de "bootloader usb para microcontroladores", teniendo esto claro iniciemos.

Los Microcontroladores se programan a través de un programador o quemador, a menos que tengan una pieza de firmware embebido que les permita reescribir su memoria flash sin la necesidad de un programador externo. A esto se le llama bootloader o gestor de arranque y es básicamente un archivo ".hex" que se ejecuta cuando se enciende la placa. Es similar al BIOS/UEFI que se ejecuta en una PC al inicializarse. El bootloader de Arduino está programado en la memoria flash, en este caso, de un ATMega328P-PU y ocupa 0,5 KB de los 32KB disponibles. El bootloader se comunica usando el protocolo STK500. El bootloader de Arduino es esencialmente el bootloader STK500 versión 2 de AtmelAdemás del bootloader que viene precargado en los microcontroladores de las placas Arduino, existen otros bootloaders con mejoras en algunos aspectos o para ofrecer nuevas características.
  • Por ejemplo el Optiboot es un bootloader muy conocido que está más optimizado que el bootloader oficial de Arduino, permitiendo sketch's mayores y carga más rápida.
Bien, iniciemos, primero que todo necesitaremos la versión más reciente del IDE de Arduino para Windows, la cual la puedes obtener del vinculo en este blog en la columna de la parte izquierda, en la sección <Download Arduino IDE latest versión>.

Para poder utilizar un ATmega328P-PU como un Arduino UNO es necesario cargar la configuración de este o «quemar el bootloader» (grabar la secuencia de inicio). Comenzaremos por abrir nuestro Arduino IDE y nos dirigimos al menú Herramientas - Placa - Arduino AVR Boards - Arduino Uno, con esto le indicamos al IDE que trabajaremos con una placa Arduino UNO:


Ahora vamos al menú Archivo - abrir y seleccionaremos el sketch "ArduinoISP.ino" (El ArduinoISP que se envía como ejemplo con el software Arduino es antiguo. Puedes descargar gratis "ArduinoISP.ino" versión 04m3 de Randall Bohn aquí y reemplazar el que se encuentra en "C:\Program Files (x86)\Arduino\examples\11.ArduinoISP\ArduinoISP" esta versión también funciona con el avrdudess) hecho esto, se mostrará el siguiente código que programara nuestro Arduino como ISP:


Una vez abierto nuestro Sketch, conectaremos el Arduino a un puerto USB, es importante verificar que en el menú de herramientas se encuentre seleccionado el puerto COM correcto de nuestro Arduino, y presionaremos <subir>, que es el segundo símbolo de izquierda a derecha en la parte superior izquierda de nuestro IDE y esperamos hasta que nos indique que se ha subido. Una vez hayamos cargado el sketch correctamente procederemos a desconectar nuestro Arduino del cable USB y conectaremos el circuito (o shield AVR ISP)  que se muestra en la siguiente imagen (es altamente aconsejable que el Arduino tenga el sketch "ArduinoISP" versión 04m3 de Randall Bohn ya cargado y este desconectado al momento de armar el circuito o conectar la shield):



Las resistencias limitadoras de los leds pueden tener un valor mínimo de 200Ω en adelante, el led amarillo de <Testing Blink>, también sirve para verificar si esta cargado el bootloader, ya que al presionar el pulsador RESET de la shield AVR ISP, parpadeará 2 veces si el micro instalado en la base dip, tiene el bootloader cargado ok. El diodo de switcheo 1N4148 es para el antirrebote del pulsador de reset, en otros esquemas también le añaden un capacitor electrolítico de 10uF entre Reset y GND.

Regresamos al IDE y vamos al menú Herramientas - programador y seleccionaremos "Arduino as ISP" una vez hayamos conectado nuestro circuito o shield, conectaremos el Arduino al puerto USB de nuestra PC y debe encender fijamente el led azul "RUN" que indica que nuestro Arduino esta en modo programador y la shield esta lista:


Ahora seleccionaremos que bootloader le vamos a cargar, como para este ejemplo trabajaremos con un Microcontrolador ATmega328P-PU y queremos que actué como un Arduino UNO, verificamos nuevamente que este seleccionado en Herramientas - Placa - Arduino Uno, así el IDE sabrá que bootloader elegir para cargarle al micro:


Hecho esto volveremos a la pestaña de Herramientas y haremos click en la opción de «Quemar Bootloader» o grabar la secuencia de inicio:


Si hemos seguido los pasos correctamente pasados unos segundos en la parte inferior izquierda nos mostrara la leyenda «Quemado de bootloader completado». Ahora para probar, vamos al menú Archivo - Ejemplos - 01.Basics - Blink y verificamos también que en Herramientas - Programador siga seleccionado Arduino as ISP:


Ya después de abierto el sketch del blink y verificado que siga como Arduino as ISP, vamos al menú Programa y seleccionamos "Subir usando Programador":


Después de cargado este sketch en el micro, el led amarillo de "Testing Blink" comienza a parpadear en la Shield AVR ISP, indicándonos, que el sketch fue cargado correctamente y ya esta corriendo, cabe destacar que dicho led amarillo esta conectado al pin 13 o SCK (PB5) de nuestro ATmega328P-PU, por eso actúa igual al led embebido en la propia placa Arduino UNO R3.

El mismo procedimiento, con la variación de la elección de la placa destino, seguiríamos para grabar, por ejemplo, el bootloader del Arduino NANO, solo que en ese caso nos guiaríamos por las siguientes conexiones:

Quemando bootloader en Arduino NANO

En mi experiencia con las placas Arduino NANO, el bootloader seleccionado en el IDE de Arduino, a través de Herramientas> Procesador> ATmega328P (Old Bootloader) es el cargador de arranque "ATmegaBOOT". Aquí hay un gran detalle a tener en cuenta: si tu Arduino NANO tiene cargado el bootloader "OPTIBOOT" o "ATmegaBOOT".

Existen dos diferencias significativas entre los bootloader a utilizar:

Optiboot no entrará en un ciclo de reinicio sin fin después de un reinicio del perro guardián. ATmegaBOOT SI lo hará.

Optiboot espera la comunicación de carga a 115200 baudios, ATmegaBOOT a 57600 baudios. Esta es la razón por la que algunas placas de NANO solo funcionan con la selección Herramientas> Procesador> ATmega328P Old Bootloader. Hay otra diferencia muy significativa entre los dos bootloader: Optiboot cabrá en una sección de arranque de 0,5kB mientras que ATmegaBOOT requiere una sección de arranque de 2kB y además el optiboot permite sketch's mayores y carga más rápida. En pocas palabras, si tienes un Arduino NANO, actualiza su bootloader a la ultima versión de Optiboot utilizando lo aprendido y expuesto en este post.

Al momento de escribir este post la ultima versión de optiboot es la 8.0 que podemos cargar en el IDE de Arduino en el menú Archivo - Preferencias y en gestor de URL's adicionales de tarjetas pegamos la siguiente dirección:

https://github.com/Optiboot/optiboot/releases/download/v8.0/package_optiboot_optiboot-additional_index.json

y hacemos click en OK ahora vamos a herramientas - Placa - Gestor de Tarjetas y nos deberá aparecer en el ultimo item optiboot, lo seleccionamos y hacemos click en el botón Instalar. Con esto cargaremos la ultima versión de optiboot para quemarla en nuestros micros usando el IDE de Arduino y el método visto aquí de ArduinoISP.

Quemando bootloader en Arduino MEGA

Mismo procedimiento seguiremos para grabar el bootloader en un Arduino MEGA basado en el Microcontrolador ATmega2560, pero teniendo en cuenta que si es para un proyecto en placa, al ser este micro encapsulado en smd (montaje superficial) será necesario utilizar el conector ICSP de 6 pines que le añadí a la shield y la placa destino deberá contar también con dicho conector, esto lo lograremos utilizando una correa ribbon de 6 hilos o con jumpers dupont hembra-hembra.



Para restaurar el firmware del ATmega 16U2 que vimos en el post de USB a Serial en Arduino - Generalidades nos guiaremos por el siguiente pinout (aunque no publicare aun el proceso, ya que todavía lo tengo pendiente por verificar, pero es un hecho que funciona y se puede realizar):


Para determinar si un ATmega16U2 realmente necesita restaurar su firmware, primero se debe hacer la prueba de loop-back.

Acotar que esta es la URL que permite al gestor de tarjetas del IDE de Arduino, añadir las placas MiniCore (ATmega8/48/88/168/328):

https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json


/////////////////////////////////////////////////////////////////////////////////////////////


Video cortesía Domando Ingeniería

Ahora vamos a aprender a manejar algunos micros de la familia Attiny, los ATtiny son pequeños µControladores Atmel de 8 bits con poca memoria flash y EEPROM, que presentan encapsulados que van desde los 6 pines el más pequeño, hasta los 32 pines el más grande, lo que los convierte en los cerebros ideales para pequeños proyectos de pocas características y cuyo objetivo sea ser de bajo coste y pequeño tamaño.



Ahora vamos a realizar el procedimiento para el Microcontrolador ATtiny85, primero que todo vamos a desconectar el Arduino UNO del puerto USB del ordenador y quitaremos el microcontrolador ATmega que acabamos de quemar el bootloader y probar, y vamos al menú Archivo - Preferencias y en gestor de URL's adicionales de tarjetas, pegamos la siguiente dirección:

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

y hacemos click en OK:


Ahora vamos a herramientas - Placa - Gestor de Tarjetas y nos deberá aparecer en el ultimo item attiny, la seleccionamos y hacemos click en el botón Instalar:


Ahora para probar vamos a cargar el sketch del blink en nuestro ATtiny85 y para ello vamos a descargar gratis el archivo Blink_ATtiny25_45_85_13.ino Una vez lo hayas descargado y lo tengas abierto, vamos a Herramientas - Placa y seleccionamos ATtiny25/45/85:


Procedemos ahora a seleccionar en Herramientas - Procesador - ATtiny85 y en Clock - Internal 1 MHz (por defecto el ATtiny85 funciona a 1MHz, por eso, cuando se selecciona la placa ATtiny25/45/85 el "Clock" se selecciona "1MHz internal", para que funcione a 8MHz se debería quemar un nuevo bootloader, para ello en el menú "Herramientas" seleccionaríamos "8MHz internal" en la opción "Clock" y luego, en el mismo menú, haríamos click en "Quemar Bootloader"):


No olvidemos verificar que en Herramientas - Programador siga seleccionado Arduino as ISP, recuerda lo que hablamos en el proceso con el ATmega328P-PU (es altamente aconsejable que el Arduino ya este como "ArduinoISP" y este desconectado al momento de armar el circuito o conectar la shield) en este momento del proceso, instalamos el micro ATtiny85 en la base DIP de 8 pines con la disposición indicada en la serigrafia, conectamos la shield y conectamos el Arduino UNO al puerto USB de la PC y procedemos a darle Herramientas - Quemar Bootloader, en realidad esto solo cargara la configuración porque el ATtiny no tiene bootloader, es decir, lo que ha cargado son los fuses. Hecho  esto, ahora si procederemos a programarle el sketch Blink_ATtiny24_45_85_13.ino dándole en el Menú Programa - Subir usando Programador:


Después de cargado este sketch en el micro, el led amarillo de "Testing Blink" comienza a parpadear en la Shield, indicándonos, que el sketch fue cargado correctamente y ya esta corriendo, cabe destacar que dicho led amarillo esta conectado al pin SCK (PB2) de nuestro ATtiny. A continuación una pequeña simulación en wokwi gratuito y online:


Recuerda que esta shield permite grabar tanto el bootloader como sketch's en los Microcontroladores de Atmel ATmega8/48/88/168/328P/PU, ATtiny 25/45/85/13A, ATmega2560 y ATmega16U2, también permite la configuración de fuses mediante el software AVRdude, aunque gracias al conector ICSP de la shield, se puede programar cualquier micro AVR que soporte ISP, actualmente se trabaja en modificar el circuito para poder añadir Programación de Alto Voltaje.


Acotar que esta es la URL que permite al gestor de tarjetas del IDE de Arduino, añadir la placa ATtiny13:



- Que diferencia hay entre un microcontrolador ATtiny13 y ATtiny13A?

El ATtiny13 es la versión original y utiliza una tecnología de proceso diferente a la ATtiny13A. Las partes con sufijo "A" se fabrican con un proceso de baja potencia comercializado como "picoPower", y la principal diferencia es que generalmente consumen menos energía con el mismo voltaje y frecuencia.


Pero que sucedería sino contamos con una placa Arduino en donde podamos acoplar la shield? Pues podríamos entonces, utilizar un conversor FTDI y conectárselo a la misma shield para no necesitar mas hardware adicional, para ello anexaremos esto a nuestro pequeño diseño:


Para utilizar solo el conversor FTDI y la shield, deberemos utilizar el software AVRDUDE (AVR Downloader/UploaDEr) el cual es una herramienta para programar microcontroladores Atmel, y pasar, ya sea el sketch o el bootloader, en formato ".hex" Así como vemos, nuestra Shield AVR ISP ha tomado más versatilidad.


PCB Shield AVR ISP




PROGRAMMER BOOTLOADER SHIELD AVR ISP FOR ARDUINO - Visor 3D - Cortesía Proteus

La idea de hacer la tarjeta de la shield mas corta que la de Arduino, es que las soldaduras inferiores no toquen el conector USB hembra tipo B del Arduino uno, de esta forma la shield se acoplara perfectamente y no presentara ninguna falla de diseño. Pronto estará a la venta, publicándola en mercado libre para que puedas adquirirla si te interesa o vía NEQUI.

Ejemplo de Shield mal diseñada, no se acopla bien y las soldaduras inferiores harán corto cuando toquen el conector metálico USB hembra tipo B de la placa Arduino, por eso lo forraron con cinta de enmascarar.


La programación de alto voltaje implica la aplicación de un voltaje de alto nivel a ciertos pines del microcontrolador AVR, lo que activa un mecanismo de seguridad en el chip que permite la programación o el borrado de la memoria Flash interna. Actualmente modifico el circuito para poder realizar programación de alto voltaje, la cual también permitirá el reseteo de fuses en microcontroladores AVR bloqueados. Si te interesa este pequeño proyecto, puedes apoyar con una colaboración voluntaria vía NEQUI al 3177295861.


Ejemplo de Shield AVR-HV High voltage programmer, que demuestra que si se puede hacer y funciona en Arduino. Cortesía del proyecto HV Rescue Shield v2.1


Finalmente para saber el estado inicial de los bits de configuración y bloqueo, de cualquier Microcontrolador AVR, es decir, los fuses, recomiendo consultar y usar la siguiente pagina:






Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.

También te puede interesar:









viernes, 10 de julio de 2020

Bootloader USB para Microcontroladores PIC 18F2550 y PIC18F4550


Bienvenido a mi blog, hoy hablaremos un poco del bootloader USB para Microcontroladores PIC18F2550 y PIC18F4550, el cual es un programa que reside dentro de la memoria del microcontrolador, y nos permitira reprogramar el microcontrolador sin necesidad de utilizar un grabador externo. Para esto, es necesario programar el microcontrolador por los medios convencionales (utilizando un programador externo) solo la primera vez, cargandole el hexadecimal o el archivo compilado .hex del bootloader. Una vez hecho esto, nuestro microcontrolador esta listo para ser utilizado sin necesidad  de utilizar un programador externo. El bootloader funciona en el momento del cargado del programa (justo cuando el micro es reseteado) y es capaz de cargar una aplicacion completa en la memoria de programa del Microcontrolador. Las plataformas modernas, como Arduino utilizan este sistema de programación. Pero ojo, por ningún motivo se debe sobrescribir las posiciones de memoria FLASH en la que se encuentra el programa residente Bootloader, ya que si se borra por algún error, pierdes el bootloader y tendras que programarlo nuevamente con un grabador externo.

No todos los microcontroladores soportan Bootloader, esto se limita aquellos que tienen la capacidad de autograbar su memoria FLASH. Por ejemplo el PIC16F84A de Microchip no lo permite, por eso sacaron la versión PIC16F628A que si lo permite y además tiene mejores prestaciones.

(Para las personas con experiencia en Arduino hay un proyecto similar a ArduinoISP que permite programar microcontroladores pic desde placas como Arduino UNO [Nano o Pro mini no funcionarán ya que no pueden proporcionar suficiente corriente] e incluso se puede quemar el famoso Microcontrolador 8051 de Intel <AT89S51, AT89S52>).

Pero antes de todo esto se preguntaran, como cargo entonces mis programas al microcontrolador? Pues es necesario utilizar un medio de comunicacion con el pc, y  nuestro microcontrolador cuenta con ese medio, que es un puerto USB embebido. El bootloader ya esta programado  para trabajar con ese módulo USB de nuestro PIC,  lo unico que nos quedaria es realizar nuestro circuito para que el Microcontrolador pueda funcionar correctamente, un ejemplo seria utilizar la herramienta PICKIT, otro ejemplo especifico de esto es el USB Pic BootLoader Boot25 (Pic18F2550):



El USB PIC Bootloader Boot25 es una herramienta que permite montar un pequeño programa de arranque, residente en la memoria de programa, a un Microcontrolador PIC18F2550. El Boot25 es una versión personalizada del PICDEM-FS-USB Demostration Board que Microchip ofrece, de tamaño compacto, versátil y autónomo, en la imagen se puede apreciar que existen 2 pulsadores, uno que es para el reset y el otro para el entrar al modo bootloader. Para entrar al modo bootloader, es necesario reiniciar el microcontrolador y seguidamente presionar el boton "boot mode" hecho esto, el microcontrolador esta listo para ser programado. Como la arquitectura del PIC18F4550 es igual al del 18F2550, salvo que el 18f4550 tiene mas pines, el bootloader sera funcional para estos 2 tipos de microcontroladores, este hardware esta diseñado por el Ingeniero Wilmer Salas.

Otro ejemplo especifico es el USB Pic BootLoader Boot45 (Pic18F4550)]:



Consulta aqui la web del autor, para descargar el software y el .hex

Por ultimo recordar que tanto el Microcontrolador PIC18F2550 como el 18F4550, ya han sido descontinuados por microchip, en su reemplazo se han lanzado los modelos 18F25k50 y el 18F45k50. Tambien puedes diseñar y montar tu propio entrenador PIC o cargar el bootloader del proyecto Pinguino, que puedes conocer en https://www.pinguino.cc/

Descarga los bootloader's para El Proyecto Pinguino desde github aqui, recuerda que tambien hay otros bootloader's para ambientes especificos como el ccs compiler y xC8,

Proyecto PICKAT basado en el PIC18F2550

Pinguino Básico


Placa de Desarrollo Pinguino basada en el PIC18F4550 de Microchip por Editronikx


Placa de Desarrollo Pinguino Ciku desarrollada por la empresa de Malasia Cytron Technologies



Ejemplo de Serigrafia de la capa inferior o Bottom, agradable y con buen diseño por los compañeros de PCB Designer.



Diagrama Basico de un Pinguino Basado en el PIC18F4550


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.




Tambien te puede interesar: