A library for mastering a DMX chain. You'll meed a max485 or equivalent to convert the digital output to the differential RS-485 protocol.

Committer:
User_4574
Date:
Sat Jul 09 19:42:54 2011 +0000
Revision:
1:7daf1361d960
Parent:
0:9f79770fc0a8
Put some details at the top.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
User_4574 1:7daf1361d960 1 /* DMX Packet Library
User_4574 1:7daf1361d960 2 * Nathan Lasseter (User_4574) 2011
User_4574 1:7daf1361d960 3 * Released unlicenced
User_4574 1:7daf1361d960 4 * http://www.dmx512-online.com/packt.html
User_4574 1:7daf1361d960 5 */
User_4574 1:7daf1361d960 6
User_4574 0:9f79770fc0a8 7 #include "mbed.h"
User_4574 0:9f79770fc0a8 8 #include "DMXPacket.h"
User_4574 0:9f79770fc0a8 9
User_4574 0:9f79770fc0a8 10 void init(DigitalOut* dmx) {
User_4574 0:9f79770fc0a8 11 /* initialise */
User_4574 0:9f79770fc0a8 12 *dmx = MARK;
User_4574 0:9f79770fc0a8 13 return;
User_4574 0:9f79770fc0a8 14 }
User_4574 0:9f79770fc0a8 15
User_4574 0:9f79770fc0a8 16 void sendBreak(DigitalOut* dmx) {
User_4574 0:9f79770fc0a8 17 /* BREAK */
User_4574 0:9f79770fc0a8 18 *dmx = BREAK;
User_4574 0:9f79770fc0a8 19 wait_us(120 * PW);
User_4574 0:9f79770fc0a8 20 return;
User_4574 0:9f79770fc0a8 21 }
User_4574 0:9f79770fc0a8 22
User_4574 0:9f79770fc0a8 23 void sendMarkAfterBreak(DigitalOut* dmx) {
User_4574 0:9f79770fc0a8 24 /* MARK AFTER BREAK */
User_4574 0:9f79770fc0a8 25 *dmx = MARK;
User_4574 0:9f79770fc0a8 26 wait_us(3 * PW);
User_4574 0:9f79770fc0a8 27 return;
User_4574 0:9f79770fc0a8 28 }
User_4574 0:9f79770fc0a8 29
User_4574 0:9f79770fc0a8 30 void sendStartCode(DigitalOut* dmx) {
User_4574 0:9f79770fc0a8 31 /* 1 START 8 DATA */
User_4574 0:9f79770fc0a8 32 *dmx = BREAK;
User_4574 0:9f79770fc0a8 33 wait_us(9 * PW);
User_4574 0:9f79770fc0a8 34
User_4574 0:9f79770fc0a8 35 /* 2 STOP */
User_4574 0:9f79770fc0a8 36 *dmx = MARK;
User_4574 0:9f79770fc0a8 37 wait_us(2 * PW);
User_4574 0:9f79770fc0a8 38 return;
User_4574 0:9f79770fc0a8 39 }
User_4574 0:9f79770fc0a8 40
User_4574 0:9f79770fc0a8 41 void sendChannelData(DigitalOut* dmx, char* channelData) {
User_4574 0:9f79770fc0a8 42 char i, data = *channelData;
User_4574 0:9f79770fc0a8 43 /* 1 START */
User_4574 0:9f79770fc0a8 44 *dmx = BREAK;
User_4574 0:9f79770fc0a8 45 wait_us(PW);
User_4574 0:9f79770fc0a8 46
User_4574 0:9f79770fc0a8 47 /* 8 DATA */
User_4574 0:9f79770fc0a8 48 for(i = 0xF0; i; i >>= 1) {
User_4574 0:9f79770fc0a8 49 *dmx = ((data & i) ? MARK : BREAK);
User_4574 0:9f79770fc0a8 50 wait_us(PW);
User_4574 0:9f79770fc0a8 51 }
User_4574 0:9f79770fc0a8 52
User_4574 0:9f79770fc0a8 53 /* 2 STOP */
User_4574 0:9f79770fc0a8 54 *dmx = MARK;
User_4574 0:9f79770fc0a8 55 wait_us(2 * PW);
User_4574 0:9f79770fc0a8 56 return;
User_4574 0:9f79770fc0a8 57 }
User_4574 0:9f79770fc0a8 58
User_4574 0:9f79770fc0a8 59 void writePacket(DigitalOut* dmx, char* channelData, int channelCount) {
User_4574 0:9f79770fc0a8 60 int i;
User_4574 0:9f79770fc0a8 61
User_4574 0:9f79770fc0a8 62 /* BREAK */
User_4574 0:9f79770fc0a8 63 sendBreak(dmx);
User_4574 0:9f79770fc0a8 64
User_4574 0:9f79770fc0a8 65 /* MARK AFTER BREAK */
User_4574 0:9f79770fc0a8 66 sendMarkAfterBreak(dmx);
User_4574 0:9f79770fc0a8 67
User_4574 0:9f79770fc0a8 68 /* START CODE */
User_4574 0:9f79770fc0a8 69 sendStartCode(dmx);
User_4574 0:9f79770fc0a8 70
User_4574 0:9f79770fc0a8 71 /* CHANNEL DATA */
User_4574 0:9f79770fc0a8 72 for(i=0; i<channelCount; i++) {
User_4574 0:9f79770fc0a8 73
User_4574 0:9f79770fc0a8 74 /* MARK TIME BETWEEN FRAMES */
User_4574 0:9f79770fc0a8 75 *dmx = MARK;
User_4574 0:9f79770fc0a8 76 wait_us(MTBF * PW);
User_4574 0:9f79770fc0a8 77
User_4574 0:9f79770fc0a8 78 /* CHANNEL DATA */
User_4574 0:9f79770fc0a8 79 sendChannelData(dmx, channelData + i);
User_4574 0:9f79770fc0a8 80 }
User_4574 0:9f79770fc0a8 81
User_4574 0:9f79770fc0a8 82 /* MARK TIME BETWEEN PACKETS */
User_4574 0:9f79770fc0a8 83 /* AND RETURN TO IDLE */
User_4574 0:9f79770fc0a8 84 *dmx = MARK;
User_4574 0:9f79770fc0a8 85 wait_us(MTBP * PW);
User_4574 0:9f79770fc0a8 86 return;
User_4574 0:9f79770fc0a8 87 }