070914

Dependencies:   FreescaleIAP MODSERIAL mbed monitor timer0

Fork of 17_PT1000 by Temp27

Committer:
Sven3010
Date:
Sun Jul 27 08:38:11 2014 +0000
Revision:
1:82c47e2d81f0
Parent:
0:e248310dfcdb
Child:
2:f48d2eb0cc55
Update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rs27 0:e248310dfcdb 1 // Version 07 30.06.2013
rs27 0:e248310dfcdb 2 // die Ausgabe auf das Format #nr val umgestellt
rs27 0:e248310dfcdb 3
rs27 0:e248310dfcdb 4 #include "mbed.h"
rs27 0:e248310dfcdb 5 #include "DS2482.h"
rs27 0:e248310dfcdb 6 #include "timer0.h"
rs27 0:e248310dfcdb 7 #include "Buffer.h"
rs27 0:e248310dfcdb 8 #include "monitor.h"
rs27 0:e248310dfcdb 9
rs27 0:e248310dfcdb 10 #define CR 13
rs27 0:e248310dfcdb 11
rs27 0:e248310dfcdb 12 timer0 down_timer;
Sven3010 1:82c47e2d81f0 13 Serial pc(USBTX, USBRX);
rs27 0:e248310dfcdb 14 Buffer <char> buf;
rs27 0:e248310dfcdb 15 monitor mon;
rs27 0:e248310dfcdb 16
rs27 0:e248310dfcdb 17 // sda, scl, adr
rs27 0:e248310dfcdb 18 DS2482 ow(PTE0,PTE1,0x30);
rs27 0:e248310dfcdb 19
rs27 0:e248310dfcdb 20 DigitalOut r(LED_RED);
rs27 0:e248310dfcdb 21 DigitalOut g(LED_GREEN);
rs27 0:e248310dfcdb 22 DigitalOut b(LED_BLUE);
rs27 0:e248310dfcdb 23
rs27 0:e248310dfcdb 24 DigitalOut led1(LED1);
rs27 0:e248310dfcdb 25 //DigitalOut LED2(PTA2);
rs27 0:e248310dfcdb 26 DigitalOut LED5(PTA5);
Sven3010 1:82c47e2d81f0 27 DigitalOut LED_4(PTA12);
rs27 0:e248310dfcdb 28
rs27 0:e248310dfcdb 29 // Schalter 4051
rs27 0:e248310dfcdb 30 DigitalOut DC_A(PTE2);
rs27 0:e248310dfcdb 31 DigitalOut DC_B(PTE3);
rs27 0:e248310dfcdb 32 DigitalOut DC_C(PTE4);
rs27 0:e248310dfcdb 33 DigitalOut DC_EN(PTE5);
rs27 0:e248310dfcdb 34
rs27 0:e248310dfcdb 35 // PT1000 Karte 1
rs27 0:e248310dfcdb 36 AnalogIn an1(PTC0);
rs27 0:e248310dfcdb 37 AnalogIn an2(PTB1);
rs27 0:e248310dfcdb 38 AnalogIn an3(PTB2);
rs27 0:e248310dfcdb 39 AnalogIn an4(PTB3);
rs27 0:e248310dfcdb 40 AnalogIn an5(PTC2);
rs27 0:e248310dfcdb 41 AnalogIn an6(PTD5);
rs27 0:e248310dfcdb 42
rs27 0:e248310dfcdb 43 // 0 bis 5V
rs27 0:e248310dfcdb 44 AnalogIn an13(PTD6);
rs27 0:e248310dfcdb 45
rs27 0:e248310dfcdb 46 // Analog pins
rs27 0:e248310dfcdb 47 /*
rs27 0:e248310dfcdb 48 1 PTE20, ADC0_SE0, 0}, k2.2
rs27 0:e248310dfcdb 49 2 PTE22, ADC0_SE3, 0}, k2.3
rs27 0:e248310dfcdb 50 3 PTE21, ADC0_SE4a, 0},
rs27 0:e248310dfcdb 51 4 PTE29, ADC0_SE4b, 0}, k2,4
rs27 0:e248310dfcdb 52 5 PTE30, ADC0_SE23, 0}, k2.5
rs27 0:e248310dfcdb 53 6 PTE23, ADC0_SE7a, 0},
rs27 0:e248310dfcdb 54 7 PTB0, ADC0_SE8, 0}, k2.1
rs27 0:e248310dfcdb 55 8 PTB1, ADC0_SE9, 0}, k1.2
rs27 0:e248310dfcdb 56 9 PTB2, ADC0_SE12, 0}, k1.3
rs27 0:e248310dfcdb 57 10 PTB3, ADC0_SE13, 0}, k1.4
rs27 0:e248310dfcdb 58 11 PTC0, ADC0_SE14, 0}, k1.1
rs27 0:e248310dfcdb 59 12 PTC1, ADC0_SE15, 0}, k2.6
rs27 0:e248310dfcdb 60 13 PTC2, ADC0_SE11, 0}, k1.5
rs27 0:e248310dfcdb 61 14 PTD1, ADC0_SE5b, 0},
rs27 0:e248310dfcdb 62 15 PTD5, ADC0_SE6b, 0}, k1.6
rs27 0:e248310dfcdb 63 16 PTD6, ADC0_SE7b, 0}, k3.1
rs27 0:e248310dfcdb 64 */
rs27 0:e248310dfcdb 65
rs27 0:e248310dfcdb 66 float temp1, temp_neu;
rs27 0:e248310dfcdb 67 uint16_t temp_word;
rs27 0:e248310dfcdb 68 uint8_t n, y, status, ds1820_status;
rs27 0:e248310dfcdb 69
Sven3010 1:82c47e2d81f0 70 float temp_float;
Sven3010 1:82c47e2d81f0 71
rs27 0:e248310dfcdb 72 //--------------------------------------------------------
rs27 0:e248310dfcdb 73 // Interruptroutine wird bei jedem ankommenden Zeichen aufgerufen
rs27 0:e248310dfcdb 74 void rx_handler(void)
rs27 0:e248310dfcdb 75 {
rs27 0:e248310dfcdb 76 // Note: you need to actually read from the serial to clear the RX interrupt
rs27 0:e248310dfcdb 77
rs27 0:e248310dfcdb 78 char ch;
rs27 0:e248310dfcdb 79
rs27 0:e248310dfcdb 80 while (pc.readable())
rs27 0:e248310dfcdb 81 {
rs27 0:e248310dfcdb 82 ch = pc.getc();
rs27 0:e248310dfcdb 83 buf.put(ch);
rs27 0:e248310dfcdb 84 }
rs27 0:e248310dfcdb 85 }
rs27 0:e248310dfcdb 86
rs27 0:e248310dfcdb 87
rs27 0:e248310dfcdb 88 int read_mw(uint8_t pos)
rs27 0:e248310dfcdb 89 {
rs27 0:e248310dfcdb 90 uint8_t n;
rs27 0:e248310dfcdb 91
rs27 0:e248310dfcdb 92 int val = 0;
rs27 0:e248310dfcdb 93 int mw = 0;
rs27 0:e248310dfcdb 94
Sven3010 1:82c47e2d81f0 95 LED_4 = 0;
Sven3010 1:82c47e2d81f0 96
rs27 0:e248310dfcdb 97 // 16 Messungen für eine bessere Mittelung durchführen
rs27 0:e248310dfcdb 98
rs27 0:e248310dfcdb 99 for (n = 0; n < 16; n++)
rs27 0:e248310dfcdb 100 {
rs27 0:e248310dfcdb 101 switch (pos)
rs27 0:e248310dfcdb 102 {
rs27 0:e248310dfcdb 103 // PT1000 Karte 1
rs27 0:e248310dfcdb 104 case 0: val = an1.read_u16(); break;
rs27 0:e248310dfcdb 105 case 1: val = an2.read_u16(); break;
rs27 0:e248310dfcdb 106 case 2: val = an3.read_u16(); break;
rs27 0:e248310dfcdb 107 case 3: val = an4.read_u16(); break;
rs27 0:e248310dfcdb 108 case 4: val = an5.read_u16(); break;
rs27 0:e248310dfcdb 109 case 5: val = an6.read_u16(); break;
rs27 0:e248310dfcdb 110 }
rs27 0:e248310dfcdb 111 mw += val;
rs27 0:e248310dfcdb 112 } // end for
rs27 0:e248310dfcdb 113
rs27 0:e248310dfcdb 114 // Temperatur berechnen
rs27 0:e248310dfcdb 115 // Wert durch 16 teilen
rs27 0:e248310dfcdb 116
rs27 0:e248310dfcdb 117 mw = mw >> 4;
Sven3010 1:82c47e2d81f0 118
Sven3010 1:82c47e2d81f0 119 LED_4 = 1;
Sven3010 1:82c47e2d81f0 120
rs27 0:e248310dfcdb 121 return mw;
rs27 0:e248310dfcdb 122 }
rs27 0:e248310dfcdb 123
rs27 0:e248310dfcdb 124
rs27 0:e248310dfcdb 125 int main()
rs27 0:e248310dfcdb 126 {
rs27 0:e248310dfcdb 127
Sven3010 1:82c47e2d81f0 128 pc.baud(9600);
rs27 0:e248310dfcdb 129 pc.attach(&rx_handler, Serial::RxIrq);
Sven3010 1:82c47e2d81f0 130 pc.printf("\n V08 was compiled on %s %s \n", __DATE__,__TIME__);
rs27 0:e248310dfcdb 131
rs27 0:e248310dfcdb 132 down_timer.SetCountdownTimer(0,1,50); // Timer für die LED
rs27 0:e248310dfcdb 133 down_timer.SetCountdownTimer(1,1,500); // Timer für den one wire bus
rs27 0:e248310dfcdb 134 down_timer.SetCountdownTimer(2,1,1000);// Timer für die Ausgabe der Daten
rs27 0:e248310dfcdb 135
rs27 0:e248310dfcdb 136 r = g = b = 1; // RGB LED ausschalten
rs27 0:e248310dfcdb 137 //--------------------------------------------------------------------
rs27 0:e248310dfcdb 138 // one wire bus
rs27 0:e248310dfcdb 139
rs27 0:e248310dfcdb 140 // pc.printf("\n ++++ on wire search ++++\n");
rs27 0:e248310dfcdb 141 wait (0.1);
rs27 0:e248310dfcdb 142 ow.DS18XX_Read_Address();
rs27 0:e248310dfcdb 143
rs27 0:e248310dfcdb 144 n = ow.ow.devices;
rs27 0:e248310dfcdb 145
rs27 0:e248310dfcdb 146 // Anzahl der ow Bausteine ermitteln
rs27 0:e248310dfcdb 147 y = 0;
rs27 0:e248310dfcdb 148 for (n = 0; n < OW_MAX_DEVICES; n++)
rs27 0:e248310dfcdb 149 {
rs27 0:e248310dfcdb 150 if ((ow.ow.device_table[n].status & 0x0f) == 1) y++;
rs27 0:e248310dfcdb 151 } // end for(...
rs27 0:e248310dfcdb 152
rs27 0:e248310dfcdb 153 // pc.printf("\n %d devices FOUND \n",y);
rs27 0:e248310dfcdb 154
rs27 0:e248310dfcdb 155 // ow 64 bit Adressen ausgeben
rs27 0:e248310dfcdb 156 for (n = 0; n < OW_MAX_DEVICES; n++)
rs27 0:e248310dfcdb 157 {
rs27 0:e248310dfcdb 158 if ((ow.ow.device_table[n].status & 0x0f) == 1)
rs27 0:e248310dfcdb 159 {
rs27 0:e248310dfcdb 160 //pc.printf("\n device #%2d ",n);
rs27 0:e248310dfcdb 161 //pc.printf(": adr: %2d: ",ow.ow.device_table[n].adr );
rs27 0:e248310dfcdb 162 for (y = 0; y < 8; y++)
rs27 0:e248310dfcdb 163 {
rs27 0:e248310dfcdb 164 // pc.printf(" %02x",ow.ow.device_table[n].rom[y]);
rs27 0:e248310dfcdb 165 }
rs27 0:e248310dfcdb 166 }
rs27 0:e248310dfcdb 167
rs27 0:e248310dfcdb 168 } // end for(...
rs27 0:e248310dfcdb 169
rs27 0:e248310dfcdb 170 //pc.printf("\n");
rs27 0:e248310dfcdb 171
rs27 0:e248310dfcdb 172 //--------------------------------------------------------------------
rs27 0:e248310dfcdb 173 // Anfangswert bestimmen
rs27 0:e248310dfcdb 174
rs27 0:e248310dfcdb 175 temp_neu = read_mw(0);
rs27 0:e248310dfcdb 176
rs27 0:e248310dfcdb 177 //pc.printf("\nPT1000; DS18B20");
rs27 0:e248310dfcdb 178 status = 0;
rs27 0:e248310dfcdb 179 ds1820_status = 0;
rs27 0:e248310dfcdb 180
rs27 0:e248310dfcdb 181 //--------------------------------------------------------------------
rs27 0:e248310dfcdb 182 // Schleife fuer die Datenerfassung
rs27 0:e248310dfcdb 183
rs27 0:e248310dfcdb 184 while(1)
rs27 0:e248310dfcdb 185 {
rs27 0:e248310dfcdb 186 mon.get_line();
rs27 0:e248310dfcdb 187
rs27 0:e248310dfcdb 188 //-------------------------------------------
rs27 0:e248310dfcdb 189 // timer 0 steuert die LED
rs27 0:e248310dfcdb 190
rs27 0:e248310dfcdb 191 if (down_timer.GetTimerStatus(0) == 0)
rs27 0:e248310dfcdb 192 {
rs27 0:e248310dfcdb 193 down_timer.SetCountdownTimer(0,1,500);
rs27 0:e248310dfcdb 194 LED5 = !LED5;
rs27 0:e248310dfcdb 195 }
rs27 0:e248310dfcdb 196
rs27 0:e248310dfcdb 197 //-------------------------------------------
rs27 0:e248310dfcdb 198 // timer 1 steuert den one wire bus
Sven3010 1:82c47e2d81f0 199 /*
rs27 0:e248310dfcdb 200 if (down_timer.GetTimerStatus(1) == 0)
rs27 0:e248310dfcdb 201 {
rs27 0:e248310dfcdb 202 switch (ds1820_status)
rs27 0:e248310dfcdb 203 {
rs27 0:e248310dfcdb 204 case 0 :
rs27 0:e248310dfcdb 205 // Temperaturwandler starten und 0,8 sek. warten
rs27 0:e248310dfcdb 206 // Start conversion for all DS1820 sensors
rs27 0:e248310dfcdb 207 // pc.printf("\ntrigger one wire bus");
rs27 0:e248310dfcdb 208
rs27 0:e248310dfcdb 209 ow.ds1820_start_conversion(0xFF); // alle Bausteine am Bus triggern
rs27 0:e248310dfcdb 210
rs27 0:e248310dfcdb 211 // Delay until conversion is completed
rs27 0:e248310dfcdb 212 down_timer.SetCountdownTimer(1,1,750); // Timer = 750ms
rs27 0:e248310dfcdb 213
rs27 0:e248310dfcdb 214 // beim nächsten Auruf die Temperatur lesen
rs27 0:e248310dfcdb 215 ds1820_status = 1;
rs27 0:e248310dfcdb 216
rs27 0:e248310dfcdb 217 break;
rs27 0:e248310dfcdb 218
rs27 0:e248310dfcdb 219 case 1 : // Temperatur von Temperaturfühler 1 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 220 case 2 : // Temperatur von Temperaturfühler 2 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 221 case 3 : // Temperatur von Temperaturfühler 3 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 222 case 4 : // Temperatur von Temperaturfühler 4 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 223 case 5 : // Temperatur von Temperaturfühler 5 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 224 case 6 : // Temperatur von Temperaturfühler 6 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 225 case 7 : // Temperatur von Temperaturfühler 7 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 226 case 8 : // Temperatur von Temperaturfühler 8 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 227 case 9 : // Temperatur von Temperaturfühler 9 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 228 case 10 : // Temperatur von Temperaturfühler 10 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 229 case 11 : // Temperatur von Temperaturfühler 11 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 230 case 12 : // Temperatur von Temperaturfühler 12 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 231 case 13 : // Temperatur von Temperaturfühler 13 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 232 case 14 : // Temperatur von Temperaturfühler 14 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 233 case 15 : // Temperatur von Temperaturfühler 15 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 234 case 16 : // Temperatur von Temperaturfühler 16 lesen und 0,05 sek. warten
rs27 0:e248310dfcdb 235
rs27 0:e248310dfcdb 236 // Write temperature of all registered sensors
rs27 0:e248310dfcdb 237 uint8_t pos = ds1820_status - 1;
rs27 0:e248310dfcdb 238 if ((ow.ow.device_table[pos].status & 0x0f) != 0)
rs27 0:e248310dfcdb 239 {
rs27 0:e248310dfcdb 240 ow.ow.device_table_index = pos;
rs27 0:e248310dfcdb 241 ow.ds18B20_read_hrtemp();
rs27 0:e248310dfcdb 242 // pc.printf(" %2.2f; ",ow.ow.device_table[pos].value);
rs27 0:e248310dfcdb 243 }
rs27 0:e248310dfcdb 244
rs27 0:e248310dfcdb 245 ds1820_status++;
rs27 0:e248310dfcdb 246 if (ds1820_status > OW_MAX_DEVICES)
rs27 0:e248310dfcdb 247 {
rs27 0:e248310dfcdb 248 ds1820_status = 0;
rs27 0:e248310dfcdb 249 down_timer.SetCountdownTimer(1,2,10); // Timer deakivieren
rs27 0:e248310dfcdb 250 // pc.printf("\nexit one wire bus");
rs27 0:e248310dfcdb 251 }
rs27 0:e248310dfcdb 252 else
rs27 0:e248310dfcdb 253 down_timer.SetCountdownTimer(1,1,10); // 10 ms Timer
rs27 0:e248310dfcdb 254
rs27 0:e248310dfcdb 255 break;
rs27 0:e248310dfcdb 256
rs27 0:e248310dfcdb 257 } // end switch
rs27 0:e248310dfcdb 258 } // if (down_timer
rs27 0:e248310dfcdb 259
Sven3010 1:82c47e2d81f0 260 */
rs27 0:e248310dfcdb 261 //-------------------------------------------
rs27 0:e248310dfcdb 262 // timer 2 steuert die Datenausgabe
rs27 0:e248310dfcdb 263
rs27 0:e248310dfcdb 264 if (down_timer.GetTimerStatus(2) == 0)
rs27 0:e248310dfcdb 265 {
rs27 0:e248310dfcdb 266 down_timer.SetCountdownTimer(2,1,1000);
rs27 0:e248310dfcdb 267
rs27 0:e248310dfcdb 268 //------------------------------------------------------
rs27 0:e248310dfcdb 269 // PT1000 lesen und berechnen und ausgeben
rs27 0:e248310dfcdb 270 // 16 mal den Eingang fuer eine bessere Mittelung lesen
rs27 0:e248310dfcdb 271 //
rs27 0:e248310dfcdb 272
rs27 0:e248310dfcdb 273 temp_word = read_mw(0);
Sven3010 1:82c47e2d81f0 274 temp_float = (temp_word - 17210);
Sven3010 1:82c47e2d81f0 275 temp_float /= 70;
Sven3010 1:82c47e2d81f0 276 pc.printf("%0.2f; ",temp_float); // Rohdaten ausgeben
Sven3010 1:82c47e2d81f0 277
rs27 0:e248310dfcdb 278
rs27 0:e248310dfcdb 279 temp_word = read_mw(1);
Sven3010 1:82c47e2d81f0 280 temp_float = (temp_word - 17210);
Sven3010 1:82c47e2d81f0 281 temp_float /= 70;
Sven3010 1:82c47e2d81f0 282 pc.printf("%0.2f\n",temp_float); // Rohdaten ausgeben
Sven3010 1:82c47e2d81f0 283
rs27 0:e248310dfcdb 284
rs27 0:e248310dfcdb 285 //------------------------------------------------------
rs27 0:e248310dfcdb 286 // one wire Daten lesen und ausgeben
Sven3010 1:82c47e2d81f0 287 /*
rs27 0:e248310dfcdb 288 for (n = 0; n < OW_MAX_DEVICES; n++) // Ausgabe der Daten
rs27 0:e248310dfcdb 289 {
rs27 0:e248310dfcdb 290 if ((ow.ow.device_table[n].status & 0x0f) == 3) // Daten wurden gelesen
rs27 0:e248310dfcdb 291 {
rs27 0:e248310dfcdb 292 pc.printf("#%d %d\n",(n+20), ow.ow.device_table[n].result);
rs27 0:e248310dfcdb 293 ow.ow.device_table[n].status = 2;
rs27 0:e248310dfcdb 294 }
rs27 0:e248310dfcdb 295 }
rs27 0:e248310dfcdb 296
rs27 0:e248310dfcdb 297 down_timer.SetCountdownTimer(1,1,10); // Messung neu starten
Sven3010 1:82c47e2d81f0 298 */
rs27 0:e248310dfcdb 299 } // end if(down_timer ...
rs27 0:e248310dfcdb 300
rs27 0:e248310dfcdb 301 } // end while
rs27 0:e248310dfcdb 302 }
rs27 0:e248310dfcdb 303