On Nov 2, 2006, at 9:53 AM, Martin Peach wrote:
Hans-Christoph Steiner wrote:
On Oct 6, 2006, at 9:53 AM, Martin Peach wrote:
...
In the Pd_firmware.pde code the pins are set on at a time even if
the data is sent as two bytes:for(i=0; i<7; ++i) { mask = 1 << i; if( (digitalPinStatus & mask) && !(pwmStatus & mask) ) { digitalWrite(i, inputData & mask); } }
I am definitely open to suggestions as to how to make the code
work better. I've been focused on the protocol design, so little
optimization has happened. In this case, its not quite as simple
as just getting the byte from the serial port and writing it to
the ports. If a PWM is running, then you don't want to write to
that port, that's what pwmStatus is doing.From what I read about the functions that write a byte at a time
to the digital pins, you have to have all of the pins set to
OUTPUT in order to use them. But I could be wrong.In assembly you can definitely write bytes to the ports, the PWM
pins and any other special-purpose pins just ignore the values. In
the PIC version that's what I do, because the bit-write
instructions don't work properly unless all the pins are outputs. I
guess it's Wiring that needs looking at...
There is not a Wiring/Arduino function for writing bytes, but in that
environment you can just use avr-libc and other libs as if you were
writing straight C/C++:
#include <blah.h>
blah_bytewrite(writeThisByte);
The Wiring/Arduino environment basically just does some
preprocessing, otherwise its straight C++ compiled by gcc.
.hc
http://at.or.at/hans/