summaryrefslogtreecommitdiff
path: root/main.c
blob: ca5aa4b2154558af3883e53945db8ee534a374f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
  @File Name
    main.c

  @Summary
    This is the generated main.c using PIC24 / dsPIC33 / PIC32MM MCUs.

  @Description
    This source file provides main entry point for system initialization and application code development.
    Generation Information :
        Product Revision  :  PIC24 / dsPIC33 / PIC32MM MCUs - 1.171.4
        Device            :  PIC24FV16KM202
    The generated drivers are tested against the following:
        Compiler          :  XC16 v2.10
        MPLAB 	          :  MPLAB X v6.05
*/
/**
  Section: Included Files
*/
#include "mcc_generated_files/system.h"
#include "SPI.h"
#include <stdbool.h>


/*
                         Main application
 */
uint8_t activeResistors[2] = {0x00,0x00};
uint8_t desired150, desired68 = 0;
bool relay_delay = false;
static uint8_t* timeoutcounter;

void TMR1_Process(void);

int main(void)
{
    // initialize the device
    SYSTEM_Initialize();
    //OSCCONbits.SOSCEN = 0;
    SPI_slaveDeselect();
    _LATA0 = _LATA1 = 0;//_LATA4 = 1; //Activate gate driver chips
    _LATA4 = 1;
    
    Message_HWCR();
    
    _LATB6 = 0;
    _LATB7 = 1;
    _LATB8 = 1;
    
    TMR1_SetInterruptHandler(&TMR1_Process);
    
    while (1)
    {
        timeoutcounter = getTimeoutCounter();
        desired150 = getI2CArray(1) & 0x0F;
        desired68 = (getI2CArray(1) >> 4) & 0x07;
                
        if (relay_delay) 
        {
            active(activeResistors);
            if (*timeoutcounter < 2) 
            {
                _LATB8 = 1;
                relay_delay = false;

                if (desired150 < activeResistors[0]) 
                {
                    Message_OUT(activeResistors[0] - 1, activeResistors[1], 1);
                } else if (desired150 > activeResistors[0]) 
                {
                    Message_OUT(activeResistors[0] + 1, activeResistors[1], 1);
                } else if (desired68 < activeResistors[1]) 
                {
                    Message_OUT(activeResistors[0], activeResistors[1] - 1, 0);
                } else if (desired68 > activeResistors[1]) 
                {
                    Message_OUT(activeResistors[0], activeResistors[1] + 1, 0);
                }
            } 
            else //Open contactors if I2C communication is broken.
            {
                if (relay_delay) Message_OUT(activeResistors[0] - 1, activeResistors[1] - 1, 0);
                _LATB7 = 1; //Make sure activity light is off
                _LATB8 = 0;
                //Message_HWCROCL();
            }
        }
        //Message_OUT(15, 0, 1);
    //(desired150, desired68, relay_delay);
    
    //if(activeResistors[1]==3){_LATB8=0;}
    //else{_LATB8=1;}
    }

    return 1;
}

void __attribute__ ((weak)) TMR1_Process(void)
{
    relay_delay = !relay_delay;
    incrementTimeoutCounter();
}
/**
 End of File
*/