Details | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 275 | johboh | 1 | /********************************************************************* |
| 129 | johboh | 2 | * |
| 3 | * Main application |
||
| 4 | * |
||
| 5 | ********************************************************************* |
||
| 6 | * FileName: $HeadURL: https://svn.auml.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canTemp/Source/Main.c $ |
||
| 7 | * Last changed: $LastChangedDate: 2007-02-26 21:38:37 +0100 (Mon, 26 Feb 2007) $ |
||
| 8 | * By: $LastChangedBy: johboh $ |
||
| 9 | * Revision: $Revision: 342 $ |
||
| 10 | ********************************************************************/ |
||
| 11 | |||
| 12 | |||
| 13 | #include <compiler.h> |
||
| 14 | #include <stackTasks.h> |
||
| 15 | #include <Tick.h> |
||
| 16 | #include <funcdefs.h> |
||
| 260 | johboh | 17 | #include <CAN.h> |
| 339 | johboh | 18 | #include "..\canBoot\Include\boot.h" |
| 129 | johboh | 19 | |
| 20 | |||
| 139 | johboh | 21 | #ifdef USE_ADC |
| 22 | #include <adc.h> |
||
| 23 | #endif |
||
| 24 | |||
| 275 | johboh | 25 | #ifdef USE_BLINDS |
| 26 | #include <blinds.h> |
||
| 27 | #endif |
||
| 28 | |||
| 129 | johboh | 29 | static void mainInit(void); |
| 30 | |||
| 31 | void main() |
||
| 32 | { |
||
| 275 | johboh | 33 | |
| 129 | johboh | 34 | static TICK t = 0; |
| 339 | johboh | 35 | CAN_PACKET outCp; |
| 129 | johboh | 36 | |
| 37 | // Inits |
||
| 38 | mainInit(); |
||
| 275 | johboh | 39 | |
| 260 | johboh | 40 | canInit(); |
| 129 | johboh | 41 | |
| 139 | johboh | 42 | #ifdef USE_ADC |
| 43 | adcInit(TRUE,0b1011); |
||
| 44 | #endif |
||
| 45 | |||
| 275 | johboh | 46 | #ifdef USE_BLINDS |
| 47 | blindsInit(); |
||
| 339 | johboh | 48 | blindsTurn(0); |
| 49 | #else |
||
| 50 | BLINDS0P_IO=0; |
||
| 275 | johboh | 51 | #endif |
| 129 | johboh | 52 | |
| 275 | johboh | 53 | |
| 129 | johboh | 54 | while(1) |
| 55 | { |
||
| 56 | static TICK t = 0; |
||
| 139 | johboh | 57 | static TICK temperature = 0; |
| 339 | johboh | 58 | static BOOL getNewTemperature = TRUE; |
| 139 | johboh | 59 | static BYTE lastTemperature = TEMPERATURE_INSIDE; |
| 275 | johboh | 60 | static TICK blinds = 0; |
| 129 | johboh | 61 | |
| 62 | if ((tickGet()-t)>TICK_SECOND) |
||
| 63 | { |
||
| 64 | LED0_IO=~LED0_IO; |
||
| 65 | t = tickGet(); |
||
| 66 | } |
||
| 139 | johboh | 67 | |
| 339 | johboh | 68 | |
| 277 | johboh | 69 | #ifdef USE_BLINDS |
| 339 | johboh | 70 | if ((tickGet()-blinds)>3*TICK_SECOND) |
| 275 | johboh | 71 | { |
| 339 | johboh | 72 | outCp.type=ptPGM; |
| 73 | outCp.pgm.class=pcSENSOR; |
||
| 74 | outCp.pgm.id=pstBLIND_TR; |
||
| 75 | outCp.length=1; |
||
| 76 | outCp.data[0]=blindsGetPrecent(); |
||
| 77 | while(!canSendMessage(outCp,PRIO_HIGH)); |
||
| 275 | johboh | 78 | blinds = tickGet(); |
| 79 | } |
||
| 277 | johboh | 80 | #endif |
| 339 | johboh | 81 | |
| 275 | johboh | 82 | |
| 139 | johboh | 83 | #ifdef USE_ADC |
| 339 | johboh | 84 | if ((tickGet()-temperature)>TICK_SECOND*2 && getNewTemperature==TRUE) // Each 2 second, read temperature. |
| 139 | johboh | 85 | { |
| 86 | if (lastTemperature==TEMPERATURE_INSIDE) lastTemperature=TEMPERATURE_OUTSIDE; else lastTemperature=TEMPERATURE_INSIDE; |
||
| 87 | adcConvert(lastTemperature); |
||
| 88 | temperature = tickGet(); |
||
| 339 | johboh | 89 | getNewTemperature=FALSE; |
| 139 | johboh | 90 | } |
| 91 | #endif |
||
| 92 | |||
| 93 | |||
| 94 | #ifdef USE_ADC |
||
| 95 | if (adcDone()) // Has temperature, send it to the bus |
||
| 96 | { |
||
| 97 | BYTE decimal; |
||
| 98 | signed char tenth; |
||
| 339 | johboh | 99 | unsigned long q; |
| 139 | johboh | 100 | temperatureRead(&tenth,&decimal); |
| 339 | johboh | 101 | q = adcGetRaw(); |
| 102 | getNewTemperature=TRUE; |
||
| 139 | johboh | 103 | |
| 339 | johboh | 104 | outCp.type=ptPGM; |
| 105 | outCp.pgm.class =pcSENSOR; |
||
| 106 | outCp.pgm.id =(lastTemperature==TEMPERATURE_INSIDE?pstTEMP_INSIDE:pstTEMP_OUTSIDE); |
||
| 107 | outCp.length =2; |
||
| 342 | johboh | 108 | outCp.data[1] = tenth; // signed 10 an 1 decimal. |
| 109 | outCp.data[0] = decimal; // Decimal value, 0-9 |
||
| 110 | while(!canSendMessage(outCp,PRIO_HIGH)); |
||
| 139 | johboh | 111 | } |
| 112 | #endif |
||
| 113 | |||
| 129 | johboh | 114 | } |
| 115 | } |
||
| 116 | |||
| 117 | |||
| 118 | #pragma interrupt high_isr |
||
| 119 | void high_isr(void) |
||
| 120 | { |
||
| 260 | johboh | 121 | canISR(); |
| 129 | johboh | 122 | } |
| 123 | |||
| 124 | |||
| 125 | #pragma interrupt low_isr |
||
| 126 | void low_isr(void) |
||
| 127 | { |
||
| 139 | johboh | 128 | #ifdef USE_ADC |
| 129 | adcISR(); |
||
| 130 | #endif |
||
| 339 | johboh | 131 | |
| 132 | #ifdef USE_BLINDS |
||
| 133 | blindsISR(); |
||
| 134 | #endif |
||
| 129 | johboh | 135 | } |
| 136 | |||
| 137 | |||
| 138 | |||
| 139 | /* |
||
| 140 | * Function: mainInit |
||
| 141 | * |
||
| 142 | * Input: none |
||
| 143 | * Output: none |
||
| 144 | * Pre-conditions: none |
||
| 145 | * Affects: Se code |
||
| 146 | * Depends: none. |
||
| 147 | */ |
||
| 148 | void mainInit() |
||
| 149 | { |
||
| 275 | johboh | 150 | LED0_TRIS=0; |
| 151 | BLINDS0_TRIS=0; |
||
| 297 | johboh | 152 | BLINDS0P_TRIS=0; |
| 129 | johboh | 153 | |
| 154 | // Enable Interrupts |
||
| 155 | INTCONbits.GIEH = 1; |
||
| 156 | INTCONbits.GIEL = 1; |
||
| 157 | |||
| 158 | // Enable interrupt prirority |
||
| 159 | RCONbits.IPEN=1; |
||
| 160 | } |
||
| 161 | |||
| 162 | /* |
||
| 163 | * Function: canParse |
||
| 164 | * |
||
| 165 | * Input: Received can message |
||
| 166 | * Output: none |
||
| 167 | * Pre-conditions: canInit and received packet. |
||
| 168 | * Affects: Sensors/actuators/etc. See code. |
||
| 169 | * Depends: none. |
||
| 170 | */ |
||
| 260 | johboh | 171 | |
| 339 | johboh | 172 | void canParse(CAN_PACKET cp) |
| 129 | johboh | 173 | { |
| 339 | johboh | 174 | #ifdef USE_BLINDS |
| 175 | if (cp.pgm.class==pcACTUATOR && cp.pgm.id==patBLIND_TR) |
||
| 176 | { |
||
| 177 | blindsTurn(cp.data[0]); |
||
| 178 | } |
||
| 179 | #endif |
||
| 129 | johboh | 180 | } |
| 181 | |||
| 182 | |||
| 183 | // Below are mandantory when using bootloader |
||
| 184 | // define DEBUG_MODE to use without bootloader. |
||
| 185 | |||
| 186 | #ifndef DEBUG_MODE |
||
| 187 | extern void _startup (void); |
||
| 339 | johboh | 188 | #pragma code _RESET_INTERRUPT_VECTOR = RM_RESET_VECTOR |
| 129 | johboh | 189 | void _reset (void) |
| 190 | { |
||
| 191 | _asm goto _startup _endasm |
||
| 192 | } |
||
| 193 | #pragma code |
||
| 194 | #endif |
||
| 195 | |||
| 339 | johboh | 196 | #pragma code _HIGH_INTERRUPT_VECTOR = RM_HIGH_INTERRUPT_VECTOR |
| 129 | johboh | 197 | void _high_ISR (void) |
| 198 | { |
||
| 199 | _asm GOTO high_isr _endasm |
||
| 200 | } |
||
| 201 | #pragma code |
||
| 202 | |||
| 339 | johboh | 203 | #pragma code _LOW_INTERRUPT_VECTOR = RM_LOW_INTERRUPT_VECTOR |
| 129 | johboh | 204 | void _low_ISR (void) |
| 205 | { |
||
| 206 | _asm GOTO low_isr _endasm |
||
| 207 | } |
||
| 208 | #pragma code |