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.

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.
| AS5600 | Arduino Uno |
|---|---|
| VCC | 5V |
| GND | GND |
| SCL | SCL |
| SDA | SDA |
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.
// 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
This guide as plain Markdown. /components/as5600/arduino-uno.md