Scarica Software Gratis
[ Ritorna al menų]

 


                                         

Attenzione..!! i programmi che seguono sono in codice sorgente..non eseguibili 

se non compilati..utilizzabili solo  per tracce sui procedimenti.. 

 

 

 Arduino e I-Button Eprom DS2505

Il software di seguito riportato riguarda la sola lettura del dispositivo sopra citato, serve unicamente per trarre spunti ad eventuali sviluppi.

   
//software elaborato da  fernando tagliaferro 06/02/2012
#include <OneWire.h> // inserisco le lib.dei Button

OneWire ds(10); // Utilizzo il pin 10 per la connessione

int led=52; // un led per vedere quando passa per il loop
byte i; // variabile del for-next
boolean presente;
byte data[16]; //app.dati memoria
byte addr[8]; //app.dati codice Seriale
int leggi=0;
int scrivi=0;
char ricevuto;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void setup() {
pinMode(led,OUTPUT); //identifico il pin 52 come uscita
Serial.begin(9600); // definisco la velocitā di trasmissione
digitalWrite(led,HIGH); // spengo il led alla partenza
               }


//generale***********************************************************************************************************
void loop() {
    Rx();
digitalWrite(led,LOW); //accendo il led
   delay(300);
digitalWrite(led,HIGH); // spengo il Led
  delay(300); // aspetto nartro mezzo secondo
if (leggi==1)     // aspetto che venga digitata la "A" per leggere la memoria - utilizzare il monitor di arduino per questo
  {leggi_button();}

}
//*********************************************************************
void leggi_button(){
ds.reset_search(); // resetto il registro del bus
ds.search(addr); // abilito la ricerca di dispositivi
ds.skip(); // utilizzo solo quello trovato, blocco la ricerca
presente=ds.reset(); // carico nella variabile "presente" lo stato della ricerca

if (presente==1) // se presente=1 ho il dispositivo collegato
{Serial.println("Dispostitivo Collegato...!! ");}
else
{Serial.println("Nessun Dispostitivo Collegato...!!"); // altrimenti stampo l'errore e ritorno al loop
return;}

if (addr[0]==11) // se il valore addr[0] č uguale a 0xB-(11) si tratta di un DS2505 e stampa il tipo
{Serial.print("Tipo di Button DS2505..codice=0x0");
Serial.println(addr[0],HEX);}
else
{Serial.println("Tipo di Button sconosciuto..codice=0x0 "); //altrimenti stampa....sconosciuto e ritorna al loop
Serial.println(addr[0],HEX);
return;}

// se tutto č andato a buon fine prosegue*******************************
Serial.print("Seriale = ");
for( i = 7; i >0; i--) { // carica nelle variabili addr il codice seriale cosė come lo legge TMEX da Sx a DX
Serial.print(addr[i], HEX); // e lo stampa in caratteri esadecimali
Serial.print(" ");
}
Serial.println("-");

if ( OneWire::crc8( addr, 7) != addr[7]) { // Controlla il CRC
Serial.print("Il CRC non č valido"); // Se errato stampa il mesaggio
return;
}


delay(1000); // aspetta 1 secondo per scaricare eventuali correnti parassite
ds.select(addr);
ds.write(0xF0); // scrive il comando di lettura memoria
ds.write(0x00); // scrive da quale pagina voglio leggere,"00H" per la pagina 1 ,"20H" per la pagina 2,"40H" per la pagina tre, ecc
ds.write(0x00);


Serial.print("Registro Memoria = ");
Serial.print(" ");
for ( i = 0; i < 16; i++) { //Carica i valori di memoria su data da Sx a DX
data[i] = ds.read();
Serial.print(data[i], HEX); // stampa il contenuto letto
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print( OneWire::crc8( data, 8), HEX); // calcola il CRC
Serial.println();

chiave[8]=data[8];
chiave[9]=data[9];

for ( i = 0; i < 10; i++) { //Carica i valori di memoria su data da Sx a DX
Serial.print(chiave[i], HEX); // stampa il contenuto letto
Serial.print(" ");
}

leggi=0;     // passa una sola volta quando riceve il carattere "A"
}

//*****************************************************************************************************************
void Rx()
{ ricevuto=0;
ricevuto = Serial.read();
if (ricevuto==65)   // se ricevo "A" metto la variabile a "1" nel loop questo consente la lettura de DS2505
{leggi=1;}

}