Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * main.c
- *
- * Utworzone dnia: 2012-04-22
- * Autor: Mesho
- * E-mail: [email protected]
- */
- #include <avr/io.h>
- #include <avr/pgmspace.h>
- #include <avr/eeprom.h>
- #include <util/delay.h>
- #include <stdint.h>
- #include <avr/interrupt.h>
- #include "1Wire/ds18x20.h" //obsluga czujnika temperatury
- #include "piny.h"
- uint8_t czujniki_cnt; //czujniki
- uint8_t subzero, cel, cel_fract_bits; //wyniki pomiaru
- uint16_t pm, pm1; //pomiar z fotorezystora
- //zmienne pomocnicze do wyswietlania temperatury
- uint8_t cy1, cy2;
- //funkcja gaszenia wszystkich ledów
- void clean_led(void);
- void init_led(void);
- //pomiar ADC do fotorezystora
- uint16_t pomiar(uint8_t kanal);
- int main(void)
- {
- //ustaw wszystkie wyjscia i inne
- init_led();
- //wygaszenie ledów
- clean_led();
- //poszukiwanie czujników
- czujniki_cnt = search_sensors();
- while(1)
- {
- czujniki_cnt = search_sensors();
- _delay_ms(50);
- DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );
- _delay_ms(750);
- if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits) )
- {
- if(cel>10) cy1 = cel/10;
- if(cel<10) cy1 = 10; //jak temp<10 nie wyswietlaj 0
- cy2 = cel%10; //znak jedności
- if(subzero) minus_on; //jezeli temperatura ponizej zera, zapal minus
- else minus_off;
- }
- clean_led(); //gaszenie ledów
- //wyswietlanie cyfry dziesietnej
- switch(cy1)
- {
- case 1:
- PORTD = B1 | C1;
- break;
- case 2:
- PORTD = A1 | B1 | G1| E1 | D1;
- break;
- case 3:
- PORTD = A1 | B1 | G1 | C1 | D1;
- break;
- case 4:
- PORTD = F1 | G1 | B1 | C1;
- break;
- case 5:
- PORTD = A1 | F1 | G1 | C1 |D1;
- break;
- case 6:
- PORTD = A1 | F1 | G1 | C1 | D1| E1;
- break;
- case 7:
- PORTD = A1 | B1 | C1;
- break;
- case 8:
- PORTD = A1 | B1 | C1 | D1 | E1 | F1 | G1;
- break;
- case 9:
- PORTD = A1 | B1 | C1 | D1 | F1 | G1;
- break;
- case 0:
- PORTD = A1 | B1 | C1 | D1 | E1 | F1;
- break;
- case 10:
- PORTD &= ~(A1 | B1 | C1 | D1 | E1 | F1 | G1);
- break;
- }
- //wyswietlanie cyfry jednosci
- switch(cy2)
- {
- case 1:
- PORTC = B2|C2;
- break;
- case 2:
- PORTC = A2 | B2 | E2 | D2;
- PORTB = G2;
- break;
- case 3:
- PORTC = A2| B2 | C2 | D2;
- PORTB = G2;
- break;
- case 4:
- PORTC = B2 | C2;
- PORTB = G2 | F2;
- break;
- case 5:
- PORTC = A2 | C2 | D2;
- PORTB = G2 | F2;
- break;
- case 6:
- PORTC = A2 | C2 | D2| E2;
- PORTB = G2 | F2;
- break;
- case 7:
- PORTC = A2 | B2 | C2;
- break;
- case 8:
- PORTC = A2 | B2 | C2 | D2 | E2;
- PORTB = G2|F2;
- break;
- case 9:
- PORTC = A2 | B2 | C2 | D2;
- PORTB = G2|F2;
- break;
- case 0:
- PORTC = A2 | B2 | C2 | D2 | E2;
- PORTB = F2;
- break;
- case 10:
- PORTC &= ~(A2 | B2 | C2 | D2 | E2);
- PORTB &= ~(G2|F2);
- break;
- }
- //czujnik zmierzchowy
- pm = pomiar(0);
- pm1 = 170;
- if(pm > 320)
- {
- noc_off;
- noc2_off;
- }
- if(pm < pm1)
- {
- noc_on;
- }
- }
- }
- //*********** Przygotowanie wyjsc i ADC ********//
- void init_led(void)
- {
- //ustawienie ADC
- ADMUX |= ((1<<REFS0)| (1<<REFS1));
- ADCSRA |= (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);
- //ustawienie wszystkich ledów jako wyjścia
- DDRD |= A1 | B1 | C1 | D1 | E1 | F1 | G1;
- DDRC |= A2 | B2 | C2 | D2 | E2;
- DDRB |= G2|F2;
- DDRB |= minus|noc|noc2; //znak minusa
- //wygaszenie na początek
- noc_off;
- noc2_off;
- minus_off;
- }
- //*********** Gaszenie ledów *******************//
- void clean_led(void)
- {
- PORTD &= ~(A1 | B1 | C1 | D1 | E1 | F1 | G1);
- PORTC &= ~(A2 | B2 | C2 | D2 | E2);
- PORTB &= ~(G2|F2);
- }
- //********** Pomiar ADC ***********************//
- uint16_t pomiar(uint8_t kanal)
- {
- ADMUX |= (ADMUX & 0xF8) | kanal;
- ADCSRA |= (1<<ADSC);
- while( ADCSRA & (1<<ADSC) );
- return ADCW;
- }
- /*
- * piny.h
- *
- * Utworzone dnia: 2012-05-11
- * Autor: Mesho
- * E-mail: [email protected]
- */
- #ifndef PINY_H_
- #define PINY_H_
- //znak minusowej temperatury
- #define minus (1<<PB1)
- #define minus_on PORTB |= minus
- #define minus_off PORTB &= ~minus
- #define minus_tog PORTB ^= minus
- //przełącznik zmierzchowy
- #define noc (1<<PB2)
- #define noc_on PORTB |= noc
- #define noc_off PORTB &= ~noc
- //drugi przełącznik zmierzchowy
- #define noc2 (1<<PB3)
- #define noc2_on PORTB |= noc2
- #define noc2_off PORTB &= ~noc2
- //cyfra dziesiątek
- #define A1 (1<<PD0)
- #define B1 (1<<PD1)
- #define C1 (1<<PD2)
- #define D1 (1<<PD3)
- #define E1 (1<<PD4)
- #define F1 (1<<PD5)
- #define G1 (1<<PD6)
- //cyfra jednosci
- #define A2 (1<<PC5)
- #define B2 (1<<PC4)
- #define C2 (1<<PC3)
- #define D2 (1<<PC2)
- #define E2 (1<<PC1)
- #define F2 (1<<PB5)
- #define G2 (1<<PB4)
- #endif /* PINY_H_ */
Advertisement
Add Comment
Please, Sign In to add comment