Guest User

Untitled

a guest
May 14th, 2012
1,470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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;
  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;
  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;
  105.                       PORTB = G2;
  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));
  162.         ADCSRA |= (1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);
  163.         //ustawienie wszystkich ledów jako wyjścia
  164.     DDRD |=  A1 | B1 | C1 | D1 | E1 | F1 | G1;
  165.         DDRC |= A2 | B2 | C2 | D2 | E2;
  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_ */
Advertisement
Add Comment
Please, Sign In to add comment