Pages: 1 [2] 3   Go Down
Author Topic: "residuati bellici"  (Read 2265 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-eek-blue

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 Offline
Shannon Member
****
Karma: 415
Posts: 11996
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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":
Quote
-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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Appunto, ma vedo che non vengo letto  smiley-yell
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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":
Quote
-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...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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/EEPROMWrite

Prendi 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 Offline
Shannon Member
****
Karma: 415
Posts: 11996
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

+1
Logged


Italy
Offline Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
base alla "logica ATMEL" di cui abbiamo discusso tante volte
Quote
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"

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.htm

In 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 Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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   smiley

che contenga nel set up  questo 

    regolazione1complm = ((unsigned long)(EEPROM.read(11)) << 24) |
  ((unsigned long)(EEPROM.read(12)) << 16) | ((unsigned long)(EEPROM.read(13)) << smiley-cool | (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 Offline
Shannon Member
****
Karma: 415
Posts: 11996
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.htm

In 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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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


Pages: 1 [2] 3   Go Up
Jump to: