Welcome! Log In Create A New Profile

Advanced

Inserire comandi nel firmware

Posted by Ivan Bortolin 
Inserire comandi nel firmware
December 22, 2013 03:59PM
Ciao, qualcuno sa come inserire comandi del firmware in modo che all'accensione della della macchina faccia in automatico determinate cose? Altra domanda, sapete qual'è il file con l'elenco del g-code in marlin?

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
mic
Re: Inserire comandi nel firmware
December 22, 2013 04:22PM
direttamente nel firmware non so se è possibile ma è possibile mandare in eseguzione automatica del gcode caricato nell sd all'accensione della stampante basta rinominarlo auto0.g è possibile anche mandare in eseguzione dei set (auto1.g, auto2.g ecc fino a 9 )

Edited 3 time(s). Last edit at 12/22/2013 04:24PM by mic.
Re: Inserire comandi nel firmware
December 22, 2013 04:31PM
In verità penso che sia possibile. Come quando abiliti il pannello LCD e fa il check della temperatura in automatico. Infatti sono partito dal pannello LCD per capire, ma per ora non c'ho ricavato molto.

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
Re: Inserire comandi nel firmware
December 22, 2013 06:27PM
Vorrei capire come da un comando M104 o un G21 mandato dal repetier o letto dal g-code, questo venga letto, riconosciuto e smistato ai file che lo gestiscono.
Sono andato nella discussione generale dei firmware. Ad esempio in quello di teacup c'è il file gcode.h con l'elenco dei codici e le istruzioni che eseguono (chiamata di funzioni, etc). Ma su marlin non trovo nulla del genere.
Qualcuno può darmi una mano?

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia

Edited 1 time(s). Last edit at 12/22/2013 06:44PM by Ivan Bortolin.
Re: Inserire comandi nel firmware
December 22, 2013 06:49PM
Trovato, la mappatura stava semplicemente nel file Marlin.pde
Uff che faticaccia :-)

Cmq mi serve ancora aiuto...

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
Re: Inserire comandi nel firmware
December 24, 2013 03:15PM
sul lato programmazione in generale (il firmware dovrei studiarlo, ma se è una modifica si dovrebbe combinare) potrei essere d'aiuto. winking smiley


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 24, 2013 04:52PM
Quote
Pelice
sul lato programmazione in generale (il firmware dovrei studiarlo, ma se è una modifica si dovrebbe combinare) potrei essere d'aiuto. winking smiley

Grazie mille! Vorrei capire come funziona il firmware; qualche rudimento della programmazione di arduino ce l'ho, ma per cose decisamente più semplici e ben documentate. Vorrei iniziare a fare una serie di post sul firmware spiegando in maniera semplice ma tecnica cosa fa.

-Capire cosa viene caricato all'accensione della stampante
-come vengono gestiti i comandi
-controlli della temperatura/motori/etc

Fornire una documentazione per far risparmiare tempo a chi si vuole cimentare nel migliorarlo.

Direi di iniziare a cosa fa il firmware appena avviato. Ipotizzo che incominci dal file marlin.pde Giusto? O Marlin_main.cpp? Cmq ho scovato questa guida: [it.emcelettronica.com]

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia

Edited 1 time(s). Last edit at 12/24/2013 06:13PM by Ivan Bortolin.
Re: Inserire comandi nel firmware
December 25, 2013 04:23AM
Intanto Buon Natale a tutti!

comunque ho aperto il Marlin che uso e guardando un po', il file di partenza è Marlin_main.cpp perchè contiene il metodo setup() e loop() che sono la base di funzionamento di arduino.

fare una spiegazione del firmware secondo me è poco utile, in quanto i vari firmware sono diversi e ognuno è fatto a suo modo. Purtroppo per spiegarlo bisogna avere nozioni di C e commentare linea per linea il codice..

diciamo che le parti basi sono queste due:

