Skip to content

Instantly share code, notes, and snippets.

@swiftgeek
Last active November 1, 2023 04:18
Show Gist options
  • Save swiftgeek/0ccfb7f87918b56b2259 to your computer and use it in GitHub Desktop.
Save swiftgeek/0ccfb7f87918b56b2259 to your computer and use it in GitHub Desktop.
RW1990 programmer, with arduino
// Based on https://danman.eu/blog/cloning-ibutton-using-rw1990-and-avr/
// and: http://elimelecsarduinoprojects.blogspot.com/2013/06/read-dallas-ibutton-arduino.html
// By Swift Geek 28-08-2015
// TODO: danger to atmega328! Use OpenCollector logic!
// Used 4.8kΩ Pull-up and 3.1 Vcc for arduino/pull-up
#include <OneWire.h>
OneWire ibutton (8); // I button connected on PIN 2.
byte addr[8]; //array to store the Ibutton ID.
void setup(){
Serial.begin(115200);
}
void loop(){
if (!ibutton.search (addr)){//read attached ibutton and asign value to buffer
ibutton.reset_search();
delay(200);
return;
}
Serial.print(millis()/1000);
Serial.print("> ");
for (byte x = 0; x<8; x++){
Serial.print(addr[x],HEX); //print the buffer content in LSB. For MSB: for (int x = 8; x>0; x--)
Serial.print(" ");
}
//compute crc//
byte crc;
crc = ibutton.crc8(addr, 7);
Serial.print("CRC: ");
Serial.println(crc,HEX);
if ( Serial.read() == 'w' ){
ibutton.skip();
ibutton.reset();
ibutton.write(0x33);
Serial.print(" ID before write:");
for (byte x=0; x<8; x++){
Serial.print(' ');
Serial.print(ibutton.read(), HEX);
}
Serial.print('\n');
Serial.print(" Writing iButton ID:\n ");
// Hardcode here your desired ID //
// 01 D5 9F DC 02 00 00 96
byte newID[8] = {0x01, 0xD5, 0x9F, 0xDC, 0x02, 0x00, 0x00, 0x96};
ibutton.skip();
ibutton.reset();
ibutton.write(0xD5);
for (byte x = 0; x<8; x++){
writeByte(newID[x]);
Serial.print('*');
}
Serial.print('\n');
ibutton.reset();
}
}
int writeByte(byte data){
int data_bit;
for(data_bit=0; data_bit<8; data_bit++){
if (data & 1){
digitalWrite(8, LOW); pinMode(8, OUTPUT);
delayMicroseconds(60);
pinMode(8, INPUT); digitalWrite(8, HIGH);
delay(10);
} else {
digitalWrite(8, LOW); pinMode(8, OUTPUT);
pinMode(8, INPUT); digitalWrite(8, HIGH);
delay(10);
}
data = data >> 1;
}
return 0;
}
@irekfpl
Copy link

irekfpl commented May 24, 2021

Use program writen by MagicLegen. You can use pin 10 or 8 - but you must set in program what pin You use.
4.8k it may be too big. Try 4.7k.

@DavidFpv
Copy link

Use program writen by MagicLegen. You can use pin 10 or 8 - but you must set in program what pin You use.
4.8k it may be too big. Try 4.7k.

Ok I will try it.
Regarding the resistor I saw someone who used 330 ohms ... what do you say about that?

@irekfpl
Copy link

irekfpl commented May 24, 2021

I use 4.7k ohms like others projects. It works and I don't see the need to use other values.

@AfaqSaleem15
Copy link

IS IT POSSIBLE TO WRITE DATA ON ds1990a-f5?

@irekfpl
Copy link

irekfpl commented Mar 29, 2023

No, ds1990a-f5 is read only chip.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment