
Update vom 10.05.15
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 18_PT1000 by
Revision 18:939d3df56218, committed 2014-09-07
- Comitter:
- Sven3010
- Date:
- Sun Sep 07 12:10:34 2014 +0000
- Parent:
- 17:c307f8c96ab1
- Child:
- 19:f3c41bbc809a
- Commit message:
- 070914;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MODSERIAL.lib Sun Sep 07 12:10:34 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/MODSERIAL/#a65f89de75c5
--- a/Ventiel.lib Sat Aug 30 08:49:43 2014 +0000 +++ b/Ventiel.lib Sun Sep 07 12:10:34 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Temp/code/Ventiel/#0a998c16eead +http://mbed.org/teams/Temp/code/VentielDisplay/#0b90e095f3b7
--- a/main.cpp Sat Aug 30 08:49:43 2014 +0000 +++ b/main.cpp Sun Sep 07 12:10:34 2014 +0000 @@ -12,29 +12,34 @@ #include "Buffer.h" #include "monitor.h" #include "ventiel.h" +#include "MODSERIAL.h" #define CR 13 -#define SOLL_WERT 27.0 // Sollwert für den Fühler in der Flüssigkeit -#define R_TEMP_MAX 40.0 // Maximaltermperatur für den Widerstand +#define SOLL_WERT 32.0 // Sollwert für den Fühler in der Flüssigkeit +#define R_TEMP_MAX 60.0 // Maximaltermperatur für den Widerstand +#define R_OFFSET 0.0 // wird bei abgeschaltetert Trofpensteuerung zum Haltetemperatur addiert #define OFFSET_0 28330 // AD Wert für 0° Abgleich Kanal 0 #define OFFSET_1 28560 // AD Wert für 0° Abgleich Kanal 1 //#define OFFSET 27100 // AD Wert für 0° Abgleich Steuerung Flosrian #define GAIN 113 // Digit pro °C >> 112.3 Steuerung Florian //#define GAIN 112.3 // Digit pro °C >> 112.3 Steuerung Florian +#define BOOL_FMT(bool_expr) (bool_expr) ? "ein" : "aus" + //------------------------------------------------------------------------------ // Anlegen von Klassen SDFileSystem sd(PTD2, PTD3, PTC5, PTD0, "sd"); // The pinout (MOSI, MISO, SCLK, CS) timer0 down_timer; // Zeitsteuerung Serial pc(USBTX, USBRX); // tx, rx -Serial com(PTC4, PTC3); +MODSERIAL com(PTC4, PTC3); +//MODSERIAL com(PTC4, PTC3); Buffer <char> buf; // Ringbuffer für ankommende Zeichen // DS2482 ow(PTE0,PTE1,0x30); // sda, scl, adr ventiel magnet; // Klasse Ventiele anlegen - +char lcd_text[25]; Timer t; // Zeitmessung für Entprellen //------------------------------------------------------------------------------ @@ -96,7 +101,7 @@ //------------------------------------------------------------------------------ // Globale Variablen -float temp1, temp_mw; +float temp1, temp_mw, temp_r_max, temp_r_ist; uint16_t temp_word; uint8_t n, y, status, ds1820_status; @@ -119,6 +124,7 @@ //float offset = 0.0; float soll_wert = 27.0; // Sollwert für den Temperaturfühler in der Flüssigkeit +float korr_wert = R_OFFSET; // Korrekturwert bei abgeschalteter Heizung //------------------------------------------------------------------------------ // Interruptroutine wird bei jedem Tropfen aufgerufen @@ -213,7 +219,7 @@ //------------------------------------------------------------------------------ // RS232 Schnittstellt welche auf den CMSIS-DAP (USB Port) weitergeleitet wird // - pc.baud(115200); + pc.baud(57600); pc.attach(&rx_handler, Serial::RxIrq); pc.printf("\n V08 was compiled on %s %s \n", __DATE__,__TIME__); @@ -222,8 +228,8 @@ //------------------------------------------------------------------------------ // RS232 Schnittstellt zum Ansteuern der Magnetventile // - com.baud(9600); - com.printf("\n V08 was compiled on %s %s \n", __DATE__,__TIME__); + com.baud(57600); + //com.printf("\n V08 was compiled on %s %s \n", __DATE__,__TIME__); //------------------------------------------------------------------------------ // Timer für die Zeitsteuerung @@ -231,6 +237,7 @@ down_timer.SetCountdownTimer(0,1,50); // Timer für die LED down_timer.SetCountdownTimer(1,1,500); // Timer für die Tropfensteuerung down_timer.SetCountdownTimer(2,1,1000);// Timer für die Ausgabe der Daten + down_timer.SetCountdownTimer(3,1,100); // Timer für Taster r = g = b = 1; // RGB LED ausschalten @@ -239,7 +246,7 @@ cfg.read("/sd/input.cfg"); - if (cfg.getValue("t_flag", &value[0], sizeof(value))) + if (cfg.getValue("t_flag", &value[0], sizeof(value))) { if (atoi(value) == 1) { @@ -282,9 +289,14 @@ if (cfg.getValue("soll", &value[0], sizeof(value))) { soll_wert = atof(value); - pc.printf("\nsoll_wert = %f\n", soll_wert); + pc.printf("\nsoll_wert = %f", soll_wert); } - + + if (cfg.getValue("korr", &value[0], sizeof(value))) + { + korr_wert = atof(value); + pc.printf("\nkorrektur_wert = %f\n", korr_wert); + } //-------------------------------------------------------------------- // Anfangswert bestimmen @@ -304,6 +316,7 @@ //------------------------------------------- // Prüfen ob Tropfenzahl erreicht + if (f_flag) { if (tropfen_anz >= drops){ @@ -359,7 +372,7 @@ if (down_timer.GetTimerStatus(2) == 0) { down_timer.SetCountdownTimer(2,1,1000); - + //------------------------------------------------------ // PT1000 Kanal 1 ( Fühler in Flüssigkeit) lesen und die Temperatur berechnen @@ -369,18 +382,18 @@ temp_soll /= GAIN; //pc.printf("%d;",temp_word); // Rohwert ausgeben - pc.printf("Soll %2.2f; Soll ist %2.2f; ",soll_wert, temp_soll); // Temperaturwert soll Flüssigkeit + pc.printf("Soll %2.2f; Soll ist %2.2f;",soll_wert, temp_soll); // Temperaturwert soll Flüssigkeit //------------------------------------------------------ // PT1000 Kanal 0 ( Fühler am Heizwiderstand ) lesen und die Temperatur berechnen temp_word = read_mw(0); temp_float = (temp_word - OFFSET_0); - temp_float /= GAIN; + temp_r_ist = temp_float / GAIN; //pc.printf("%d;",temp_word); // Rohwert ausgeben - pc.printf("Temp-R %0.2f; ",temp_float); - + pc.printf("Temp-R %0.2f; ",temp_r_ist); + // die Temperaturregelung ist nur bei aktiver Tropfensteuerung eingeschaltet // if (f_flag) @@ -435,22 +448,19 @@ // auf soll_wert begrenzt if (f_flag) { - if(temp_float > R_TEMP_MAX) - { - regelwert = 0.0; - esum = 0.0; - } + temp_r_max = R_TEMP_MAX; } else + { + temp_r_max = soll_wert + korr_wert; + } + + if(temp_float > temp_r_max) { - if(temp_float > soll_wert) - { regelwert = 0.0; esum = 0.0; - } - } - + //------------------------------------------------------ // Heizwiederstand ansteuern >> 0,02 entspricht 100% @@ -476,10 +486,120 @@ else pc.putc('0'); } - pc.printf("; verbleibende Zeit %02d",down_timer.GetTimerZeit(1)); + pc.printf("; verbleibende Zeit %02d; ",down_timer.GetTimerZeit(1)); + + if(f_flag) + pc.printf("on;"); + else + pc.printf("off;"); + + pc.printf("\n"); + + // LCD String zusammensetzen und ausgeben + for (int i = 0; i < 25; i++) lcd_text[i] = 0; + //01234567890123456789 + sprintf(lcd_text,"TR %3.1f / %3.1f ",temp_r_ist,temp_r_max); + //sprintf(lcd_text,"erste Zeile"); + uint8_t len = strlen(lcd_text); + uint8_t anz = len + 3; + com.printf(":AA%02x020000",anz); //Zeile 1 Temps + for (int i = 0; i < len; i++) + { + com.printf("%02x",lcd_text[i]); + } + com.printf("A5\n"); + //wait_ms(100); + + + for (int i = 0; i < 25; i++) lcd_text[i] = 0; + //01234567890123456789 + sprintf(lcd_text,"TK %3.1f / %3.1f ",temp_soll,soll_wert); + //sprintf(lcd_text,"Heizung %s " ,BOOL_FMT(t_flag)); + len = strlen(lcd_text); + anz = len + 3; + com.printf(":AA%02x020001",anz); //Zeile 2 Heizung (ein/aus) + for (int i = 0; i < len; i++) + { + com.printf("%02x",lcd_text[i]); + } + com.printf("A5\n"); + //wait_ms(100); + + for (int i = 0; i < 25; i++) lcd_text[i] = 0; + //01234567890123456789 + sprintf(lcd_text,"temp. %s flow %s ",BOOL_FMT(t_flag) ,BOOL_FMT(f_flag)); + len = strlen(lcd_text); + anz = len + 3; + com.printf(":AA%02x020002",anz); //Zeile 3 Tropfensteuerung (ein/aus) + for (int i = 0; i < len; i++) + { + com.printf("%02x",lcd_text[i]); + } + com.printf("A5\n"); + //wait_ms(100); - pc.printf(";\n"); + for (int i = 0; i < 25; i++) lcd_text[i] = 0; + //01234567890123456789 + sprintf(lcd_text,"Zeit %3d Tropfen %3d" ,down_timer.GetTimerZeit(1),tropfen_anz); + len = strlen(lcd_text); + anz = len + 3; + com.printf(":AA%02x020003",anz); //Zeile 4 Anz. Zeit+Tropfen + for (int i = 0; i < len; i++) + { + com.printf("%02x",lcd_text[i]); + } + com.printf("A5\n"); + //wait_ms(100); + } // end if(down_timer ... + + + // timer 3 + + + + if (com.readable()) { + + int ch = com.getc(); + // pc.printf("\nzeichen=%c %x",ch,ch); + + switch (ch){ + case '1': magnet.toggle (0); + break; + case '2': magnet.toggle (1); + break; + case '3': magnet.toggle (2); + break; + case '4': magnet.toggle (3); + break; + case '5': if (t_flag) + { + t_flag = false; + pc.printf("\nHeizung durch externen Taster deaktiviert\n"); + } + else + { + t_flag = true; + pc.printf("\nHeizung durch externen Tastet aktiviert\n"); + } + break; + case '6': if (f_flag) + { + f_flag = false; + pc.printf("\nTropfensteuerung durch externen Taster deaktiviert\n"); + } + else + { + f_flag = true; + pc.printf("\nTropfensteuerung durch externen Taster aktiviert\n"); + } + break; + } + + } + + + } // end while }
--- a/monitor.lib Sat Aug 30 08:49:43 2014 +0000 +++ b/monitor.lib Sun Sep 07 12:10:34 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Temp/code/monitor/#e5f5e56ffc50 +http://mbed.org/teams/Temp/code/monitor/#f5bfddb84d63