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 |
|
27 | //#define RELAY_PORT PORTC |
| 26 |
|
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 |
|
68 | PORTC &= ~(1<<PC1); |
| 45 | relayStatus = OFF; |
69 | relayStatus = OFF; |
| 46 | 70 | ||
| 47 |
|
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 |
|
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 |
|
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 |
|
133 | PORTC &= ~(1<<PC1); |
| 98 | relayStatus = OFF; |
134 | relayStatus = OFF; |
| - | 135 | ||
| 99 | }else{ |
136 | }else{ |
| - | 137 | ||
| - | 138 | DDRC &= ~(1<<DDC1); |
|
| 100 |
|
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 |
|
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 | ||