Ciao a tutti ragazzi ,
Premetto che sono un neofita di arduino e mi sto impegnando a cercare di far funzionare il mio ArduinoUno come lettore/scrittore di un ibutton ds1990a ...
ad oggi sono riuscito a leggere solamente il seriale ( ID ) del mio ibutton (collegando al pin 8 il + del ibutton con una resistenza da 2,2K) con uno sketch che ho recuperato su questo forum ...
Però il mio intento è quello di leggere tutto il contenuto del Ibutton , copiarlo, e riscriverlo su di un'altro Ibutton .
Mi aiutate please ?
Grazie!
Posto lo sketch che mi fa leggere ID del iButton :
#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;
}
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di farla al più presto.
Faccio riferimento alla tua presentazione, ed in particolare a questa frase:
... per evitare problemi e discussioni future, ti prego di leggere con molta attenzione il REGOLAMENTO ed in particolare il punto 15 (con tutti i suoi sottopunti) ed il punto 17.1 Grazie.
Ciao, grazie soprattutto per questo Tuo ultimo messaggio, non sono uno sprovveduto e l'impianto elettrico di casa mia, lho fatto io..... Vorrei solo sbizzarrirsi un po' con alcune idee che ho.
Saluti
... come avrai letto nel REGOLAMENTONON ci interessa se ci pone domande è o meno qualificato, è la maggior parte dei lettori che non lo sono, per cui ... NON si parla di cose che operino oltre la bassissima tensione.
... buona la seconda ... come vedi molto pochi conoscono di cosa stai parlando ... come ti chiede Maurotec occorrono più informazioni, link al datasheet del prodotto, ecc. ecc. altrimenti ... la gente legge e va oltre.
Ciao ragazzi,
Non vorrei sbagliarmi ma da come ho capito questo modello di iButton, cioè il ds1990a, ha all'interno più informazioni oltre al ID...
Su questo link c'è uno ragazzo che spiega un po' il tutto... Io vorrei il codice da utilizzare per leggere e scrivere....
DS1992/DS1993: (di cui parla l'articolo citato) ha anche memoria scrivibile non volatile
... tu quale hai ESATTAMENTE ? ? ?
Guglielmo
P.S.: ... e devi anche imparare a cercare e studiare bene i datasheet ... da cui avresti visto le caratteristiche del prodotto che indichi. In elettronica tutto ciò è fondamentale.
Mah ... il datasheet è QUESTO ... dove dice che ha la stessa struttura del vecchio (obsoleto) DS2430A ...
... prova a guardare QUESTO esempio che è, appunto, per il DS2430A, ma che dovrebbe andare anche con il DS1971 ... se non va, mi sa che ti tocca studiare bene i datasheet e scrivere tu le routines per fare quello che vuoi.
Eccomi qui , sono riuscito grazie a questo sketch (che posterò qui sotto ) a leggere altre informazioni della mia key ...
Non riesco a capire se è tutto il contenuto della chiavetta oppure solo una parte ... e soprattutto come faccio a copiare questo e scriverlo su altro iButton ?
#include <OneWire.h>
OneWire ds(2); // OneWire bus on digital pin 2
void setup() {
Serial.begin (115200);
}
void loop() {
byte i; // This is for the for loops
boolean present; // device present var
byte data[32]; // container for the data from device
present = ds.reset(); // OneWire bus reset, always needed to start operation on the bus, returns a 1/true if there's a device present.
ds.skip(); // Skip ROM search
if (present == true){ // We only try to read the data if there's a device present
//Serial.println("DS1971 device present");
ds.write(0xF0,1); // Read data command, leave ghost power on
ds.write(0x00,1); // LSB starting address, leave ghost power on
ds.write(0x00,1); // MSB starting address, leave ghost power on
Serial.print("Data: "); // For the printout of the data
for ( i = 0; i < 32; i++) { // Now it's time to read the EEPROM data itself, each page is 32 bytes so we need 32 read commands
data[i] = ds.read(); // we store each read byte to a different position in the data array
Serial.print(data[i], HEX); // printout in ASCII
Serial.print(" "); // blank space
}
Serial.println();
delay(1000); // Delay so we don't saturate the serial output
}
else { // Nothing is connected in the bus
//Serial.println("Non connesso");
delay(1000);
}
}
Gli iButton sono di diversi modelli (c'è anche un datalogger di temperatura a perdere quando si scarica la batteria) ma credo che il protocollo sia uguale ai DS18B20.