Rev 1384 Rev 1859
1 /* mija 2009 1 /* mija 2009
2   2  
3 SW pro ATmega8 mereni + regulace teploty 3 SW pro ATmega8 mereni + regulace teploty
4 Fosc = 8192000Hz externi krystal 4 Fosc = 8192000Hz externi krystal
5 5
6 ver.: 0.0 - start 6 ver.: 0.0 - start
7 */ 7 */
8   8  
9 #include <avr/io.h> 9 #include <avr/io.h>
10 #include <avr/interrupt.h> 10 #include <avr/interrupt.h>
11 #include <util/delay.h> 11 #include <util/delay.h>
12 #include <avr/eeprom.h> 12 #include <avr/eeprom.h>
13 #include "reflow.h" 13 #include "reflow.h"
14 #include "lcd.h" // musi se definovat PINy LCD 14 #include "lcd.h" // musi se definovat PINy LCD
15 #include "key.h" // musi se definovat PINy Tlacitek 15 #include "key.h" // musi se definovat PINy Tlacitek
16 #include "clock.h" // typ promenne Clockt_t 16 #include "clock.h" // typ promenne Clockt_t
17 #include "process.h" // musi se definovat PIN topeni 17 #include "process.h" // musi se definovat PIN topeni
18   18  
19 //************************************************************* 19 //*************************************************************
20 // delay + interrupt 20 // delay + interrupt
21   21  
22 void delay_ms(uint16_t time) 22 void delay_ms(uint16_t time)
23 { 23 {
24 while (time --) _delay_ms(1); 24 while (time --) _delay_ms(1);
25 } 25 }
26   26  
27 volatile static uint8_t ClockTik8ms=125; 27 volatile static uint8_t ClockTik8ms=125;
28   28  
29 ISR(TIMER0_OVF_vect) //tik 8ms 29 ISR(TIMER0_OVF_vect) //tik 8ms
30 { 30 {
31 if (ClockTik8ms) ClockTik8ms --; 31 if (ClockTik8ms) ClockTik8ms --;
32 } 32 }
33   33  
34 //************************************************************* 34 //*************************************************************
35 // gemeral cpu set 35 // gemeral cpu set
36   36  
37 void GeneralCpuInit(void) 37 void GeneralCpuInit(void)
38 { 38 {
39 //*** IO PIN *** init,setup 39 //*** IO PIN *** init,setup
40 40
41 //*** TIMER0 *** 41 //*** TIMER0 ***
42 // 256 prescaler 42 // 256 prescaler
43 // overflow 8ms 43 // overflow 8ms
44 // enable interrupt overflow 44 // enable interrupt overflow
45 TCCR0 = _BV(CS02); 45 TCCR0 = _BV(CS02);
46 TIMSK |= _BV(TOIE0); 46 TIMSK |= _BV(TOIE0);
47 47
48 //*** TIMER1 *** 48 //*** TIMER1 ***
49   49  
50 //*** TIMER2 *** 50 //*** TIMER2 ***
51   51  
52 //*** EXTERNAL INTERRUPT 52 //*** EXTERNAL INTERRUPT
53 53
54 //*** USART *** 54 //*** USART ***
55 55
56 //*** ADC *** 56 //*** ADC ***
57 // input ADC2 (pin25 C2) 57 // input ADC2 (pin25 C2)
58 // external reference 2.5V 58 // external reference 2.5V
59 // clock adc 128k (div 64) 59 // clock adc 128k (div 64)
60 ADMUX = _BV(MUX1); 60 ADMUX = _BV(MUX1);
61 ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADPS1) | _BV(ADPS2); 61 ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADPS1) | _BV(ADPS2);
62 } 62 }
63   63  
64 //************************************************************* 64 //*************************************************************
65 // analog read 65 // analog read
66   66  
67 int16_t ReadAdc(void) 67 int16_t ReadAdc(void)
68 { 68 {
69 int16_t analog; 69 int16_t analog;
70 uint8_t a; 70 uint8_t a;
71   71  
72 analog = 0; 72 analog = 0;
73 for (a=0;a<32;a++) 73 for (a=0;a<32;a++)
74 { 74 {
75 ADCSR &= ~(_BV(ADIF)); 75 ADCSR &= ~(_BV(ADIF));
76 ADCSR |= _BV(ADSC); 76 ADCSR |= _BV(ADSC);
77 while (!(ADCSR & _BV(ADIF))); 77 while (!(ADCSR & _BV(ADIF)));
78 analog += ADC; 78 analog += ADC;
79 } 79 }
80 return (analog >> 5 ); // prumer = analog/32 80 return (analog >> 5 ); // prumer = analog/32
81 } 81 }
82   82  
83 //************************************************************* 83 //*************************************************************
84 // main 84 // main
85   85  
86 int main(void) 86 int main(void)
87 { 87 {
88 uint8_t proces = START; 88 uint8_t proces = START;
89 char DisplBuffer[MAXDISPLBUFFER]; 89 char DisplBuffer[MAXDISPLBUFFER];
90 Clockt_t clock; 90 Clockt_t clock;
91 uint16_t temp = 0; 91 uint16_t temp = 0;
92 uint8_t key = NOKEY; 92 uint8_t key = NOKEY;
93   93  
94 GeneralCpuInit(); 94 GeneralCpuInit();
95 HeatInit(); 95 HeatInit();
96 HeatOff(); 96 HeatOff();
97 delay_ms(100); 97 delay_ms(100);
98 LCD_init(); 98 LCD_init();
99 KeyInit(); 99 KeyInit();
100 ClockInit(0,0,0,&clock); 100 ClockInit(0,0,0,&clock);
101 sei(); 101 sei();
102   102  
103 for (;;) 103 for (;;)
104 { 104 {
105 switch(proces) 105 switch(proces)
106 { 106 {
107 case START: proces = ProcesStart(DisplBuffer,key,temp);break; 107 case START: proces = ProcesStart(DisplBuffer,key,temp);break;
108 case SOLDER: proces = ProcesSolder(DisplBuffer,key,temp,&clock);break; 108 case SOLDER: proces = ProcesSolder(DisplBuffer,key,temp,&clock);break;
109 case POSITIV: proces = ProcesPositiv(DisplBuffer,key,temp,&clock);break; 109 case POSITIV: proces = ProcesPositiv(DisplBuffer,key,temp,&clock);break;
110 case DRY: proces = ProcesDry(DisplBuffer,key,temp,&clock); break; 110 case DRY: proces = ProcesDry(DisplBuffer,key,temp,&clock); break;
111 default: proces = START; 111 default: proces = START;
112 } 112 }
113   113  
114 if (DisplBuffer[0]) ProcesDispl(DisplBuffer); 114 if (DisplBuffer[0]) ProcesDispl(DisplBuffer);
115 115
116 ProcesKey(&key); 116 ProcesKey(&key);
117 ProcesClock((uint8_t *)&ClockTik8ms,&clock); 117 ProcesClock((uint8_t *)&ClockTik8ms,&clock);
118 ProcesTemp(ReadAdc(),&temp); 118 ProcesTemp(ReadAdc(),&temp);
119 } 119 }
120 return 0; 120 return 0;
121 } 121 }