Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #15 on: September 29, 2012, 09:57:25 am » |
ma questo sketch memorizza zero (una volta sola ) su tutte le 1000 memorie?
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16487
Don't know what I do
|
 |
« Reply #16 on: September 29, 2012, 10:06:57 am » |
No, non serve andare a scrivere sulle celle che non uso. Questa porzione di sketch fa quel che ti dicevo inizialmente. Controlla la presenza o meno di un carattere di controllo.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #17 on: September 29, 2012, 02:37:09 pm » |
no non intendo di cancellare/sovrascrivere per sbaglio, intendo proprio, voglio mettere a zero tutte le memorie (tutte non solo quelle che usero) anche se l'atmega è nuovo intendo proprio farlo apposta, (una specie di formattazione) prima di caricare un tipo di sketch che qualsiasi cella di memoria provo a leggere da zero c'è un sistema "rapido" o devo cancellare cella per cella
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #18 on: September 29, 2012, 02:47:53 pm » |
Se l'operazione è "una tantum" puoi eseguirla da riga di comando AVRDUDE, mi pare che ti abbia già scritto Leo l'opzione da usare. EDIT: è l'opzione "-e": -e Causes a chip erase to be executed. This will reset the contents of the flash ROM and EEPROM to the value ‘0xff’, and clear all lock bits. Except for ATxmega devices which can use page erase, it is basically a prerequisite command before the flash ROM can be reprogrammed again. The only exception would be if the new contents would exclusively cause bits to be programmed from the value ‘1’ to ‘0’. Note that in order to reprogram EERPOM cells, no explicit prior chip erase is required since the MCU provides an auto-erase cycle in that case before programming the cell. però come vedi resta sempre il solito principio per cui ATMEL dice che 0=programmato e 1=non programmato, quindi per cancellazione totale si intende porre tutto a "1" e non a "0".
|
|
|
|
« Last Edit: September 29, 2012, 02:59:35 pm by Michele Menniti »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16487
Don't know what I do
|
 |
« Reply #19 on: September 29, 2012, 02:59:49 pm » |
Appunto, ma vedo che non vengo letto 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #20 on: September 29, 2012, 04:00:27 pm » |
Se l'operazione è "una tantum" puoi eseguirla da riga di comando AVRDUDE, mi pare che ti abbia già scritto Leo l'opzione da usare. EDIT: è l'opzione "-e": -e Causes a chip erase to be executed. This will reset the contents of the flash ROM and EEPROM to the value ‘0xff’, and clear all lock bits. Except for ATxmega devices which can use page erase, it is basically a prerequisite command before the flash ROM can be reprogrammed again. The only exception would be if the new contents would exclusively cause bits to be programmed from the value ‘1’ to ‘0’. Note that in order to reprogram EERPOM cells, no explicit prior chip erase is required since the MCU provides an auto-erase cycle in that case before programming the cell. però come vedi resta sempre il solito principio per cui ATMEL dice che 0=programmato e 1=non programmato, quindi per cancellazione totale si intende porre tutto a "1" e non a "0". ma intendi dire che arduino appena comprato ha le celle della eeprom con dentro il valore 1? voglio fare una cosa tutto sommato semplice (forse ho sbagliato a spiegare) non voglio "cancellare nulla" voglio solo mettere in tutte le celle di memoria eeprom il valore zero quindi in realtà voglio scriverle tutte con poche righe di codice una volta sola e senza fare danni
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16487
Don't know what I do
|
 |
« Reply #21 on: September 29, 2012, 04:05:40 pm » |
@Mike: il fatto che una cella vuota contenga $FF al posto di $00 dipende da come sono strutturate le memorie non volatile, basate sui MOSFET a doppio gate. Tutte le Flash e le EEPROM "vergini" sono impostate a $FF perché i MOSFET consumano meno corrente a tenere il valore 1 che il valore 0. Ma questo è un dettaglio, basta adattarsi. @Gingiardu: nel Playground ci sono esempi di accesso alla EEPROM. http://arduino.cc/en/Reference/EEPROMWritePrendi quello sketch, modifica il tetto massimo a 1023 e poi metti come byte 0 per la scrittura e farai ciò che desideri
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #22 on: September 29, 2012, 04:58:16 pm » |
@Mike: il fatto che una cella vuota contenga $FF al posto di $00 dipende da come sono strutturate le memorie non volatile, basate sui MOSFET a doppio gate. Tutte le Flash e le EEPROM "vergini" sono impostate a $FF perché i MOSFET consumano meno corrente a tenere il valore 1 che il valore 0. Ma questo è un dettaglio, basta adattarsi.
Certamente, io ho solo evidenziato che il comando che suggerivi tu NON mette a 0 le celle, come vuole GING, ma le mette a 1, in base alla "logica ATMEL" di cui abbiamo discusso tante volte, non riesco nemmeno a capire l'ostinazione di GING a mettere tutti questi 0, dopo le abbondanti spiegazioni che ha ricevuto, ma d'altra parte ognuno può fare ciò che vuole delle proprie EEPROM, l'importante è che raggiunga il risultato sperato, credo che con le semplici righe di codice del Playground riuscirà rapidamente.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16487
Don't know what I do
|
 |
« Reply #23 on: September 29, 2012, 05:28:02 pm » |
+1
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #24 on: September 29, 2012, 06:17:15 pm » |
base alla "logica ATMEL" di cui abbiamo discusso tante volte Tutte le Flash e le EEPROM "vergini" sono impostate a $FF perché i MOSFET consumano meno corrente a tenere il valore 1 che il valore 0. Mi spiegate, o mi linkate per approfondire? Thanx
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16487
Don't know what I do
|
 |
« Reply #25 on: September 30, 2012, 02:04:43 am » |
Ci sono un sacco di link in rete, il primo che ho trovato in italiano è questo: http://www.dinoxpc.com/articolo/Dischi+SSD%253A+la+tecnologia_949-3.htmIn pratica funziona così: all'interno del MOSFET è presente un secondo gate che funge da condensatore, capace di mantenere le cariche a lungo. Questo condensatore influisce sul transito della corrente tra source e drain: se contiene cariche, interdice il passaggio di corrente, e la lettura della memoria è "0". Se non le contiene, permette il passaggio della corrente e la lettura è "1". Per accumulare le cariche nel condensatore bisogna applicare una tensione di 12V e iniettare le cariche al suo interno, mentre per toglierle si sfrutta l'effetto tunnel. Capisci che l'assenza di cariche è una condizione di "riposo", quindi la memoria "vuota" è ad 1.
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #26 on: September 30, 2012, 04:07:59 am » |
Capisco, grazie delle info. N.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #27 on: September 30, 2012, 04:59:12 am » |
@Mike:
Ma questo è un dettaglio, basta adattarsi.
non riesco nemmeno a capire l'ostinazione di GING a mettere tutti questi 0, dopo le abbondanti spiegazioni che ha ricevuto, mettiamo che "publico un software" prima o poi lo faro per un qualcosa  che contenga nel set up questo regolazione1complm = ((unsigned long)(EEPROM.read(11)) << 24) | ((unsigned long)(EEPROM.read(12)) << 16) | ((unsigned long)(EEPROM.read(13)) <<  | (unsigned long)(EEPROM.read(14)); ovviamente regolazione1complm prendere il numero che sta nelle momorie, ora (mettendosi nei panni di chi carica il programma la prima volta) se ha le memorie che sono gia "sporche" non riuscira mai scriverle con i valori giusti che poi si ritrovera sempre ogni volta che riavvia l'arduino, non posso mettere il comando nel set up di cancellare le memorie perche se no cancellerebbe anche le regolazioni corrette una volta effettuate, e le nuove regolazioni che si andra a memorizzare sono influenzate dalle regolazioni precedenti purtroppo certo una soluzione potrebbe essere un pulsante che se premuto cancella le memorie usate ma questo significa perdere un pin, mettere un pulsante in piu ecc e solo una specie di sicurezza per evitare che chi userà quel codice non gli si blocchera tutto, solo perche nelle sue memorie aveva gia memorizzato 3.567.432.611 magari quando diventerò piu pratico risolvero in altro modo senza impegnare pin e pulsanti
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #28 on: September 30, 2012, 07:04:51 am » |
Ci sono un sacco di link in rete, il primo che ho trovato in italiano è questo: http://www.dinoxpc.com/articolo/Dischi+SSD%253A+la+tecnologia_949-3.htmIn pratica funziona così: all'interno del MOSFET è presente un secondo gate che funge da condensatore, capace di mantenere le cariche a lungo. Questo condensatore influisce sul transito della corrente tra source e drain: se contiene cariche, interdice il passaggio di corrente, e la lettura della memoria è "0". Se non le contiene, permette il passaggio della corrente e la lettura è "1". Per accumulare le cariche nel condensatore bisogna applicare una tensione di 12V e iniettare le cariche al suo interno, mentre per toglierle si sfrutta l'effetto tunnel. Capisci che l'assenza di cariche è una condizione di "riposo", quindi la memoria "vuota" è ad 1. +1 ma di volt dovrebbero bastarne anche 1,8÷5 altrimenti ogni micro dovrebbe contenere uno step-up
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16487
Don't know what I do
|
 |
« Reply #29 on: September 30, 2012, 07:50:00 am » |
@Gingardu: la soluzione te l'ho già data con tanto di codice. Metti un valore di controllo in una cella, se quel valore c'è significa che i valori sono già stati salvati e basta leggerli; se non c'è significa che è il primo avvio e devi salvarli. Opzionalmente puoi mettere nel codice una procedura per salvare i dati su richiesta dell'utente, in modo che egli possa sovrascrivere quelli di fabbrica, così da esser sicuro di partire con i valori desiderati. Altri problemi non ne vedo.
@Mike: i 12V sono usati per creare l'effetto tunnel o per iniettare la carica, la normale lettura avviene a tensioni più basse. Credo comunque che ci sarà uno step-up microscopico nella circuiteria per fornire quella tensione solo quando effettivamente serve. Ma le mie sono solo illazioni. Non conosco l'HW in oggetto molto a fondo.
|
|
|
|
|
Logged
|
|
|
|
|
|