SETUP (dove vengono caricate le impostazioni)

void setup()
{
  setup_killpin(); 
  setup_powerhold();
  MYSERIAL.begin(BAUDRATE);
  SERIAL_PROTOCOLLNPGM("start");
  SERIAL_ECHO_START;

  // Check startup - does nothing if bootloader sets MCUSR to 0
  byte mcu = MCUSR;
  if(mcu & 1) SERIAL_ECHOLNPGM(MSG_POWERUP);
  if(mcu & 2) SERIAL_ECHOLNPGM(MSG_EXTERNAL_RESET);
  if(mcu & 4) SERIAL_ECHOLNPGM(MSG_BROWNOUT_RESET);
  if(mcu & 8) SERIAL_ECHOLNPGM(MSG_WATCHDOG_RESET);
  if(mcu & 32) SERIAL_ECHOLNPGM(MSG_SOFTWARE_RESET);
  MCUSR=0;

  SERIAL_ECHOPGM(MSG_MARLIN);
  SERIAL_ECHOLNPGM(VERSION_STRING);
  #ifdef STRING_VERSION_CONFIG_H
    #ifdef STRING_CONFIG_H_AUTHOR
      SERIAL_ECHO_START;
      SERIAL_ECHOPGM(MSG_CONFIGURATION_VER);
      SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H);
      SERIAL_ECHOPGM(MSG_AUTHOR);
      SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR);
      SERIAL_ECHOPGM("Compiled: ");
      SERIAL_ECHOLNPGM(__DATE__);
    #endif
  #endif
  SERIAL_ECHO_START;
  SERIAL_ECHOPGM(MSG_FREE_MEMORY);
  SERIAL_ECHO(freeMemory());
  SERIAL_ECHOPGM(MSG_PLANNER_BUFFER_BYTES);
  SERIAL_ECHOLN((int)sizeof(block_t)*BLOCK_BUFFER_SIZE);
  for(int8_t i = 0; i < BUFSIZE; i++)
  {
    fromsd = false;
  }
  
  // loads data from EEPROM if available else uses defaults (and resets step acceleration rate)
  Config_RetrieveSettings(); 

  tp_init();    // Initialize temperature loop 
  plan_init();  // Initialize planner;
  watchdog_init();
  st_init();    // Initialize stepper, this enables interrupts!
  setup_photpin();
  
  lcd_init();
  
  #ifdef CONTROLLERFAN_PIN
    SET_OUTPUT(CONTROLLERFAN_PIN); //Set pin used for driver cooling fan
  #endif
  
  #ifdef EXTRUDERFAN_PIN
    SET_OUTPUT(EXTRUDERFAN_PIN); //Set pin used for extruder cooling fan
  #endif
}

