o: ActiveSupport::Cache::Entry :@compressedF: @value"jj"dj
reflow.c
1 1
#include "reflow.h"
2
#include "process.h"
2 3
#include <math.h>
3 4

  
4 5
// nastaveni teplot a casu
......
19 20
#define TL3             PIN_B1      // tlacitko S3
20 21
#define TL4             PIN_B0      // tlacitko S4
21 22

  
22
#define POWER_T3        PIN_A6      // ovladani optotriaku T3
23
#define POWER_T3        PIN_A3      // ovladani optotriaku T3
23 24
#define POWER_T4        PIN_A5      // ovladani optotriaku T4
24 25
#define POWER_T5        PIN_A4      // ovladani optotriaku T5
25 26

  
......
39 40
   volatile unsigned int8  sec;
40 41
}cas;
41 42

  
42
// funkce 
43
void GeneralCpuInit()
43
unsigned int top_heat_power=0;  // range 0-200% nad 100% je ale teleso jiz pretizene
44
unsigned int bottom_heat_power=0; // contains heating power range 0-100%
45
unsigned int period;
46

  
47
float temp_last=0;
48

  
49
void GeneralCpuInit() // inicializace
44 50
{
45 51
   output_high(POWER_T4);
46 52
   output_high(POWER_T5);
......
50 56
   setup_spi(SPI_SS_DISABLED);
51 57
   
52 58
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);  //nepouzit
53
   setup_timer_1(T1_DISABLED);               //nepouzit
59
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);               // rizeni
54 60
   setup_timer_2(T2_DIV_BY_16,249,10);       //rtc 40ms
55 61
   
56 62
   setup_comparator(NC_NC_NC_NC);
......
83 89
   return (0.674201*adc() - 294.35);
84 90
}
85 91

  
92
void top_heating()
93
{
94
  if (period <= top_heat_power){
95
    output_low(POWER_T4);
96
    output_low(POWER_T5);
97
  }
98
  else{
99
    output_high(POWER_T4);
100
    output_high(POWER_T5);
101
  }
102
}
86 103

  
104
void bottom_heating()
105
{
106

  
107
  if (period <= 2*bottom_heat_power){
108
    output_low(POWER_T3);
109
  }
110
  else{
111
    output_high(POWER_T3);
112
  }
113

  
114
}
115

  
116
#int_TIMER1
117
void heating_control()        //rizeni topnych teles pri preteceni casovace
118
{
119

  
120
top_heating();
121
bottom_heating();
122

  
123
if (period <= 200) period++;
124
else period=0;
125
}
126

  
127

  
87 128
#int_TIMER2
88 129
void Rtc(void)         //40ms
89 130
{
......
105 146
    }
106 147
}
107 148

  
149
void slope_control(float ramp, unsigned int balance) // P proporcionalni rizeni narustu teploty predpoklada periodicke volani 1x/s
150
{
151
float slope_deviation;
152

  
153
slope_deviation = (teplota() - temp_last) - ramp;          // vypocet strmosti a odchylky od pozadovane strmosti
154

  
155
if(slope_deviation < 0)
156
{
157
  top_heat_power= slope_deviation*(-10) + balance;
158
  bottom_heat_power= slope_deviation*(-10);
159
}
160
else{
161
  top_heat_power=0;
162
  bottom_heat_power=0;
163
}
164

  
165
temp_last = teplota();
166
}
167

  
168
void level_control(float level) // P proporcionalni rizeni teploty
169
{
170

  
171
teplota();
172

  
173
}
174

  
175

  
108 176
void nullcas(struct time* time)
109 177
{
110 178
   disable_interrupts(INT_TIMER2);
......
116 184
   enable_interrupts(INT_TIMER2);
117 185
}
118 186

  
119
// start
120
void main()
187
void reflow_solder()
121 188
{
122
   int8 tmp;
189

  
190
// preheat
191
  nullcas(&cas);
192

  
193
  do {
194
    slope_control(PREHEAT_SLOPE, 0); // hlida strmost predehrevu 
195

  
196
    lcd_gotoxy(1,1);
197
    printf(lcd_putc,"%3.1f\21C  ",teplota());
198

  
199
    lcd_gotoxy(9,1);
200
    printf(lcd_putc,"%2u:%02u:%02u",cas.hod,cas.min,cas.sec);
201

  
202
    delay_ms(1000);
203
  }
204
  while (teplota() < SOAK_TEMP);
205

  
206
// soak
207
  nullcas(&cas);
208
  while (cas.min*60+cas.sec <= SOAK_TIME)
209
  {
210
    level_control(SOAK_TEMP);
211

  
212
    lcd_gotoxy(1,1);
213
    printf(lcd_putc,"%3.1f\21C  ",teplota());
214

  
215
    lcd_gotoxy(9,1);
216
    printf(lcd_putc,"%2u:%02u:%02u",cas.hod, SOAK_TIME/60 - cas.min, SOAK_TIME - cas.min*60 - cas.sec);
217
    delay_ms(1000);
218
  }
219
  
220
// solder
221
  
222
}
223

  
224

  
225
void main() // main loop 
226
{
123 227
   GeneralCpuInit();
124 228
   PowerOff();
125 229
   
......
131 235
   while(true)
132 236
   {
133 237
      delay_ms(300);
134
   
135
      if (cas.sec != tmp){
136
         tmp=cas.sec;
137
         lcd_gotoxy(9,1);
138
         printf(lcd_putc,"%2u:%02u:%02u",cas.hod,cas.min,cas.sec);
139
      }
140 238
      
141
      lcd_gotoxy(1,2);
142
      printf(lcd_putc,"teplota: %3.1f\21C  ",teplota());
239
      
240
      reflow_solder();
241
      
143 242
   }
144 243
}
:@created_atf1424212919.152478Â3:@expires_in0