a biblioteca arduino para enviar e receber dmx

4
mathertel.de A Biblioteca Arduino para enviar e receber DMX Esta é uma biblioteca para envio e recebimento de códigos DMX usando o plattform Arduino ou um ATmega (ATmega168, ATmega328 ou similar) processador com uma velocidade de clock de 16 MHz. A biblioteca evita problemas timming sobre o protocolo de baixo nível que normalmente existe ao usar implementações de software usando o hardware de comunicação serial interna dos chips. Portanto, é muito acrítica para adicionar-lhe efeitos específicos DMX em cima desta biblioteca de comunicação. DMX envio e recebimento DMX são ambos suportados por esta biblioteca. Você pode encontrar uma breve descrição de usar os detalhes dos registros de hardware de série neste artigo. Baixar Faça o download dos arquivos de biblioteca, incluindo duas amostras para envio e recebimento de mensagens de DMX: DMXSerial.zip Ferragens Este esboço e biblioteca mostra como usar a interface de hardware de série para envio e recebimento de pacotes de dados DMX. Para ter um hardware compatível DMX mínimo você tem que adicionar um chip controlador RS-485 como o MAX481 e anexá- lo ao hardware da interface baseada em série do microcontrolador ATMEGA. Um correspondente Arduino compatível DMX escudo pode ser encontrada em DMXShield.aspx . DMX e RDM DMX521 ou DMX em suma foi definido para controlar os efeitos de raios palco usando cabos de estilo XLR. Um bom ponto de partida para obter mais informações sobre a história e evolução de DMX pode ser encontrada na Wikipedia: http://en.wikipedia.org/wiki/DMX512 Algumas informações Arduino relacionada também está disponível no playground do site do Arduino: http://www.arduino.cc/playground/Learning/DMX Enquanto DMX foi projetado para ter um único emissor e vários receptores. Em 2006, um protocolo bidirecional chamado RDM foi definido que aumenta DMX que permite uma comunicação bi-direcional que eu gosto de apoiar também. Veja também: http://en.wikipedia.org/wiki/RDM_ (iluminação) Ambos, o hardware e software decisões e os projetos foram feitos para apoiar RDM e DMX e morrer Arduino escudo pode ser usado para tudo isso. Com esta primeira versão Controladores porém apenas DMX (somente envio) e Receptores DMX (só ouvindo) são suportados modo de operação. Antes de iniciar a soldagem e programação que eu fiz alguma pesquisa sobre projetos de interface já existentes DMX e marcada por dicas de design bons e ruins. Níveis de protocolo DMX O nível lógico de comunicação DMX é construído sobre envio de série com 250,000 transmissão de acordo com a definição RS- 485 sem uso de bits de paridade e 2 bits de parada. Felizmente as portas seriais de hardware construído nos chips Atmega usado na placa Arduino apoia este tipo de comunicação e essa alta taxa de transmissão. ver também http://en.wikipedia.org/wiki/RS-485 Não há nada de especial sobre os níveis deste protocolo de comunicação, exceto o quadro de reset que é baixa para mais de 88 ms. Os dois bits de paragem tem um tempo mínimo de 8 μsecs mas este tempo pode ser mais longo se para um segundo. Depois de um quadro de redefinição dos bytes de carga útil são transmitidos pelo host DMX usando um byte inicial (valor 0) e máximo de 512 bytes de valor do canal. Não é recomendado para enviar menos de 24 canais. casa projetos blogs contato www.mathertel.de -> Arduino Projetos -> Biblioteca DMXSerial

Upload: ernandofranco

Post on 28-Dec-2015

83 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: A Biblioteca Arduino Para Enviar e Receber DMX

mathertel.de

A Biblioteca Arduino para enviar e receber DMXEsta é uma biblioteca para envio e recebimento de códigos DMX usando o plattform Arduino ou um ATmega (ATmega168,ATmega328 ou similar) processador com uma velocidade de clock de 16 MHz.

A biblioteca evita problemas timming sobre o protocolo de baixo nível que normalmente existe ao usar implementações desoftware usando o hardware de comunicação serial interna dos chips. Portanto, é muito acrítica para adicionar-lhe efeitosespecíficos DMX em cima desta biblioteca de comunicação.

DMX envio e recebimento DMX são ambos suportados por esta biblioteca. Você pode encontrar uma breve descrição de usaros detalhes dos registros de hardware de série neste artigo.

Baixar

Faça o download dos arquivos de biblioteca, incluindo duas amostras para envio e recebimento de mensagens de DMX:

DMXSerial.zip

Ferragens

Este esboço e biblioteca mostra como usar a interface de hardware de série para envio e recebimento de pacotes de dadosDMX.

Para ter um hardware compatível DMX mínimo você tem que adicionar um chip controlador RS-485 como o MAX481 e anexá-lo ao hardware da interface baseada em série do microcontrolador ATMEGA. Um correspondente Arduino compatível DMXescudo pode ser encontrada em DMXShield.aspx .

DMX e RDM

DMX521 ou DMX em suma foi definido para controlar os efeitos de raios palco usando cabos de estilo XLR. Um bom ponto departida para obter mais informações sobre a história e evolução de DMX pode ser encontrada na Wikipedia:http://en.wikipedia.org/wiki/DMX512

Algumas informações Arduino relacionada também está disponível no playground do site do Arduino:http://www.arduino.cc/playground/Learning/DMX

Enquanto DMX foi projetado para ter um único emissor e vários receptores. Em 2006, um protocolo bidirecional chamado RDMfoi definido que aumenta DMX que permite uma comunicação bi-direcional que eu gosto de apoiar também. Veja também:http://en.wikipedia.org/wiki/RDM_ (iluminação)

Ambos, o hardware e software decisões e os projetos foram feitos para apoiar RDM e DMX e morrer Arduino escudo pode serusado para tudo isso.

Com esta primeira versão Controladores porém apenas DMX (somente envio) e Receptores DMX (só ouvindo) são suportadosmodo de operação.

Antes de iniciar a soldagem e programação que eu fiz alguma pesquisa sobre projetos de interface já existentes DMX emarcada por dicas de design bons e ruins.

Níveis de protocolo DMX

O nível lógico de comunicação DMX é construído sobre envio de série com 250,000 transmissão de acordo com a definição RS-485 sem uso de bits de paridade e 2 bits de parada.

Felizmente as portas seriais de hardware construído nos chips Atmega usado na placa Arduino apoia este tipo de comunicaçãoe essa alta taxa de transmissão. ver também http://en.wikipedia.org/wiki/RS-485

Não há nada de especial sobre os níveis deste protocolo de comunicação, exceto o quadro de reset que é baixa para mais de88 ms. Os dois bits de paragem tem um tempo mínimo de 8 μsecs mas este tempo pode ser mais longo se para um segundo.

Depois de um quadro de redefinição dos bytes de carga útil são transmitidos pelo host DMX usando um byte inicial (valor 0) e

máximo de 512 bytes de valor do canal. Não é recomendado para enviar menos de 24 canais.

casa projetos blogs contato

www.mathertel.de -> Arduino Projetos -> Biblioteca DMXSerial

Page 2: A Biblioteca Arduino Para Enviar e Receber DMX

25/12/12 A Biblioteca Arduino para enviar e receber DMX

2/4w w w .mathertel.de/Arduino/DMXSerial.aspx

máximo de 512 bytes de valor do canal. Não é recomendado para enviar menos de 24 canais.

Este DMX e RDM especificação permite envio e recebimento de DMX usando o hardware built-in. Os truques que precisamosserá explicado mais abaixo.

Não usar a implementação Arduino Serial

Eu aprendi a evitar o uso da implementação padrão de série do Arduino. Há um problema com ele ao acessar a interface basede série do hardware, porque o tipo de série de paridade e de paragem manipulação bit não está definido em tudo e osvalores padrão são usados.

Em vez de usar o objeto embutido de série que é implementado na biblioteca HardwareSerial esta biblioteca inicializa econtrola todo o controle Registros por si só.

Houve uma primeira abordagem publicada em http://arduino.cc/playground/Learning/DMXSerial em 2011 que usouo build-in implementação de série, mas o fato é que ao usar os recursos de interrupção existe um conflito de implementaçãocom as rotinas de interrupção necessária para DMX e as rotinas existentes interrupção da implementação padrão de série. Ohttp://arduino.cc/playground/DMX/Ardmx local menciona que o arquivo principal tem que ser modificado - mas issonão é verdade em série não é usado em tudo.

Então você tem que evitar o uso do objeto de série e, mesmo não usá-lo para fins de depuração!

Usando a interface serial através de registos

Existem várias configurações do hardware que têm de ser implementadas para permitir a interface built-in de série. Seu euapenas vou através da implementação de sua orientação como ele é feito.

Envio e recebimento de DMX O nível lógico de comunicação DMX é construído em cima de série o envio de até 512 bytesusando 250,000 horários de transmissão sem bits de paridade e 2 bits de parada. Felizmente as portas seriais de hardwareconstruído nos chips Atmega usado na placa Arduino apoia este tipo de comunicação e essa alta taxa de transmissão.

Ativando o hardware tem que ser feito, definindo os bits correspondentes no controle USART e Status Register B. A seguir sepermitindo o envio e os dados correspondentes Registre interrupção vazio no caso do modo DMXController:

/ / Ativar transmissor e interromperUCSRnB = (1 << TXENn) | (1 << UDRIEn);

Permitindo que o receptor e o correspondente Receber Interrupt completo, no caso do modo de DMXReceiver é muitosemelhante:

/ / Ativar receptor e receber interrupção

UCSRnB = (1 << RXENn) | (1 << RXCEn);

Definir a taxa de transmissão é implementado na função _DMXSerialBaud porque muitas vezes temos que mudar isso quandoenviar pacotes DMX. O código de fonte desta função é muito semelhante ao utilizado na implantação de série padrão, a nãoser que também define o modo de transmissão de 2 bits de paragem, 8 bits de dados e sem paridade:

/ / Inicializar a porta serial do hardware com a taxa de transmissão dado

/ / Usando 8 bits de dados dados de um 2 stop bits.vazio _DMXSerialBaud (baud longa){

baud_setting uint16_t;

/ / Calcula as configurações de transmissão

baud_setting = (F_CPU / 8 / baud - 1) / 2;

/ / Atribuir o baud_setting para a taxa de transmissão USART Registre-se

UBRRnH = baud_setting >> 8; UBRRnL = baud_setting;

/ / 2 stop bits e 8 tamanho caráter bit, sem paridade UCSRnC = (1 << USBSn) | (3 << USCZn0);} / / _DMXSerialBaud

Enviando um byte, usando o hardware é feito escrevendo um novo valor para os dados USART Registre depois de verificar quenão há transmissão atual.

_DMXSerialWrite void (dados uint8_t)

{ / / Espera para buffer de transmissão vazio while (! (UCSRnA & (1 << UDREn)))

; / / Coloque os dados em buffer, envia os dados UDRn = dados;

} / _DMXSerialWrite /

Page 3: A Biblioteca Arduino Para Enviar e Receber DMX

25/12/12 A Biblioteca Arduino para enviar e receber DMX

3/4w w w .mathertel.de/Arduino/DMXSerial.aspx

Onde você pode encontrar mais detalhes sobre esta linha de código

Na documentação oficial da ATMEL para o microcontrolador ATMEGA328P há um capítulo 20 sobre o interno Receptorsíncrona e assíncrona serial universal e transmissor (USART) a partir da página 178. Há também chips de microcontroladorATmega na família que têm mais do que uma USART, de modo a USART também é referenciada pelo número 0 com USART(USART0).

No diagrama de blocos que você pode ver que existem alguns registros de software endereçáveis (em negrito) utilizados paraconfigurar essas portas. O nome dos registradores são UBRRn, UDRn, UCSRnA, UCSRnB e UCSRnC onde n é o espaçoreservado para o número da USART. Os registros concretos para a USART0 são:

UBRR0H e UBRR0L: Registros Baud Rate

UDRn: I / O de dados registra

UCSR0A: Controle e Status registrar um

UCSR0B: Controle e Status Register B

UCSR0C: Controle e registro de status C

No capítulo Register Descrição 20,11 você pode encontrar uma breve descrição de cada registo faz.

A biblioteca Arduino Serial cuida de muitas configurações quando inicializado pelo telefone Serial.begin ([taxa detransmissão]). Na pasta \ hardware \ arduino \ núcleos \ arduino você pode encontrar o HardwareSerial.cpp arquivo com aimplementação desta biblioteca. Você pode procurar o método begin e pode ver que a taxa de transmissão é usado paracalcular os valores para os registros UBRR0H (_ubrrh) e UBRR0L (_ubrrl) e alguns trechos do UCSR0B registo (_ucsrb) estãodefinidos. Não há nenhuma inicialização do controlo e C Estado Register em tudo.

Esta linha de código define o modo de comunicação serial para o modo assíncrono (UMSEL01 e UMSEL00 não estãodefinidos), não o modo de paridade (UPM01 e UPM02 não estão definidos), 2 bits de parada (1 << USBS0) e 8 tamanho doscaracteres pouco (3 < <UCSZ00).

Receber rotina de interrupção

Recepção de um byte não é implementada usando uma função, em vez de uma rotina de serviço de interrupção é registado eserá chamada quando um pacote de dados foi recebido e detectado pelo hardware. Não ciclos de CPU são necessários para aespera. Os dados recebidos está disponível nos dados USART Receber Registrar UDRn e um potencial buffer overflow que vaiacontecer quando receber o sinal de reset DMX está disponível em USART Estado de Controle Registre Um UCSRnA. Ambos osvalores são armazenados em variáveis locais para uso posterior:

ISR (USART_RX_vect) {

uint8_t USARTstate = UCSRnA / / obter o estado antes de dados!uint8_t DmxByte = UDRn / / obter dados

...}

A rotina de interrupção de envio

Esta rotina de interrupção é chamado pelo hardware apenas depois de um byte foi completamente enviado. Esta rotinaseguida, verificar para o próximo byte que tem de ser enviado para fora. No modo DMX controlador a rotina começanovamente com o envio do sinal de reset, quando todos os dados do pacote completo é enviado.

ISR (USART_UDRE_vect) {... }

Enviando o reset

O chip Arduino padrão suporta a taxa de transferência de 250,000 baud que é usado por DMX. A única excepção a umacomunicação simples 250,000 baud este é o sinal BREAK / reinicialização que é um nível físico baixo no fio para mais de 88ms.

Este sinal de 88 mseg baixo não podem ser enviados usando a taxa de 250,000 baud. Para enviar a ruptura de um ritmo maislento de transmissão é inicializado, um byte 0 é enviado e a taxa de transmissão é reiniciada para a transmissão 250,000correta.

/ / Setup taxa mais lenta baud_DMXSerialBaud (115200);

/ / E enviar um byte 0_DMXSerialWrite ((Uint8_t) 0);

Depois do intervalo foi enviada com o seguinte código volta para 250,000 de transmissão para enviar os bytes de dados:

Page 4: A Biblioteca Arduino Para Enviar e Receber DMX

25/12/12 A Biblioteca Arduino para enviar e receber DMX

4/4w w w .mathertel.de/Arduino/DMXSerial.aspx

Serial.begin (250.000); Serial.write ((uint8_t) 0);

O segundo problema com o formato usado pelo DMX é o número de bits de parada. Normalmente, ao usar a porta serialapenas um bit de parada é usado. Adicionando um pouco segunda parada não pode ser feito através de uma chamada deparâmetro ou biblioteca de configuração mas deve ser feito através do ajuste da configuração de hardware para a porta serial0:

UCSR0C = (1 << USBS0) | (3 << UCSZ00);

Você pode encontrar este código na rotina de interrupção do serviço para iniciar um pacote DMX completa e continuamenteenviando os valores DMX no modo DMXController.

Um projeto para um Escudo DMX que trabalha com esta biblioteca pode ser encontrada no artigo: DMX Escudo .

Como detectar que um dispositivo é desligado?

Não é possível detectar que nenhum dos cabos está realmente ligado a um dispositivo sem a adição de mais hardware.Portanto, há uma solução mais suave (baseado em software) para isso.

Quando um pacote DMX é recebida a biblioteca se lembra da hora atual para uma variável estática. Ao utilizar este valor ométodo "DMXSerial.noDataSince ()" o retorna o número de milissegundos desde o último pacote foi recebido.

O tempo é calculado utilizando a millis () função.

No circuito principal ou em qualquer outro lugar você pode verificar se o sinal DMX foi recebido durante o tempo passado ereagir, se for muito tempo atrás.

Na amostra DmxSerialRecv.pde há uma chamada para a função para mostrar uma cor fallback (vermelho no meu caso).

Ligações

DMX no site do Arduino. Um bom ponto de partida para a pesquisa: http://www.arduino.cc/playground/Learning/DMX

Sobre o HSV e HSL Modelos de cores RGB: http://en.wikipedia.org/wiki/HSL_and_HSV

A documentação para o microcontrolador ATMEGA328P pode ser encontrado em:http://www.atmel.com/dyn/resources/prod_documents/doc8271.pdf

RS-485 Descrição http://en.wikipedia.org/wiki/RS-485

DMX Descrição http://en.wikipedia.org/wiki/DMX512

MAX481 e MAX485 da MAXIM: http://www.maxim-ic.com/datasheet/index.mvp/id/1111

História

2011/08/24 primeira versão publicada.2011/04/12 atualização para compatibilidade com o meio ambiente 1,0 Arduino.2012/10/05 Adicionado o método DMXSerial.noDataSince ()2012/04/06 Agora inicializar o UCSRnA registo a 0 corretamente para evitar problemas com Arduino UNOSconfigurações de velocidade de transmissão de casal.2012/11/08 Update para ajustar algumas condições de tempo e otimizações. Muito obrigado a Jonathan L.

Esta página é parte do http://www.mathertel.de/ site.