e LOOP (il ciclo delle controlli e operazioni che vengono fatte di continuo

void loop()
{
  if(buflen < (BUFSIZE-1))
    get_command();
  #ifdef SDSUPPORT
  card.checkautostart(false);
  #endif
  if(buflen)
  {
    #ifdef SDSUPPORT
      if(card.saving)
      {
	if(strstr_P(cmdbuffer[bufindr], PSTR("M29")) == NULL)
	{
	  card.write_command(cmdbuffer[bufindr]);
          if(card.logging)
          {
            process_commands();
          }
          else
          {
            SERIAL_PROTOCOLLNPGM(MSG_OK);
          }
	}
	else
	{
	  card.closefile();
	  SERIAL_PROTOCOLLNPGM(MSG_FILE_SAVED);
	}
      }
      else
      {
	process_commands();
      }
    #else
      process_commands();
    #endif //SDSUPPORT
    buflen = (buflen-1);
    bufindr = (bufindr + 1)%BUFSIZE;
  }
  //check heater every n milliseconds
  manage_heater();
  manage_inactivity();
  checkHitEndstops();
  lcd_update();
}

a loro volta dentro queste parti ci sono funzioni che si spezzettano in mille altre funzioni. e qui secondo me conviene fermarsi. oltre non conviene andare oltre.


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 26, 2013 05:21AM
Quote
Pelice
Intanto Buon Natale a tutti!

comunque ho aperto il Marlin che uso e guardando un po', il file di partenza è Marlin_main.cpp perchè contiene il metodo setup() e loop() che sono la base di funzionamento di arduino.

fare una spiegazione del firmware secondo me è poco utile, in quanto i vari firmware sono diversi e ognuno è fatto a suo modo. Purtroppo per spiegarlo bisogna avere nozioni di C e commentare linea per linea il codice..

Io la trovo estremamente utile, per aiutare tutti quelli che vogliono cimentarsi e prendono paura difronte a questo muro di codice.
Avevo in mente di iniziare facendo un grafo con le correlazioni tra tutte le librerie. Questo chiama quello, questo fa un ciclo etc. Poi un po alla volta magari entrare nel dettaglio. Ovvio tutti i firmware sono uguali, ma quando hai delle basi, poi li puoi capire tutti ed apprezzarne le differenze.

Quote
Pelice
diciamo che le parti basi sono queste due:
Codice
a loro volta dentro queste parti ci sono funzioni che si spezzettano in mille altre funzioni. e qui secondo me conviene fermarsi. oltre non conviene andare oltre.

Io incomincio a buttare giù un grafico su un servizio cloud. Se vuoi partecipare ti aggiungo.
Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
Re: Inserire comandi nel firmware
December 26, 2013 11:40AM
Una mano la do volentieri..
però bisogna decidere quale firmware, perché per esempio marlin e repetier hanno del codice strutturato in maniera completamente diverso. sia come funzioni, sia come file. quindi uno schema fatto su uno, serva a poco per un altro.


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 26, 2013 11:43AM
Ciao,
ho trovato questo programma utilizzabile anche con google drive: [www.draw.io]
Io pensavo a Marlin, che mi sembra quello più diffuso... che ne pensi?

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
Re: Inserire comandi nel firmware
December 26, 2013 11:45AM
benissimo. lo uso anche io al momento!


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 26, 2013 11:46AM
Quote
Pelice
benissimo. lo uso anche io al momento!

Creo io o crei tu? Poi condividiamo passandoci i dati in PM

Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
Re: Inserire comandi nel firmware
December 26, 2013 11:48AM
crea tu!
io però da stasera e fino al 30 sono via e controllerò poco il forum. Però con gennaio sono pienamente operativo!


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 26, 2013 11:50AM
Re: Inserire comandi nel firmware
December 28, 2013 06:22AM
Idea molto bella! Se posso da gennaio mi aggrego, visto mi interessa e qualcosa ne capisco.
Re: Inserire comandi nel firmware
December 28, 2013 07:17AM
Ciao, bella idea Ivan.

Anch'io avevo in mente di partire con Marlin per la mia RepStrap. Ancora devo toccarlo con mano, ma ho iniziato ad informarmi. Vi giro un link che forse può tornare utile.
Inoltre posso partecipare a questa idea dato che sto imparando a programmare per Arduino (mi è arrivata una scheda come regalo di Natale).

[www.extrudable.me]

Buone stampe natalizie smiling smiley


---- "Let me make my move" ----
Re: Inserire comandi nel firmware
December 30, 2013 11:07AM
Altra guida che chiarisce un po' l'utilizzo dei file .cpp e .h:
http://www.xploreautomation.com/how-to-crea-la-tua-prima-libreria-per-arduino/


Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
MendelMax, Ramps 1.4, Marlin V1
Re: Inserire comandi nel firmware
December 30, 2013 01:05PM
..ma non vi conviene partire dal materiale già presente in reprap.org?
E piuttosto completare quello?
E' un wiki e tutti possono contribuire....
Re: Inserire comandi nel firmware
December 30, 2013 01:30PM
Quote
pictux
..ma non vi conviene partire dal materiale già presente in reprap.org?
E piuttosto completare quello?
E' un wiki e tutti possono contribuire....

Non c'è materiale nella wiki. Rimanda direttamente ai file su github.
I programmatori partono dal presupposto che tu abbia tutte le basi per capire quali siano le funzioni base del firmware e commentano il resto. Io per arrivare a capire 5 righe di comandi mi sono dovuto leggere 10 guide. Quindi vorrei procedere nel creare una mappa (in italiano) in cui spiego le iterazioni tra le varie librerie.

Cmq il file Marlin.pde a che serve? Carica solo le librerie configuration.h e pins.h e controlla se ci sta ULTRA_LCD... può servire ad altro?


Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
MendelMax, Ramps 1.4, Marlin V1
Re: Inserire comandi nel firmware
December 30, 2013 01:59PM
io ribadisco, senza una conoscenza della programmazione in linguaggio C, non è possibile capire come funziona e se sai programmare in C allora leggendo il codice comprendi cosa fa.
Fare lo schema, ha poca utilità.. per quello non ne esistono in giro.
Può avere senso solo uno scheda dei file .h e che funzioni ci sono all'interno solo per trovare rapidamente dove vengono fatte le cose.

Se vuoi modificare il firmware, prima di tutto bisogna imparare a programmare in C (su cui si basa il linguaggio usato dall'arduino)


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 30, 2013 02:14PM
Quote
Pelice
io ribadisco, senza una conoscenza della programmazione in linguaggio C, non è possibile capire come funziona e se sai programmare in C allora leggendo il codice comprendi cosa fa.
Fare lo schema, ha poca utilità.. per quello non ne esistono in giro.
Può avere senso solo uno scheda dei file .h e che funzioni ci sono all'interno solo per trovare rapidamente dove vengono fatte le cose.

Se vuoi modificare il firmware, prima di tutto bisogna imparare a programmare in C (su cui si basa il linguaggio usato dall'arduino)

In verità è C++ modificato. Finché si tratta di roba semplice ci sono miriadi di guide. Io voglio capire come viene caricato il firmware, da quale file parte etc. La mia domanda è: da quale file la scheda elettronica parte per caricare tutto il resto? Marli_main.cpp carica il mondo. È questo il primo file? Come fa ad essere il primo se è un .cpp che non è altro che un implementazione?
Le mie domande sono abbastanza precise. Le risposte dovresti sapere questo o quello non mi servono a molto se non supportate da link a discussioni o guide. Prima di modificare voglio capire. Grazie!

Edited 1 time(s). Last edit at 12/30/2013 02:15PM by Ivan Bortolin.


Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
MendelMax, Ramps 1.4, Marlin V1
Re: Inserire comandi nel firmware
December 30, 2013 03:51PM
Quote

Non c'è materiale nella wiki. Rimanda direttamente ai file su github.
scusa ma guide come queste:
[reprap.org]
[reprap.org]
[reprap.org]
(e ce ne son molte altre)
credo siano una base più che onesta per chi deve mettere le mani su Marlin.

Devo poi quotare Pelice: dici di non conoscere molto bene Arduino (e c/c++), e i fw delle stampanti 3d non son proprio banali...

Edited 1 time(s). Last edit at 12/30/2013 04:07PM by pictux.
Re: Inserire comandi nel firmware
December 30, 2013 04:11PM
Vedendo le tue domande, la prima cosa dovrebbe essere capire come funziona arduino: [arduino.cc]
qualsiasi sketch arduino (Marlin è uno sketch.. molto elaborato, ma uno sketch!) si basa su una struttura fondamentale: una funzione setup() e una funziona loop(). tutto il resto estende e suddivide il codice per far funzionare cose più complesse.

Senza queste conoscenze di base, qualsiasi studio di un software complesso come un firmware è veramente arduo e sconfortante (come ti sei accorto).

il mio consiglio se vuoi imparare a mettere le mani sul firmare e iniziare a studiare gli esempi base di sketch dal sito di arduino.

Non lo dico per essere un rompiscatole, è che purtroppo capire il codice di un programma è generalmente difficile e senza le basi è veramente dura.. e lo dico per esperienza! Essendo programmatore ho sbattuto la testa molto MA MOLTO su queste cose!!

Edited 1 time(s). Last edit at 12/30/2013 04:12PM by Pelice.


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 30, 2013 06:22PM
Si so benissimo, che prima di affrontare un qualsiasi linguaggio devi partire dalle basi. Ho fatto due esami di informatica all'università con assebler (perchè????) e c.
In c tu crei un file “madre” che poi richiama tutto il resto (int main{}). Ora non capivo come il compilatore “IDE” identificasse questo file, quando in c all'esecuzione dovevo specificarlo. Sul forum Arduino mi hanno risposto:

Quote

L'IDE non cerca nulla, è il compilatore, avr gcc, che si va a leggere tutto il programma, tutti i file, e trova quello che gli serve per creare l'eseguibile, se manca qualcosa te lo dice tramite vari messaggi di errore.
In pratica si smazza tutto lui; è questo che non capivo. Quindi, come mi aveva scritto Pelice sopra, Marlin_main.cpp è “il primo” file che “esegue”.

Edited 1 time(s). Last edit at 12/30/2013 06:23PM by Ivan Bortolin.


Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
MendelMax, Ramps 1.4, Marlin V1
Re: Inserire comandi nel firmware
December 31, 2013 03:46AM
è il primo perchè lui cerca il setup() e il loop() che è il corrispettivo del main in C. in pratica lo sketch è tutto li: i comandi dentro il setup() servono a inizializzare e vengono eseguiti 1 volta, quelli dentro il loop() vengono eseguiti di continuo finchè la scheda è accesa. questo è il funzionamento base.

in pratica nel setup vengono impostati i parametri, gli step, i sensori collegati,.. e nel loop vengono letti sensori, comandi, eseguite le azioni richieste. finisce un giro ripete il giro.

quindi a occhio, se devi aggiungere un comando, devi cercare nel loop la funzione che interpreta i comandi inviati via seriale, aggiungere il codice necessario a interpretare un nuovo comando ed eventualmente cosa deve fare questo comando.


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
December 31, 2013 06:05AM
Grazie dei chiarimenti.
Ho individuato il settore che mi interessa ed il comando da inserire. Ora faccio delle prove e se funziona vi dico a cosa serviva.


Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
MendelMax, Ramps 1.4, Marlin V1
Re: Inserire comandi nel firmware
December 31, 2013 06:14AM
ottimo! winking smiley


--- Prusa i3 Single Frame - Megatronics V2.0 - FW Repetier - E3D v6 Bowden ---
Re: Inserire comandi nel firmware
January 02, 2014 03:44AM
Ciao.
Ipotizzo: inserire comandi per guidare un gruppo di estrusione a 4 hotend con movimento a bilancere....

Ho imbroccato almeno qualcosa?


Enrico

[www.dapa3dservice.it] [www.studiodapa.it]
repstrap dApA, Ramps 1.4, MarlinKimbra / scanner 3D Cubify Sense / Formlabs Form 2
Re: Inserire comandi nel firmware
January 02, 2014 09:21AM
Quote
enricodare
Ciao.
Ipotizzo: inserire comandi per guidare un gruppo di estrusione a 4 hotend con movimento a bilancere....

Ho imbroccato almeno qualcosa?

No. È una cosa più semplice. Cmq il mio sistema di gestione degli estrusori non prevede bilancieri.


Ivan Bortolin
Stampa 3D e prototipazione rapida Friuli, Italia
MendelMax, Ramps 1.4, Marlin V1
Sorry, only registered users may post in this forum.

Click here to login