Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <xc.h>
- #pragma config FOSC = INTRCIO // INTOSC: I/O function on GP4/5
- #pragma config WDTE = OFF // Watchdog Timer
- #pragma config PWRTE = OFF // Power-Up Timer
- #pragma config MCLRE = ON // MCLR external control
- #pragma config BOREN = OFF // Brown-out Detect
- #pragma config CP = OFF // Program memory code Protection
- #pragma config CPD = OFF // Data memory code protection
- #define PWM_STEPS 16
- #define STATIC_REPEATS 4
- #define LED_NUM 3
- // Timeout to start dimming
- // Each 1K is ~7.5 seconds
- #define MAX_CYCLES 10000
- // Timeout for dim step
- #define DIM_COUNT 200
- struct tLED {
- char brightness;
- char pinBinary;
- } LED[LED_NUM];
- void initLEDs() {
- char j;
- for (j = 0; j < LED_NUM; j++) {
- LED[j].brightness = 0;
- }
- LED[0].pinBinary = 4; // GP2
- LED[1].pinBinary = 16; // GP4
- LED[2].pinBinary = 32; // GP5
- }
- void initRegisters() {
- ANSEL = 0; // All pins Digital
- TRISIO = 0; // All pins output
- CMCON = 7; // Comparator off
- ADCON0 = 0; //A/D conversion off
- GPIO = 0; // Outputs LOW
- }
- void main() {
- char j;
- unsigned char r, pwmStep, pattern;
- unsigned char randResult;
- unsigned int cycleCount = 0;
- char highPWM = PWM_STEPS;
- initRegisters();
- initLEDs();
- while (1) {
- randResult = rand();
- for (j = 0; j < LED_NUM; j++) {
- switch (randResult & 3) {
- case 1: if (LED[j].brightness < highPWM)
- LED[j].brightness++;
- break;
- case 2: if (LED[j].brightness > 0)
- LED[j].brightness--;
- break;
- } // switch
- randResult >>= 2;
- } // for
- for (r = 0; r < STATIC_REPEATS; r++)
- for (pwmStep = 0; pwmStep < PWM_STEPS; pwmStep++) {
- pattern = 0;
- for (j = 0; j < LED_NUM; j++)
- if (LED[j].brightness > pwmStep) pattern |= LED[j].pinBinary;
- GPIO = pattern;
- } // for
- cycleCount++;
- // Are we in the dimming phase?
- if (highPWM < PWM_STEPS) {
- if (cycleCount == DIM_COUNT) {
- cycleCount = 0;
- highPWM--;
- if (!highPWM) break;
- }
- } else if (cycleCount == MAX_CYCLES) {
- // Switch to dimming mode
- highPWM--;
- cycleCount = 0;
- }
- } // while
- asm("sleep");
- } // main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement