30-10-2018, 10:00 PM
Como indicaba en el post del sensor de final de filamento, en este voy a terminar de contestar la pregunta sobre la CR-10. En concreto la parte del Power Loss Recovery.
De paso, dado que para cambiar el firmware de la placa que trae esta impresora (y la Ender 3) se necesita grabar el bootloader, explicaré también este proceso.
GRABAR EL BOOTLOADER
La lista de cosas que se necesitan, tanto de hardware como de software, es la siguiente:
- Una placa Arduino Uno o Mega con su cable USB.
- 5 cables con conectores Dupont hembra en los dos extremos.
- 1 cable con conector Dupont macho en un extremo y hembra en el otro.
- IDE de Arduino (descarga).
- Ficheros de descripción del hardware (descarga).
Se han reportado algunos problemas con placas Arduino que no permiten realizar este proceso de forma correcta. Lo único que se puede hacer, en este caso, es cambiar el Arduino por otro.
Primero vamos a preparar todo en el ordenador.
Descomprimimos el archivo ZIP del IDE, lo que nos creará una carpeta de nombre arduino-1.8.7, dentro de la cual está todo el entorno incluido.
Descomprimimos el archivo ZIP del hardware, lo que nos crea una carpeta de nombre Sanguino-master. Copiamos dicha carpeta en arduino-1.8.7\hardware\.
Con esto tendremos el software preparado para el proceso. Ahora tendremos que configurar el Arduino que tengamos (UNO o Mega) como programador ISP.
Conectamos por USB el Arduino al ordenador y comprobamos que se crea en el Administrador de Dispositivos un puerto COM para él.
Si no se crea un puerto COM al conectarlo, tendremos que instalar el driver CH340 de forma manual. Suele venir entre el software que traen las impresoras.
Abrimos la carpeta arduino-1.8.7 y ejecutamos la aplicación arduino.exe.
En el menú, seleccionamos Archivo>Ejemplos>11.ArduinoISP>ArduinoISP,
![[Imagen: Img1.jpg]](https://preview.ibb.co/hBcMXf/Img1.jpg)
lo que nos abrirá una nueva ventana con dicho sketch cargado.
En el menú Herramientas, seleccionamos en el apartado Placa: el Arduino que vayamos a utilizar (Arduino/Genuino UNO o Arduino/Genuino Mega or Mega 2560), en Puerto: el COM que se haya creado al conectarla al ordenador y en Programador: USBasp:
![[Imagen: Img6.jpg]](https://image.ibb.co/dXnnNf/Img6.jpg)
Pulsamos en la flecha para subir el sketch al arduino:
![[Imagen: Img3.jpg]](https://image.ibb.co/h4ggXf/Img3.jpg)
Cuando termine, pondrá Subido en la barra de notificaciones y desconectamos el cable USB del ordenador.
Ahora vamos a conectar las dos placas para subir el bootloader.
Para ello, utilizaremos los cables que habíamos indicado y el siguiente esquema de conexiones:
![[Imagen: Img1.jpg]](https://preview.ibb.co/c2HFo0/Img1.jpg)
Esta imagen es de un Arduino UNO, pero sería lo mismo para un Mega. Conectamos los pines equivalentes de ambos conectores ISP-ISCP de las placas mediante los cables hembra-hembra, excepto el pin de abajo a la izquierda (mirando el conector según se ve en la foto), que se conecta mediante el cable hembra-macho al pin 10 del Arduino.
Con las dos placas conectadas así, enchufamos el cable USB del Arduino al ordenador y arrancamos de nuevo el IDE.
En el menú Herramientas, seleccionamos ahora como Placa: Sanguino, como Procesador: ATMega1284 or ATMega1284P (16 MHz), como Puerto: el que se haya creado al conectarlo, como Programador: Arduino as ISP y pulsamos en la opción Quemar bootloader:
![[Imagen: Img4.jpg]](https://image.ibb.co/nzVk8L/Img4.jpg)
Cuando termine, desconectamos el cable USB y después todos los demás cables.
Con esto tenemos cargado el bootloader en la placa, lo que ya nos permitirá actualizar el firmware.
POWER LOSS RECOVERY (PLR)
Para activar esta función, tendremos que instalar Marlin (descarga) y dependiendo de cómo se realice esto, pueden surgir problemas.
También tendremos que instalar en el IDE de Arduino la librería U8Glib (descarga), ya que la impresora tiene una pantalla de tipo gráfico. Para ello, una vez descargado el archivo ZIP que la incluye, hay que ir al menú Programa>Incluír librería>Añadir librería .ZIP…, seleccionar el fichero descargado y aceptar.
Una vez descargado Marlin, descomprimimos el archivo ZIP y nos crea una carpeta de nombre Marlin-1.1.x que contiene todos los archivos del firmware. Pero para poder instalarlo en la impresora, primero hay que configurarlo adecuadamente para ella.
Toda la configuración a realizar está incluida en dos archivos: Configuration.h y Configuration_adv.h, que se encuentran en la ruta Marlin-1.1.x\Marlin\. Pero tal y como están tienen una configuración mínima por defecto, que no es adecuada para la CR-10 (o la Ender 3).
Para facilitar el proceso, Marlin trae en la carpeta Marlin-1.1.x\Marlin\example_configurations\, una serie de carpetas de distintas marcas de impresoras, dentro de las cuales se encuentran separados por modelos, los archivos anteriores pre configurados para cada impresora concreta.
En nuestro caso, en la ruta Marlin-1.1.x\Marlin\example_configurations\Creality\CR-10\ tenemos cuatro archivos: _Bootscreen.h, _Statusscreen.h, Configuration.h y Configuration_adv.h.
Los dos primeros contienen los logos personalizados de Creality (para la pantalla de inicio y la de estado) y los otros dos son los que indicaba que contienen la configuración para esta impresora.
Habría que copiar los cuatro en la carpeta Marlin-1.1.x\Marlin\ para continuar con el proceso, pero hay un problema: si se utiliza ese archivo Configuration_adv.h, a la hora de compilar, se consume una cantidad desmesurada y fuera de lo normal de la memoria que posee la MCU para contener las variables, incluso toda si se activa la función PLR, dando un error de compilación que impide continuar.
Aún no he dado con la causa de esto por lo que, para evitarlo, hay que utilizar el archivo que viene por defecto, configurando lo que sea necesario.
Por lo tanto, sólo copiamos de la carpeta CR-10 los tres primeros archivos, dejando sin copiar el Configuration_adv.h.
Ya podemos abrir el IDE de Arduino y cargar el sketch de Marlin. Para ello, vamos a la opción del menú Archivo>Abrir y seleccionamos el archivo Marlin.ino que se encuentra en Marlin-1.1.x\Marlin\:
![[Imagen: Img5.jpg]](https://preview.ibb.co/gSdTCf/Img5.jpg)
Los archivos que integran el sketch están agrupados en pestañas, identificadas con el nombre del archivo.
Seleccionamos la pestaña Configuration.h, donde tenemos que cambiar las siguientes líneas:
//#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
#define LCD_LANGUAGE es
La primera línea es para conseguir memoria de programa, pues la vamos a necesitar. La segunda, para poner la pantalla en castellano (o en el que se quiera de los soportados, por defecto es inglés).
Pasamos ahora a la pestaña Configuration_adv.h, donde cambiamos las siguientes líneas:
#define STATUS_MESSAGE_SCROLLING
#define POWER_LOSS_RECOVERY
#define POWER_LOSS_PIN 17 // Pin to detect power loss
#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
#define BABYSTEPPING
#define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#define ADVANCED_PAUSE_FEATURE
#define PAUSE_PARK_RETRACT_LENGTH 4 // (mm) Initial retract.
#define FILAMENT_CHANGE_UNLOAD_LENGTH 420 // (mm) The length of filament for a complete unload.
#define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 8 // (mm/s) Load filament feedrate. This can be pretty fast.
#define PAUSE_PARK_NOZZLE_TIMEOUT 120 // (seconds) Time limit before the nozzle is turned off for safety.
#define FILAMENT_CHANGE_ALERT_BEEPS 6 // Number of alert beeps to play when a response is needed.
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
#define NO_WORKSPACE_OFFSETS
Excepto las líneas que activan el PLR, las demás son las que trae el archivo pre configurado para la CR-10 que no hemos podido usar por la razón ya comentada.
Para la función PLR habrá que comprobar si funcionan esos parámetros: el pin 17 para la detección del corte de corriente y el estado del pin en alto (HIGH). Si no funciona el PLR habrá que cambiarlos.
Hechos estos ajustes, ya podemos compilar y subir el firmware a la impresora.
Lo primero, como siempre, configurar el IDE para comunicarse con la placa: En el menú Herramientas, seleccionamos ahora como Placa: Sanguino, como Procesador: ATMega1284 or ATMega1284P (16 MHz), como puerto el que se haya creado al conectar la impresora y como Programador: USBasp.
Pulsamos la flecha para compilar y subir el firmware. Una vez subido, la impresora se reiniciará e indicará en pantalla la nueva versión de Marlin instalada.
Por lo que he visto por ahí, puede que aún haya en la función PLR algunos “bugs” no corregidos. Si es así, habrá que estar atentos para descargar de nuevo Marlin cuando estén corregidos.
Por último, decir que la Ender 3, que usa la misma placa que la CR-10, no tiene los mismos problemas de ocupación de memoria y pueden utilizarse los archivos pre configurados que vienen para ella, modificando únicamente el idioma (en su caso) y las líneas para la activación del PLR.
De paso, dado que para cambiar el firmware de la placa que trae esta impresora (y la Ender 3) se necesita grabar el bootloader, explicaré también este proceso.
GRABAR EL BOOTLOADER
La lista de cosas que se necesitan, tanto de hardware como de software, es la siguiente:
- Una placa Arduino Uno o Mega con su cable USB.
- 5 cables con conectores Dupont hembra en los dos extremos.
- 1 cable con conector Dupont macho en un extremo y hembra en el otro.
- IDE de Arduino (descarga).
- Ficheros de descripción del hardware (descarga).
Se han reportado algunos problemas con placas Arduino que no permiten realizar este proceso de forma correcta. Lo único que se puede hacer, en este caso, es cambiar el Arduino por otro.
Primero vamos a preparar todo en el ordenador.
Descomprimimos el archivo ZIP del IDE, lo que nos creará una carpeta de nombre arduino-1.8.7, dentro de la cual está todo el entorno incluido.
Descomprimimos el archivo ZIP del hardware, lo que nos crea una carpeta de nombre Sanguino-master. Copiamos dicha carpeta en arduino-1.8.7\hardware\.
Con esto tendremos el software preparado para el proceso. Ahora tendremos que configurar el Arduino que tengamos (UNO o Mega) como programador ISP.
Conectamos por USB el Arduino al ordenador y comprobamos que se crea en el Administrador de Dispositivos un puerto COM para él.
Si no se crea un puerto COM al conectarlo, tendremos que instalar el driver CH340 de forma manual. Suele venir entre el software que traen las impresoras.
Abrimos la carpeta arduino-1.8.7 y ejecutamos la aplicación arduino.exe.
En el menú, seleccionamos Archivo>Ejemplos>11.ArduinoISP>ArduinoISP,
![[Imagen: Img1.jpg]](https://preview.ibb.co/hBcMXf/Img1.jpg)
lo que nos abrirá una nueva ventana con dicho sketch cargado.
En el menú Herramientas, seleccionamos en el apartado Placa: el Arduino que vayamos a utilizar (Arduino/Genuino UNO o Arduino/Genuino Mega or Mega 2560), en Puerto: el COM que se haya creado al conectarla al ordenador y en Programador: USBasp:
![[Imagen: Img2.jpg]](https://image.ibb.co/nsY58L/Img2.jpg)
![[Imagen: Img6.jpg]](https://image.ibb.co/dXnnNf/Img6.jpg)
Pulsamos en la flecha para subir el sketch al arduino:
![[Imagen: Img3.jpg]](https://image.ibb.co/h4ggXf/Img3.jpg)
Cuando termine, pondrá Subido en la barra de notificaciones y desconectamos el cable USB del ordenador.
Ahora vamos a conectar las dos placas para subir el bootloader.
Para ello, utilizaremos los cables que habíamos indicado y el siguiente esquema de conexiones:
![[Imagen: Img1.jpg]](https://preview.ibb.co/c2HFo0/Img1.jpg)
Esta imagen es de un Arduino UNO, pero sería lo mismo para un Mega. Conectamos los pines equivalentes de ambos conectores ISP-ISCP de las placas mediante los cables hembra-hembra, excepto el pin de abajo a la izquierda (mirando el conector según se ve en la foto), que se conecta mediante el cable hembra-macho al pin 10 del Arduino.
Con las dos placas conectadas así, enchufamos el cable USB del Arduino al ordenador y arrancamos de nuevo el IDE.
En el menú Herramientas, seleccionamos ahora como Placa: Sanguino, como Procesador: ATMega1284 or ATMega1284P (16 MHz), como Puerto: el que se haya creado al conectarlo, como Programador: Arduino as ISP y pulsamos en la opción Quemar bootloader:
![[Imagen: Img4.jpg]](https://image.ibb.co/nzVk8L/Img4.jpg)
Cuando termine, desconectamos el cable USB y después todos los demás cables.
Con esto tenemos cargado el bootloader en la placa, lo que ya nos permitirá actualizar el firmware.
POWER LOSS RECOVERY (PLR)
Para activar esta función, tendremos que instalar Marlin (descarga) y dependiendo de cómo se realice esto, pueden surgir problemas.
También tendremos que instalar en el IDE de Arduino la librería U8Glib (descarga), ya que la impresora tiene una pantalla de tipo gráfico. Para ello, una vez descargado el archivo ZIP que la incluye, hay que ir al menú Programa>Incluír librería>Añadir librería .ZIP…, seleccionar el fichero descargado y aceptar.
Una vez descargado Marlin, descomprimimos el archivo ZIP y nos crea una carpeta de nombre Marlin-1.1.x que contiene todos los archivos del firmware. Pero para poder instalarlo en la impresora, primero hay que configurarlo adecuadamente para ella.
Toda la configuración a realizar está incluida en dos archivos: Configuration.h y Configuration_adv.h, que se encuentran en la ruta Marlin-1.1.x\Marlin\. Pero tal y como están tienen una configuración mínima por defecto, que no es adecuada para la CR-10 (o la Ender 3).
Para facilitar el proceso, Marlin trae en la carpeta Marlin-1.1.x\Marlin\example_configurations\, una serie de carpetas de distintas marcas de impresoras, dentro de las cuales se encuentran separados por modelos, los archivos anteriores pre configurados para cada impresora concreta.
En nuestro caso, en la ruta Marlin-1.1.x\Marlin\example_configurations\Creality\CR-10\ tenemos cuatro archivos: _Bootscreen.h, _Statusscreen.h, Configuration.h y Configuration_adv.h.
Los dos primeros contienen los logos personalizados de Creality (para la pantalla de inicio y la de estado) y los otros dos son los que indicaba que contienen la configuración para esta impresora.
Habría que copiar los cuatro en la carpeta Marlin-1.1.x\Marlin\ para continuar con el proceso, pero hay un problema: si se utiliza ese archivo Configuration_adv.h, a la hora de compilar, se consume una cantidad desmesurada y fuera de lo normal de la memoria que posee la MCU para contener las variables, incluso toda si se activa la función PLR, dando un error de compilación que impide continuar.
Aún no he dado con la causa de esto por lo que, para evitarlo, hay que utilizar el archivo que viene por defecto, configurando lo que sea necesario.
Por lo tanto, sólo copiamos de la carpeta CR-10 los tres primeros archivos, dejando sin copiar el Configuration_adv.h.
Ya podemos abrir el IDE de Arduino y cargar el sketch de Marlin. Para ello, vamos a la opción del menú Archivo>Abrir y seleccionamos el archivo Marlin.ino que se encuentra en Marlin-1.1.x\Marlin\:
![[Imagen: Img5.jpg]](https://preview.ibb.co/gSdTCf/Img5.jpg)
Los archivos que integran el sketch están agrupados en pestañas, identificadas con el nombre del archivo.
Seleccionamos la pestaña Configuration.h, donde tenemos que cambiar las siguientes líneas:
//#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
#define LCD_LANGUAGE es
La primera línea es para conseguir memoria de programa, pues la vamos a necesitar. La segunda, para poner la pantalla en castellano (o en el que se quiera de los soportados, por defecto es inglés).
Pasamos ahora a la pestaña Configuration_adv.h, donde cambiamos las siguientes líneas:
#define STATUS_MESSAGE_SCROLLING
#define POWER_LOSS_RECOVERY
#define POWER_LOSS_PIN 17 // Pin to detect power loss
#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
#define BABYSTEPPING
#define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#define ADVANCED_PAUSE_FEATURE
#define PAUSE_PARK_RETRACT_LENGTH 4 // (mm) Initial retract.
#define FILAMENT_CHANGE_UNLOAD_LENGTH 420 // (mm) The length of filament for a complete unload.
#define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 8 // (mm/s) Load filament feedrate. This can be pretty fast.
#define PAUSE_PARK_NOZZLE_TIMEOUT 120 // (seconds) Time limit before the nozzle is turned off for safety.
#define FILAMENT_CHANGE_ALERT_BEEPS 6 // Number of alert beeps to play when a response is needed.
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
#define NO_WORKSPACE_OFFSETS
Excepto las líneas que activan el PLR, las demás son las que trae el archivo pre configurado para la CR-10 que no hemos podido usar por la razón ya comentada.
Para la función PLR habrá que comprobar si funcionan esos parámetros: el pin 17 para la detección del corte de corriente y el estado del pin en alto (HIGH). Si no funciona el PLR habrá que cambiarlos.
Hechos estos ajustes, ya podemos compilar y subir el firmware a la impresora.
Lo primero, como siempre, configurar el IDE para comunicarse con la placa: En el menú Herramientas, seleccionamos ahora como Placa: Sanguino, como Procesador: ATMega1284 or ATMega1284P (16 MHz), como puerto el que se haya creado al conectar la impresora y como Programador: USBasp.
Pulsamos la flecha para compilar y subir el firmware. Una vez subido, la impresora se reiniciará e indicará en pantalla la nueva versión de Marlin instalada.
Por lo que he visto por ahí, puede que aún haya en la función PLR algunos “bugs” no corregidos. Si es así, habrá que estar atentos para descargar de nuevo Marlin cuando estén corregidos.
Por último, decir que la Ender 3, que usa la misma placa que la CR-10, no tiene los mismos problemas de ocupación de memoria y pueden utilizarse los archivos pre configurados que vienen para ella, modificando únicamente el idioma (en su caso) y las líneas para la activación del PLR.