070914

Dependencies:   FreescaleIAP MODSERIAL mbed monitor timer0

Fork of 17_PT1000 by Temp27

Committer:
rs27
Date:
Sat Aug 02 19:09:31 2014 +0000
Revision:
5:7c6fbe5d62e5
Parent:
4:46365f765d30
Child:
6:f53dd76c8806
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rs27 5:7c6fbe5d62e5 1 // Version 12 02.08.2014
rs27 0:e248310dfcdb 2 // die Ausgabe auf das Format #nr val umgestellt
rs27 0:e248310dfcdb 3
rs27 0:e248310dfcdb 4 #include "mbed.h"
rs27 2:f48d2eb0cc55 5 #include "ConfigFile.h"
rs27 2:f48d2eb0cc55 6 #include "SDFileSystem.h"
rs27 0:e248310dfcdb 7 #include "DS2482.h"
rs27 0:e248310dfcdb 8 #include "timer0.h"
rs27 0:e248310dfcdb 9 #include "Buffer.h"
rs27 0:e248310dfcdb 10 #include "monitor.h"
rs27 0:e248310dfcdb 11
rs27 0:e248310dfcdb 12 #define CR 13
rs27 0:e248310dfcdb 13
Sven3010 4:46365f765d30 14 #define SOLL_WERT 27.0
Sven3010 4:46365f765d30 15 #define R_TEMP_MAX 40.0
Sven3010 4:46365f765d30 16
Sven3010 4:46365f765d30 17 InterruptIn tropfen(PTA5);
Sven3010 4:46365f765d30 18
rs27 2:f48d2eb0cc55 19 SDFileSystem sd(PTD2, PTD3, PTC5, PTD0, "sd"); // The pinout (MOSI, MISO, SCLK, CS)
rs27 2:f48d2eb0cc55 20 timer0 down_timer; // Zeitsteuerung
rs27 2:f48d2eb0cc55 21 Serial pc(USBTX, USBRX); // tx, rx
rs27 2:f48d2eb0cc55 22 Buffer <char> buf; // Ringbuffer für ankommende Zeichen
Sven3010 3:72a65324d50d 23 PwmOut heizung(PTA13);
rs27 0:e248310dfcdb 24
rs27 0:e248310dfcdb 25 // sda, scl, adr
rs27 0:e248310dfcdb 26 DS2482 ow(PTE0,PTE1,0x30);
rs27 0:e248310dfcdb 27
rs27 0:e248310dfcdb 28 DigitalOut r(LED_RED);
rs27 0:e248310dfcdb 29 DigitalOut g(LED_GREEN);
rs27 0:e248310dfcdb 30 DigitalOut b(LED_BLUE);
rs27 0:e248310dfcdb 31
rs27 0:e248310dfcdb 32 DigitalOut led1(LED1);
rs27 0:e248310dfcdb 33 //DigitalOut LED2(PTA2);
Sven3010 4:46365f765d30 34 DigitalOut LED5(PTA4);
Sven3010 1:82c47e2d81f0 35 DigitalOut LED_4(PTA12);
rs27 0:e248310dfcdb 36
rs27 0:e248310dfcdb 37 // Schalter 4051
rs27 0:e248310dfcdb 38 DigitalOut DC_A(PTE2);
rs27 0:e248310dfcdb 39 DigitalOut DC_B(PTE3);
rs27 0:e248310dfcdb 40 DigitalOut DC_C(PTE4);
rs27 0:e248310dfcdb 41 DigitalOut DC_EN(PTE5);
rs27 0:e248310dfcdb 42
rs27 0:e248310dfcdb 43 // PT1000 Karte 1
rs27 0:e248310dfcdb 44 AnalogIn an1(PTC0);
rs27 0:e248310dfcdb 45 AnalogIn an2(PTB1);
rs27 0:e248310dfcdb 46 AnalogIn an3(PTB2);
rs27 0:e248310dfcdb 47 AnalogIn an4(PTB3);
rs27 0:e248310dfcdb 48 AnalogIn an5(PTC2);
rs27 0:e248310dfcdb 49 AnalogIn an6(PTD5);
rs27 0:e248310dfcdb 50
rs27 0:e248310dfcdb 51 // 0 bis 5V
rs27 0:e248310dfcdb 52 AnalogIn an13(PTD6);
rs27 0:e248310dfcdb 53
rs27 0:e248310dfcdb 54 // Analog pins
rs27 0:e248310dfcdb 55 /*
rs27 0:e248310dfcdb 56 1 PTE20, ADC0_SE0, 0}, k2.2
rs27 0:e248310dfcdb 57 2 PTE22, ADC0_SE3, 0}, k2.3
rs27 0:e248310dfcdb 58 3 PTE21, ADC0_SE4a, 0},
rs27 0:e248310dfcdb 59 4 PTE29, ADC0_SE4b, 0}, k2,4
rs27 0:e248310dfcdb 60 5 PTE30, ADC0_SE23, 0}, k2.5
rs27 0:e248310dfcdb 61 6 PTE23, ADC0_SE7a, 0},
rs27 0:e248310dfcdb 62 7 PTB0, ADC0_SE8, 0}, k2.1
rs27 0:e248310dfcdb 63 8 PTB1, ADC0_SE9, 0}, k1.2
rs27 0:e248310dfcdb 64 9 PTB2, ADC0_SE12, 0}, k1.3
rs27 0:e248310dfcdb 65 10 PTB3, ADC0_SE13, 0}, k1.4
rs27 0:e248310dfcdb 66 11 PTC0, ADC0_SE14, 0}, k1.1
rs27 0:e248310dfcdb 67 12 PTC1, ADC0_SE15, 0}, k2.6
rs27 0:e248310dfcdb 68 13 PTC2, ADC0_SE11, 0}, k1.5
rs27 0:e248310dfcdb 69 14 PTD1, ADC0_SE5b, 0},
rs27 0:e248310dfcdb 70 15 PTD5, ADC0_SE6b, 0}, k1.6
rs27 0:e248310dfcdb 71 16 PTD6, ADC0_SE7b, 0}, k3.1
rs27 0:e248310dfcdb 72 */
rs27 0:e248310dfcdb 73
Sven3010 3:72a65324d50d 74 float temp1, temp_mw;
rs27 0:e248310dfcdb 75 uint16_t temp_word;
rs27 0:e248310dfcdb 76 uint8_t n, y, status, ds1820_status;
rs27 0:e248310dfcdb 77
Sven3010 4:46365f765d30 78 int tropfen_anz = 0;
Sven3010 3:72a65324d50d 79
Sven3010 4:46365f765d30 80 float temp_float, temp_diff, temp_neu, esum, temp_soll;
Sven3010 1:82c47e2d81f0 81
rs27 2:f48d2eb0cc55 82 ConfigFile cfg;
rs27 2:f48d2eb0cc55 83 char value[BUFSIZ];
rs27 2:f48d2eb0cc55 84
rs27 2:f48d2eb0cc55 85 //------------------------------------------------------------------------------
rs27 2:f48d2eb0cc55 86 // Werte die auch über das config file gesetzt werden können
rs27 2:f48d2eb0cc55 87 float offset = 0.0;
rs27 2:f48d2eb0cc55 88
rs27 2:f48d2eb0cc55 89 //------------------------------------------------------------------------------
Sven3010 4:46365f765d30 90 // Interruptroutine wird bei jedem Tropfen aufgerufen
Sven3010 4:46365f765d30 91 void tropfen_handler(){
Sven3010 4:46365f765d30 92 tropfen_anz++;
Sven3010 4:46365f765d30 93 }
Sven3010 4:46365f765d30 94
Sven3010 4:46365f765d30 95 //------------------------------------------------------------------------------
rs27 0:e248310dfcdb 96 // Interruptroutine wird bei jedem ankommenden Zeichen aufgerufen
rs27 0:e248310dfcdb 97 void rx_handler(void)
rs27 0:e248310dfcdb 98 {
rs27 0:e248310dfcdb 99 // Note: you need to actually read from the serial to clear the RX interrupt
rs27 0:e248310dfcdb 100
rs27 0:e248310dfcdb 101 char ch;
rs27 0:e248310dfcdb 102
rs27 0:e248310dfcdb 103 while (pc.readable())
rs27 0:e248310dfcdb 104 {
rs27 0:e248310dfcdb 105 ch = pc.getc();
rs27 0:e248310dfcdb 106 buf.put(ch);
rs27 0:e248310dfcdb 107 }
rs27 0:e248310dfcdb 108 }
rs27 0:e248310dfcdb 109
rs27 2:f48d2eb0cc55 110 //------------------------------------------------------------------------------
rs27 2:f48d2eb0cc55 111 // lesen der PT1000 AD-Werte
rs27 2:f48d2eb0cc55 112 //
rs27 2:f48d2eb0cc55 113 // Um Störungen zu reduzieren werden 16 Werte gelesen und daraus wird der
rs27 2:f48d2eb0cc55 114 // Mittelwert berechnet. Eine Messung dauert ca. 30µs. Somit wird für eine Messung
rs27 2:f48d2eb0cc55 115 // ca. eine Zeit von 0,5ms benötigt.
rs27 2:f48d2eb0cc55 116 //
rs27 0:e248310dfcdb 117 int read_mw(uint8_t pos)
rs27 0:e248310dfcdb 118 {
rs27 0:e248310dfcdb 119 uint8_t n;
rs27 0:e248310dfcdb 120
rs27 0:e248310dfcdb 121 int val = 0;
rs27 0:e248310dfcdb 122 int mw = 0;
rs27 0:e248310dfcdb 123
Sven3010 1:82c47e2d81f0 124 LED_4 = 0;
Sven3010 1:82c47e2d81f0 125
rs27 0:e248310dfcdb 126 // 16 Messungen für eine bessere Mittelung durchführen
rs27 0:e248310dfcdb 127
rs27 0:e248310dfcdb 128 for (n = 0; n < 16; n++)
rs27 0:e248310dfcdb 129 {
rs27 0:e248310dfcdb 130 switch (pos)
rs27 0:e248310dfcdb 131 {
rs27 0:e248310dfcdb 132 // PT1000 Karte 1
rs27 0:e248310dfcdb 133 case 0: val = an1.read_u16(); break;
rs27 0:e248310dfcdb 134 case 1: val = an2.read_u16(); break;
rs27 0:e248310dfcdb 135 case 2: val = an3.read_u16(); break;
rs27 0:e248310dfcdb 136 case 3: val = an4.read_u16(); break;
rs27 0:e248310dfcdb 137 case 4: val = an5.read_u16(); break;
rs27 0:e248310dfcdb 138 case 5: val = an6.read_u16(); break;
rs27 0:e248310dfcdb 139 }
rs27 0:e248310dfcdb 140 mw += val;
rs27 0:e248310dfcdb 141 } // end for
rs27 0:e248310dfcdb 142
rs27 0:e248310dfcdb 143 // Temperatur berechnen
rs27 0:e248310dfcdb 144 // Wert durch 16 teilen
rs27 0:e248310dfcdb 145
rs27 0:e248310dfcdb 146 mw = mw >> 4;
Sven3010 1:82c47e2d81f0 147
Sven3010 1:82c47e2d81f0 148 LED_4 = 1;
Sven3010 1:82c47e2d81f0 149
rs27 0:e248310dfcdb 150 return mw;
rs27 0:e248310dfcdb 151 }
rs27 0:e248310dfcdb 152
rs27 2:f48d2eb0cc55 153 //------------------------------------------------------------------------------
rs27 2:f48d2eb0cc55 154 //
rs27 0:e248310dfcdb 155
rs27 0:e248310dfcdb 156 int main()
rs27 0:e248310dfcdb 157 {
rs27 0:e248310dfcdb 158
Sven3010 3:72a65324d50d 159 heizung.period(0.020); // requires a 20ms period
Sven3010 3:72a65324d50d 160 heizung.pulsewidth(0.005);
Sven3010 4:46365f765d30 161 esum = 0.0;
Sven3010 3:72a65324d50d 162
Sven3010 4:46365f765d30 163 tropfen.fall(&tropfen_handler);
Sven3010 3:72a65324d50d 164
rs27 2:f48d2eb0cc55 165 //------------------------------------------------------------------------------
rs27 2:f48d2eb0cc55 166 // RS232 Schnittstellt welche auf den CMSIS-DAP (USB Port) weitergeleitet wird
rs27 2:f48d2eb0cc55 167 //
Sven3010 3:72a65324d50d 168 pc.baud(115200);
rs27 0:e248310dfcdb 169 pc.attach(&rx_handler, Serial::RxIrq);
Sven3010 1:82c47e2d81f0 170 pc.printf("\n V08 was compiled on %s %s \n", __DATE__,__TIME__);
rs27 0:e248310dfcdb 171
rs27 2:f48d2eb0cc55 172 mon_init();
rs27 2:f48d2eb0cc55 173
rs27 2:f48d2eb0cc55 174 //------------------------------------------------------------------------------
rs27 2:f48d2eb0cc55 175 // Timer für die Zeitsteuerung
rs27 2:f48d2eb0cc55 176 //
rs27 0:e248310dfcdb 177 down_timer.SetCountdownTimer(0,1,50); // Timer für die LED
rs27 0:e248310dfcdb 178 down_timer.SetCountdownTimer(1,1,500); // Timer für den one wire bus
rs27 0:e248310dfcdb 179 down_timer.SetCountdownTimer(2,1,1000);// Timer für die Ausgabe der Daten
rs27 0:e248310dfcdb 180
rs27 0:e248310dfcdb 181 r = g = b = 1; // RGB LED ausschalten
rs27 2:f48d2eb0cc55 182
rs27 2:f48d2eb0cc55 183 //--------------------------------------------------------------------
rs27 2:f48d2eb0cc55 184 // Variablen von der SD Karte initialisieren
rs27 2:f48d2eb0cc55 185
rs27 2:f48d2eb0cc55 186 cfg.read("/sd/input.cfg");
rs27 2:f48d2eb0cc55 187
rs27 2:f48d2eb0cc55 188 if (cfg.getValue("offset", &value[0], sizeof(value)))
rs27 2:f48d2eb0cc55 189 {
rs27 2:f48d2eb0cc55 190 offset = atof(value);
rs27 2:f48d2eb0cc55 191 pc.printf("\noffset = %f", offset);
rs27 2:f48d2eb0cc55 192 }
rs27 2:f48d2eb0cc55 193
rs27 0:e248310dfcdb 194 //--------------------------------------------------------------------
rs27 0:e248310dfcdb 195 // one wire bus
rs27 0:e248310dfcdb 196
rs27 2:f48d2eb0cc55 197 /*
rs27 0:e248310dfcdb 198 // pc.printf("\n ++++ on wire search ++++\n");
rs27 0:e248310dfcdb 199 wait (0.1);
rs27 0:e248310dfcdb 200 ow.DS18XX_Read_Address();
rs27 0:e248310dfcdb 201
rs27 0:e248310dfcdb 202 n = ow.ow.devices;
rs27 0:e248310dfcdb 203
rs27 0:e248310dfcdb 204 // Anzahl der ow Bausteine ermitteln
rs27 0:e248310dfcdb 205 y = 0;
rs27 0:e248310dfcdb 206 for (n = 0; n < OW_MAX_DEVICES; n++)
rs27 0:e248310dfcdb 207 {
rs27 0:e248310dfcdb 208 if ((ow.ow.device_table[n].status & 0x0f) == 1) y++;
rs27 0:e248310dfcdb 209 } // end for(...
rs27 0:e248310dfcdb 210
rs27 0:e248310dfcdb 211 // pc.printf("\n %d devices FOUND \n",y);
rs27 0:e248310dfcdb 212
rs27 0:e248310dfcdb 213 // ow 64 bit Adressen ausgeben
rs27 0:e248310dfcdb 214 for (n = 0; n < OW_MAX_DEVICES; n++)
rs27 0:e248310dfcdb 215 {
rs27 0:e248310dfcdb 216 if ((ow.ow.device_table[n].status & 0x0f) == 1)
rs27 0:e248310dfcdb 217 {
rs27 0:e248310dfcdb 218 //pc.printf("\n device #%2d ",n);
rs27 0:e248310dfcdb 219 //pc.printf(": adr: %2d: ",ow.ow.device_table[n].adr );
rs27 0:e248310dfcdb 220 for (y = 0; y < 8; y++)
rs27 0:e248310dfcdb 221 {
rs27 0:e248310dfcdb 222 // pc.printf(" %02x",ow.ow.device_table[n].rom[y]);
rs27 0:e248310dfcdb 223 }
rs27 0:e248310dfcdb 224 }
rs27 0:e248310dfcdb 225
rs27 0:e248310dfcdb 226 } // end for(...
rs27 0:e248310dfcdb 227
rs27 0:e248310dfcdb 228 //pc.printf("\n");
rs27 0:e248310dfcdb 229
rs27 0:e248310dfcdb 230 //--------------------------------------------------------------------
rs27 0:e248310dfcdb 231 // Anfangswert bestimmen
rs27 0:e248310dfcdb 232
Sven3010 3:72a65324d50d 233 temp_mw = read_mw(0);
rs27 0:e248310dfcdb 234
rs27 0:e248310dfcdb 235 //pc.printf("\nPT1000; DS18B20");
rs27 0:e248310dfcdb 236 status = 0;
rs27 0:e248310dfcdb 237 ds1820_status = 0;
rs27 0:e248310dfcdb 238
rs27 2:f48d2eb0cc55 239 */
rs27 2:f48d2eb0cc55 240
rs27 0:e248310dfcdb 241 //--------------------------------------------------------------------
rs27 0:e248310dfcdb 242 // Schleife fuer die Datenerfassung
rs27 0:e248310dfcdb 243
rs27 0:e248310dfcdb 244 while(1)
rs27 0:e248310dfcdb 245 {
rs27 2:f48d2eb0cc55 246 //-------------------------------------------
rs27 2:f48d2eb0cc55 247 // Prüfen ob Zeichen eingegeben wurden
rs27 2:f48d2eb0cc55 248
rs27 2:f48d2eb0cc55 249 get_line();
rs27 0:e248310dfcdb 250
rs27 0:e248310dfcdb 251 //-------------------------------------------
rs27 0:e248310dfcdb 252 // timer 0 steuert die LED
rs27 0:e248310dfcdb 253
rs27 0:e248310dfcdb 254 if (down_timer.GetTimerStatus(0) == 0)
rs27 0:e248310dfcdb 255 {
rs27 0:e248310dfcdb 256 down_timer.SetCountdownTimer(0,1,500);
rs27 0:e248310dfcdb 257 LED5 = !LED5;
rs27 0:e248310dfcdb 258 }
rs27 0:e248310dfcdb 259
rs27 0:e248310dfcdb 260 //-------------------------------------------
rs27 0:e248310dfcdb 261 // timer 1 steuert den one wire bus
Sven3010 1:82c47e2d81f0 262 /*
rs27 0:e248310dfcdb 263 if (down_timer.GetTimerStatus(1) == 0)
rs27 0:e248310dfcdb 264 {
rs27 0:e248310dfcdb 265 switch (ds1820_status)
rs27 0:e248310dfcdb 266 {
rs27 0:e248310dfcdb 267 case 0 :
rs27 0:e248310dfcdb 268 // Temperaturwandler starten und 0,8 sek. warten
rs27 0:e248310dfcdb 269 // Start conversion for all DS1820 sensors
rs27 0:e248310dfcdb 270 // pc.printf("\ntrigger one wire bus");
rs27 0:e248310dfcdb 271
rs27 0:e248310dfcdb 272 ow.ds1820_start_conversion(0xFF); // alle Bausteine am Bus triggern
rs27 0:e248310dfcdb 273
rs27 0:e248310dfcdb 274 // Delay until conversion is completed
rs27 0:e248310dfcdb 275 down_timer.SetCountdownTimer(1,1,750); // Timer = 750ms
rs27 0:e248310dfcdb 276
rs27 0:e248310dfcdb 277 // beim nächsten Auruf die Temperatur lesen
rs27 0:e248310dfcdb 278 ds1820_status = 1;
rs27 0:e248310dfcdb 279
rs27 0:e248310dfcdb 280 break;
rs27 0:e248310dfcdb 281
rs27 0:e248310dfcdb 282 case 1 : // Temperatur von Temperaturfühler 1 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 283 case 2 : // Temperatur von Temperaturfühler 2 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 284 case 3 : // Temperatur von Temperaturfühler 3 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 285 case 4 : // Temperatur von Temperaturfühler 4 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 286 case 5 : // Temperatur von Temperaturfühler 5 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 287 case 6 : // Temperatur von Temperaturfühler 6 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 288 case 7 : // Temperatur von Temperaturfühler 7 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 289 case 8 : // Temperatur von Temperaturfühler 8 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 290 case 9 : // Temperatur von Temperaturfühler 9 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 291 case 10 : // Temperatur von Temperaturfühler 10 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 292 case 11 : // Temperatur von Temperaturfühler 11 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 293 case 12 : // Temperatur von Temperaturfühler 12 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 294 case 13 : // Temperatur von Temperaturfühler 13 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 295 case 14 : // Temperatur von Temperaturfühler 14 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 296 case 15 : // Temperatur von Temperaturfühler 15 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 297 case 16 : // Temperatur von Temperaturfühler 16 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 298
rs27 0:e248310dfcdb 299 // Write temperature of all registered sensors
rs27 0:e248310dfcdb 300 uint8_t pos = ds1820_status - 1;
rs27 0:e248310dfcdb 301 if ((ow.ow.device_table[pos].status & 0x0f) != 0)
rs27 0:e248310dfcdb 302 {
rs27 0:e248310dfcdb 303 ow.ow.device_table_index = pos;
rs27 0:e248310dfcdb 304 ow.ds18B20_read_hrtemp();
rs27 0:e248310dfcdb 305 // pc.printf(" %2.2f; ",ow.ow.device_table[pos].value);
rs27 0:e248310dfcdb 306 }
rs27 0:e248310dfcdb 307
rs27 0:e248310dfcdb 308 ds1820_status++;
rs27 0:e248310dfcdb 309 if (ds1820_status > OW_MAX_DEVICES)
rs27 0:e248310dfcdb 310 {
rs27 0:e248310dfcdb 311 ds1820_status = 0;
rs27 0:e248310dfcdb 312 down_timer.SetCountdownTimer(1,2,10); // Timer deakivieren
rs27 0:e248310dfcdb 313 // pc.printf("\nexit one wire bus");
rs27 0:e248310dfcdb 314 }
rs27 0:e248310dfcdb 315 else
rs27 0:e248310dfcdb 316 down_timer.SetCountdownTimer(1,1,10); // 10 ms Timer
rs27 0:e248310dfcdb 317
rs27 0:e248310dfcdb 318 break;
rs27 0:e248310dfcdb 319
rs27 0:e248310dfcdb 320 } // end switch
rs27 0:e248310dfcdb 321 } // if (down_timer
rs27 0:e248310dfcdb 322
Sven3010 1:82c47e2d81f0 323 */
rs27 0:e248310dfcdb 324 //-------------------------------------------
rs27 0:e248310dfcdb 325 // timer 2 steuert die Datenausgabe
rs27 0:e248310dfcdb 326
rs27 0:e248310dfcdb 327 if (down_timer.GetTimerStatus(2) == 0)
rs27 0:e248310dfcdb 328 {
Sven3010 3:72a65324d50d 329 down_timer.SetCountdownTimer(2,1,500);
rs27 0:e248310dfcdb 330
rs27 0:e248310dfcdb 331 //------------------------------------------------------
rs27 0:e248310dfcdb 332 // PT1000 lesen und berechnen und ausgeben
rs27 0:e248310dfcdb 333 // 16 mal den Eingang fuer eine bessere Mittelung lesen
rs27 0:e248310dfcdb 334 //
rs27 0:e248310dfcdb 335
Sven3010 4:46365f765d30 336 temp_word = read_mw(1);
Sven3010 4:46365f765d30 337 temp_soll = (temp_word - 28510);
Sven3010 4:46365f765d30 338 temp_soll /= 113;
Sven3010 4:46365f765d30 339
rs27 0:e248310dfcdb 340 temp_word = read_mw(0);
Sven3010 4:46365f765d30 341 temp_float = (temp_word - 28510); //27100
Sven3010 3:72a65324d50d 342
Sven3010 3:72a65324d50d 343 //pc.printf("%d;",temp_word);
Sven3010 4:46365f765d30 344 pc.printf("Soll %2.2f;",temp_soll);
Sven3010 3:72a65324d50d 345
Sven3010 4:46365f765d30 346 temp_float /= 113; //112.3
Sven3010 4:46365f765d30 347 pc.printf("Temp-R %0.2f; ",temp_float); // Rohdaten ausgeben
Sven3010 1:82c47e2d81f0 348
Sven3010 4:46365f765d30 349 temp_diff = (SOLL_WERT - temp_soll);
Sven3010 3:72a65324d50d 350
Sven3010 3:72a65324d50d 351
Sven3010 4:46365f765d30 352 if(temp_diff > SOLL_WERT)temp_diff = SOLL_WERT;
Sven3010 4:46365f765d30 353
Sven3010 4:46365f765d30 354 //temp_neu = ((temp_diff*0.0005) + (temp_alt*0.9));
Sven3010 3:72a65324d50d 355
Sven3010 4:46365f765d30 356 if(temp_diff < 3){
Sven3010 4:46365f765d30 357 esum += temp_diff * 0.00001;
Sven3010 4:46365f765d30 358 }
Sven3010 4:46365f765d30 359
Sven3010 4:46365f765d30 360 temp_neu = (temp_diff*0.0005) + esum;
Sven3010 3:72a65324d50d 361
Sven3010 3:72a65324d50d 362 if(temp_neu > 0.02){
Sven3010 3:72a65324d50d 363 temp_neu = 0.02;
Sven3010 3:72a65324d50d 364 }
Sven3010 4:46365f765d30 365
Sven3010 4:46365f765d30 366 if(temp_soll > SOLL_WERT){
Sven3010 3:72a65324d50d 367 temp_neu = 0.0;
Sven3010 4:46365f765d30 368 esum = 0.0;
Sven3010 4:46365f765d30 369 }
Sven3010 4:46365f765d30 370
Sven3010 4:46365f765d30 371 if(temp_float > R_TEMP_MAX){
Sven3010 4:46365f765d30 372 temp_neu = 0.0;
Sven3010 4:46365f765d30 373 esum = 0.0;
Sven3010 4:46365f765d30 374 }
Sven3010 3:72a65324d50d 375
Sven3010 3:72a65324d50d 376 heizung.pulsewidth(0.0001 + temp_neu);
Sven3010 4:46365f765d30 377 //pc.printf("%0.4f;",temp_alt);
Sven3010 3:72a65324d50d 378 pc.printf("%0.4f \n",temp_neu);
Sven3010 4:46365f765d30 379
rs27 0:e248310dfcdb 380
rs27 0:e248310dfcdb 381 //------------------------------------------------------
rs27 0:e248310dfcdb 382 // one wire Daten lesen und ausgeben
Sven3010 1:82c47e2d81f0 383 /*
rs27 0:e248310dfcdb 384 for (n = 0; n < OW_MAX_DEVICES; n++) // Ausgabe der Daten
rs27 0:e248310dfcdb 385 {
rs27 0:e248310dfcdb 386 if ((ow.ow.device_table[n].status & 0x0f) == 3) // Daten wurden gelesen
rs27 0:e248310dfcdb 387 {
rs27 0:e248310dfcdb 388 pc.printf("#%d %d\n",(n+20), ow.ow.device_table[n].result);
rs27 0:e248310dfcdb 389 ow.ow.device_table[n].status = 2;
rs27 0:e248310dfcdb 390 }
rs27 0:e248310dfcdb 391 }
rs27 0:e248310dfcdb 392
rs27 0:e248310dfcdb 393 down_timer.SetCountdownTimer(1,1,10); // Messung neu starten
Sven3010 1:82c47e2d81f0 394 */
rs27 0:e248310dfcdb 395 } // end if(down_timer ...
rs27 0:e248310dfcdb 396
rs27 0:e248310dfcdb 397 } // end while
rs27 0:e248310dfcdb 398 }
rs27 0:e248310dfcdb 399