hiya bruce thanx for the reply...
i have been on the microchip site n secrched the 16f7 series. i cant seem to find a chip with more than 2 comparators/pwm channels...
do you have a specific chip num please?
thank's.
oscar
hiya bruce thanx for the reply...
i have been on the microchip site n secrched the 16f7 series. i cant seem to find a chip with more than 2 comparators/pwm channels...
do you have a specific chip num please?
thank's.
oscar
I don't know of any 16F series with more than 2 comparators, but
the 16F737, 747, 767 and 777 all have 3 PWM channels.
thanx for the info bruce. ur a star !!!!!!!!
found just what i wanted n seems as if the code should be compatible enough.
Could you share your code - I'd be very interested !!
Thanks,
Bill
I would love to see your code on that-- that very problem (DMX in PICBasic only) has been plaguing me for years and I've never had the time on a project to sit down and figure it out. Seeing your code would be immensely helpful! Also, I have a subroutine implemented as inline assembler that you might find helpful-- it does 8 simultaneous channels of PWM. Let me know if you're interested!
Thanks--
--Alan
DMX isn't too bad if you spend a while in the datasheet. Depending on the chip you use, there are a few 'optimal' clock speeds which will allow you to send and receive zero error.
It's just asynchronous serial @ 250 kbaud.
I've used both '628s @ 20MHz and F88 chips @ 16Mhz, both transmitting and receiving.
Just receive through an appropriate level shifting chip (MAX485, SN75176 or similar).
The first thing I do is watch for the 'break' signal. PULSIN works remarkably well for this. I set a reasonable timeout duration and just keep watching for that 80 uS minimum break period.
Then, I use a WHILE RCIF = 0 : WEND loop to sit there and wait for something else to come through the USART.
Once I've found a valid break, the next byte is the start code. For dimmers, it should be zero.
Then I just increment a counter each time a byte comes through and when I've received what I want, I exit the loop.
I've not ever tried to implement a full interrupt based receiving system, as my other housekeeping code was fairly lightweight. However, it shouldn't be hard to do in theory.
Transmitting is almost the same: just generate a 'break' signal (I like 120 uS), send out a zero byte and then however many bytes of channel data you need. With tight code, I can output 512 channels @ almost 40 Hz...
John
Bookmarks