View difference between Paste ID: teJcptRx and c6DKeMfC
SHOW: | | - or go back to the newest paste.
1
/*
2
 * main.c
3
 *
4
 *  Utworzone dnia: 2012-04-22
5
 *  Autor: Mesho
6
 *  E-mail: [email protected]
7
 */
8
9
#include <avr/io.h>
10
#include <avr/pgmspace.h>
11
#include <avr/eeprom.h>
12
#include <util/delay.h>
13
#include <stdint.h>
14
#include <avr/interrupt.h>
15
#include "1Wire/ds18x20.h" //obsluga czujnika temperatury
16
#include "piny.h"
17
uint8_t czujniki_cnt;		//czujniki
18
uint8_t subzero, cel, cel_fract_bits;		//wyniki pomiaru
19
uint16_t pm, pm1; //pomiar z fotorezystora
20
21
22
//zmienne pomocnicze do wyswietlania temperatury
23
uint8_t cy1, cy2;
24
//funkcja gaszenia wszystkich ledów
25
void clean_led(void);
26
void init_led(void);
27
//pomiar ADC do fotorezystora
28
uint16_t pomiar(uint8_t kanal);
29
30
31
int main(void)
32
{
33
	//ustaw wszystkie wyjscia i inne
34
    init_led();
35
	//wygaszenie ledów
36
	clean_led();
37
	//poszukiwanie czujników
38
	czujniki_cnt = search_sensors();
39
40
    while(1)
41
    {
42
    	          czujniki_cnt = search_sensors();
43
    	          _delay_ms(50);
44
    	          DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );
45
    	          _delay_ms(750);
46
    	          if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits) )
47
    					{
48-
    	        	        if(cel>10) cy1 = cel/10;
48+
    	        	                        if(cel>10) cy1 = cel/10;
49-
    	        	        if(cel<10) cy1 = 10; //jak temp<10 nie wyswietlaj 0
49+
    	        	                        if(cel<10) cy1 = 10; //jak temp<10 nie wyswietlaj 0
50
    						cy2 = cel%10; //znak jedności
51
    						if(subzero) minus_on; //jezeli temperatura ponizej zera, zapal minus
52
    						else minus_off;
53
        				}
54
55
    	          clean_led(); //gaszenie ledów
56
    	          //wyswietlanie cyfry dziesietnej
57
    	          switch(cy1)
58
    	          {
59
    	            case 1:
60
    	        	  PORTD = B1 | C1;
61
    	        	  break;
62
    	            case 2:
63
    	              PORTD = A1 | B1 | G1| E1 | D1;
64
    	              break;
65
    	            case 3:
66
    	         	  PORTD = A1 | B1 | G1 | C1 | D1;
67
    	         	  break;
68
    	            case 4:
69
    	              PORTD = F1 | G1 | B1 | C1;
70
    	              break;
71
    	            case 5:
72
    	              PORTD = A1 | F1 | G1 | C1 |D1;
73
    	              break;
74
    	            case 6:
75
    	              PORTD = A1 | F1 | G1 | C1 | D1| E1;
76
    	              break;
77
    	            case 7:
78
    	              PORTD = A1 | B1 | C1;
79
    	              break;
80
    	            case 8:
81
    	              PORTD = A1 | B1 | C1 | D1 | E1 | F1 | G1;
82
    	              break;
83
    	            case 9:
84
    	              PORTD = A1 | B1 | C1 | D1 | F1 | G1;
85
    	              break;
86
    	            case 0:
87
    	              PORTD = A1 | B1 | C1 | D1 | E1 | F1;
88
    	              break;
89
    	            case 10:
90
    	              PORTD &=  ~(A1 | B1 | C1 | D1 | E1 | F1 | G1);
91
    	              break;
92
    	           }
93
    	          //wyswietlanie cyfry jednosci
94
    	          switch(cy2)
