diff --git a/as5013-test/nrf52-as5013/nrf52-as5013.ino b/as5013-test/nrf52-as5013/nrf52-as5013.ino
new file mode 100644
index 0000000000000000000000000000000000000000..1b7424a9c2cf5c4c76df1144718d62165c29b76e
--- /dev/null
+++ b/as5013-test/nrf52-as5013/nrf52-as5013.ino
@@ -0,0 +1,94 @@
+//read raw values from as5013 hall effect array ic
+//sec, 2017
+
+//as5013 registers
+#define ctrl_reg 0x0F
+#define T_ctrl_reg 0x2D
+#define c_raw_values_start 0x16 //starting address for raw sensor values
+#define n_tx_bytes 1 //only need transmit the start read address
+#define n_rx_bytes 20 //20 values pos_low, pos_high, neg_low, neg_high for each of c1, c2, c3, c4, c5
+
+#define scl_pin 0 //XL1
+#define sda_pin 1 //XL2
+#define rst_pin 3 //A1
+
+static uint8_t txdata[n_tx_bytes] = {0};
+static uint8_t rxdata[n_rx_bytes] = {0};
+
+//raw sensor values
+volatile int16_t c1,c2,c3,c4,c5;
+
+void twi_tx(){
+  // triggering the STARTTX task
+  NRF_TWIM0->TASKS_STARTTX = 1;
+  while( !(NRF_TWIM0->EVENTS_STOPPED) ){}
+}
+void twi_rx(){
+  // triggering the STARTRX task
+  NRF_TWIM0->TASKS_STARTRX = 1;
+  while( !(NRF_TWIM0->EVENTS_STOPPED) ){}
+}
+
+void setup() {
+  Serial.begin(115200);
+
+  //Need to switch to internal LFCLK to disconnect from XL1 and XL2
+  NRF_CLOCK->LFCLKSRC = 0; //disconnect XL1 AND XL2 FROM LFCLK?
+  NRF_CLOCK->EVENTS_LFCLKSTARTED = 0;
+  NRF_CLOCK->TASKS_LFCLKSTART    = 1;
+  while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0){}
+
+  NRF_TWIM0->ENABLE = (TWI_ENABLE_ENABLE_Disabled << TWI_ENABLE_ENABLE_Pos) & TWI_ENABLE_ENABLE_Msk;
+  NRF_GPIO->PIN_CNF[scl_pin] = (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) & GPIO_PIN_CNF_DRIVE_Msk;
+  NRF_GPIO->PIN_CNF[sda_pin] = (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) & GPIO_PIN_CNF_DRIVE_Msk;
+  NRF_GPIO->DIRCLR = (1<<scl_pin)|(1<<sda_pin); //set SDA/SCL as inputs (likely not necessary)
+  
+  NRF_GPIO->DIRSET = (1<<rst_pin); //set AS5013 nRESET pin as output
+  NRF_GPIO->OUTCLR = (1<<rst_pin); //hardware reset
+  delay(1);
+  NRF_GPIO->OUTSET = (1<<rst_pin); //turn on as5013
+  delay(1);
+
+  NRF_TWIM0->PSEL.SCL = ((scl_pin << TWIM_PSEL_SCL_PIN_Pos) & TWIM_PSEL_SCL_PIN_Msk)
+                      | ((TWIM_PSEL_SCL_CONNECT_Connected << TWIM_PSEL_SCL_CONNECT_Pos) & TWIM_PSEL_SCL_CONNECT_Msk);
+  NRF_TWIM0->PSEL.SDA = ((sda_pin << TWIM_PSEL_SDA_PIN_Pos) & TWIM_PSEL_SDA_PIN_Msk)
+                      | ((TWIM_PSEL_SDA_CONNECT_Connected << TWIM_PSEL_SDA_CONNECT_Pos) & TWIM_PSEL_SDA_CONNECT_Msk);
+  NRF_TWIM0->FREQUENCY = (TWI_FREQUENCY_FREQUENCY_K100 << TWI_FREQUENCY_FREQUENCY_Pos) & TWI_FREQUENCY_FREQUENCY_Msk;
+  NRF_TWIM0->ADDRESS = (0x41 << TWI_ADDRESS_ADDRESS_Pos) & TWI_ADDRESS_ADDRESS_Msk;
+  NRF_TWIM0->TXD.PTR = (uint32_t)(&txdata);
+  NRF_TWIM0->RXD.PTR = (uint32_t)(&rxdata);
+  NRF_TWIM0->TXD.MAXCNT = (n_tx_bytes << TWIM_TXD_MAXCNT_MAXCNT_Pos) & TWIM_TXD_MAXCNT_MAXCNT_Msk;
+  NRF_TWIM0->RXD.MAXCNT = (n_rx_bytes << TWIM_RXD_MAXCNT_MAXCNT_Pos) & TWIM_RXD_MAXCNT_MAXCNT_Msk;
+  //set up short between LASTTX and STOP and between LASTRX and STOP
+  NRF_TWIM0->SHORTS = ((TWIM_SHORTS_LASTTX_STOP_Enabled << TWIM_SHORTS_LASTTX_STOP_Pos) & TWIM_SHORTS_LASTTX_STOP_Msk)
+                    | ((TWIM_SHORTS_LASTRX_STOP_Enabled << TWIM_SHORTS_LASTRX_STOP_Pos) & TWIM_SHORTS_LASTRX_STOP_Msk);
+  //NRF_TWIM0->ENABLE = (TWI_ENABLE_ENABLE_Enabled << TWI_ENABLE_ENABLE_Pos) & TWI_ENABLE_ENABLE_Msk;
+  //There's a typo in nrf52_bitfields, so we set this manually.
+  NRF_TWIM0->ENABLE = (6 << TWI_ENABLE_ENABLE_Pos) & TWI_ENABLE_ENABLE_Msk;
+  
+  while(1){
+    //Serial.println("start txing");
+    txdata[0] = c_raw_values_start; //set up to read from address
+    twi_tx();
+    //Serial.println("done txing");
+    //Serial.println("start rxing");
+    twi_rx();
+    //Serial.println("done rxing");
+    
+    c1 = (((int16_t)rxdata[2])<<8 + (int16_t)rxdata[3]) - (((int16_t)rxdata[0])<<8 + (int16_t)rxdata[1]);
+    c2 = (((int16_t)rxdata[6])<<8 + (int16_t)rxdata[7]) - (((int16_t)rxdata[4])<<8 + (int16_t)rxdata[5]);
+    c3 = (((int16_t)rxdata[10])<<8 + (int16_t)rxdata[11]) - (((int16_t)rxdata[8])<<8 + (int16_t)rxdata[9]);
+    c4 = (((int16_t)rxdata[14])<<8 + (int16_t)rxdata[15]) - (((int16_t)rxdata[12])<<8 + (int16_t)rxdata[13]);
+    c5 = (((int16_t)rxdata[18])<<8 + (int16_t)rxdata[19]) - (((int16_t)rxdata[16])<<8 + (int16_t)rxdata[17]);
+    Serial.println("Raw sensor values");
+    Serial.println(c1);
+    Serial.println(c2);
+    Serial.println(c3);
+    Serial.println(c4);
+    Serial.println(c5);
+  }
+  delay(100);
+}
+
+
+void loop() {}