collapse

* Links de Robótica

* Posts Recentes

Medir Agua que está no Poço por filjoa
[Ontem às 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Palavras Cruzadas por Njay
[19 de Setembro de 2017, 02:24]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


Apresentação por TigPT
[17 de Setembro de 2017, 07:31]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]


Preparar bancada de testes por jm_araujo
[14 de Setembro de 2017, 10:24]

Autor Tópico: Interface PC Arduino DMX  (Lida 2624 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Interface PC Arduino DMX
« em: 29 de Março de 2012, 17:49 »
Boas pessoal,

Ja fiz um conversor igual ao deste post: http://lusorobotica.com/index.php?topic=560.0

agora estou a fazer uma experiencia, é possivel ligar o Max ao vdd, gnd , e txdo arduino?

Em vez de ligar a um serial converter igual ao do link?

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Interface PC Arduino DMX
« Responder #1 em: 31 de Março de 2012, 16:35 »
Boas.

Sou o autor desse interface que fizeste.

Descreve melhor a tua pergunta porque eu não percebi...

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Interface PC Arduino DMX
« Responder #2 em: 31 de Março de 2012, 16:48 »
Estava a perguntar, se podia ligar o arduino ao pc, em vez do usb to serial converter. Mas ja testei, e vi que sim, funciona ligando ao pino rx do arduino ;)

Outra coisa, sabes como receber e ler sinal dmx no arduino?
Tenho 2 bibliotecas para experimentar, mas so durante esta semana é que tenho o conversor que fiz.

A ideia, é fazer um dispositivo em que tens 5 canais, em que mais de "x" valor DMX liga um rele, e menos desliga. e com opção de escolher endereço. è para ligar uma maq. de fumo, e outras coisas do genero.

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Interface PC Arduino DMX
« Responder #3 em: 31 de Março de 2012, 22:21 »
Estava a perguntar, se podia ligar o arduino ao pc, em vez do usb to serial converter. Mas ja testei, e vi que sim, funciona ligando ao pino rx do arduino ;)

Outra coisa, sabes como receber e ler sinal dmx no arduino?
Tenho 2 bibliotecas para experimentar, mas so durante esta semana é que tenho o conversor que fiz.

A ideia, é fazer um dispositivo em que tens 5 canais, em que mais de "x" valor DMX liga um rele, e menos desliga. e com opção de escolher endereço. è para ligar uma maq. de fumo, e outras coisas do genero.

Boas joão.

Não tenho nenhum código, mas sei que existe código disponível na net para o efeito... Não é fácil pô-lo a compilar mas sei de gente que já o conseguiu fazer. Pessoalmente, nunca me dediquei muito à recepção e portanto não te posso ajudar muito.

Cumps,
Ricardo

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Interface PC Arduino DMX
« Responder #4 em: 31 de Março de 2012, 22:25 »
DMX é basicamente serial a 19200 bps, portanto é uma questão de usar uart e código a enrolar a uart em funções bonitas.
Avr fanboy

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Interface PC Arduino DMX
« Responder #5 em: 31 de Março de 2012, 22:30 »
DMX é RS-485, não tem nada a ver com RS-232, e funciona a 250 kbps.

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Interface PC Arduino DMX
« Responder #6 em: 31 de Março de 2012, 22:37 »
Durante a semana vou experimentar, depois vemos :P

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Interface PC Arduino DMX
« Responder #7 em: 31 de Março de 2012, 22:57 »
DMX é RS-485, não tem nada a ver com RS-232, e funciona a 250 kbps.
A uart do Arduino funciona dos dois modos, para além de que são os dois serial.
Avr fanboy

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Interface PC Arduino DMX
« Responder #8 em: 31 de Março de 2012, 22:59 »
Já agora, lembro-me de ler uma application note da microchip que explicava como liam DMX usando a UART, mas como os tempos de break são muito longos, tinha de se "enganar" a UART porque era gerado um erro de paridade que depois ignoravam e faziam uma carrada de maroscas para a UART "comer" o sinal DMX, portanto não é uma coisa assim muito trivial.

Boa sorte ;) vai dando notícias...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Interface PC Arduino DMX
« Responder #9 em: 31 de Março de 2012, 23:03 »
A Uart do Arduino suporta modo de 9 bits, que é o que o RS-485 quer, até existem app-notes na Atmel sobre o assunto. Mas como nunca usei não posso falar muito mais sobre o assunto, mas até a datasheet refere isso, portanto imagino que já alguem tenha feito uma lib para arduino.
Avr fanboy

Offline joaopedrocmp

  • Mini Robot
  • *
  • Mensagens: 246
Re: Interface PC Arduino DMX
« Responder #10 em: 02 de Abril de 2012, 12:43 »
Sim, eu tenho aqui uma, é a DMXSerial, e tenho um programa, mas não tem nada a ver com a 1º:
Código: [Seleccione]
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>


// ********************* local definitions *********************
#define DMX_CHANNELS    (32) //Define the number of DMX values to store

enum {IDLE, BREAK, STARTB, STARTADR}; //DMX states

uint8_t  gDmxState;
uint8_t  *gDmxPnt;
uint16_t DmxCount;

uint8_t  DmxField[DMX_CHANNELS];     //array of DMX vals (raw)
uint16_t DmxAddress; //start address

int ledPin = 13;      // LED connected to digital pin 13

void setup()    // run once, when the sketch starts
{
  // sets the digital pin as output
  pinMode(ledPin, OUTPUT);

  // Disable interrupts
  cli();

  // 250kbps baud - only works for 16MHz clock frequency. See the ATMega8 datasheet if you are using a different clock speed
  UBRR0H = 0;
  UBRR0L = 3;

  // enable rx and interrupt on complete reception of a byte
  UCSR0B = (1<<RXEN0)|(1<<RXCIE0);
  UCSR0C = (1<<UMSEL01)|(3<<UCSZ00)|(1<<USBS0);

  // Enable interrupts
  sei();

  gDmxState= IDLE;

  uint8_t i;
  for (i=0; i<DMX_CHANNELS; i++)
  {
    DmxField[i]= 0;
  }

  DmxAddress= 10;  //Set the base DMX address. Could use DIP switches for this.
}

void loop()    // run over and over again
{
  if(DmxField[0] >=127)
  {
    digitalWrite(ledPin, HIGH);   // sets the LED on
  }
  else
  {
    digitalWrite(ledPin, LOW);    // sets the LED off
  }
}

// *************** DMX Reception ISR ****************
SIGNAL(USART_RX_vect)
{
uint8_t USARTstate= UCSR0A; //get state
uint8_t DmxByte= UDR0; //get data
uint8_t DmxState= gDmxState; //just get once from SRAM!!!

if (USARTstate &(1<<FE0)) //check for break
{
UCSR0A &= ~(1<<FE0); //reset flag
DmxCount= DmxAddress; //reset frame counter
gDmxState= BREAK;
}

else if (DmxState == BREAK)
{
if (DmxByte == 0)
{
gDmxState= STARTB; //normal start code detected
gDmxPnt= ((uint8_t*)DmxField +1);
}
else gDmxState= IDLE;
}

else if (DmxState == STARTB)
{
if (--DmxCount == 0) //start address reached?
{
gDmxState= STARTADR;
DmxField[0]= DmxByte;
}
}

else if (DmxState == STARTADR)
{
uint8_t *DmxPnt;
DmxPnt= gDmxPnt;
*DmxPnt= DmxByte;
if (++DmxPnt >= (DmxField +DMX_CHANNELS)) //all ch received?
{
gDmxState= IDLE;
}
else gDmxPnt= DmxPnt;
}
}

Mas so testo amanha ou depois, nao tenho o conversor.