DmxLibrary e Serial3 ArduinoMega

Salve a tutti, sono un possessore di un controllino mega ( nello specifico Arduino Mega), mi sto cimentando nella lettura soltanto del segnale DMX e di per se con un convertitore TTL a RS485 su Arduino uno funziona che è una bomba. Ora il mio problema è leggere il segnale DMX con Controllino Mega e libreria DMXSerial. Leggo dal file di configurazione di togliere la spunta del commento sul serial1 ma io dovrei leggere dal serial 3 a cui e posto un integrato (SN65HVD08). Come posso risolvere? Premetto che ho anche provato a trasferire tutto dalla serial3 alla serial ma non ha funzionato (utilizzando il comando serial.write((char)serial3read)); ..... ma ahimè senza risultato anche dopo aver impostato e attività i pin via registro anche perché sulla seriale ho visto che qualcosa viene letto. Grazie a tutti...

mostra lo sketch
Grazie, ciao uwe

Il codice esatto è questo e su Arduino Uno tutto funziona correttamente (DMXSerial/DmxSerialRecv.ino at master · mathertel/DMXSerial · GitHub) la mia domanda è se non bisogna modifica invece il file:DMXSerial.ccp

samu92:
... la mia domanda è se non bisogna modifica invece il file:DMXSerial.ccp

SI, se vuoi usare Serial3 di Arduino MEGA devi andare a modificare il file DMXSerial.cpp dove ci sono le define dei registri usati con la Serial1 ...

...
#elif !defined(DMX_USE_PORT1) && defined(USART0_RX_vect)
// These definitions are used on ATmega1280 and ATmega2560 boards
// like the Arduino MEGA boards
#define UCSRnA UCSR0A
#define TXCn   TXC0
#define UCSRnB UCSR0B
#define RXCIEn RXCIE0
#define TXCIEn TXCIE0
#define UDRIEn UDRIE0
#define RXENn  RXEN0
#define TXENn  TXEN0
#define UCSRnC UCSR0C
#define USBSn  USBS0
#define UCSZn0 UCSZ00
#define UPMn0  UPM00
#define UBRRnH UBRR0H
#define UBRRnL UBRR0L
#define UDRn   UDR0
#define UDREn  UDRE0
#define FEn    FE0
#define USARTn_RX_vect   USART0_RX_vect
#define USARTn_TX_vect   USART0_TX_vect
#define USARTn_UDRE_vect USART0_UDRE_vect
...

Devi prendere il datasheet del ATmega2560 ed andare a vedere come si chiamano e quali sono i registri usati per la Serial3 e li devi sostituire a quelli della Serial1 o, meglio, aggiungere proprio una sezione tra le varie define per l'uso di della terza seriale.

Guglielmo

Ti ringrazio, quindi andando a cercare i registri dell' ATmega2560 dovrebbe funzionare esatto? ma il fatto di avere l' integrato SN65HVD08 non cambierebbe nulla? dato che comunque sto usando il controllino mega?

Non conosco "controllino mega" ...
... il SN65HVD08 è un RS-485 Transceiver quindi se lo colleghi alla Serial1 ci parli con Serial1, se lo colleghi alla Serial3 ci devi parlare via Serial3 ... ::slight_smile:

Guglielmo

Perfetto, pensavo andassero attivati i pin DE ed /RE per la ricezione ma a quanto capisco vengono attivati dal file .ccp . Concludo chiedendo come faccio a capire dal datasheet quali sono i registri usati per la serial3?

Devi vedere lo schema del "controllino mega" (... che, ripeto, NON conosco), vedere quella che viene definita Serial3 a quali pin fisici del ATmega2560 è collegata (su Arduno MEGA il pin RX della Serial3 è su RXD3/pin 63 e il pin TX della Serial3 è su TXD3/pin 64) e ... studiarti il datasheet che ti ho linkato sopra, capitolo 22 (... te la cavi con poco più di 20 pagine :smiley: :smiley: :smiley:) ed il "register summary" a pag. 399. oppure ... puoi andare dentro alle cartelle dell'IDE di Arduno, dove c'è il "core" (arduino\hardware\arduino\avr\cores\arduino) e studiarti i files "HardwareSerialxxxxxxx" e capire cosa usano.

Guglielmo

Ti ringrazio tutto perfettamente riuscito ora mi manca solo capire come commutare RE e DE per la ricezione e trasmissione.

DMXSerial.h

#define DMXMODEPIN 2 // Arduino pin 2 for controlling the data direction is the default value.

#define DmxModeOut HIGH // set the level to HIGH for outgoing data direction

#define DmxModeIn LOW // set the level to LOW for incomming data direction

Vi ringrazio siete stati di grande aiuto, Ora sto per chiudere il cerchio: come setto l' indirizzo DMX di partenza dei vari dispositivi ( non vorrei fare una funziona che aggiorna le variabili dei vari canali ogni volta).