Subversion Repositories HomeAutomation

Rev

Rev 187 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 187 Rev 190
Line 8... Line 8...
8
 *   Observera! Applikationen är endast testad på labplatta med m88, pot och lysdiod
8
 *   Observera! Applikationen är endast testad på labplatta med m88, pot och lysdiod
9
 *
9
 *
10
 *   ADC=Vin*1024/Vref
10
 *   ADC=Vin*1024/Vref
11
 *   Vout=( 10 mV/C )( Temperature C ) + 500 mV
11
 *   Vout=( 10 mV/C )( Temperature C ) + 500 mV
12
 *
12
 *
13
 *  Transmitts: DATA: <temperature low byte> <temperature high byte> <relay status>
13
 *  Transmitts: DATA: <temperature low byte> <temperature high byte> <relay status> <failsafe mode>
14
 *
-
 
15
 *  TODO
-
 
16
 *  fixa så adcn inte pollas hela tiden, det tar för mycket tid
-
 
17
 *  kunna använda Vref = 1.1
-
 
18
 *
14
 *
19
 *
15
 *
20
 */
16
 */
21
 
17
 
22
#define DEBUG   0 /* Prints debug messages to uart */
18
#define DEBUG   0 /* Prints debug messages to uart */
Line 66... Line 62...
66
 
62
 
67
    uint8_t relayStatus;
63
    uint8_t relayStatus;
68
    uint32_t boardTemperature = 0;
64
    uint32_t boardTemperature = 0;
69
 
65
 
70
    adcTemperatureInit();
66
    adcTemperatureInit();
71
 
67
 
72
    Timebase_Init();
68
    Timebase_Init();
73
#if DEBUG
69
#if DEBUG
74
    Serial_Init();
70
    Serial_Init();
75
#endif
71
#endif
76
    sei();
72
    sei();
77
 
73
 
78
    /* Turn relay off */
74
    /* Turn relay off */
79
    relayStatus = relayOff();
75
    relayStatus = relayOff();
80
 
76
 
81
#if DEBUG
77
#if DEBUG
82
    printf("\n------------------------------------------------------------\n");
78
    printf("\n------------------------------------------------------------\n");
83
    printf(  "   CAN: Relay\n");
79
    printf(  "   CAN: Relay\n");
84
    printf(  "------------------------------------------------------------\n");
80
    printf(  "------------------------------------------------------------\n");
85
 
81
 
Line 92... Line 88...
92
    }
88
    }
93
#else
89
#else
94
    Can_Init();
90
    Can_Init();
95
#endif
91
#endif
96
    uint32_t timeStamp = 0;
92
    uint32_t timeStamp = 0;
97
 
93
 
98
    Can_Message_t txMsg;
94
    Can_Message_t txMsg;
99
    Can_Message_t rxMsg;
95
    Can_Message_t rxMsg;
100
    txMsg.Id = RELAY_CMD_SEND;
96
    txMsg.Id = RELAY_CMD_SEND;
101
    txMsg.RemoteFlag = 0;
97
    txMsg.RemoteFlag = 0;
102
    txMsg.ExtendedFlag = 1;
98
    txMsg.ExtendedFlag = 1;
103
    txMsg.DataLength = 3;
99
    txMsg.DataLength = 3;
Line 113... Line 109...
113
            if( rxMsg.Id == RELAY_CMD_GET ){
109
            if( rxMsg.Id == RELAY_CMD_GET ){
114
 
110
 
115
                if( rxMsg.Data.bytes[0] == RELAY_CMD_ON ){
111
                if( rxMsg.Data.bytes[0] == RELAY_CMD_ON ){
116
                    /* Turn relay on */
112
                    /* Turn relay on */
117
                    relayStatus = relayOn();
113
                    relayStatus = relayOn();
118
 
114
 
119
                }else if(rxMsg.Data.bytes[0] == RELAY_CMD_OFF){
115
                }else if(rxMsg.Data.bytes[0] == RELAY_CMD_OFF){
120
                    /* Turn relay off */
116
                    /* Turn relay off */
121
                    relayStatus = relayOff();
117
                    relayStatus = relayOff();
122
 
118
 
123
                }else if(rxMsg.Data.bytes[0] == RELAY_CMD_TOGGLE ){
119
                }else if(rxMsg.Data.bytes[0] == RELAY_CMD_TOGGLE ){
124
                    /* Toggle relay */
120
                    /* Toggle relay */
125
 
121
 
126
                    if(relayStatus == RELAY_OFF){
122
                    if(relayStatus == RELAY_OFF){
127
                        relayStatus = relayOn();
123
                        relayStatus = relayOn();
128
                    }else{
124
                    }else{
129
                        relayStatus = relayOff();
125
                        relayStatus = relayOff();
130
                    }
126
                    }
131
 
127
 
132
                }else if(rxMsg.Data.bytes[0] == RELAY_CMD_STATUS){
128
                }else if(rxMsg.Data.bytes[0] == RELAY_CMD_STATUS){
133
                    /* Send relay status to CAN */
129
                    /* Send relay status to CAN */
134
 
130
 
135
                    boardTemperature = getTC1047temperature();
131
                    boardTemperature = getTC1047temperature();
136
 
132
 
137
                    if( boardTemperature >= FAILSAFE_TRESHOLD ){
133
                    if( (int32_t)boardTemperature >= FAILSAFE_TRESHOLD ){
138
                        relayFailsafe();
134
                        relayFailsafe();
139
                    }else{
135
                    }else{
140
                        txMsg.Data.bytes[0] = boardTemperature & 0x00FF;
136
                        txMsg.Data.bytes[0] = boardTemperature & 0x00FF;
141
                        txMsg.Data.bytes[1] = (boardTemperature & 0xFF00)>>8;
137
                        txMsg.Data.bytes[1] = (boardTemperature & 0xFF00)>>8;
142
                        txMsg.Data.bytes[2] = relayStatus;
138
                        txMsg.Data.bytes[2] = relayStatus;
143
 
139
 
144
                        Can_Send( &txMsg );
140
                        Can_Send( &txMsg );
145
                    }
141
                    }
146
                }
142
                }
147
            }
143
            }
148
        }
144
        }
149
 
145
 
150
        if( Timebase_PassedTimeMillis(timeStamp) >= STATUS_SEND_PERIOD ){
146
        if( Timebase_PassedTimeMillis(timeStamp) >= STATUS_SEND_PERIOD ){
151
            timeStamp = Timebase_CurrentTime();
147
            timeStamp = Timebase_CurrentTime();
152
            /* Send relay status to CAN */
148
            /* Send relay status to CAN */
153
 
149
 
154
            boardTemperature = getTC1047temperature();
150
            boardTemperature = getTC1047temperature();
155
 
151
 
156
            if( boardTemperature >= FAILSAFE_TRESHOLD ){
152
            if( (int32_t)boardTemperature >= FAILSAFE_TRESHOLD ){
157
                relayFailsafe();
153
                relayFailsafe();
158
            }else{
154
            }else{
159
                txMsg.Data.bytes[0] = boardTemperature & 0x00FF;
155
                txMsg.Data.bytes[0] = boardTemperature & 0x00FF;
160
                txMsg.Data.bytes[1] = (boardTemperature & 0xFF00)>>8;
156
                txMsg.Data.bytes[1] = (boardTemperature & 0xFF00)>>8;
161
                txMsg.Data.bytes[2] = relayStatus;
157
                txMsg.Data.bytes[2] = relayStatus;
Line 174... Line 170...
174
uint8_t relayOff()
170
uint8_t relayOff()
175
{
171
{
176
    /* Set as output and sink */
172
    /* Set as output and sink */
177
    PORTC &= ~(1<<PC1);
173
    PORTC &= ~(1<<PC1);
178
    DDRC |= (1<<DDC1);
174
    DDRC |= (1<<DDC1);
179
 
175
 
180
#if DEBUG
176
#if DEBUG
181
    printf("relay turned off\n");
177
    printf("relay turned off\n");
182
#endif
178
#endif
183
 
179
 
184
    return RELAY_OFF;
180
    return RELAY_OFF;
Line 227... Line 223...
227
        }
223
        }
228
 
224
 
229
        if( Timebase_PassedTimeMillis(timeStamp) >= FAILSAFE_SEND_PERIOD ){
225
        if( Timebase_PassedTimeMillis(timeStamp) >= FAILSAFE_SEND_PERIOD ){
230
            timeStamp = Timebase_CurrentTime();
226
            timeStamp = Timebase_CurrentTime();
231
            /* Send relay status to CAN */
227
            /* Send relay status to CAN */
-
 
228
#if DEBUG
-
 
229
            printf("Failsafe mode!\n");
232
 
230
#endif
233
            boardTemperature = getTC1047temperature();
231
            boardTemperature = getTC1047temperature();
234
 
232
 
235
            txMsg.Data.bytes[0] = boardTemperature & 0x00FF;
233
            txMsg.Data.bytes[0] = boardTemperature & 0x00FF;
236
            txMsg.Data.bytes[1] = (boardTemperature & 0xFF00)>>8;
234
            txMsg.Data.bytes[1] = (boardTemperature & 0xFF00)>>8;
237
            txMsg.Data.bytes[2] = relayStatus;
235
            txMsg.Data.bytes[2] = relayStatus;