Search the Community

Showing results for tags 'ws281x'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News
    • Announcements
    • Suggestions
    • New users say Hi!
  • Spotlight!
    • Sponsor Spotlight
    • Sponsor Giveaways
  • Energia
    • Energia - MSP
    • Energia - TivaC/CC3XXX
    • Energia - C2000
    • Energia Libraries
  • MSP Technical Forums
    • General
    • Compilers and IDEs
    • Development Kits
    • Programmers and Debuggers
    • Code vault
    • Projects
    • Booster Packs
    • Energia
  • Tiva-C, Hercules, CCXXXX ARM Technical Forums
    • General
    • SensorTag
    • Tiva-C, Hercules, CC3XXX Launchpad Booster Packs
    • Code Vault
    • Projects
    • Compilers and IDEs
    • Development Kits and Custom Boards
  • Beagle ARM Cortex A8 Technical Forums
    • General
    • Code Snippets and Scripts
    • Cases, Capes and Plugin Boards
    • Projects
  • General Electronics Forum
    • General Electronics
    • Other Microcontrollers
  • Connect
    • Embedded Systems/Test Equipment Deals
    • Buy, Trade and Sell
    • The 43oh Store
    • Community Projects
    • Fireside Chat
  • C2000 Technical Forums
    • General
    • Development Kits
    • Code Vault
    • Projects
    • BoosterPacks

Calendars

There are no results to display.


Found 2 results

  1. Here is some code to drive ws281x strips using DMA driven SPI for the msp430f5529. I hadn't seen any example code showing how to use DMA and SPI. The example also provides some code that shows how to use inline asm that will work with both msp430-gcc and msp430-elf-gcc. The code below was tested with a ws2811 strip and msp430-elf-gcc. https://gist.github.com/RickKimball/9761b8f5a89d46a53939 -rick
  2. Using the FRAM as though it were RAM on the msp430fr59xx chips can make it really easy to drive those ws281x chips even at a relatively slow MCU clock rate. The ws281x chips are great because you can get a boat load of leds for the cost of only one pin. Also, it doesn't hurt the price of these ws281x chips keeps falling and making them more and more attractive. I decided to see if I could take advantage of FRAM to help me drive some of those leds. I ended up with an extremely simple driver routine that works great even when you clock the FRAM MCU @ 6MHz. You couldn't really do this on a RAM limited msp430 chip as you would quickly run out of memory. ... I configured the FRAM chip for 6MHz and then configured the SPI to use a clock divisor of 1 the MOSI is selected for output and is wired to ws281x DIN pin. ... static const uint8_t frame_buffer[60*3*8] = {0}; /* provide an FRAM buffer for a strip of 60 leds */ /* * inline msp430-elf-gcc asm version */ void sendRGB(uint8_t * led_data, unsigned led_data_len) { const uint8_t *led_data_end = led_data+led_data_len; uint8_t *dest = const_cast<uint8_t *>(&frame_buffer[0]); uint8_t *frame = dest; do { unsigned color = *led_data++; register unsigned colormask = 0x80; do { *dest++ = (color & colormask) ? 0x78 : 0x60; colormask = colormask >> 1; } while (colormask); } while (led_data < led_data_end); // shift out bits in MSB order without much delay __asm__ __volatile__ ( "1:\n" " mov.b @%[led_data]+, %[TXBUF] ; 5 cycles\n" " jmp .+2 ; 2 cycles\n" " cmp %[led_data_end], %[led_data] ; 4 cycle\n" " jl 1b ; 2 cycles\n" :[led_data] "+&r" (frame) ,[led_data_end] "+r" (dest) :[TXBUF] "m" (UCB0TXBUF) : "cc" ); In the code above, I provided a function that expects an array of RGB data (well GRB data actually ) and I I looped through it and setup the FRAM buffer with proper SPI bits for ~333ns/~666ns and with a period of ~1500 ns. The wave it spews out looks really pretty on my scope. Best of all, the ws281x chips seem to like it. I encountered one wierd anomaly of the eUSCI periperal. It seems that if the high bit of the last thing you sent is high, then the MOSI pin floats high instead of leaving the value at the last bit set. This is why I'm using 0x78 (0b01111000) and 0x60 (0b01100000) instead if 0xF0 and 0xC0. I wasted a bunch of time trying to find out why my code wasn't working on that one. I never did find a tech note or errata about it. If you are using the SPI device as a normal SPI device instead of a shift register, it wouldn't matter. -rick