Go Down

Topic: Comunicazione Slave Slave i2C (Read 205 times) previous topic - next topic

mattia952

Ciao a tutti

Vorrei provare a realizzare una comunicazione I2C tra la mia stampante 3d con Marlin Firmware e un arduino Uno esterno che dovrebbe gestire uno stepper e un lo schermo lcd (con comunicazione i2c ) a parte.
Io vorrei (almeno per ora) dare un comando all arduino da parte della stampante ad inizio stampa e a fine stampa e nel periodo di stampa muovere questo stepper visualizzando i dati dello stepper sul monitor lcd.
Quindi mi sto documentando e ho pensato che è un problema pilotare lo schermo dato che la mia idea è pilotarlo dall arduino e non dalla stampante (master), quindi volevo sapere se è possibile avere una comunicazione slave-slave (anche se dubito dato che servirebbe il clock del master) oppure se posso commutare lo stato Dell arduino da slave a master (chiaramente con il master-stampante non in comunocazione) per inviare i dati alla lcd per poi riportarlo slave pronto per eventuali comunicazioni?

Spero di essere stato abbastanza chiaro grazie in anticipo

maubarzi

#1
Apr 16, 2019, 06:39 pm Last Edit: Apr 16, 2019, 06:40 pm by maubarzi
Beh, una comunicazione slave-slave non è possibile per definizione ;)
Però con l'I2C puoi avere più master, ovviamente non contemporaneamente.
Di fatto il master è il dispositivo che controlla il bus in un dato momento.
Quindi direi la seconda che hai detto, cioè Arduino che passa da slave a master all'occorrenza.
Hai già dato un occhio a questo?
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

mattia952

Infatti anche secondo me era la migliore ipotesi, però pensavo a qualcosa del tipo:
Il master continua a dare il clock
Uno slave scrive
Un altro identificato dal suo codice legge, come se scrivesse il master...il problema sta nel clock che è esterno alla board che vuole scrivere

mattia952

Quindi l'ipotesi di cambiare stato all'arduino per la comunicazione puo essere ottimale,
detto questo secondo voi è possibile utilizzare un pin libero della Ramps 1.4 per dire all'arduino collegato tramite I2C se stare master o slave?
Ad esempio:
                     se( pinN == HIGH )
                            Arduino Master
                     else
                            Arduino Slave

in modo da metterlo slave solo nel caso in cui la ramps abbia qualcosa da dire?

uwefed

Per fare questo devi modificare lo sketch che gestisce la stampante3D.
Non credo che sia una cosa facilmente fattibile visto che lo sketch deve gestire i motori con tempistiche molto rigide.
Hai le necessarie conoscenze di programmazione avvanzata?

Ciao Uwe

mattia952

Non credo di avere competenze così avanzate.
Infatti pensavo a qualcosa del genere:
Inizio del gcode
Pin_comando HIGH -> stampante master , arduino slave
Invio i dati che mi interessano ad arduino
Pin_comando LOW -> arduino master
Arduino comanda lo schermo che resta sempre slave

E l'arduino esterno resta master fino alla prossima modifica del Pin_comando.

Troppo complesso per farlo con i codici gcode?

Go Up