All posts by smarc

Arduino / ATmega 328P fuse settings

Arduino / ATmega 328P fuse settings

Part of programming stand-alone ATmega chips is setting the fuse bytes, these are special settings that can be used to change how the ATmega chips operate.

Some of the things you can do by changing the value of the fuses include;

  • select different clock sources and change how fast the chip runs,
  • set the minimum voltage required before the chip works.
  • set whether or not a boot loader is used,
  • set how much memory is allocated to the boot loader,
  • disable reset.
  • disable serial programming
  • stop eeprom data being erased when uploading a new sketch.

There are many articles online but I could not find a single source that brought all the information together and fully explain what the fuses actually do.

It is important to remember that some of the fuse bits can be used to lock certain aspects of the chip and can potentially brick it (make it unusable). However, with a bit of care it is fairly straight forward to understand and use the fuse settings.

Disclaimer, I am relatively new to programming fuses and these are notes I wrote to help me remember things. The information is based on the data sheet for the ATmega chip, internet searches, and questions I asked on forums (especially the Arduino forum).

 

There are 3 bytes in total:

  • low byte fuse,
  • high byte fuse,
  • extended fuse

There is also a forth byte that is used to program the lock bits. Lock bits are not covered by this article.

Each byte is 8 bits and each bit is a separate setting or flag. When we talk about setting/not setting, programmed/not programmed fuses we are actually using binary. 1 means not set/not programmed and a 0 (zero) means set/programmed.

When programming the fuses you can use binary notation or more commonly hexadecimal notation. For 8 bits (1 byte) we can use B11111111 or 0xFF. Both are the same value.

Note: For all fuses, a value of 1 means not set and a value of 0(zero) means set.

 

ATmega 328P 28 PDIP diagram

ATmega 328P pin layout

 

 

Low Byte Fuses

The low byte fuse deals with the clock source, how fast the chip will run, and how long it waits at startup.

LowByteFuse

The ATmega chips can be run at different speeds or frequencies and the frequency is determined by the clock source that is used. The clock source is set by using the CKSEL fuse bits.

 CKSEL (Clock Sources / Clock Selection)

The clock signal can come from an internal oscillator, an external crystal/resonator, or an external signal. Arduinos normally use an external 16MHz crystal.

crystal
Here is a 16 MHz crystal used on a bread board Arduino connected to XTAL1 and XTAL2. The ATmega chip has to be told to use the external crystal and this is done by setting the CKSEL bits. A common mistake is to have the crystal correctly connected in the circuit but forget to tell the chip to use it.

The different options for CKSEL are:
CKSEL

Arduinos normally use a low power crystal oscillator.
The ATmega has 2 built in oscillators, a 128kHz RC oscillator and a calibrated RC oscillator.
The external clock option allows the chip to use an external square wave clock signal. This is used when you have a circuit with its own clock that you want to sync the ATmega with or if you want to use a separate clock chip. The external clock signal needs to be connected to the CLOCK-IN pin

 Crystal Oscillator Options

crystalOptions
CKSEL3=1 CKSEL2=1 CKSEL1=1 CKSEL0=1 selects a crystal any where from 8MHz to 16MHz and is the normal setting for Arduinos.
If you want to use a slower crystal, for example 6MHz, then you would use CKSEL3=1 CKSEL2=1 CKSEL1=0 CKSEL0=1 (the 3.0 to 8.0 range).

To use the internal RC oscillator at 8MHz, the settings are CKSEL3=0 CKSEL2=0 CKSEL1=1 CKSEL0=0

SUT1/SUT0 (Start Up Time)

Crystals and oscillators require sufficient voltage to operate correctly. When you start the ATmega chip it can take a brief period of time for the voltage to get to its maximum value. While the voltage is rising the clock source may not be working at the correct speed or frequency. To allow the clock to stabilise a startup delay can be set.

CKSEL0 is used together with SUT1 and SUT0 to set the start up delay time.

SUT
BOD is Brown Out Detection and discussed later.

The Arduino uses the maximum startup delay of 14CK + 65ms (CKSEL0=1, SUT1=1, SUT0=1) which are also the default settings for new ATmega 328/328P chips.

CHDIV8 (Clock Divide)

ATmega 328/328P chips have a built in RC oscillator which has a 8.0MHz frequency. New chips are shipped with this set as the clock source and the CKDIV8 fuse active, resulting in a 1.0MHz system clock. The startup time is set to maximum and time-out period enabled. (CKSEL = “0010”, SUT = “10”, CKDIV8 = “0”). This setting is used so that all users can make their desired clock source setting using any available programming interface.

CKDIV8 should be used if the selected clock source has a higher frequency than the maximum frequency of the ATmega chip.

The ATmega chips can be used at very low voltages, however, the lower the voltage the slower they need to work at. The CHDIV8 can be used to set a slow clock speed to match a low voltage.

 CKOUT (Clock Out)

The clock signal can be routed to PB0. This is useful if you need the clock signal to drive other circuits. This works for all clock sources and the default setting for new chips is CKOUT=1 (not set).

 

High Byte Fuses

The high byte fuse has several different settings. The ones of normal interest (to me as a hobbyist at least) are the watchdog timer, preserving or erasing eeprom and the boot loader attribute settings.

HighByteFuse

RSTDISBL (External reset disable)

PC6 is a reset pin, hold it low (to ground) and the chip will reset. This is how the switch on the Arduino works. When you press the reset button it connects PC6 to ground and resets the chip.

PC6 can also be used as a regular IO pin but this means disabling the reset function which in turns means the chip can no longer be inline programmed (in line programming requires a reset). This is one of the options it is better not to change.

I imagine RSTDISBL is implemented for security reasons to stop the chip being reprogrammed or the firmware being downloaded.

When RSTDISBL is programmed the start up time (SUT1 SUT0) is increased to 14CK + 4.1ms to ensure the programming mode can be entered.

By default, the setting is RSTDISBL=1 (not set).

DWEN (debugWIRE enable)

ATmega chips have built in debugging tools which are by default turned off. The DWEN fuse is used to turn them on.

DWEN uses the same pin as reset (PC6) and when DWEN is enabled (and the lock bits are not set) the reset pin becomes a communication pin and normal reset no longer works. For example, if you enable DWEN on an Arduino the reset button no longer works.

To use the on-chip debugging you need a compatible programmer such as the AVR Dragon. Since I have never used AVR studio and do not have a suitable programmer I have never used and do not know how to use debugging. If you would like to know more then there is a good article at http://www.hilltop-cottage.info/blogs/adam/debugging-arduino-using-debugwire-atmel-studio-and-an-avr-dragon/ to get you started.

This is one of the fuses you should take care with. If you enable DWEN and also enable the lock bits you can no longer program the chip in the normal way.

If you are just starting then leave DWEN to not set. After all, reset is very useful.

SPIEN (Enable Serial programming and Data Downloading)

ATmega chips can be programmed using serial programming. Serial programming is used for on board programming using a serial protocol via an ISP (inline serial programmer) or UART (universal asynchronous receiver/transmitter).

The normal method of programming the ATmega chips is via the SPI interface using the SCK (clock), MOSI (input) and MISO (output) pins. If you disable serial programming then you can no longer use the SPI to program the chip. You can also disable serial programming using the lock bits.

For normal use and development leave SPIEN enabled, however, if you have a device that is final and no further programming is required then you can use this option to stop people accessing the chip through serial communication.

The default setting is SPIEN enabled, SPIEN=0.

The RSTDISBL, SPIEN and DWEN fuses have the potential to brick the ATmega chip, or at least make the chip very very difficult to use again. For general use, and especially if you are just starting out with programming stand-alone chips, you should not change these fuse settings. You should also double check that you are not changing them when you re-write the other fuse settings.

WDTON (Watchdog Timer Always On)

The watchdog is basically a timer that will cause the chip to reset if it does not receive an OK signal at specific times.

This can be useful when you have unstable code or have a system that must not be allowed to permanently lock up.

When the watchdog timer is enabled, should a sketch crash or freeze then the timer will time out and reset the chip causing a restart similar to pressing the reset button an a running Arduino.

The Watchdog Timer can be activated in software so the fuse settings doesn’t really need to be used. By default, the watchdog timer is off, WDTON=1.

There is a nice mini guide on the Watchdog timer by za_nic on the Arduino forum at ttp://forum.arduino.cc/index.php/topic,63651.0.html
Paul Martinsen has a guide on how to use the watchdog timer to detect lockups at http://www.megunolink.com/how-to-detect-lockups-using-the-arduino-watchdog/

EESAVE (Preserve EEPROM memory)

When the ATmega chip is programmed the memory is erased just before the new code is uploaded. Under normal circumstances the eeprom memory is erased as well as the program memory. The EESAVE fuse can be used to tell the chip not to erase the eeprom. This is useful when you want to upgrade code but keep user settings that are stored in eeprom.

The default value is EESAVE=1, not set and eeprom memory is erased during the chip erase cycle when programming.

I have got into the habit of setting this fuse; eeprom has a limited life cycle so the less you write to it the better. Erasing the eeprom has no effect on uploading new code and the majority of my projects don’t use the eeprom memory so not erasing it is not a problem. The dropController stores settings and drop times in eeprom and so I set EESAVE to preserve the data when I upload new versions of the code.

BOOTSZ1 & BOOTSZ0 (Boot loader Size)

The ATmega chips have the ability to use a boot loader, this is a small program that runs when the chip is first started or when it is reset. Boot loaders are normally used to initialize the device and check for external communication. The Arduino uses a boot loader to talk to a connected computer to see if there is a new program to be uploaded. This is the reason the Arduino resets when you upload new code, the reset runs the boot loader, the boot loader checks to see if you have new code.

The boot loader is stored in program memory, the same memory used for the user application and since the boot loader can be different sizes you can tell the ATmega chip how much space to reserve. The regular (older) Arduino boot loader is 2 kilobytes (KB) but the newer Optiboot (used on the UNO) is only 0.5KB (512 bytes). If using Optiboot and setting the boot loader size accordingly you gain an extra 1.5KB for your own program. 1.5KB can be a lot of space, running out of program space is why I started programming stand alone ATmega chips in the first place. The code for the dropController became too large for the regular Arduino so I removed the boot loader.

ProgMem
The boot loader is stored at the top of the program memory

If you have a boot loader then BOOTSZ has to be used in conjunction with BOOTRST. BOOTRST tells the ATmega chip the memory address where the boot loader starts. If BOOTRST is not set then the user application can use the whole of the memory regardless of the BOOTSZ settings.

Boot Size Configuration for the 328/328P

BootSize

Note that the above sizes are in words (a word is 2 bytes) and 256 words is 512 bytes.
The default for new chips is BOOTSZ1=0 BOOTSZ0=0 which means they have 4KB reserved for a boot loader.

BOOTRST Select reset vector

ATmega chips can use a boot loader, this is a small program that runs when the chip is reset. If you have a boot loader then you need to inform the MCU and this is done by using the BOOTRST fuse setting. When the BOOTRST Fuse is set, on reset the device will jump to the Boot Loader address. If not set, the chip will jump to the program start address at 0x0000.

The default value is BOOTRST = 1 (not set).

If BOOTRST is not set (no boot loader) then the BOOTSZ fuses are ignored.

 

 

Extended Fuse Bits

 The extended fuses are only used to set the brown-out detection level (BOD).

The ATmega chips can become unstable or unreliable when used with insufficient voltage. For example, the 328/328P can run safely at 16MHz if it has at least 4V. Anything below 4V means the chip is likely to misbehave. This would be a problem if the device were being used with sensors to take measurements or relied on accurate timings.

To ensure the chip has sufficient input voltage a minimum voltage level can be set. If the voltage falls below this level then the chip will reset itself. This is called the brown-out detector level. Basically, if the supplied voltage is below the BOD the chip keeps reset low.

Extended

BOD
The default values for new chips are; BODLEVEL2=1 (not set), BODLEVEL1=1 (not set), BODLEVEL0=1 (not set).

 

Default Fuse Settings

New ATmega 328P Chip.

New 328/328P chips generally have the following fuse settings:

Low fuse = 0x62 (B01100010)
High fuse = 0xD9 (B11011001)
Extended fuse = 0xFF (B11111111)

ATmega328P_DefaultFuseSettings_01

 

Arduino Duemilanove or Nano w/ ATmega328 Default Fuse Settings

Low fuse = 0xFF (B11111111)
High fuse = 0xDA (B11011110)
Extended fuse = 0x05 (B00000101)
defaultFuse02

 Optiboot Boot Loader

If you load the Optiboot boot loader then the high byte fuse should be set as 0xDE (B11011110). The only difference is the space allocated to the boot loader.

optibootFuse(Corrected)

For a comprehensive list of the default fuse settings for the various Arduinos have a look at Coding with Cody’s Arduino Default Fuse Settings page.

 

Lock Bits

Lock bits can be used to restrict read/write access to the program memory. The boot section and the application section have their own lock bits and access for each area can be controlled separately.

You can brick the ATmega chip if you enable the lock bits and you should not change them.

I will try to cover lock bits in more detail in a later post.

 

 

Actually Programming The Fuses

To program stand-alone ATmega chips I used an Arduino Nano as programmer, see  Arduino Nano as an ISP Programmer and found the easiest way to set the fuses was to burn a boot loader (the fuses are set as part of the process). The boot loader can then be written over later when you upload a sketch. By editing the boards.txt file in the Arduino installation folder you can use any values you desire for the fuses.

Here is the entry I added to boards.txt for use with bread board Arduinos. This has the low byte fuse at 0xFF, the hight byte fuse at 0xDF, the extended fuse at 0x05, and uses the Optiboot boot loader. The values for the lock bits were copied from the Arduino Uno entry.


atmegasa16.name=ATmega328P Stand Alone (Arduino as ISP)
atmegasa16.upload.protocol=stk500
atmegasa16.upload.maximum_size=32768
atmegasa16.upload.speed=115200
atmegasa16.upload.using=arduino:arduinoisp
atmegasa16.bootloader.low_fuses=0xff
atmegasa16.bootloader.high_fuses=0xdf
atmegasa16.bootloader.extended_fuses=0x05
atmegasa16.bootloader.path=optiboot
atmegasa16.bootloader.file=optiboot_atmega328.hex
atmegasa16.bootloader.unlock_bits=0x3F
atmegasa16.bootloader.lock_bits=0x0F
atmegasa16.build.mcu=atmega328p
atmegasa16.build.f_cpu=16000000L
atmegasa16.build.core=arduino
atmegasa16.build.variant=arduino:standard

 

 Useful links

Nick Gammon’s site has a lot of really good information about building your own Arduino and uploading boot loaders:
How to make an Arduino-compatible minimal board (similar to mine).
Solving problems with uploading programs to your Arduino
ATmega bootloader programmer.

My own Arduino on a breadboard explains how to set up a stand-alone ATmega chip and Using an Arduino Nano to program a ATmega328P chip  explains how to use an Arduino as an ISP programmer.

The ATmega 328P data sheet can be down loaded from the Microchip website.

http://eleccelerator.com and http://www.engbedded.com both have a fuse calculator where you select what options you want and the page gives you the fuse settings to use. I prefer not to use the calculators as I think it may be easy to make mistakes but this is my personal opinion only.

NIck Gammon also has a useful sketch that detects ATmega chip types. The sketch can be found at http://www.gammon.com.au/forum/?id=11633. The sketch displays the fuse settings, the lock bits and gives information about the boot loader if one is present. I found this sketch very useful when I first started programming chips directly.

Source: Arduino / ATmega 328P fuse settings – Martyn Currey

Thunderbird Customization

Thunderbird Customization

This is a beginner-to-beginner post.  I can’t emphasize that enough. What I mean is I’m no expert, I’ve just put together this based on my learnings so far.  

After many years of bouncing around email clients, I found myself quite dissatisfied with the options.  I actually kind of liked the Mail app in Windows, it was basic but worked pretty good. When MS switched over to New Outlook, I hated it due to built in advertising.  I tried a ton of new email clients like eMclient, Bluemail etc. but they all had issues on things that I didn’t like. I settled on Thunderbird (TB) just before v.115 was launched (current version 128).

I used TB in the 2000s but forgot why I dropped it. But coming back to it was pretty good right out of the box using three gmail accounts and an outlook account. Mostly through Reddit I started compiling code to customize the UI and some behaviors. So little by little, I learned how to tweak TB to make it look better to me now:

Note just about every color you see can be changed easily if you prefer. This is just one example.

Key changes I made:

  • Rearranged menus, with drop down and window controls above the search bar
  • Filled the search bar (Unified bar) with shortcuts to make it more useful
  • Custom colored the menu, search bar, folder pane, message list etc.
  • Made sort order so new emails on top, not bottom.
  • Ditched threaded view
  • Ditched “hover” highlights when the cursor went over folders or emails
  • Added detailed message colors for Unread, Read and New emails
  • Fixed the New Message button and other buttons
  • Got rid of the many colored lines that occur when emails are forwarded or responded to.
  • Set up inboxes as favorites to avoid using unified folders
  • Used alternate TB buttons and icons
  • Changed the UI base font
  • Other small changes

This guide is intended to walk you through the basics of setting up TB from original state to something like above, where you can also change colors and other settings to suit your own needs.  Some changes are through Settings, but some are through “CSS”.  CSS (cascading style sheets) is a way of using text-based coding to make changes.  It basically is a new file you add to your profile that overrides settings in the program. I’m no expert but I now know how to set it up, and it isn’t hard.

A few words of warning…this was how I did it on a Windows computer. I imagine it works the same on iOS or Linux, but I have no experience with either of those.

You’ll note I use Vertical View – Folder pane, then Message pane (in card view) then the email window. I don’t know if those are the right names are not. If you want table view of message list, or vertical view…go ahead, I don’t know how much of what follows works with that set up.

Before you start, if you follow some of these changes but don’t see the effect right away, make sure you close and restart TB as many only work after a restart.

 

Before starting on CSS changes, there are several settings you can make:

Where’s the drop down menu?

  • Right click in the empty space beside the long search bar and select Menu Bar. It’ll appear below the search bar – we’ll fix that later.  Also, menu bar and search bar are the color of  windows accent colors but that can be customized as well later.

Hide the Spaces toolbar:

  • Use View>Toolbars and choose Spaces to hide it.  Or use the left pointing arrow at the bottom of it.  Or keep it if you like it, but I chose to put similar buttons adjacent to the Search Bar so I don’t use the Spaces bar.

Sort Order:

Default is newest email on bottom of the list – I prefer newest on top.

  • Click on Tools> Settings.  Settings tab opens up.
  • Scroll to bottom of General Settings section and click on Config Editor
  • type into the search box:  mailnews.default_sort_type (or select it when you see it as you type)
  • make sure value is set to 18 by selecting the pencil icon, change value, click check mark to save it.
  • type into the search box:  mailnews.default_sort_order (or select it when you see it as you type)
  • Value default is 1 (ascending), change to 2 (descending) by selecting the pencil icon, change value, click check mark to save it.

NOTE:  with this change all messages will now be in descending order unless you previously clicked on the folders before making the change.  If you clicked on them before changing the order, those folders will not be affected by the global change.  You have to manually change them by selecting them, then View>Sort By> Descending.

Threaded/Unthreaded.  Default is threaded – I prefer unthreaded.  To change permanently:

  • View > Sort by > Unthreaded, then
  • Go to Config Editor (see above under Sort Order)
  • Type in mailnews.default_view_flags and change the value to 0.  Click the check mark and restart TB.
  • You may need to go back to View>Sort by>Unthreaded but it should stick.

Group By.  I like seeing the emails grouped by the date sorts:  Today, Yesterday, Last 7 Days, Last 14 days, Older.:

  • View>Sort by>Group by Sort.  But the problem is, it doesn’t stay that way so now you have to
  • View>Threads> Expand all Threads.

Add-ons   Tools > AddOn and Themes > Extensions then use search bar for these – some worth exploring:

  • Old Icons (I like these the best and use them)
  • Phoenity Buttons
  • Phoenity Icons

Unified and or Favorite folders:

For multiple accounts and using unified folders:

  • Click the 3 dots to the right of the New Message box in the folder pane, then Folder Mode.
  • Choose both Unified Folders and Favorite Folders.
  • Right click on an Inbox and choose Favorite, then click on the 3 vertical dots by Favorite Folders and move up or down as you want.
  • Then down the list in the folders pane you should see a Unified folder structure that has a Unified Inbox. (I keep this off as I’m not a fan of unified inboxes – I have all account Inboxes set a favorites).

Unified Toolbar

I customized it with buttons.  To do that, right click in a blank space on it and choose customize.  You’ll see I used Mail, Address Book, Calendar, Tasks, Add Ons and Themes on the left side, and Tag, Reply, Reply All, Forward, Print, Next Previous, Delete on the right side.  Do what works for you.

I also hid the side vertical Spaces menu.  Now that the Unified toolbar has the items from the Spaces toolbar, you can hide it by unchecking View>Toolbars>Spaces

 

CSS Editing:

Customizing TB through css is quite fun and you can get quite creative. But first you have to enable it as its not ready by default (officially it’s not supported by TB and new program coding can break the following codes at any time):

Enabling css: 

  • go to TB menu Tools > Settings > General
  • scroll all the way down and click the ‘Config editor’ button on the right
  • search for: toolkit.legacyUserProfileCustomizations.stylesheets
  • click the double arrow on the right to toggle the value to ‘true’

Next, locate and open your profile folder:

  • Menu:  Help > Troubleshooting Information
  • Under Application Basics, click on the Open Folder button next to “Profile folder”. You should now see your profile folder being opened in your file manager.

Next, create the folder and its files:

  • Inside your profile folder, create a new folder named chrome (all lower case) – the chrome folder should end up in a folder that includes stuff like prefs.js and places.sqlite.
  • Inside the chrome folder, create two new text files (i.e. new Notepad text files) by right clicking and select “new text file”
  • Name one userChrome.css and userContent.css (case sensitive)

Note: In Windows, you might want to disable the “Hide extensions for known file types” setting in Explorer. Once that’s done, simply create a new text file (Right click ➝ New ➝ Text Document), then make sure to replace the .txt file-extension with .css.

You should now have two empty files called: userChrome.css; userContent.css

You are now ready to enter css code into the userChrome.css file and make changes:

Note:  the code parts below are the parts written in Courier Font. Make sure you copy all the parts as there can be a “}” symbol on its own on the last line.

Working with Colors

You’ll see a lot of code includes hex color codes (e.g. #174a70 or just words like white, black, gainsboro).  If you are not familiar with codes, see this page: https://htmlcolorcodes.com Note that as you select colors, it gives you the # and then a six number/letter code that comes after the # symbol (e.g. #174a70 is a shade of blue used in Windows).

I also find a picker app for windows helpful. This one is good:  https://colorpicker.fr

Its minimal, but the eyedropper lets you select specific colors you might already be using that you want to make the same.

So if you want to change color, just replace the six character code but make sure you keep the # symbol.  You can also replace the numbers in front of the “px” code to change sizing.

 

 

CSS Codes:

The first section takes the unified tool bar which has menu items etc. and puts it above the search bar.  You can change the color code and replace “white” with a color code or name.  Changing px values changes heights etc. The maximize, minimize and close controls are moved to the top right corner. You can also change the height and color of the unified search/tool bar:

/*******Move tool bar above unified bar*******/
toolbar#toolbar-menubar {
  Order:            -1 !important;
  background-color: #6D859C !important;  /* Color of menu bar */
  color:            white   !important;  /* Color of the text - if needed */
  padding-top:      0px     !important;
  padding-bottom:   0px     !important;
  margin:           0px     !important;
}

/***** Move window controls up to the menu bar ******/
.titlebar-buttonbox-container { position: fixed;
  top: 0px; 
  right: 0px; 
  height: 19px !important;
  color:            white   !important; 
/******** adjust if necessary **********/ }

/******Adjust and color unified toolbar******/
#unifiedToolbar {
  height:  60px  !important;
  padding-block:   1px  !important;
  margin-block:    0px  !important;
  background:  #6D859C  !important;
  color: white  !important;
}

I’m not a fan of  changing colors when you mouse over a folder. This codes makes the hover transparent.  You can replace “transparent” with a hex color code if you want a hover color:

/*****Make the hover color transparent******/
*|*:root {
--listbox-hover: transparent !important;
}
.container:hover { background-color: transparent !important;
}
tr[is="thread-row"]:hover {
background-color: transparent !important;
}

This next part changes background color on the left side folder list, changes New Message button color and border, and changes the font family used for the UI:

/*******Background color on folder list******/
#folderPane,
#folderPaneHeaderBar { background-color: #E4E4E6 !important; }
 
/******Fix the new message button*******/
#folderPaneWriteMessage { background-color: #6D859C !important; border: 2px solid white !important; color: white !important; }
 
/*******Change universal fonts *******/
*{ font-family: Arial}

This sets background and font color for selected folder:

