DMX512 is a theatrical lighting control system, and I designed one. Each of the 512 bus addresses contains a light capable of being adjusted from 00 (off) to FF (full on) quickly. While the max bus address count is 512, in fact even the largest theatrical production has less than 150 addresses used. You will need to have a queue capable of storing the max number of destination addresses expected. The PIC16F648 has 368 registers, so 256 can be reserved for temp storage, and 80 or so for temporary storage. That should be plenty. At 250KB there is NO space between outputs, so there are incredibly few instructions between transmit bytes. In fact, your only hope is to stuff two serial bytes at a time if possible in order to gain time to go pickup the serial byte coming in.Your serial command has to be at least two bytes, ADR+DATA+. If you have more than 256 addresses used, the address expands to another byte. Since you have 3 bytes at 115KB and are pumping 512 bytes at 250KB, the timing means that during an output sweep you could conceivably receive 50 new values. Those values can be directly jammed into their correct slot during a sweep as long as that address has ALREADY been transmitted with the old value. If not, it has to be stored for a good housekeeping time. Use a F648 PIC at 20Mhz. Use TMR2 to generate an int at 115kb bit time and use INT to trigger the falling edge of the START BIT, a standard hardware UART. No external UART can be used, the overhead is just too high. I've used the MAX3110 for something else but its too much overhead for this app. At the end of every sweep, there is time to do some housekeeping, a few mS. I'd setup the input serial data as a circular queue, extracting and stuffing as time becomes available. It was a fun project. But it always makes you wish that you had more time.. It might be easier to use one of the 40mhz 18F parts. --Bob Eric Christensen wrote: > I've used the MAX3110 before without any problems. Just quickly looking at > the parts, the 3110 seems to be a 3100 with built in level converters. The > pic I used had an external interrupt, so I just wired the 3110's INT line to > INT0 on the PIC. I configured the 3110 to throw an interrupt whenever there > was new data in the fifo and wrote an ISR that transfered one byte from the > 3110 to the pic. Seemed to work fine for me. -- Replies: NOTE-Script, EXE,BAT and COM files will be rejected by server -------------- Bob Axtell PIC Hardware & Firmware Dev http://beam.to/baxtell 1-520-219-2363 -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.