reprap:anet:anet_mainboard_overclocking

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
reprap:anet:anet_mainboard_overclocking [2018/01/04 03:42] gmarsh23reprap:anet:anet_mainboard_overclocking [2018/01/04 05:45] – [Marlin changes] gmarsh23
Line 1: Line 1:
 ===== Anet Motherboard Overclocking ===== ===== Anet Motherboard Overclocking =====
  
-This page is a work in progress: I'm unfamiliar with the formatting syntax used on here, and I'm preparing this article over the span of a few days with the bit of free time I have availablePlease be patient :)+HEADS UP: This page is very much draft, and it's definitely not easy to follow at this point.
  
 +Also, my experience developing for Atmel AVR parts is done using AVR-GCC and/or Atmel Studio, and I haven't really picked up the proper 'Arduino way' of doing things. There's probably much more easy/elegant methods of doing the bootloader installation than I've explained here.
 +
 +This is a wiki, so feel free to expand on this article or make changes as you see fit.
 +
 +Thanks!
 ==== Table of Contents ==== ==== Table of Contents ====
  
-  * Why overclock? +  * Introduction 
-  * Is this reliable/safe? +    * Why overclock? 
-  Requirements +    * Is this reliable/safe? 
-  * Crystal selection +    Tools required 
-  Directions +  * Crystal selection and replacement 
-    * Crystal replacement +    Choosing a new crystal 
-    * Bootloader installation +    * Replacing the crystal 
-    * Marlin firmware changes+  * Updating bootloader  
 +    * Downloading and compiling Optiboot 
 +    * Backing up and flashing new software 
 +  * Marlin firmware changes
       * platformio.ini       * platformio.ini
       * macros.h       * macros.h
       * pins_ANET_10.h       * pins_ANET_10.h
       * speed_lookuptable.h       * speed_lookuptable.h
-    * Compile and install new firmware +  * Compile and install new Marlin firmware 
-  * Potential issues+ 
 +==== Introduction ====
  
 === Why overclock? === === Why overclock? ===
Line 36: Line 45:
 As far as safety goes, 3D printers by nature aren't safe, especially cheap printers like the A8. There's a chance your printer could malfunction and cause damage or injury, and doing this modification does not make the printer any safer. If the processor running on the printer crashes outright, Marlin uses the watchdog timer in the processor and should reboot. But it's possible that silent corruption of the processor's state could occur, and Marlin does not have any safeguards against this. **I can therefore make no guarantees of safety, and I'm not responsible for any bad consequences if your printer does something it shouldn't.** As far as safety goes, 3D printers by nature aren't safe, especially cheap printers like the A8. There's a chance your printer could malfunction and cause damage or injury, and doing this modification does not make the printer any safer. If the processor running on the printer crashes outright, Marlin uses the watchdog timer in the processor and should reboot. But it's possible that silent corruption of the processor's state could occur, and Marlin does not have any safeguards against this. **I can therefore make no guarantees of safety, and I'm not responsible for any bad consequences if your printer does something it shouldn't.**
  
-==== Tools required ====+=== Tools required ===
  
 To change the crystal, you will need soldering iron, solder (lead or lead free is fine), solder wick, and a suitable place to work. Desoldering HC49S packages is a pain in the ass, having two irons or a hot air rework station greatly helps with getting the old crystal off. To change the crystal, you will need soldering iron, solder (lead or lead free is fine), solder wick, and a suitable place to work. Desoldering HC49S packages is a pain in the ass, having two irons or a hot air rework station greatly helps with getting the old crystal off.
Line 42: Line 51:
 Having a power supply to power the control board outside of the printer during reflashing greatly helps, this lets you make sure that everything works before you reassemble your printer. The Anet board will run from a 9V to 15V supply. Having a power supply to power the control board outside of the printer during reflashing greatly helps, this lets you make sure that everything works before you reassemble your printer. The Anet board will run from a 9V to 15V supply.
  
-Doing this modification requires updating the bootloader on the ATMega1284P chip, so you'll need an ISP capable programmer to do this. There are number of possibilities - buying a cheap "USB ISB" or "USBasp" programmer, using a spare Arduino board, etc. There are lots of instructions online describing how to reflash a new bootloader on a bricked Arduino board. Google around, the process for updating the bootloader is the same.+Doing this modification requires updating the bootloader on the ATMega1284P chip, so you'll need an ISP capable programmer to do this. I suggest getting a USB ISP programmer which is supported by the "avrdude" application.
  
-==== Crystal selection ====+==== Crystal selection and replacement ==== 
 + 
 +=== Choosing a new crystal ===
  
 The Anet V1.0 board requires a "HC-49S" surface mount crystal. Choose one with an 18 to 22pF load capacitance, as this best matches the load capacitance provided on the Anet board. The Anet V1.0 board requires a "HC-49S" surface mount crystal. Choose one with an 18 to 22pF load capacitance, as this best matches the load capacitance provided on the Anet board.
