differenza tra arduino mega 2560 e arduino due

Ciao a tutti, sono alle prime armi con arduino, ma son qui a chiedervi un consiglio, sto usando arduino uno con skatch scritto da Tim W. Shilling (Modbus Slave designed for Mach 3 CNC Software), funziona tutto senza nessun problema, avrei bisogno però di più input ed output. questo sketch e stato scritto per arduino uno e mega, io però dispongo di una scheda arduino due, ho provato a compilare senza notare errori, ho inviato alla scheda senza errori, noto però che quando mi collego con mach3 anziche lampeggiare tx rd rx lampeggia solo il led tx e ovviamente non funziona. ma le due schede non sono pressochè compatibili? o sto dicendo un eresia? E' meglio che prendo una mega o si riesce a modificare per farla funzionare sulla due? Grazie in anticipo a tutti..

Buonasera e benvenuto sul forum, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

leo78: ... ma le due schede non sono pressochè compatibili? ...

NO, sono due schede basate su due architetture TOTALMENTE diverse, la MEGA, come la UNO e tante altre è basata su MCU di architettura AVR, la DUE è basata su una MCU ARM Cortex-M3.

Differeti architetture, differenti regsitri, timers, porte e quant'altro, differenti tensioni di lavoro, ecc. ecc.

O la libreria è fatta per funzionare anche sulla DUE o va adattata e, in funzione di ciò che la libreria fa, può essere un lavoro semplice o estramemante lungo e complesso.

Guglielmo

Fatto, scusate se non mi sono presentato ma scorrendo il forum non avevo notato la pagina dedicata.
ringrazio per la tua risposta, quindi comprerò la mega visto che le mie conoscenze di arduino ora sono molto poche.

Aggiungiamo la cosa più scoraggiante per chi inizia. Arduino Uno/Mega lavora a 5V ed un pin può erogare fino a 40mA (idealmente, cercare nel forum per dettagli maggiori), mentre la Due lavora solo a 3,3V e un pin eroga pochissima corrente: "They operate at 3.3 volts. Each pin can provide (source) a current of 3 mA or 15 mA, depending on the pin, or receive (sink) a current of 6 mA or 9 mA, depending on the pin"

Ciao, diciamo che per me i 3.3v erano l'ideale visto che dovevo interfacciare ad una fpga cyclone IV, ma come dicevo per ora se non trovo nessuno che mi potrebbe dare una mano lascio perdere e prendo una mega.

È probabile che hai rotto la DUE perché hai dato 5V sui pin. Ciao Uwe

La due funziona perfettamente ..

Allora sei fortunato. Ciao Uwe

Non capisco quale sarebbe la mia fortuna, innanzitutto ho solo caricato lo skatch, subito mi sono accorto che non andava, secondo la avrei dovuta interfacciare ad un fpga quindi tensioni 3,3, non sono esperto di C, ma di elettronica non sono uno sprovveduto.

Mah, se è riuscito a compilare lo sketch anche per la Due, direi che non fa utilizzo di registri o di altre cose a basso livello, per cui il fix per la Due potrebbe essere banale. Se ci linkassi esattamente il codice... :(

Ciao, qui avevo messo tutto http://forum.arduino.cc/index.php?action=profile;u=682078 . Caricato sketch senza nessun errore, io credo sia solo questione di alcuni indirizzi, ma sono giorni che controllo invano, la porta di comunicazione la apre, ma appena richiedo lettura stato pin mi va in timeout.

Dove? Io lì vedo solo il tuo profilo.

eccolo scusa…

Arduino Modbus.zip (16.9 KB)

Secondo me devi solo aggiustare gli #if/#ifdef, in modo che le parti di codice abilitate per la Mega lo siano anche sulla Due.

ovvero dici questo?

if defined(AVR_ATmega1280) || defined(AVR_ATmega2560)

ho cambiato le definizioni con queste

if defined(arm) || defined (SAM3X8E)

ora mi da errore in compilazione A12,A13,A14,A15

C:\Users\workstation\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/wiring_constants.h:89:41: note: in definition of macro 'bitWrite'

define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))

^

Pin_Manipulator:279: error: 'A12' was not declared in this scope

digitalWrite(A12,bitRead(Register[Digital_IO_Register+4],Bit));

^

Pin_Manipulator:281: error: 'A13' was not declared in this scope

digitalWrite(A13,bitRead(Register[Digital_IO_Register+4],Bit));

^

Pin_Manipulator:283: error: 'A14' was not declared in this scope

digitalWrite(A14,bitRead(Register[Digital_IO_Register+4],Bit));

^

Pin_Manipulator:285: error: 'A15' was not declared in this scope

digitalWrite(A15,bitRead(Register[Digital_IO_Register+4],Bit));

^

exit status 1 'A12' was not declared in this scope

Mi rispondo da solo, ovvio da errore ........ non ammazzatemi...