/*******Color selected items*******/
li.selected > .container {
color: black !important;
background-color: #6D859C !important;

This changes selected email background colors. Is overridden if using Detailed Colors section below. Last part sets the background color of card view:

[is="tree-view-table-body"] > .selected {
color: black !important;
background-color: #6D859C !important;
}
 
.tree-table,
.card-container {
background-color: #f0f0f0 !important;
}

This next group of three items changes card view from three lines to two lines.  You won’t need this if you prefer 3 line card view or use table view, but I think two-line card view is a nice blend of the two standard views:

/*******Make card view 2 lines*******/ 
[is="thread-card"] {
height: 60px !important;
}
 
.thread-card-row:first-child {
grid-area: sender;
}
 
.thread-card-column:nth-child(2) {
grid-template-columns: 1fr auto;
grid-template-areas:
"sender sender"
"subject icons";
}

This section allows you to set your message background or message text in the message list to match the color of any tags you are using. Use one or the other if you want but not both as your text and background would be the same.

.card-container {
    background-color: var(--tag-color) !important;
}

OR:

.card-container {
    color: var(--tag-color) !important;
}

This next section is what I call the “Detailed Colors” section is super detailed.  It gives you total control on colors of emails depending if they are New, Unread or Read. You can change colors of text, the button if it has one, backgrounds, borders etc. The way it works is it first gives a long list of parameters you can change based on email status. E.g. – for Unread messages you can change colors and fonts for when they are default, hover over them, select them, select it and others etc. Same for Read messages, same for New messages – tons of control but a lot to go through. Following setting the conditions, they cade near the bottom applies those conditions so only make changes up to the point where it says “/*table*/”:

/*******Detailed Colors*******/
:root {
  
  /* Specify colors for unread messages */
  
  /*default*/
  --text: #174a70;
  --button-0: #174a70;
  --bg: #f4f4f5;
  --border: #ffffff;
  
  /*hover*/
  --text-hover: #174a70;
  --button-hover-0: #174a70;
  --bg-hover: #f4f4f5;
  --border-hover: #ffffff;
  
  /*selected*/
  --text-select: #174a70;
  --button-select-0: #174a70;
  --bg-select: #f4f4f5;
  --border-select: #ffffff;

  /*current*/
  --text-current: #174a70;
  --button-current-0: #174a70;
  --bg-current: #f4f4f5;
  --border-current: #ffffff;
  
  /*current and selected*/
  --text-current-selected: #174a70;
  --button-current-selected-0: #174a70;
  --bg-current-selected: #f4f4f5;
  --border-current-selected: #ffffff;
  
  /*selected-indicator*/
  --indicator-bg: #174a70;
  --indicator-bd: #174a70;
  
  /* Specify colors for new messages */
  /*default*/
  --new-text: #174a70;
  --new-button-0: #ba0006;
  --new-bg: #f4f4f5;
  --new-border: #ffffff;

  /*hover*/
  --new-text-hover: #174a70;
  --new-button-hover-0: #ba0006;
  --new-bg-hover: #f4f4f5;
  --new-border-hover: #ffffff;

  /*selected*/
  --new-text-select: #174a70;
  --new-button-select-0: #ba0006;
  --new-bg-select: #f4f4f5;
  --new-border-select: #ffffff;

  /*current*/
  --new-text-current: #174a70;
  --new-button-current-0: #ba0006;
  --new-bg-current: #f4f4f5;
  --new-border-current: #ffffff;

  /*current and selected*/
  --new-text-current-selected: #174a70;
  --new-button-current-selected-0: #ba0006;
  --new-bg-current-selected: #f4f4f5;
  --new-border-current-selected: #ffffff;

  /*selected-indicator*/
  --new-indicator-bg: #174a70;
  --new-indicator-bd: #174a70;
  
  /* Specify colors for read messages */
  
  /*default*/
  --read-text: #000000;
  --read-button-0: transparent;
  --read-bg: #ffffff;
  --read-border: transparent;
  
  /*hover*/
  --read-text-hover: #000000;
  --read-button-hover-0: transparent;
  --read-bg-hover: #ffffff;
  --read-border-hover: #ffffff;
  
  /*selected*/
  --read-text-select: #174a70;
  --read-button-select-0: tranparent;
  --read-bg-select: #e6e6e6;
  --read-border-select: #e6e6e6;
  
  /*current*/
  --read-text-current: #fa36f7;
  --read-bg-current: #fa36f7;
  --read-button-current-0: transparent;
  --read-border-current: #e6e6e6;
  
  /*current and selected*/
  --read-text-current-selected: #174a70;
  --read-button-current-selected-0: transparent;
  --read-bg-current-selected: #e6e6e6;
  --read-border-current-selected: #e6e6e6;
  
  /*selected-indicator*/
  --read-indicator-bg: #174a70;
  --read-indicator-bd: #174a70;
  
}

/*Table*/

/*unread*/
#threadTree tbody [data-properties~="unread"] {
  
  /*Default*/
  font-weight: Bold !important;
  color: var(--text) !important; /* Text color */
  background-color: var(--bg) !important; /* Background color */
  outline: 0px solid var(--border) !important; /* Border color */

  .tree-view-row-unread > .tree-button-unread > img {
    fill: var(--button-0) !important;
    stroke: var(--button-0) !important; /* button color */
  }

  /*hover*/
  &:hover {
    color: var(--text-hover) !important;      /* Text color */
      background-color: var(--bg-hover) !important;      /* Background color */
      outline: 0px solid var(--border-hover) !important;      /* Border color */
    
      .tree-view-row-unread > .tree-button-unread > img {
        fill: var(--button-hover-0) !important;
        stroke: var(--button-hover-0) !important;        /* button color */
      }
  }
  
  /*selected*/
  &.selected {
    color: var(--text-select) !important;    /* Text color */
    background-color: var(--bg-select) !important;    /* Background color */
    outline: 1px solid var(--border-select) !important;    /* Border color */

    .tree-view-row-unread > .tree-button-unread > img {
      fill: var(--button-select-0) !important;
      stroke: var(--button-select-0) !important;      /* button color */
    }
  }
  
  /*current*/
  &.current {
    color: var(--text-current) !important;    /* Text color */
    background-color: var(--bg-current) !important;    /* Background color */
    outline: 1px solid var(--border-current) !important;    /* Border color */

    .tree-view-row-unread > .tree-button-unread > img {
      fill: var(--button-current-0) !important;
      stroke: var(--button-current-0) !important;      /* button color */
    }
    
    /*selected*/
    &.selected {
      color: var(--text-current-selected) !important;    /* Text color */
      background-color: var(--bg-current-selected) !important;    /* Background color */
      outline: 1px solid var(--border-current-selected) !important;    /* Border color */

      .tree-view-row-unread > .tree-button-unread > img {
        fill: var(--button-current-selected-0) !important;
        stroke: var(--button-current-selected-0) !important;      /* button color */
      }
    }
    
  }
}

/*read*/ #threadTree tbody [data-properties ~="read"] {

  /*Default*/
 
  color: var(--read-text) !important;  /* Text color */
  background-color: var(--read-bg) !important;  /* Background color */
  outline: 0px solid var(--read-border) !important;  /* Border color */


  /*hover*/
  &:hover {
    color: var(--read-text-hover) !important;    /* Text color */
    background-color: var(--read-bg-hover) !important;    /* Background color */
    outline: 0px solid var(--read-border-hover) !important;    /* Border color */


  }

  /*selected*/
  &.selected {
    color: var(--read-text-select) !important;    /* Text color */
    background-color: var(--read-bg-select) !important;    /* Background color */
    outline: 1px solid var(--read-border-select) !important;    /* Border color */
    
  }
  
  /*current*/
  &.current {
    color: var(--read-text-current) !important;    /* Text color */
    background-color: var(--read-bg-current) !important;    /* Background color */
    outline: 1px solid var(--read-border-current) !important;    /* Border color */
    
    /*selected*/
    &.selected {
      color: var(--read-text-current-selected) !important;      /* Text color */
      background-color: var(--read-bg-current-selected) !important;      /* Background color */
      outline: 1px solid var(--read-border-current-selected) !important;      /* Border color */
      
    }
    
  }
}

This changes background color when tabs open, changes selected tab colors and backgrounds. Mine match my background of folder list:

/*******Fix tabs***********/
#tabmail-arrowscrollbox { background-color: #E4E4E6 !important; }
 
.tab-line[selected=true] { background-color:transparent !important; }
 
:root { --tabs-toolbar-background-color: #E4E4E6 !important; }

For new event and task buttons, this changes the button colors:

/******Fix New Event and New Task buttons***********/
#sidePanelNewEvent { background-color: #E4E4E6 !important; border: 1px solid white !important; color: white !important; }
 
#sidePanelNewTask { background-color: #E4E4E6 !important; border: 1px solid white !important; color: white !important; }

 

Hint:  You can keep a copy of the userChrome.css file in the same folder and call it userChrome.old or .bak or something – in case you screw up your .css file, you can go back to the last version that worked.

 

Fixing the multiple lines in forwarded/replied emails:

When emails go back and forth through reply/reply/all/forward, TB adds colored vertical lines to the previous parts.  After a few back and forth’s and the email chain can have a lot of these. I like them gone.

This fix is done using the userContent.css file that was created when you enabled css.  This file should be alongside you userChrome.css file.

Open userContent.css and add the following:

blockquote[type=cite] {
   padding-bottom: 0 !important;
   padding-top: 0 !important;
   padding-left: 0 !important;
   border-left: none !important;
   border-right: none !important;
}

@-moz-document url-prefix("about:addressbook") {
#booksPaneCreateContact {background-color: #435468 !important; border: 1px solid white !important; color: white !important;
}

That’s it – have fun.

Source: Thunderbird Customization

Laser Engraver Mirror Alignment: How to Align a CO2 Laser – OMTech

Laser Engraver Mirror Alignment: How to Align a CO2 Laser Beam

OMTech LaserUpdated on Oct. 28, 2025

The most intimidating task for many new CO2 laser engraver owners is laser beam mirror alignment. Learning how to align the laser mirrors that direct the laser beam from the laser tube to the laser focusing lens and the workpiece is not always easy. However, you don’t need to fear the task, as this guide will walk you through how to align a CO₂ laser beam step by step while also pointing out some potential issues you might run into.

After you review the OMTech manualprepare your workspace, and set up your laser machine, you will need to check your laser beam path alignment. Laser engraver mirror alignment is not as hard as you might think. Plus, once you get your CO₂ laser beam alignment correct, your laser machine will be engraving and cutting at peak performance, and you should rarely have to align your laser mirrors in the future.

The Basics: Laser Mirrors and the Laser Beam Path

Before we get into laser mirror alignment, we need to understand how a laser engraving machine works. While the picture below does not show your exact laser machine, it illustrates how the laser beam bounces off the laser mirrors.

co2 laser engraver laser mirrors laser beam path

The laser machine works by generating a laser beam from a CO2 laser tube located at the rear of the machine. This laser beam exits the tube and hits mirror 1 (located near the output of the laser tube in the rear of the laser machine). Mirror 1 bounces the beam at roughly 90 degrees toward the front of the machine.

Here, the laser beam hits mirror 2. Note that mirror two is mounted to a gantry and therefore can move forwards and backward in the machine but cannot move left or right. Mirror 2 also bounces the beam at roughly 90 degrees but bounces it toward the right side of the machine.

laser focusing lens laser engraver focus lens laser focal lens

At this point, the laser beam hits mirror 3. Note that mirror three is mounted to the laser head assembly, which is also on a gantry. That means this mirror can move left, right, forward, and backward. Mirror 3 bounces the laser beam at roughly 90 degrees down into the laser head, where it passes through a laser focusing lens (or focal lens), exits the laser head nozzle, and hits the workpiece.

All of these moving parts create the need for periodic adjustment. As your CO₂ laser engraves various projects, the laser mirrors can shift and move slightly over time. Each OMTech laser is aligned at the factory according to strict Quality Assurance practices, but the machine is typically jostled and shifted in its crate throughout the shipping process, which sometimes affects the laser beam alignment. Before you begin using your new OMTech for laser cutting and engraving, you’ll want to check to ensure your CO₂ laser mirror alignment is acceptable, and adjust the laser mirrors if necessary.

Accuracy vs. Precision

Next, before we go through how to align laser engraver mirrors, we need to understand the difference between accuracy and precision. Here are simple definitions of the two terms:

  1. accuracy: the quality or state of being correct; hitting the intended target
  2. precision: the quality, condition, or fact of being exact; the ability to repeatedly produce the same result

A somewhat famous way to visualize accuracy and precision is in a bullseye target:

accuracy vs precision

To summarize the difference:

  1. Accuracy is hitting the intended target (think bullseye). For the case of laser engraver mirror alignment, accuracy means hitting the dead center of the mirror.
  2. Precision is repeating the same thing multiple times (the dot is in the same spot over and over again). For the case of laser engraver mirror alignment, precision means hitting the same spot on the mirror regardless of where the gantry or laser head is located within the laser machine.

For mirrors 1 and 2, precision (the dot hitting the same place on the mirror every time) is much more important than accuracy (the dot hitting the center of the mirror).  This is true because the dot hitting the same place shows that the laser beam is parallel to the axis in the direction it is traveling. However, for mirror three, we need both precision and accuracy, as the laser beam must travel through the focusing lens and laser head nozzle.

How to Align CO2 Laser Mirrors

This CO₂ Laser Engraver Mirror Alignment Guide is intended to complement the instructions in section 5 of the OMTech Manual. See ‘Laser Path Alignment.’

How to Align CO₂ Laser Beam

Now that we have a basic understanding of what we are trying to align and what purpose it serves, we can move on to the actual instructions: how to align a CO₂ laser beam. Most laser engravers use the pulse-tape method to align laser mirrors (OMTech recommends using blue painter’s tape). By this method of laser beam alignment, you will place tape over the mirror guide holes and pulse the laser beam to determine where it hits each mirror (by observing burn marks on the tape). When necessary, you can make minor adjustments to the laser beam mirror alignment by turning the set screws that control the laser mirrors’ position.

The laser beam from the laser tube to mirror one rarely requires adjustment.  Because the laser tube itself and the mirror one mount are stationary, there is no movement between them when the machine is operating. In a future step (aligning the laser beam from mirror 2 to mirror 3), you may have to adjust the laser tube up or down, but for now, we start by verifying that the laser tube is pulsing to mirror 1.

NOTE:  If your laser machine came with the laser tube installed, there is a good chance that your laser mirrors are already aligned and may not require any adjustment. Before loosening any nuts or adjusting any mirrors, first do the pulse test outlined below to see if an adjustment is necessary.

Warning: Be sure to wear proper eye protection when aligning the laser mirrors.  Never bypass the machine’s safety features or operate the laser with the lid or access panels open.

Step 1: Optimize Your Pulse Setting

Pulse Settings: In your controller, you want to change the pulse setting to a power level that provides a good consistent pulse but without using too much power that could catch the tape on fire. To do this, follow these steps:

1. On your controller, open the menu by pressing the “menu” button.

change maxpower minpower setting ruida controller

2. Move the highlighted area to the “MaxPower” setting and press “Enter”. Change the MaxPower to the appropriate power level. I suggest starting around 5% and then increasing 1% at a time until the pulse produces a mark on the tape.

3. Press “Enter” to save the changes.

4. Move the highlighted area to the “MinPower” setting and change it to match the MaxPower setting.

5. Ensure your water cooling system is on and running before performing any pulses.

6. It is helpful to have a friend push the pulse button while you monitor where the pulse hits the tape each time.

LASER FIRE HAZARD: Before pulsing, ensure you have the proper fire protection in place. If you pulse with too much power, the tape can catch fire.

Step 2: CO₂ Laser Tube Alignment: How to Align the Laser Tube

Laser Tube to Mirror 1 Pulse Test: Laser tube alignment is necessary to ensure that the laser tube is pulsing correctly and hitting mirror 1.

1. Place a small piece of tape over the guide hole on mirror 1.

how to align the laser tube

2. Press the pulse button on the controller. NOTE: The longer you hold the pulse button, the longer the laser tube beam will stay on. You want to push the pulse button just long enough to produce a pulse but should not hold the button down. The controller should beep each time the pulse button is pushed.

3. Inspect the tape to ensure a mark was made when the pulse happened and that the mark is within the circle of the guide hole. The tape’s pulse mark indicates where the laser beam would hit mirror 1. It should look something like this:

co2 laser pulse tape laser beam mirror alignment

If there is no mark on the tape, it is most likely due to the pulse power being too low or pushing the pulse button too quickly.  

  • Try adjusting the min and max power by increasing 1% and then pulsing again. NOTE: Each laser tube has a minimum power at which it will fire. Our 60W tube won’t fire below around 8% power while our 130W tube won’t fire below around 12% power.
  • Repeat as necessary until the tape shows a laser beam mark.

If the burn mark on the tape is too large or the tape burned:

  • Double up or triple up the tape (put one piece of tape on top of another piece of tape) to keep it from burning through.
  • Try a different type of tape. If your laser came with the white roll of tape, this is a good alternative.
  • Try adjusting the min and max power, decreasing by 1%, and then pulsing again.

If the pulse dot was not within the guide hole, or it is near the edge of the guide hole circle, you will need to adjust the laser tube mounts to move the pulse dot within the guide hole and repeat the process.

4. Loosen the laser tube mounting brackets. Then, reposition the tube and pulse until it points to the center of laser mirror 1

REMEMBER: The dot does NOT need to be perfectly centered on the guide hole (accuracy); it just needs to be near the center of the guide hole, and each pulse should hit the same spot (precision).

Step 3: Align the First Laser Mirror

Mirror 1 to Mirror 2 Alignment: Remember that our goal is to get the laser beam parallel to our y-axis (the axis that runs from front to back of the machine).

1. Place a small piece of tape over the guide hole on mirror 2.

co2 laser pulse tape beam alignment laser mirror 1

2. From the controller home screen, press the up arrow to jog the gantry all the way to the back of the machine. This will move mirror 2 closest to mirror 1:

laser beam mirror alignment

3. Press the pulse button on the controller.

4. Inspect the tape for a pulse mark. If there is no mark on the tape, it is most likely that mirror 1 is bouncing the laser beyond the tape area. To check for this, use a larger piece of tape in front of mirror two’s guide hole and pulse the laser to see where it hits. If the tape still doesn’t mark, you can attach a larger cardboard or cardstock paper to the mirror’s guide hole. Then move on to adjusting the mirrors below.

large tape for laser pulse laser beam alignment

5. Once you have a pulse mark on the tape, note its location and then move the gantry to the front by jogging it (using the down arrow key on your controller).

how to align co2 laser engraver mirror alignment

6. Have a friend person push the pulse button while you watch where the laser beam pulse hits the tape.

Near Alignment VS. Far Alignment: If you are lucky and the 2nd pulse hits the same spot as the first pulse, you can move on to “Mirror 2 to Mirror 3 Alignment” below.

If the 2nd pulse did not hit the same spot as the 1st pulse, do not fret. You will need to loosen the nut(s) on the appropriate screws on mirror 1 and adjust the screws in order to move mirror 1 until the laser beam hits the same spot on the tape. See the following image for which screw to turn and which direction to turn it.

REMEMBER: We are not worried about the dots hitting dead-center on the mirror (accuracy); instead, we want the two dots to hit the exact same spot when the gantry is moved (precision).

How to Adjust a Laser Mirror

Do not use the diagonal mirror screw adjustment unless the left/right or up/down screw can no longer adjust the dot in the correct direction.If you do end up using the diagonal screw adjustment, you can use it in combination with another screw to move the dot in a straight direction line up/down or left/right.

1. You should make small adjustments to the screw before pulsing again and reviewing where the new pulse hits the tape. A good rule-of-thumb is no more than 1/8th turn before pulsing again to check. This is particularly true with laser machines that have a large engraving area as small-angle adjustments of the mirror cause the laser beam adjustment to become dramatic over longer distances.

how to adjust a laser mirror laser engraver mirror alignment

2. Once you have the 2nd location laser beam pulse on the same dot as the 1st laser beam pulse, you should now replace the tape with a new piece of tape and REPEAT the procedure.

IMPORTANT NOTE: You MUST repeat the procedure because adjusting the screws changes the 1st pulse location as well as the 2nd pulse location. Note that this may take many repeated cycles to get the alignment to the point where the 2nd pulse location matches the 1st pulse location without adjustment. This is normal, and while it may seem time consuming, it is worth getting this right to ensure your laser is operating at peak performance across the entire workbed.

3. Once the 2nd pulse hits the same location as the 1st pulse WITHOUT adjusting any screws, you can now carefully tighten the retaining nuts and move on to “Mirror 2 to Mirror 3 Alignment”.

IMPORTANT NOTE:  It is critical that the screws do NOT turn when tightening the retaining nuts. Hold the alignment screws in place while tightening the nuts to ensure they do not move.

4. Remove the tape from mirror two’s guide hole and dispose.

Step 4: Align the Second Laser Mirror

Mirror 2 to Mirror 3 Alignment: Our goal in this part is to get the laser beam from mirror 2 to mirror 3 to be parallel to the x-axis of the laser machine (the axis that is left and right in the machine).

1. Place a small piece of tape over the guide hole on mirror three on the laser head.

2. Move mirror 3 (the laser head) to the back left of the machine by jogging the gantry to the back left of the machine (press the up arrow and left arrow on the controller when on the home screen).

how to align laser mirror 2

3. Press the pulse button on the controller.

4. Inspect the tape to ensure a mark was made when the pulse happened.

If there is no mark on the tape, it is most likely that mirror 2 is bouncing the laser beyond the tape area.

To check for this, use a large piece of tape or cardboard in front of the mirror 3 guide hole and pulse the laser to see where it hits.  Then move on to adjusting the mirrors below.

Ensure you removed the tape from the mirror two guide hole.

5. Once you have a good mark on the tape, note its location and then move the gantry to the back right by jogging it (using the right arrow key on your controller).

aligning mirror 2 laser mirror alignment

6. Have a friend push the pulse button while watching where the laser beam pulse hits the tape.

If you are lucky and the 2nd pulse hits the same spot as the first pulse, you can move to step 7.

If the 2nd pulse did not hit the same spot as the 1st pulse, you will need to loosen the nut(s) on the appropriate screws of mirror 2 and adjust the screws to adjust mirror two until the laser beam hits the same spot on mirror 3. See the following image for which screw to turn and which direction to turn it. Remember to avoid using the diagonal screw unless absolutely necessary.

7. Once you have the 2nd location laser beam pulse on the same dot as the 1st laser beam pulse, you should now replace the tape with new tape and REPEAT the procedure.

IMPORTANT NOTE:  You MUST repeat the procedure because adjusting the screws changes the 1st pulse location and the 2nd pulse location.

8. Once the 2nd pulse hits the exact location as the 1st pulse WITHOUT adjusting any screws, you should replace the tape on the laser head with new tape and continue to the next step.

9. Move mirror 3 (the laser head) to the front left of the machine by jogging the gantry to the front left of the machine (press the down arrow and left arrow on the controller when on the home screen).

move laser head laser mirror for beam alignment

10. Press the pulse button on the controller.

11. Inspect the tape to ensure a mark was made when the pulse happened.

If there is no mark on the tape, it is most likely that mirror two is bouncing the laser beyond the tape area.

To check for this, use a large piece of tape or cardboard in front of the mirror three guide hole and pulse the laser to see where it hits.  Then move on to adjusting the mirrors below.

Ensure you removed the tape from the mirror 2 guide hole.

12. Once you have a good mark on the tape, note its location and then move the gantry to the front right by jogging it (using the right arrow key on your controller).

laser beam alignment tape on laser mirror guide hole

13. Have a friend push the pulse button while you watch where the laser beam pulse hits the tape.

Because we made the laser beam parallel to the y-axis in a previous step, the dot at the front right should hit the same spot as the dot from the front left.

If the 2nd pulse did not hit the same spot as the 1st pulse, there is a good chance your mirror alignment from mirror 1 to mirror 2 is not correct. Go back to that step and repeat it.

Another potential issue would be one of the gantries being out of square. While this is possible, it is not common. In these cases, it is best to contact OMTech for assistance.

14. For mirror 3, we need the dots to be both accurate (centered on the mirror) and precise (hitting the same spot on the mirror each time). To center the dots, follow this procedure:

a. Review your pulses and take the following actions if they are not centered on mirror 3.

  • To move the dot up or down, the entire laser tube should be raised or lowered. This is accomplished by loosening the cap screws in each mount and turning the thumbscrew. NOTE: Ensure that both mounts are raised or lowered by the same amount.
  • Tighten the cap screws in each mount and then perform the pulse and ensure the dot is centered vertically in the mirror 3 guide hole.
  • Repeat this process by moving the laser tube up or down until the dot is centered in the mirror 3 guide hole.

b. To move the dot left or right, the mirror 2 assembly mount must be moved forward or backward within the machine.

  • Loosen the 2 screws underneath the mirror 2 assembly just loose enough to where the mirror 2 assembly can be moved forward or backward. IMPORTANT NOTE: You need to try to keep the mirror 2 assembly square when moving it.
  • To move the dot to the right, the mirror two assembly must move forward (toward the front of the machine). To move the dot to the left, the mirror two assembly must move backward (toward the rear of the machine).
  • Tighten the screws and perform a pulse test to ensure the beam is now centered horizontally on the mirror three guide hole.

15. Once this process is completed, you need to repeat the process for “Mirror 2 to Mirror 3 Alignment” detailed above.

Step 5: Laser Alignment: The Third Laser Mirror

Mirror 3 to Bed Alignment: In this step, we ensure that mirror 3 is bouncing the laser beam through the center of the focusing lens and nozzle.

1. Start by ensuring the tape has been removed from all laser mirror guide holes.

2. Place a scrap piece of material (wood works best) under the laser head nozzle.

3. Adjust the bed height such that the laser head nozzle is nearly touching the scrap piece of material.

4. Perform a pulse by pressing the pulse button on the controller.

5. Ensure the pulse marked the material.

a. If a double pulse or crescent shaped mark appears, that means the laser beam is hitting the inside of the laser head nozzle before exiting.

In this case, adjust the screws on mirror three and pulse until a singular small dot is visible on the material.

b. If no mark is present, it’s possible that mirror 3 is very misaligned. Take the nozzle off and check the alignment — without the nozzle you have a larger area for the beam to reveal itself. Once you see the beam path without the nozzle you can center it as best you can before screwing the nozzle back on. After it’s centered without the nozzle, screw it back on, recheck your alignment, and fine tune it from there.

c. As a last resort, I suggest unscrewing all 3 screws until they no longer affect mirror three alignment and then repeating the pulse.

6. Move the bed at least 1 inch further away from the laser head nozzle.

7. Perform a pulse by pressing the pulse button on the controller.

If the 2nd pulse did not hit the same spot as the 1st pulse, you will need to loosen the nut(s) on the appropriate screws of mirror three and adjust the screws in order to adjust mirror three until the laser beam hits the same spot on the material. See the following image for which screw to turn and which direction to turn it.

REMEMBER: Avoid using the diagonal screw unless absolutely necessary.

8. Move the bed at least 1 inch further away from the laser head nozzle and repeat the pulse test and mirror three alignment.

9. If you adjusted any mirrors, you need to repeat this process until all three dots hit the same spot without adjusting any mirrors.

Source: Laser Engraver Mirror Alignment: How to Align a CO2 Laser – OMTech

How to block EXE files from running using Group Policy in Windows 11/10

How to block EXE files from running using Group Policy in Windows 11/10

Source: How to block EXE files from running using Group Policy in Windows 11/10

How to bulk Unblock multiple files downloaded from the Internet

How to Bulk Unblock multiple files downloaded from the Internet

Source: How to bulk Unblock multiple files downloaded from the Internet