Line 57: Line 68:
 | 27MHz | +68.8% | +35% | May be unstable.\\ significant baud rate error (see below)\\ Can be salvaged from video equipment (DVD players, etc) | | 27MHz | +68.8% | +35% | May be unstable.\\ significant baud rate error (see below)\\ Can be salvaged from video equipment (DVD players, etc) |
  
-If you're using the USB interface of the printer, using Octoprint for example, the crystal you choose affects how accurate the baud rate of the Mega1284P's UART will be at a given baud rate. For reliability reasons this should not exceed +-5%; lesser is desirable. If you're only printing from the SD card, this isn't an issue.+If you're using the USB interface of the printer, using Octoprint for example, the crystal you choose affects how accurate the baud rate of the Mega1284P's UART will be at a given baud rate. For reliability reasons this should not exceed +-5%; ideally this value is less than +-2.5%. If you only printing from the SD card, this isn't an issue.
  
 ^ MHz (below), baud (right) ^ 115200 ^ 230400 ^ 250000 ^ 460800 ^ 500000 ^ 921600 ^ 1000000 ^ 1500000 ^ ^ MHz (below), baud (right) ^ 115200 ^ 230400 ^ 250000 ^ 460800 ^ 500000 ^ 921600 ^ 1000000 ^ 1500000 ^
Line 72: Line 83:
   * Actual baud rate and desired baud rate should be +-5%, preferably +-2.5%   * Actual baud rate and desired baud rate should be +-5%, preferably +-2.5%
  
-==== Directions =====+=== Replacing the crystal ===
  
-=== Compile Optiboot ===+Before replacing the crystal, I'd suggest doing the first step in "Backing up existing firmware" below. This proves that your ISP tools work - if for some reason you can't get it to work, you can just put the card back in your printer and try again later. 
 + 
 +Unplug your printer, disconnect all wiring, and remove the motherboard from your printer. 
 + 
 +Desolder the existing crystal. Hot air and a pair of tweezers makes this very easy, as does using two soldering irons. But if you have just one iron, the best method is to apply two large blobs of solder to the joints at each end of the crystal, and move your iron back and forth between the two sides to try to get both sides simultaneously melted, very gently pulling up on the crystal when you do this. Eventually it will come loose, or you'll be able to get one end lifted up enough to clean under it with solder wick. 
 + 
 +Clean up the crystal footprint pads on the PCB with solder wick, and apply a thin layer of fresh solder. Install the new crystal and solder both ends. 
 + 
 +==== Updating the bootloader ==== 
 + 
 +Once the crystal is changed, put the control board back in your printer and connect ONLY the power input to the board; leave everything else disconnected for now. Connect your ISP programmer to the board. 
 + 
 +=== Downloading and compiling Optiboot ===
  
 You'll need to download and compile Optiboot first. More information can be found on the Optiboot github page: https://github.com/Optiboot/optiboot/wiki/CompilingOptiboot You'll need to download and compile Optiboot first. More information can be found on the Optiboot github page: https://github.com/Optiboot/optiboot/wiki/CompilingOptiboot
Line 84: Line 107:
 Save the .hex file for later. Save the .hex file for later.
  
-=== Marlin Firmware changes ===+=== Backing up existing firmware === 
 + 
 +Use AVRDUDE: 
 + 
 +  avrdude -p atmega1284p -c <your programmer> -U flash:r:anet10_backup.hex:hex -U eeprom:r:anet10_backup.eep:hex 
 + 
 +=== Flashing new firmware === 
 + 
 +Use AVRDUDE: 
 + 
 +  avrdude -p atmega1284p -c <your programer> -U flash:w:optiboot_new.hex 
 + 
 +Once the board is programmed, connect the board to your PC via its USB connection, and attempt to "ping" the new bootloader with the following avrdude command. Change "COM1" to the serial port corresponding to the printer on your computer. 
 + 
 +  avrdude -c arduino -p m1284p -P COM1 -b 57600 -v 
 + 
 +If everything goes well, you should see a screen that looks like this, indicating that the bootloader is up and running. 
 + 
 +  avrdude: AVR device initialized and ready to accept instructions 
 +   
 +  Reading | ################################################## | 100% 0.01s 
 +   
 +  avrdude: Device signature = 0x1e9705 
 +  avrdude: safemode: lfuse reads as 0 
 +  avrdude: safemode: hfuse reads as 0 
 +  avrdude: safemode: efuse reads as 0 
 +   
 +  avrdude: safemode: lfuse reads as 0 
 +  avrdude: safemode: hfuse reads as 0 
 +  avrdude: safemode: efuse reads as 0 
 +  avrdude: safemode: Fuses OK (E:00, H:00, L:00) 
 +   
 +  avrdude done.  Thank you. 
 + 
 +==== Marlin changes ===
 + 
 +A number of files in Marlin have to be modified for operation at frequencies other than 16 or 20MHz. This is in addition to the changes to the Configuration.h and Configuration_adv.h files. 
 + 
 +=== platformio.ini === 
 + 
 +Find the following section of this file: 
 + 
 +  [env:anet10] 
 +  platform = atmelavr 
 +  framework = arduino 
 +  board = sanguino_atmega1284p 
 +  build_flags = ${common.build_flags} 
 +  upload_speed = 57600 
 +  lib_deps = ${common.lib_deps} 
 + 
 +Immediately after this section, add the following line. This tells the compiler what the new CPU frequency is. If you're using a crystal other than 24MHz, change the "24000000" value to the new crystal frequency in Hz. Don't forget the "L"
 +   
 +  board_f_cpu = 24000000L 
 + 
 +=== Marlin/macros.h === 
 + 
 +Find the following section: 
 + 
 +  #define DELAY_3_NOP DELAY_1_NOP; DELAY_2_NOP 
 +  #define DELAY_4_NOP DELAY_1_NOP; DELAY_3_NOP 
 +  #define DELAY_5_NOP DELAY_1_NOP; DELAY_4_NOP 
 + 
 +Immediately after these lines, add the following: 
 + 
 +  #define DELAY_6_NOP DELAY_1_NOP; DELAY_5_NOP 
 +  #define DELAY_7_NOP DELAY_1_NOP; DELAY_6_NOP 
 +  #define DELAY_8_NOP DELAY_1_NOP; DELAY_7_NOP 
 +  #define DELAY_9_NOP DELAY_1_NOP; DELAY_8_NOP 
 + 
 +Lastly, find the following section: 
 + 
 +  #if CYCLES_PER_MICROSECOND == 16 
 +    #define DELAY_1US DELAY_10_NOP; DELAY_5_NOP; DELAY_1_NOP 
 +  #else 
 +    #define DELAY_1US DELAY_20_NOP 
 +  #endif 
 + 
 +Add the two middle lines shown, with the values altered to correspond to the crystal frequency you've chosen. Here is the setting for 24MHz - Note that "DELAY_20_NOP" and "DELAY_4_NOP" add up to 24. 
 + 
 +  #if CYCLES_PER_MICROSECOND == 16 
 +    #define DELAY_1US DELAY_10_NOP; DELAY_5_NOP; DELAY_1_NOP 
 +  #elif CYCLES_PER_MICROSECOND == 24 
 +    #define DELAY_1US DELAY_20_NOP; DELAY_4_NOP 
 +  #else 
 +    #define DELAY_1US DELAY_20_NOP 
 +  #endif 
 + 
 +=== Marlin/pins_ANET_10.h === 
 + 
 +If you're using the stock A8 display, you can ignore this section. If you're using the full graphics display from the A6, this is required or else the display on the printer will be garbled. 
 + 
 +Find the following three lines, these control how fast data is written to the LCD: 
 + 
 +  #define ST7920_DELAY_1 DELAY_0_NOP 
 +  #define ST7920_DELAY_2 DELAY_1_NOP 
 +  #define ST7920_DELAY_3 DELAY_2_NOP 
 + 
 +Change them to the following values for 24MHz operation. If your display becomes glitchy or garbled, try adding 1 to the ST7920_DELAY_2 and ST7920_DELAY_3 settings. 
 + 
 +  #define ST7920_DELAY_1 DELAY_1_NOP 
 +  #define ST7920_DELAY_2 DELAY_3_NOP 
 +  #define ST7920_DELAY_3 DELAY_7_NOP 
 + 
 +=== Marlin/speed_lookuptable.h === 
 + 
 +Marlin only comes with two lookup tables provided in this file, for operation at 16MHz and 20MHz. For other clock frequencies, a new stepper speed lookup table has to be added. 
 + 
 +Here is a replacement for the file which has the 24MHz table added: https://pastebin.com/KchhubLN
  
-A number of files have to be modifiedThese are:+To generate a table for a different frequency, Marlin provides a Python script in the buildroot/share/scripts which can be used to generate a new tableFor example, to generate a table for 25MHz operation, use the following:
  
 +  #> python createSpeedLookupTable.py --cpu-freq 25 > new_table.h
  
 +If you're using a crystal frequency which isn't a multiple of 1MHz, you'll need to edit the script to remove the "* 1000000" line, and call the script with --cpu-freq <hz> instead.
 +==== Compiling and installing new firmware ====
  
 +There are many guides online describing how to compile and install Marlin on an Anet A8. Find one and link it here :)
  • reprap/anet/anet_mainboard_overclocking.txt
  • Last modified: 2018/12/02 02:27
  • by 127.0.0.1