MK4duo

EEPROM

0 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 5 (0 votes, average: 0,00 out of 5)
You need to be a registered member to rate this post.
Loading...

Vedo se riesco a fare un po di chiarezza sulla funzione della eeprom.
Capisco che è una situazione a metà, a me piacerebbe che fosse totalmente gestibile via firmware la configurazione della stampante, vedi firmware tipo RRF o altri come quello della GH. Ma per fare questo c’è bisogno di memoria per le variabili, il DUE non ha problemi tutti e 512k sono utilizzabili per il software o per le variabili, purtroppo il mega ha solo 8 Kb di RAM per le variabili. Nel firmware stesso ci sono variabili cioè locazioni dove sono contenuti dati che variano nel tempo, per esempio la temperatura attuale di un riscaldatore o quella impostata come target dall’utente, la posizione degli assi (compreso E), la destinazione, e tante altre.
L’approccio dei firmware nati con il mega o inferiori è stato quello di definire costanti inizialmente alla compilazione del firmware per non occupare, la già poca, memoria del processore. Quindi valori come Z_MAX_POS o il pin del sensore o ancora i pin di una fan o le direzioni dei motori o le home sono costanti e definiti all’inizio nella configurazione. Le costanti non occupano spazio in RAM perché appunto costanti quindi occupano spazio come il software, questo lascia liberi quei pochi Kb di RAM per variabili di lavoro. Questo è perfetto per un funzionamento con il mega, ma costringe l’utente a dover compilare e scaricare il firmware per cambiare queste costanti. Per carità è nulla da dire su questa scelta, anzi la trovo perfetta per quello che serviva…
Alcune variabili però sono rimaste come gli step per mm, le velocità e le accelerazioni, variabili, che con gcode o con il display, è possibile modificare senza scaricare il firmware ricompilato. Ora questi valori però se modificati essendo in ram allo spegnimento della stampante tornano a essere quelli che erano inizialmente cioè quelli dettati dalle configurazioni, per esempio se si varia la velocità da 100 a 110 per un asse, durante tutto il funzionamento della stampante quel valore sarà 110, ma alla nuova accensione tornerà a essere 100 costringendo l’utente a inserire gocde negli start gocde per rimettere a 110 quel valore. Ecco che ci arriva in aiuto la EEPROM, cioè una memoria scrivibile dal software stesso permanente finche non sovra scritta.Quindi se io modifico il valore della velocità con il display o con il gcode e lo porto a 110 e poi lo memorizzo in EEPROM (se attiva), alla nuova accensione verrà letta la EEPROM e invece di mettere a 100 (come settato nella configurazione) la velocità il firmware la mette a 110. Ora se modifico il firmware mettendo come velocità 90 e lo scarico di nuovo nella scheda, quello che accade è la stessa cosa dell’accensione il firmware trova il valore 110 in EEPROM e quindi la velocità sarà 110 e non 90 come messo nella configurazione… In questo caso bisognerà portare il valore a 90 o con il gcode o con il display e poi memorizzarlo in eeprom per sovrascrivere solo questo e non perdere gli altri eventualmente salvati, l’alternativa è resettare la EEPROM con M502 portando tutti i valori di default (cioè quelli scritti nei file di configurazione) per poi di nuovo scriverli in eeprom con M500.
Detto ciò arriviamo al dunque, oltre ai consueti valori ho piano piano portato a variabili e non più costanti altri valori che normalmente erano solo definiti, appunto come i riscaldatori, le fan e altre cosuccie. Facciamo un esempio pratico: Configuro il firmware in modo che la fan 0 è sul pin 10, salvo in EEPROM, dopo di che vado nella configurazione e modifico il pin della fan 0 in 11, scarico il firmware senza fare altro il pin 11 non sarà mai usato perché in memoria EEPROM ho ancora il pin 10 e di conseguenza il firmware continuerà a usare il pin 10 per la fan 0.
Cosa bisognerà fare in questo caso?
Semplicemente due cose: O si cambia con il relativo comando il pin della fan0 e poi si salva in EEPROM oppure si resetta la EEPROM per riportare TUTTI i valori come scritti nella configurazione.
Ed è qui che viene la domanda, perché modificarli da configurazione invece di modificarli direttamente dal firmware con il gcode in modo più rapido senza dover compilare e scaricare ogni volta?
Altrimenti la eeprom non ha senso averla attiva, si cambia tutto da configurazione e basta cosi è tutto più facile.
Però volete mettere che io posso con un comando gcode far diventare il bed con i pid o bangbang senza dover riscaricare tutto??
Oppure modificare i pid al volo per abs o pla o tpu, o ancora cambiare tipo di sensore che monto se cambio al volo un hotend con un altro?
Per me queste sono un plus, ma forse non sono riuscito a farmi e farle capire queste cose. Questo però vuol dire che quando si configura e si modificano certi parametri bisogna fare un po di attenzione se sono valori salvati in eeprom oppure no. Come ho detto all’inizio sarebbe bello che tutti lo fossero, ma per rimanere ancora compatibile con le 8 bit, tutti è impossibile…
Spero che un po si sia capito come discorso. Intanto con RRF si modifica tutto via web browser e noi si compila ancora togliendo le // o mettendole per attivare o disattivare le funzioni…