95
    	          {
96
    	            case 1:
97-
    	        	  PORTC = B2|C2;
97+
    	              PORTC = B2|C2;
98
    	              break;
99
    	            case 2:
100
    	              PORTC = A2 | B2 | E2 | D2;
101
    	              PORTB = G2;
102
    	              break;
103
    	            case 3:
104-
    	         	  PORTC = A2| B2 | C2 | D2;
104+
    	              PORTC = A2| B2 | C2 | D2;
105-
    	         	  PORTB = G2;
105+
106
    	              break;
107
    	            case 4:
108
    	              PORTC = B2 | C2;
109
    	              PORTB = G2 | F2;
110
    	              break;
111
    	            case 5:
112
    	              PORTC = A2 | C2 | D2;
113
    	              PORTB = G2 | F2;
114
    	              break;
115
    	            case 6:
116
    	              PORTC = A2 | C2 | D2| E2;
117
    	              PORTB = G2 | F2;
118
    	              break;
119
    	            case 7:
120
    	              PORTC = A2 | B2 | C2;
121
    	              break;
122
    	            case 8:
123
    	              PORTC = A2 | B2 | C2 | D2 | E2;
124
    	              PORTB = G2|F2;
125
    	              break;
126
    	            case 9:
127
    	              PORTC = A2 | B2 | C2 | D2;
128
    	              PORTB = G2|F2;
129
    	              break;
130
    	            case 0:
131
    	              PORTC = A2 | B2 | C2 | D2 | E2;
132
    	              PORTB = F2;
133
    	              break;
134
    	            case 10:
135
    	                PORTC &= ~(A2 | B2 | C2 | D2 | E2);
136
    	                PORTB &= ~(G2|F2);
137
    	                break;
138
    	           }
139
140
141
    	          //czujnik zmierzchowy
142
    	          pm = pomiar(0);
143
    	          pm1 = 170;
144
    	          if(pm > 320)
145
    	          {
146
    	        	  noc_off;
147
    	        	  noc2_off;
148
    	          }
149
    	          if(pm < pm1)
150
    	          {
151
    	        	  noc_on;
152
    	          }
153
154
    }
155
}
156
157
//*********** Przygotowanie wyjsc i ADC ********//
158
void init_led(void)
159
{
160
	//ustawienie ADC
161-
    ADMUX |= ((1<<REFS0)| (1<<REFS1));
161+
        ADMUX |= ((1<<REFS0)| (1<<REFS1));
162-
    ADCSRA |= (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);
162+
        ADCSRA |= (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);
163-
    //ustawienie wszystkich ledów jako wyjścia
163+
        //ustawienie wszystkich ledów jako wyjścia
164
	DDRD |=  A1 | B1 | C1 | D1 | E1 | F1 | G1;
165-
    DDRC |= A2 | B2 | C2 | D2 | E2;
165+
        DDRC |= A2 | B2 | C2 | D2 | E2;
166-
    DDRB |= G2|F2;
166+
        DDRB |= G2|F2;
167
	DDRB |= minus|noc|noc2; //znak minusa
168
	//wygaszenie na początek
169
	noc_off;
170
	noc2_off;
171
	minus_off;
172
}
173
174
//*********** Gaszenie ledów *******************//
175
void clean_led(void)
176
{
177
	PORTD &=  ~(A1 | B1 | C1 | D1 | E1 | F1 | G1);
178
    PORTC &= ~(A2 | B2 | C2 | D2 | E2);
179
    PORTB &= ~(G2|F2);
180
}
181
182
//********** Pomiar ADC ***********************//
183
uint16_t pomiar(uint8_t kanal)
184
185
{
186
        ADMUX |= (ADMUX & 0xF8) | kanal;
187
188
        ADCSRA |= (1<<ADSC);
189
190
        while( ADCSRA & (1<<ADSC) );
191
192
        return ADCW;
193
194
}
195
196
197
198
199
200
/*
201
 * piny.h
202
 *
203
 *  Utworzone dnia: 2012-05-11
204
 *  Autor: Mesho
205
 *  E-mail: [email protected]
206
 */
207
208
#ifndef PINY_H_
209
#define PINY_H_
210
211
//znak minusowej temperatury
212
#define minus (1<<PB1)
213
#define minus_on PORTB |= minus
214
#define minus_off PORTB &= ~minus
215
#define minus_tog PORTB ^= minus
216
217
//przełącznik zmierzchowy
218
#define noc (1<<PB2)
219
#define noc_on PORTB |= noc
220
#define noc_off PORTB &= ~noc
221
222
//drugi przełącznik zmierzchowy
223
#define noc2 (1<<PB3)
224
#define noc2_on PORTB |= noc2
225
#define noc2_off PORTB &= ~noc2
226
227
228
//cyfra dziesiątek
229
#define A1 (1<<PD0)
230
#define B1 (1<<PD1)
231
#define C1 (1<<PD2)
232
#define D1 (1<<PD3)
233
#define E1 (1<<PD4)
234
#define F1 (1<<PD5)
235
#define G1 (1<<PD6)
236
//cyfra jednosci
237
#define A2 (1<<PC5)
238
#define B2 (1<<PC4)
239
#define C2 (1<<PC3)
240
#define D2 (1<<PC2)
241
#define E2 (1<<PC1)
242
#define F2 (1<<PB5)
243
#define G2 (1<<PB4)
244
245
246
#endif /* PINY_H_ */