Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void setup()
- {
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- digitalWrite(8, HIGH);
- digitalWrite(9, HIGH);
- Serial.begin(115200);
- // DDRB |= (1 << DDB0) | (1 << DDB1);
- // PORTB |= (1 << PORTB0);
- // PORTB |= (1 << PORTB1);
- /* // Set Timer1 CTC
- TCCR1B = (TCCR1B & ~_BV(WGM13)) | _BV(WGM12);
- TCCR1A = TCCR1A & ~(_BV(WGM11) | _BV(WGM10));
- // No prescaler (p.134)
- TCCR1B = (TCCR1B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);
- OCR1A = 0;
- TIMSK1 |= _BV(OCIE1A);*/
- }
- #define nop() __asm volatile ("nop")
- #define nop1() nop();
- #include <nopnopnop.h>
- #define onD() PORTB = (1 << PORTB0);
- #define onC() PORTB = (1 << PORTB1);
- #define onB() PORTB = (1 << PORTB0) | (1 << PORTB1);
- #define offB() PORTB = 0;
- #define off() nop10(); PORTB = 0;
- #define off2() nop10(); PORTB = 0; nop10();
- #define DH() PORTB |= (1 << PORTB0)
- #define CH() PORTB |= (1 << PORTB1)
- #define DL() PORTB &= ~(1 << PORTB0)
- #define CL() PORTB &= ~(1 << PORTB1)
- #include <util/delay.h>
- #define D_ALL 0b01010001
- #define C_ALL 0b00001101
- #define D_PIXEL 0b01100011
- #define D_GREEN 0b00010000
- #define D_RED 0b00001000
- #define D_BLUE 0b00000100
- #define D_WHITE 0b00011100
- #define D_BLACK 0b00000000
- #define C_PIXEL 0b01000100
- #define D_P69 0b01000010
- #define C_P69 0b00100100
- #define C_MYSTERY1 0b01000000
- #define C_MYSTERY2 0b00011000
- #define DELAY 50
- // cccccc-ddddddd
- #define CMD_RAINBOW 0b11111000110001 // shifts a pixel for pwm
- #define CMD_DOPWM 0b10101000101000 // enables pwm mixing
- #define CMD_DOSWIPE 0b10101000100100 // enables backwards shifting?
- #define CMD_SHIFT 0b10001000110001 // shifts a pixel into the register
- #define CMD_CLS1 0b01001000111000 //?? before foreground paint
- #define CMD_SWIPE 0b01001000100001 //?? responsible for program 69
- #define CMD_CLS2 0b00101000100000 //?? before background paint
- #define CMD_BG 0b01001000110000 // paint background, broken
- #define CMD_FG 0b00001000101000 // paint foreground
- #define CMD_EMPTY 0b00001000100001 // shifts pixels, removed bg, but not all of it
- #define CMD_SETPWM 0b10001000100000 // pwm speed for fading
- // fade in : CMD_SETPWM + CMD_BG
- // fade out: CMD_SETPWM + CMD_BG | BG_OFF
- #define PWM_1 0b00100000000000
- #define PWM_2 0b00010000000000
- #define PWM_3 0b00000000001000
- #define PWM_4 0b00000000000100
- #define PWM_5 0b00000000000010
- #define SHIFT_CGREEN 0b01000000000000
- #define SHIFT_CRED 0b00100000000000
- #define SHIFT_CBLUE 0b00010000000000
- // bitmap
- // cccccc-ddddddd
- //#define RAINBOW+COL 0b111110 011***1 // shifts a pixel for pwm
- //#define SWIPE+M1+M2 0b111110 010***1
- //#define SWIPE+MYST1 0b110010 010***1
- //#define CMD_SETPWM 0b10**100010***0 // pwm speed for fading
- //#define CMD_SHIFT 0b1***10 011***1 // shifts a pixel into the register
- //#define SWIPE+MYST2 0b011110 010***1
- //#define CMD_CLS1 0b01**10 0111*00 //?? before foreground paint, set background as well
- //#define CMD_BG 0b01**10 0110*00 // paint background
- //#define CMD_SWIPE 0b010010 010***1 //?? responsible for program 69
- //#define CMD_CLS2 0b001010 0100000 //?? before background paint
- //#define CMD_FG 0b00**10 0101*00 // paint foreground
- //#define CMD_EMPTY 0b000010 0100001 // shifts pixels, removed bg, but not all of it
- // parameters
- #define BG_BLUE 0b00000000000100
- #define BG_GREEN 0b00010000000000
- #define BG_PERS 0b00100000000000
- #define BG_PERS2 0b00000000000010
- #define BG_RED 0b00000000001000
- #define BG_WHITE 0b00110000000100
- #define BG_OFF 0b00100000000000
- #define FG_RED 0b00000000000100
- #define FG_BLUE 0b00010000000000
- #define FG_GREEN 0b00100000000000
- #define FG_WHITE 0b00110000000100
- #define FG_OFF 0b00100000000000
- #define SHIFT_RED 0b00000000000100
- #define SHIFT_BLUE 0b00000000000010
- #define SHIFT_GREEN 0b00000000001000
- #define SHIFT_WHITE 0b00000000001110
- #define SWIPE_MYST1 0b10000000000000
- #define SWIPE_MYST2 0b00110000000000
- #define SWIPE_RED SHIFT_RED
- #define SWIPE_BLUE SHIFT_BLUE
- #define SWIPE_GREEN SHIFT_GREEN
- #define SWIPE_WHITE SHIFT_WHITE
- #define R CMD_FG | FG_RED
- #define B CMD_FG | FG_BLUE
- #define G CMD_FG | FG_GREEN
- #define W CMD_FG | FG_WHITE
- uint8_t wait;
- int pos = 0, pos2 = 10, pos3 = 16;
- int d = 1;
- int max = 160;
- int first = 0;
- #define ap(x) abs(159 - x)
- void pp(int p1, int p2, int p3)
- {
- for (int i = 0; i < 160; i++)
- {
- int c = 0;
- if (i == p1)
- c |= SHIFT_CRED;
- if (i == p2)
- c |= SHIFT_CGREEN;
- if (i == p3)
- c |= SHIFT_CBLUE;
- writeOne(CMD_SHIFT | c);
- }
- _delay_ms(10);
- }
- char buffer[160];
- void loop()
- {
- while (Serial.read() != 0xFF);
- for (int i = 0; i < 160; i++)
- buffer[i] = Serial.read();
- noInterrupts();
- for (int i = 0; i < 160; i++)
- writeOne(CMD_SHIFT | buffer[i]);
- interrupts();
- /*
- while (Serial.available())
- {
- int c = CMD_SHIFT | (Serial.read() << 10);
- writeOne(c);
- }7
- */
- return;
- writeOne(CMD_SHIFT | SHIFT_CBLUE | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE );
- writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN);
- writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN );
- writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN );
- writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN );
- writeOne(CMD_SHIFT | SHIFT_GREEN );
- writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
- writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
- writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
- writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
- writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
- writeOne(CMD_SHIFT | SHIFT_BLUE );
- writeOne(CMD_SHIFT | SHIFT_CBLUE | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_CBLUE | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_RED );
- _delay_ms(5000);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- writeOne(CMD_SHIFT | SHIFT_BLUE);
- _delay_ms(5000);
- /*
- writeOne(CMD_SHIFT | SHIFT_CBLUE);
- _delay_ms(500); */
- }
- // ? ? ? ? ? GG RR BB ?
- // DTI + 16 , 16 | 10 , 14 | 26 | 16 , 16 | 18 , 16 | 18 , 18 | 14 , 20 | 12 , 22 | 14 +
- // CKI | 16 , 16 , 10 | 14 , 26 , 16 | 16 , 18 | 16 , 18 | 18 , 14 | 20 , 12 | 22 , 14 |
- // ? ? ?
- // ? ? ? ? ? GG RR BB ?
- // DTI + 34 | 10 , 14 | 26 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 +
- // CKI | 34 , 10 | 14 , 26 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 |
- // ? ? ?
- #define _bit2(r, b, nops) if (C & (1 << b)) \
- r##H(); \
- \
- else \
- r##L(); \
- \
- nop##nops(); \
- #define _bit(r, b, nops) if (r & (1 << b)) \
- r##H(); \
- \
- else \
- r##L(); \
- \
- nop##nops(); \
- void writeOne(uint16_t C)
- {
- CL();
- nop46();
- _bit2(D, 6, 8);
- _bit2(C, 13, 18);
- _bit2(D, 5, 38);
- _bit2(D, 4, 15);
- _bit2(C, 12, 21);
- _bit2(D, 3, 21);
- _bit2(C, 11, 21);
- _bit2(D, 2, 21);
- _bit2(C, 10, 21);
- _bit2(D, 1, 21);
- _bit2(C, 9, 21);
- _bit2(D, 0, 21);
- _bit2(C, 8, 21);
- DH();
- nop32();
- CH();
- _delay_us(DELAY);
- }
- inline void writeByte(uint8_t D, uint8_t C)
- {
- _bit(C, 7, 46);
- _bit(D, 7, 8);
- _bit(C, 6, 18);
- _bit(D, 6, 38);
- _bit(D, 5, 15);
- _bit(C, 5, 21);
- _bit(D, 4, 21);
- _bit(C, 4, 21);
- _bit(D, 3, 21);
- _bit(C, 3, 21);
- _bit(D, 2, 21);
- _bit(C, 2, 21);
- _bit(D, 1, 21);
- _bit(C, 1, 21);
- DH();
- nop32();
- CH();
- }
- inline void writeByteCD(uint8_t C, uint8_t D)
- {
- writeByte(D, C);
- _delay_us(DELAY);
- }
- // volatile uint8_t times[] = { 32, 22, 26, 66, 36, 14, 34, 18, 16, 0xFF, 32, 24, 24, 36, 68, 20, 34, 16, 18, 0xFF }; // * 100.0ns<
- // volatile uint8_t cmds [] = { CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W0, CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W1 };
- // volatile uint8_t times[] = { 32, 22, 26, 66, 36, 14, 34, 18, 16, 0xFF, 32, 24, 24, 36, 16, 16, 16, 37, 35, 16, 18, 0xFF }; // * 100.0 ns<
- // volatile uint8_t cmds [] = { CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W0, CL, DL, DH, DL, DH, BH, DL, CL, CH, CL, DH, CH, W1 };
- // volatile uint8_t times[] = { 32, 22, 26, 66, 36, 14, 34, 18, 16, 0xFF, 32, 24, 24, 36, 34, 18, 70, 18, 16, 0xFF }; // * 100.0 ns<
- // volatile uint8_t cmds [] = { CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W0, CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W1 };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement