Ciao!
dopo svariate ore passate a leggere forum e documentazioni varie, prima di cadere nella demoralizzazione, vorrei chiede a qualche buon anima se mi puo' aiutare a risolvere il mio problema !
Scenario: (scusate ma sara' un post lungo !)
Ho un atmega 328 standalone con caricato Grbl 0.9e (funzionante e testato , sempre utilizzato inviando i dati tramite pc in seriale..)
Ho poi un arduino uno sul quale sto cercando di sviluppare questo sw che mi fa dannare..
Questo secondo "giocattolo" lo chiamero' "master", mentre il 328 con grbl lo chiamero' "grbl" per cercare di spiegare..
Ora mi sono intestardito di voler utilizzare il master (che poi se tutto funzionera' diventera' un altro 328 standalone) per inviare i dati al "Grbl" tramite seriale prendendoli da una SD.
Ho fatto la parte hw, ho messo anche un lcd 16x2 per un debug immediato, visto che la seriale poi sara' dedicata solo alla comunicazione tra i 2 e non disponibile per il pc..
Fin qui tutto ok, se leggo le linee una ad una dalla SD e le "stampo" sull lcd , nessun problema, tutto corretto..
Se inoltre le invio via seriale (collegata per test/debug) al pc simulando di essere io tramite pc il grbl a ricevere/rispondere anche qui tutto ok !
Ho verificato con un programma di connessione seriale (su pc) con visualizzazione ascii ed esadecimale dei dati da e verso "grbl" ed escono corretti al byte, MA (!!) se collego tra loro i 2 questi si scambiano 1 o massimo 2 linee e poi si ferma il tutto miseramente !!
Il grbl restituisce degli errori come se i comandi fossero "malformati" anche se in realta' le linee di comando sono perfette ( provato piu' volte ad inviare le stesse da pc e le accetta benissimo..)
Pensavo fossero degli errori di comunicazione, dovuti a disturbi o velocita', (i 2 sono a 10 cm)
Ho provato ad abbassare la velocita', ma non cambia nulla
Mi sono messo col pc "sniffando" una alla volta le linee TX del grbl e del master usando un convertitore usb2ttl collegando solo la massa e la RX, in modo da non influire sulle comunicazioni, e la sequenza di byte che vedo passare in entrambi i sensi e' esattamente quella che mi aspetto mentre comunicano tra loro, MA QUALCOSA NON VA !!!
...Sto impazzendo (il caldo non aiuta..)
Per chi non lo conoscesse grbl e' un piccolo interprete di codice "G" che poi pilota i motori di varie cose, da stampanti 3d, pantografi cnc etc..
Da un certo punto di vista e' molto semplice.. alla partenza invia in seriale una stringa di "benvenuto" e poi sta li ad aspettare dei comandi via seriale, appunto !
Semplificando moltissimo il suo funzionamento, ad ogni CR (o LF, indifferentemente) inviatogli lui risponde con un "ok"+CR+LF ad indicare che lo ha ricevuto
poi se si invia una stringa tipo "G0 x1 y2" +CR (o LF e' indifferente) lui la prende in "carico" e risponde il solito "ok"+CR+LF
di queste stringhe ne accetta un tot, fino a riempire un buffer, ed il risultato e' che ad un certo punto inviandone una lui non ci restituira piu' il solito ok+... finche non avra' "smaltito" quelle gia' presenti nel buffer
A quel punto ci mandera' il solito ok e noi potremmo sparare in seriale altre stringhe e via dicendo..
Ho anche provato a fere un programmino molto ridotto eliminando al minimo le cose per cercare di uscirne, ma anche senza lettura da SD, dichiarando 5 stringhe di test scritte a mano e perfettamente testate e funzionanti ancora non vuole andare.
Ho introdotto ritardi di test ovunque, ma piu' ci sbatto e meno capisco..
Qualcuno mi aiuterebbe ??
Grazie !