Salve ragazzi, perdonatemi se vi riscrivo ma avrei bisogno di una spiegazione ( e vi assicuro che ho provato a cercare di capire )
UWE dopo che aveva chiesto di uplodare il codice è scomparso o è avvinghiato nei meandri della risoluzione del perchè la sua libreria non funziona ( aimè son costretto a pensare questo )
comunque sorvolando su questo piccolo OT ho provveduto sia a scrivere il codice con la scrittura su eprom interna sia utilizzare il codice postato da brunello ( che ringrazio vivamente ) per scrivere nella ram
ora siccome la scrittura su ram interna ha una vita di 100.000 volte sono costretto ad utilizzare la ram del ds ( cosa che gradisco poichè togliendo la pila si resetta tutto )
ora arriva la mia domanda e spero che qualcuno mi aiuti a capire perchè a funzionare funziona
dunque il codice così funziona
alarm_hours = 7 // esempio visto che li passa un funzione
alarm_mins = 30
alarm_status = 1
Wire.beginTransmission(0x68); // inizio scrittura delle tre varibili nella RAM del DS1307
Wire.send(0x08); // imposta l'indirizzo a cui accedere
Wire.send(alarm_hours) ; // salva il valore
Wire.send(alarm_mins) ; // salva il valore
Wire.send(alarm_status) ; // salva il valore
Wire.endTransmission();
ora io non mi aspettavo che funzionasse così visto che prima avevo provato in questo modo
Wire.beginTransmission(0x68);
Wire.send(0x09); //imposta l'indirizzo a cui accedere [color=red][font=Verdana]OVVERO 9[/font][/color]
Wire.send(alarm_hours) ; // salva il valore
Wire.endTransmission();
Wire.beginTransmission(0x68);
Wire.send(0x10); //imposta l'indirizzo a cui accedere [color=red][font=Verdana]OVVERO 10[/font][/color]
Wire.send(alarm_mins) ; // salva il valore
Wire.endTransmission();
Wire.beginTransmission(0x68);
Wire.send(0x11); //imposta l'indirizzo a cui accedere [color=red][font=Verdana]OVVERO 11[/font][/color]
Wire.send(alarm_status) ; // salva il valore
Wire.endTransmission();
ora fermo restando che NON restituisce errore in compilazione ma gli orari sono sfalzati e lo status non corrisponde alchè sono convinto di NON aver capito come è strutturato lo schema della ram e dei byte
Ho letto e riletto il datasheet del ds1307 ma senza venirne a capo e avvinghiandomi su me stesso
In pratica io scrivo tutto nell'indirizzo 0x08 di seguito ( suppongo 7,30,1)
ma poi mi chiedo per quando posso estendermi in lunghezza ?
e se volessi poi scrivere solo il terzo valore come chiedere di leggere solo quello ?
io adesso per rileggerli faccio
Wire.beginTransmission(0x68);
Wire.send(0x08); //imposta l'indirizzo a cui accedere
Wire.endTransmission();
Wire.requestFrom(0x68,3); [color=red]// imposta 3 locazione da leggere ma tutte di seguito !!! ed se ne volessi solo la terza ?[/color]
alarm_hours = Wire.receive() ; // legge il dato
alarm_mins = Wire.receive() ; // legge il dato
alarm_status = Wire.receive() ; // legge il dato
grazie mille
Daniele