Advertisement
Guest User

Neopixel primer 2

a guest
Mar 19th, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. #define PIXEL_PORT  PORTB
  2. #define PIXEL_DDR   DDRB
  3. #define PIXEL_BIT   4
  4.  
  5. #define PIXEL_COUNT 16
  6.  
  7.  
  8. unsigned char r = 0;
  9. unsigned char g = 0;
  10. unsigned char b = 10;
  11.  
  12. inline void sendByte(unsigned char b) {
  13.   for (int i = 7; i >= 0; i--) {
  14.     if (b & 1 << i) { // bit = 1
  15.       asm volatile (
  16.       "sbi %[port], %[bit] \n\t"  
  17.       "nop \n\t"
  18.       "nop \n\t"
  19.       "nop \n\t"
  20.       "nop \n\t"
  21.       "nop \n\t"
  22.       "nop \n\t"
  23.       "nop \n\t"
  24.       "nop \n\t"
  25.       "nop \n\t"
  26.       "nop \n\t"
  27.       "nop \n\t"
  28.       "nop \n\t"
  29.       "cbi %[port], %[bit] \n\t"  
  30.       "nop \n\t"
  31.       "nop \n\t"
  32.       "nop \n\t"
  33.       "nop \n\t"
  34.       "nop \n\t"
  35.       "nop \n\t"
  36.       "nop \n\t"
  37.       "nop \n\t"
  38.       ::
  39.       [port] "I" (_SFR_IO_ADDR(PIXEL_PORT)),
  40.       [bit] "I" (PIXEL_BIT)      
  41.       );
  42.     } else { // bit = 0
  43.       asm volatile (
  44.       "sbi %[port], %[bit] \n\t"  
  45.       "nop \n\t"
  46.       "nop \n\t"
  47.       "nop \n\t"
  48.       "nop \n\t"              
  49.       "cbi %[port], %[bit] \n\t"  
  50.       "nop \n\t"
  51.       "nop \n\t"
  52.       "nop \n\t"
  53.       "nop \n\t"
  54.       "nop \n\t"
  55.       "nop \n\t"
  56.       "nop \n\t"
  57.       "nop \n\t"
  58.       "nop \n\t"
  59.       "nop \n\t"
  60.       "nop \n\t"
  61.       "nop \n\t"                
  62.       ::
  63.       [port] "I" (_SFR_IO_ADDR(PIXEL_PORT)),
  64.       [bit] "I" (PIXEL_BIT)                  
  65.       );
  66.     }
  67.   }
  68. }
  69.  
  70. void setup() {
  71.     bitSet(PIXEL_DDR , PIXEL_BIT);
  72.     delay(1);  
  73.    
  74.     cli(); //disable interrupts
  75.     for(int j = 0; j < PIXEL_COUNT; j++) {
  76.       //NOTE: colors - G-R-B
  77.       sendByte(g);
  78.       sendByte(r);
  79.       sendByte(b);
  80.     }
  81.     sei(); //enable interrupts    
  82.     delayMicroseconds(7);
  83. }
  84.  
  85. void loop() {
  86.   // put your main code here, to run repeatedly:
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement