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 |
} |