Problema comunicazione continua tramite USB - Modbus - FTDI

Ciao a tutti, vi scrivo per chiedervi consiglio su una problematica che sto riscontrando.. Ho un arduino mega 2560 rev3 e lo devo usare per comunicare in modbus con un PC. Ho implementato il modbus, ho costruito lo sketch e tutto ok.. Volevo comunicare direttamente tramite la porta USB integrata e quindi sfruttando il convertitore seriale interno... La connessione inizialmente sembra stare su invece dopo un tempo apparentemente random si blocca tutto (seriale piantata, nemmeno con arduino ide riesco più a caricare o a fare altro) tanto che devo staccare e riattaccare il cavo USB per poter tornare a comunicare con l'arduino.. Ora io devo avere una raccolta dati 24/24h quindi non posso permettermi questa instabilità! Qualcuno ha per caso riscontrato gli stessi problemi? Avete suggerimenti?

Grazie

Se hai un altro convertitore seriale USB puoi provare a fare un po' di debug usando una delle altre 3 seriali disponibili per vedere in quale punto dello sketch avviene il problema. Per far ripartire il sistema puoi usare il WatchDog non ti risolve il problema del blocco ma lo aggira. Inoltre dovresti aggiornare il bootloader della MEGA perché col vecchio il il WD non funziona.

Problemi di memoria, forse? Cosa fa il tuo sketch? Si può vedere? Fai log... ok, ma i dati li salvi in memoria e li spedisci ogni tanto al computer oppure li salvi da qualche parte prima? oppure li spedisci continuamente? Problemi hardware li puoi escludere?

Il convertitore usb/rs232 nella mega2560 fatto con mega16u2 non implementa nessun controllo di handshake hardware quindi se il tuo caso è la ricezione da parte di arduino di una grossa quantità di dati è possibile che qualcuno di questi vada perso e il tuo programma potrebbe bloccarsi, se questo è il tuo caso la soluzione è la modifica del firmware di mega16u2 implementando un controllo hardware , possiede vari pin liberi da utilizzare come DSR

Avevo provato a implementare il watchdog ma in effetti avevo visto che dava problemi. Dove trovo l’ultima versione di Bootloader da caricare sul mega2560rev3? nella cartella di installazione di arduino mi sembra ce ne siano varie versioni.

Per quanto riguarda l’utilizzo di troppa memoria lo escluderei, lo sketch non è grande e i dati vengono salvati sull’array modbus e al momento siamo ad un array da 50 interi. Non viene fatto un vero e proprio log interno… Lo sketch si occupa di leggere da sonde di temperatura, sonde ambiente, umidità, sonde chimiche, livelli di sostanze liquide etc etc… Il modbus master (PC) interroga ogni 5 secondi con tre chiamate di gruppo tutti i valori. Non penso sia una mole di dati così rilevante, cosa ne pensate?

Escludo problemi Hardware perchè ho 3 installazioni uguali che girano e danno lo stesso problema. Ho comunque ordinato un convertitore basato su ft232 in modo da avere sia una linea di debug sia per provare a far passare i dati tramite questo convertitore che mi da quanto ho sentito risulta più affidabile…

Per la MEGA il bootloader è: stk500boot_v2_mega2560.hex. Lo trovi nell'IDE ad esempio nella cartella \arduino-1.0.5-r2\hardware\arduino\bootloaders\stk500v2 . Per caricarlo devi usare la tecnica ISP. Vedi la guida di Michele Menniti --> http://www.michelemenniti.it/arduino_burn_bootloader.php

Grazie, ma posso usare arduino come programmatore anche per il mega 2560? perchè vedo che da un problema nel caricamento del bootloader mentre se carico un leonardo funziona ad esempio..

Si. Puoi usare anche la UNO come programmatore ISP. Per quanto riguarda l'errore in fase di programmazione c'è un post apposito, ma ti comunico che ancora non è stato risolto. --> http://forum.arduino.cc/index.php?topic=199588.0 --> http://forum.arduino.cc/index.php?topic=218055.0

Per il caricamento del bootloader ho risolto seguendo questa guida: http://www.gammon.com.au/forum/?id=11635

credo di avere anche io lo stesso problema qui.

http://forum.arduino.cc/index.php?topic=230357.60

ho un arduino mega2560 che si impalla in comunicazione con il PC.

ho anche un ArduinoUNO da poter utilizzare come programmatore ISP. Dite che facendo così posso risolvere il problema?

Oggi mi studio bene la guida di Michele Menniti.

Grazie mille,

Giacomo