EEPROM cos’è e come si usa

0 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 5 (0 votes, average: 0,00 out of 5)
You need to be a registered member to rate this post.
Loading...

Faccio una piccola guida sull’uso della EEPROM sulle schede e come i FW lo usano…
Per quanto riguarda Marlin e MK si abilita con la riga:

#define EEPROM_SETTINGS

Una volta abilitata il fw userà la eeprom per alcuni dati, sopratutto quelli di movimento, per esempio gli step per mm, i feedrate, le accelerazioni etc etc. Più alcuni altri dati come i pid e le geometrie della delta.
Questa eeprom non è altro che una memoria riscrivibile, ma che non si cancella con un nuovo download del fw. Ricordatevelo non si cancella, può essere solo riscritta…
Nelle memorie non c’è scritto il dato a cosa corrisponde è il fw che sa come è catalogato… I dati vengono memorizzati in byte e quindi si leggono o in binario o in esadecimale..
Facciamo un esempio con una memoria da 10 byte:

00 50 00 50 00 50 02 71 01 2C

Ora cosa sono questi dati?
Sono dei valori esadecimali, ma a cosa corrispondono?
Il fw sa come leggerli e li legge. Per esempio legge un step per mm (X, Y, Z, E) sono numeri interi un intero occupa 2 byte, quindi prende i primi due dati e li trasforma in intero, 00 50 in decimale corrisponde a 80, stessa cosa vale per i prossimi due, 00 50 -> 80 e cosi via.
Ma se invece di leggere step per mm leggo altro quei numeri corrisponderanno a altro. Questo non va bene quindi la prima cosa che devo leggere è qualcosa che dice al FW si questa struttura di eeprom l’ho scritta io e quindi conosco la struttura..
Quindi il FW la prima cosa che scrive è una specie di check che poi leggerà e se corrisponde a quella che ha sa che il fw corrisponde..
Se guardate in configuration_store.h trovate:

#define EEPROM_VERSION "V25"

