From 9c15ec86ca3366929eddc7dac9aa83a3a4b05780 Mon Sep 17 00:00:00 2001 From: RossTheRoss Date: Wed, 12 Feb 2020 10:33:16 -0600 Subject: Do lab 2b --- Lab_2B.X/lab2b_c.c | 141 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 101 insertions(+), 40 deletions(-) diff --git a/Lab_2B.X/lab2b_c.c b/Lab_2B.X/lab2b_c.c index 4c63087..ae32849 100644 --- a/Lab_2B.X/lab2b_c.c +++ b/Lab_2B.X/lab2b_c.c @@ -1,5 +1,6 @@ #include "xc.h" #include "lab2b_header.h" +#include "stdint.h" // CW1: FLASH CONFIGURATION WORD 1 (see PIC24 Family Reference Manual 24.1) #pragma config ICS = PGx1 // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1) #pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog Timer is disabled) @@ -15,8 +16,18 @@ #pragma config FCKSM = CSECME // Clock Switching and Monitor (Clock switching is enabled, // Fail-Safe Clock Monitor is enabled) #pragma config FNOSC = FRCPLL // Oscillator Select (Fast RC Oscillator with PLL module (FRCPLL)) -#define PERIOD 5 +#define PERIOD 120 +//DEFINTIONS +void writeColor(int r, int g, int b); +void loop(void); +void delay(int delay_in_ms); +uint32_t packColor(unsigned char Red, unsigned char Grn, unsigned char Blu); +unsigned char getR(uint32_t RGBval); +unsigned char getG(uint32_t RGBval); +unsigned char getB(uint32_t RGBval); +void writePacCol(uint32_t PackedColor); +uint32_t Wheel(unsigned char WheelPos); void setup(void) { CLKDIVbits.RCDIV = 0; //Set RCDIV=1:1 (default 2:1) 32MHz or FCY/2=16M @@ -25,8 +36,6 @@ void setup(void) { TRISB = 0x0000; wait_100us(); } -void writeColor(short r, short g, short b); -void loop(void); int main(void) { setup(); @@ -35,43 +44,6 @@ int main(void) { return 0; } -void writeColor(short r, short g, short b) { - short i = 0; - LATA = 0x0000; - wait_100us(); - //RED - while (i < 8) { - if (r & 1) { - write_1(); - } else { - write_0(); - } - - r >>= 1; - ++i; - } - //GREEN - while (i > 0) { - if (g & 1) { - write_1(); - } else { - write_0(); - } - g >>= 1; - --i; - } - //BLUE - while (i < 8){ - if (b & 1) { - write_1(); - } else { - write_0(); - } - b >>= 1; - ++i; - } -} - void loop(void) { while (1) { // LATA = 0x0000; @@ -109,6 +81,95 @@ void loop(void) { // write_0(); // write_0(); // write_0(); +/* writeColor(255, 155, 000); +*/ + int byteFrameNumber = 0; + while (byteFrameNumber <= 255) { +// // COLOR GRADIENT +// writeColor(byteFrameNumber, 0 , 255 - byteFrameNumber); + //COLOR WHEEL + writePacCol(Wheel(byteFrameNumber)); + delay(PERIOD); + byteFrameNumber++; + } } } + +void writeColor(int r, int g, int b) { + short i = 0; + LATA = 0x0000; + wait_100us(); + //RED + while (i < 8) { + if (r & 1) { + write_1(); + } else { + write_0(); + } + + r >>= 1; + ++i; + } + //GREEN + while (i > 0) { + if (g & 1) { + write_1(); + } else { + write_0(); + } + g >>= 1; + --i; + } + //BLUE + while (i < 8){ + if (b & 1) { + write_1(); + } else { + write_0(); + } + b >>= 1; + ++i; + } +} + +void delay(int delay_in_ms) { + int i = 0; + while (i < delay_in_ms) { + wait_1ms(); + i++; + } +} + +uint32_t packColor(unsigned char Red, unsigned char Grn, unsigned char Blu) { + return ((long) Red << 16) | ((long) Grn << 8) | ((long) Blu); +} + +unsigned char getR(uint32_t RGBval) { + return (unsigned char) (RGBval >> 16); +} +unsigned char getG(uint32_t RGBval) { + return (unsigned char) (RGBval >> 8 ); +} +unsigned char getB(uint32_t RGBval) { + return (unsigned char) (RGBval >> 0 ); +} + +void writePacCol(uint32_t PackedColor) { + writeColor(getR(PackedColor), getG(PackedColor), getB(PackedColor)); +} + +uint32_t Wheel(unsigned char WheelPos) { +// Input a value 0 to 255 to get a color value. +// The colours are a transition r - g - b - back to r. + WheelPos = 255 - WheelPos; + if(WheelPos < 85) { + return packColor(255 - WheelPos * 3, 0, WheelPos * 3); + } + if(WheelPos < 170) { + WheelPos -= 85; + return packColor(0, WheelPos * 3, 255 - WheelPos * 3); + } + WheelPos -= 170; + return packColor(WheelPos * 3, 255 - WheelPos * 3, 0); +} \ No newline at end of file -- cgit v1.2.3