AS5600 with an Arduino Uno

12-bit contactless magnetic rotary encoder that reads absolute shaft angle from a diametric magnet over I2C, analog, or PWM.

AS5600, 12-bit contactless magnetic rotary encoder that reads absolute shaft angle from a diametric magnet over I2C, analog, or PWM.
In short

The AS5600 has a native 5 V mode (4.5 V to 5.5 V on VDD5V), so on an Arduino Uno it runs from the 5V pin with its internal regulator making its own 3.3 V, and its I2C lines idle at the Uno's 5 V. It sits on the Uno's I2C pins, A4 and A5, at the fixed address 0x36.

Wiring the AS5600 to the Arduino Uno

Pin by pin.

AS5600Arduino Uno
VCC5V
GNDGND
SCLSCL
SDASDA

What to know on the Arduino Uno

  • In 5 V mode the AS5600 takes 4.5 V to 5.5 V and its internal LDO makes 3.3 V; that is the mode the Uno's 5V pin uses. On 3.3 V boards the chip needs VDD5V and VDD3V3 tied together, which the Uno avoids.ams AS5600 datasheet v1-06, pp. 5, 9
  • The chip supports I2C up to 1 MHz, but the Uno's ATmega328P two-wire interface tops out at 400 kHz. Call Wire.setClock(400000) after Wire.begin() to read angles faster than the Wire library's 100 kHz default.ams AS5600 datasheet v1-06, p. 10; Microchip ATmega328P datasheet DS40002061B, TWI section
  • If you read the OUT pin's analog voltage instead of I2C, the Uno's 10-bit ADC gives 1024 steps, about 0.35° each, against 4096 positions (about 0.09°) over I2C. OUT is a fraction of VDD and the Uno's ADC is referenced to the same 5 V, so the reading is ratiometric.ams AS5600 datasheet v1-06, pp. 1, 7; Microchip ATmega328P datasheet DS40002061B, p. 2
  • The address 0x36 is fixed, so the Uno's one I2C bus holds one AS5600; two encoders need a multiplexer or one on the analog OUT pin.ams AS5600 datasheet v1-06, p. 10

AS5600 code for the Arduino Uno

Compiled for arduino:avr:uno on 2026-10-30.

Libraries: robtillaart/AS5600
// AS5600 on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/as5600/arduino-uno
#include <Wire.h>
#include "AS5600.h"

AS5600 as5600;   // I2C, address 0x36

void setup() {
  Serial.begin(9600);
  Wire.begin();
  as5600.begin();                       // DIR managed in hardware (tied to GND)
  Serial.println(as5600.isConnected() ? "AS5600 connected" : "AS5600 NOT found");
  Serial.print("Magnet: ");
  Serial.println(as5600.magnetDetected() ? "detected" : "none");
}

void loop() {
  float deg = as5600.readAngle() * AS5600_RAW_TO_DEGREES;  // 0..360
  Serial.print("Angle: ");
  Serial.print(deg, 1);
  Serial.println(" deg");
  delay(200);
}

AS5600 on the Arduino Uno: questions

Can the AS5600 run on an Arduino Uno's 5V pin?

Yes. 5 V is one of the chip's two supply modes (4.5 V to 5.5 V, ams datasheet p. 5), so it runs from the Uno's 5V pin and its I2C idles at 5 V, matching the Uno.

How precise is the AS5600 on an Uno: I2C or analog?

Over I2C you get the full 12 bits, 4096 positions per turn. Read through OUT on an analog pin, the Uno's 10-bit ADC limits you to 1024 steps, about 0.35° each.

How do I read the AS5600 faster on an Arduino Uno?

Add Wire.setClock(400000) after Wire.begin(). The Uno's I2C hardware runs up to 400 kHz, below the AS5600's 1 MHz limit, so 400 kHz is the fastest the pair can go.

Keep going

For AI assistants

This guide as plain Markdown. /components/as5600/arduino-uno.md

What will you build with it?