From efd65f80861f2bc450fad8fee79dff56c4f82437 Mon Sep 17 00:00:00 2001 From: tzim Date: Sun, 11 May 2014 22:40:44 +0000 Subject: [PATCH] --- dmx512_micro/dmx512_micro.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/dmx512_micro/dmx512_micro.cpp b/dmx512_micro/dmx512_micro.cpp index 0fee8d3..bc97cac 100644 --- a/dmx512_micro/dmx512_micro.cpp +++ b/dmx512_micro/dmx512_micro.cpp @@ -25,6 +25,7 @@ int main(void) // définitions #define TEMPDMXRX 8 // Longueur de trame mini en reception #define IOUTDMX_FIN -4 +#define IOUTDMX_WAIT -5 #define IOUTDMX_IDLE -1 #define IOUTDMX_BRK -2 #define IOUTDMX_MAB -3 @@ -141,7 +142,9 @@ void CDC_accept() index_input_pc+=USB_Recv(CDC_RX,tab_input_pc+index_input_pc,513-index_input_pc); // si on arrive à 512 if (index_input_pc > 512) { - etat_input_pc=0; + etat_input_pc=0; + if(index_output_dmx==IOUTDMX_WAIT) + index_output_dmx=IOUTDMX_IDLE; } break; @@ -228,8 +231,13 @@ ISR(USART1_RX_vect) ISR(USART1_TX_vect) { // si l'USART 1 est vide => break - if(index_output_dmx==IOUTDMX_FIN) - index_output_dmx=IOUTDMX_IDLE; + if(index_output_dmx==IOUTDMX_FIN) { + if(syncflag) { + syncflag=false; + index_output_dmx=IOUTDMX_WAIT; + } + else index_output_dmx=IOUTDMX_IDLE; + } } // vecteur : USART 1 transmission registre vide @@ -248,7 +256,6 @@ ISR(USART1_UDRE_vect) if (index_output_dmx>nb_circuits) { index_output_dmx=IOUTDMX_FIN; cbi(UCSR1B, UDRIE1); - syncflag=false; } } @@ -320,8 +327,10 @@ void setup() { int tmptime; void loop() { + if(index_output_dmx==IOUTDMX_WAIT && interbrk >255) + index_output_dmx=IOUTDMX_IDLE; // Lancement du Break : après fin de transmisson et ecoulement de "dmx_frame_interval" ms depuis le dernier break - if (index_output_dmx==IOUTDMX_IDLE && interbrk >= dmx_frame_interval ) { + if (index_output_dmx==IOUTDMX_IDLE && interbrk >= dmx_frame_interval ) { index_output_dmx=IOUTDMX_BRK; tab_input_dmx[514]= (byte)tmptime ; tmptime= interbrk=0;