Subversion Repositories HomeAutomation

Rev

Rev 171 | Rev 176 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 171 Rev 175
Line 5... Line 5...
5
 *
5
 *
6
 * @date    2006-11-21, LCD addition 2006-12-11
6
 * @date    2006-11-21, LCD addition 2006-12-11
7
 * @author  Jimmy Myhrman, Erik Larsson
7
 * @author  Jimmy Myhrman, Erik Larsson
8
 *  
8
 *  
9
 *   Observera! Applikationen är helt otestad
9
 *   Observera! Applikationen är helt otestad
-
 
10
 *   ADC=Vin*1024/Vref
-
 
11
 *
10
 */
12
 */
11
 
13
 
12
/*-----------------------------------------------------------------------------
14
/*-----------------------------------------------------------------------------
13
 * Includes
15
 * Includes
14
 *---------------------------------------------------------------------------*/
16
 *---------------------------------------------------------------------------*/
Line 20... Line 22...
20
/* lib files */
22
/* lib files */
21
#include <can.h>
23
#include <can.h>
22
#include <serial.h>
24
#include <serial.h>
23
#include <timebase.h>
25
#include <timebase.h>
24
 
26
 
25
#define RELAY_PORT  PORTC
27
//#define RELAY_PORT  PORTC
26
#define RELAY_PIN   PC1
28
//#define RELAY_PIN   PC1
27
#define OFF     0x00
29
#define OFF     0x00
28
#define ON      0x01
30
#define ON      0x01
-
 
31
 
-
 
32
/*------------------------------------------------------------------------------
-
 
33
 * Read relay state (OPEN/CLOSED) and temperature
-
 
34
 * ---------------------------------------------------------------------------*/
-
 
35
void readRelayStatus( Can_Message_t* msg, uint8_t state )
-
 
36
{
-
 
37
            /* Start measureing */
-
 
38
            ADCSRA |= (1<<ADSC);
-
 
39
 
-
 
40
            /* Wait for conversion to complete */
-
 
41
            while( ADCSRA & (1<<ADSC) ){}
-
 
42
 
-
 
43
            msg->Id = 0x1201; // temporary ID
-
 
44
 
-
 
45
            msg->Data.bytes[0] = state;
-
 
46
            msg->Data.bytes[1]= ADCL;
-
 
47
            msg->Data.bytes[2]= ADCH;
-
 
48
            msg->DataLength = 3;
-
 
49
 
-
 
50
            Can_Send( msg );
-
 
51
}
29
 
52
 
30
/*-----------------------------------------------------------------------------
53
/*-----------------------------------------------------------------------------
31
 * Main Program
54
 * Main Program
32
 *---------------------------------------------------------------------------*/
55
 *---------------------------------------------------------------------------*/
33
int main(void) {
56
int main(void) {
Line 38... Line 61...
38
    Serial_Init();
61
    Serial_Init();
39
    sei();
62
    sei();
40
 
63
 
41
    /* Enable RELAY_PIN as output */
64
    /* Enable RELAY_PIN as output */
42
    DDRC |= (1<<DDC1);
65
    DDRC |= (1<<DDC1);
-
 
66
 
43
    /* Turn relay off */
67
    /* Turn relay off */
44
    RELAY_PORT &= ~(1<<RELAY_PIN);
68
    PORTC &= ~(1<<PC1);
45
    relayStatus = OFF;
69
    relayStatus = OFF;
46
 
70
 
47
    // TODO initiera temperatursensor
71
    /* Initiate ADC for reading temperature sensor */
-
 
72
 
-
 
73
    /* Wake up ADC */
-
 
74
    PRR &= ~(1<<PRADC);
-
 
75
    /* Enable AREF and ADC7 */
-
 
76
    ADMUX = 0x07;
-
 
77
    ADCSRA |= (1<<ADEN);
48
 
78
 
49
    printf("\n------------------------------------------------------------\n");
79
    printf("\n------------------------------------------------------------\n");
50
    printf(  "   CAN: Relay\n");
80
    printf(  "   CAN: Relay\n");
51
    printf(  "------------------------------------------------------------\n");
81
    printf(  "------------------------------------------------------------\n");
52
 
82
 
53
 
83
 
54
    printf("CanInit...");
84
    printf("CanInit...");
55
    if (Can_Init() != CAN_OK) {
85
    if (Can_Init() != CAN_OK) {
56
        printf("FAILED!\n");
86
    printf("FAILED!\n");
57
    }
-
 
58
    else {
87
    }else{
59
        printf("OK!\n");
88
        printf("OK!\n");
60
    }
89
    }
61
   
90
 
62
    uint32_t timeStamp = 0;
91
    uint32_t timeStamp = 0;
63
   
92
 
Line 79... Line 108...
79
            if( rxMsg.Id == 0x1200 ){
108
            if( rxMsg.Id == 0x1200 ){
80
 
109
 
81
                if( rxMsg.Data.bytes[0] == 0x01 ){
110
                if( rxMsg.Data.bytes[0] == 0x01 ){
82
                    /* Turn relay on */
111
                    /* Turn relay on */
83
 
112
 
-
 
113
                    /* Set as input and enable pull-up */
-
 
114
                    DDRC &= ~(1<<DDC1);
84
                    RELAY_PORT |= (1<<RELAY_PIN);
115
                    PORTC |= (1<<PC1);
-
 
116
 
85
                    relayStatus = ON;
117
                    relayStatus = ON;
86
 
118
 
87
                }else if(rxMsg.Data.bytes[0] == 0x02){
119
                }else if(rxMsg.Data.bytes[0] == 0x02){
88
                    /* Turn relay off */
120
                    /* Turn relay off */
89
 
121
 
-
 
122
                    DDRC |= (1<<DDC1);
90
                    RELAY_PORT &= ~(1<<RELAY_PIN);
123
                    PORTC &= ~(1<<PC1);
-
 
124
 
91
                    relayStatus = OFF;
125
                    relayStatus = OFF;
92
 
126
 
93
                }else if(rxMsg.Data.bytes[0] == 0x03){
127
                }else if(rxMsg.Data.bytes[0] == 0x03){
94
                    /* Toggle relay */
128
                    /* Toggle relay */
95
 
129
 
96
                    if(relayStatus == ON){
130
                    if(relayStatus == ON){
-
 
131
                       
-
 
132
                        DDRC |= (1<<DDC1);
97
                        RELAY_PORT &= ~(1<<RELAY_PIN);
133
                        PORTC &= ~(1<<PC1);
98
                        relayStatus = OFF;
134
                        relayStatus = OFF;
-
 
135
 
99
                    }else{
136
                    }else{
-
 
137
 
-
 
138
                        DDRC &= ~(1<<DDC1);
100
                        RELAY_PORT |= (1<<RELAY_PIN);
139
                        PORTC |= (1<<PC1);
101
                        relayStatus = ON;
140
                        relayStatus = ON;
102
                    }
141
                    }
103
 
142
 
104
                }else if(rxMsg.Data.bytes[0] == 0x04){
143
                }else if(rxMsg.Data.bytes[0] == 0x04){
105
                    /* Get relay status (ON/OFF?, temperature) */
144
                    /* Get relay status (ON/OFF?, temperature) */
106
                    // TODO läsa värde från temperatursensor
-
 
107
 
-
 
108
                    txMsg.Id = 0x1201;
-
 
109
                    txMsg.Data.bytes[0] = relayStatus;
145
                    readRelayStatus( &txMsg, relayStatus );
110
                    txMsg.DataLength = 3;
-
 
111
 
-
 
112
                    Can_Send( &txMsg );
-
 
113
                }
146
                }
114
            }
147
            }
115
        }
148
        }
-
 
149
 
116
    // TODO
150
        // TODO
117
    // ska status på relä och temperatur skickas periodiskt?
151
        // ska status på relä och temperatur skickas periodiskt?
118
    // tätare intervall om temperaturen kommer över en viss gräns?
152
        // tätare intervall om temperaturen kommer över en viss gräns?
119
 
153
 
120
        if( Timebase_PassedTimeMillis(timeStamp) >=5000){
154
        if( Timebase_PassedTimeMillis(timeStamp) >=5000){
121
            timeStamp = Timebase_CurrentTime();
155
            timeStamp = Timebase_CurrentTime();
122
             /* Get relay status (ON/OFF?, temperature) */
156
            /* Get relay status (ON/OFF?, temperature) */
123
            // TODO läsa värde från temperatursensor
-
 
124
 
-
 
125
            txMsg.Id = 0x1201;
-
 
126
            txMsg.Data.bytes[0] = relayStatus;
-
 
127
            txMsg.DataLength = 3;
-
 
128
 
-
 
129
            Can_Send( &txMsg );
-
 
130
 
-
 
131
        }
-
 
132
 
157
 
-
 
158
             readRelayStatus( &txMsg, relayStatus );
-
 
159
        }
133
    }
160
    }
134
 
-
 
135
 
-
 
136
    return 0;
161
    return 0;
137
}
162
}
-
 
163