/**
 * V25 EEPROM Layout:
 *
 *  ver
 *  M92   XYZ E0 ...      axis_steps_per_unit X,Y,Z,E0 ... (per extruder)
 *  M203  XYZ E0 ...      max_feedrate X,Y,Z,E0 ... (per extruder)
 *  M201  XYZ E0 ...      max_acceleration_units_per_sq_second X,Y,Z,E0 ... (per extruder)
 *  M204  P               acceleration

Come vedete c’è la struttura, e il primo valore è la versione V25.
Quindi quando il FW legge, se trova come primo valore V25 allora dice è una struttura che conosco e la legge…

Prendiamo una scheda nuova, appena comprata, la EEPROM è vuota. Il FW legge e non trova la sua versione quindi non continua e userà i valori messi nel FW stesso…
A questo punto io modifico un parametro per esempio con M92 cambio gli step di X, nel FW è a 80.

M92 X90

Porto il valore degli step per mm di X da 80 a 90. Poi scrivo la EEPROM M500, a questo punto viene scritta tutta la struttura compresa la versione…

Quando riaccendo la scheda, il fw legge la EEPROM trova il suo valore V25 e a quel punto legge i dati, TUTTI, e li sovrascrive a quelli che ha di default.. Quindi dal momento che ho fatto M500 gli step per mm di X saranno a 90, il resto invece visto che non ho cambiato nulla rimane invariato…

Ma decido di aggiornare i driver da i 4988 agli 8825, cambio i valori in step per mm nel fw da 80 per X Y Z a 160.. Scarico nella scheda e succede che mi sballano tutte le misure e mi chiedo perché???
Il perché è semplice, come ho detto prima, la EEPROM non viene cancellata con un download di un nuovo fw, il fw non è cambiato, ma ho solo cambiato quei valori e quindi leggendo la EEPROM trova la sua versione e legge i dati in EEPROM. I dati in EEPROM sono (90, 80, 80), 90 perché lo avevamo cambiato, e i due 80 che erano quelli di default, ed ecco che non ci combina nulla…

Quindi prima cosa è leggere i dati in modo di verificare che tutto sia ok.
M503 fa la lista di tutti i valori e leggendo Step per mm M92 X90 Y80 Z80 ci dovremmo chiedere come mai visto che li ho cambiati nel FW???
Come si fa a rimettere le cose a posto?
Semplice ci sono altri due comandi M502 e M501:

  • M501 Legge i valori in EEPROM e sovrascrive quelli che ha in memoria.
  • M502 legge quelli scritti nel FW e li sovrascive a quelli che ha in memoria.

Quindi facendo M502 metteremo i valori degli step e di tutto il resto apposto, facendo M503 vedremo i nostri valori giusti M92 X160 Y160 Z160…
Ma nella EEPROM ci sono ancora quelli vecchi… Quindi se questi sono quelli giusti basta fare M500 e memorizzare i nuovi valori in questo modo alla prossima accensione i valori saranno quelli giusti X160 etc etc. Ma se non lo facciamo alla prossima accensione torneranno a essere X90 Y80 Z80 ridandoci i problemi…

A questo punto uno si chiede a cosa serve tutto ciò che porta solo problemi… La risposta è semplice, basta conoscere e sapere come si usa… Perché mai si è rifatto un download del FW modificando gli STEP da 80 a 160 invece di usare il comando M92 X160 Y160 Z160 e poi M500 avremmo risparmiato tempo e problemi.. E’ proprio per questo che si usa la EEPROM cambiare i valori senza dover scaricare tutto, naturalmente laddove è possibile…

Cosa serve invece:

#define EEPROM_CHITCHAT

Serve solo a far si che all’accensione si leggano tutti i valori, avete presente quando vi collegate alla stampante viene fuori la lista dei comandi con i relativi parametri. Ecco serve solo a quello. Cmq è sempre possibile leggere i valori M503

ATTENZIONE M503 non legge i valori in EEPROM, legge quelli che sta usando, quelli contenuti nella memoria del processore…

Ora torniamo un attimo a quel discorso della versione.. In MK siamo arrivati a V25, se dovesse cambiare perché il sottoscritto cambia qualcosa nella struttura ecco che al prossimo riavvio la EEPROM non è letta e quindi si perderebbero i valori, quindi controllate se usate la eeprom e magari salvatevi il log dopo un M503 per poter reinserire i valori corretti…
Un’altra cosa, come ho detto prima la prima cosa che viene scritta è la versione quindi V25 che equivale a 3 byte che saranno tra valori esadecimali della conversione ascii in HEX: V25 in hex è 56 32 35.
Ora se per qualche combinazione strana i primi tre valori della eeprom, per esempio se passo da Repetier a MK sono proprio quelli, che magari in repetier avevano un altro senso ecco che per il FW quella è una EEPROM da leggere, ma tutti i valori successivi saranno sballati, quindi step, feedrate, acc etc etc saranno tutti completamente errati.. Cosa si fa in questo caso? Il solito un bel M502 (ricarica quelli del FW) e un bel M500 che cosi pulisce tutto riscrivendo quelli esatti….