Re: speicherung von Werten Kategorie: Programmierung (von Willi aus Oelde - 27.11.2001 21:26) | |
Als Antwort auf Re: speicherung von Werten von KlaRa - 23.11.2001 19:38
| |
Hier ein Beispiel, die Longwerte Byteweise zu speichern. Ich hoffe es hilft. Willi aus Oelde // ------------- Globale Variablen ---------------------- string r ; // string s ; // String für LCD Ausgabe string t ; // Für Meldungen byte Merker ; // Betriebsart LCD - Ausgabe byte Fehler ; // 1=WSO Board byte Status2 ; // fuer Boilerladen byte Byte_Out2 ; // für Ausgabe an WSO Board byte Index ; /* Index im Auswahlmenue */ byte ti ; /* Zähler im Auswahlmenue */ byte Byte_in ; /* Eingabebyte vom WSO_Board */ byte Speicher [64]; // 64 nicht 63 !! Erst mal Platz für 16 Long-Werte machen byte d[17]; // Korrektur / Einstellungen 16 Werte int Zeit_bis_Speicher ; // int T_Kollektor ; // int T_Kollektor_Ruecklauf ; wird nur angezeigt int T_Rezirkulation ; int T_Speicher_Oben ; int T_Speicher_Unten ; int T_Boiler_Oben ; int T_Boiler_Unten ; int T_Heizungs_Ruecklauf ; long Zeit_Zaehler [20] ; /* Zeit Zaehler -12 werden gespeichert */ float Temp_Sensor[9] ; /* Temp. der Sensoren */ float ADC1 ; /* Analogwerteingabe PT 500 */ etc...... /**********************/ function EEprom_Write() /**********************/ { byte i,j; // long k; plm.beep(plm.TONE_A2); // Piepen zum Speichern sleep 1500; plm.beep(plm.TONE_OFF); if d[10] and 2 // Modusbit 1 gesetzt ? { for i = 0 ... 11 Zeit_Zaehler[i]=0; // Alle Zeitzähler löschen } // Tageszähler löschen Zeit_Zaehler[12]=0; Zeit_Zaehler[13]=0; Zeit_Zaehler[14]=0; Zeit_Zaehler[15]=0; /* Daten in Daten-Speicher (EEPROM) übertragen */ for i = 0 ... 11 { mem.putlong(Speicher,i*4,Zeit_Zaehler[i]); } /* ab Adresse $1f00 schreiben */ i2c.start(160) ; // Addressbits : A0-A3=GND i2c.write(0x1f); // Byte-Addr. : high-byte i2c.write(0x00); // Byte-Addr. : low-byte // Erst Korrekturwerte schreiben ab $1f00 i2c.write(d[0]); // dT aus: mindeste Temp. sonst aus i2c.write(d[1]); // dT Boiler minimale höhere Temp. zum laden i2c.write(d[2]); // dT Speicher minimale höhere Temp. zum laden i2c.write(d[3]); // max. Boiler i2c.write(d[4]); // max. Speicher i2c.write(d[5]); // min. Fussboden i2c.write(d[6]); // max. Fussboden i2c.write(d[7]); // dt Zeit Kollektor erwärmen i2c.write(d[8]); // NF aus: Nachheizung aus i2c.write(d[9]); // NF ein: Nachheizung ein i2c.write(d[10]); // Modus i2c.write(d[11]); // or i2c.write(d[12]); // and i2c.write(d[13]); // Sicherheitstemp Start Pumpe i2c.write(d[14]); // Boiler laden von Speicher i2c.write(d[15]); // //for i = 0 ... 15 // {i2c.write(d[i]); // } for i = 0 ... 47 { i2c.write(Speicher[i]); // Byte-schreiben } i2c.stop(); // max. 64 Werte am Stück schreiben !! plm.beep(plm.TONE_E2); // Piepen zum Speichern clear(); /* Display löschen */ goto(1,3); print ("Gespeichert !! "); // Signalisieren, das gespeichert ! sleep 1500; plm.beep(plm.TONE_OFF); } /**********************/ function EEprom_Read() /**********************/ { byte i,j; for j = 0 ... 10 // 10 mal, um Fehler zu vermeiden { i2c.init(); i2c.start(160); // Schreibzugriff i2c.write(0x1f); // zum Adresse übermitteln ( 1f = last page ) i2c.write(0x00); // High Endurance Block bis 100.000 x schreiben i2c.start(161); // Lesezugriff /* Korrekturwerte/ Einstellungen lesen (16 Stück) */ for i = 0 ... 15 {d[i] = i2c.read(); // } /* Zeit_Zaehler lesen */ for i = 0 ... 47 // zur Zeit 32+16 Bytes Lesen / hier 48 Bytes { Speicher[i] = i2c.read(); // } Speicher[63] = i2c.readlast(); // und letztes Byte lesen i2c.stop(); for i = 0 ... <12 // 12 Longveriable aus Speicher[] holen { Zeit_Zaehler[i] = mem.getlong(Speicher,i*4); } if d[10]!=255 j = 10; } if d[10] == 255 // Defaultwerte laden { d[0]=04; // dT d[1]=07; // dT Boiler d[2]=08; // dt Speicher d[3]=60; // max. Boiler d[4]=90; // max. Speicher d[5]=22; // Fussb. aus d[6]=24; // Fussb. ein d[7]=06; // Zeit * 30 ! d[8]=24; // Nachheizen Fussboden aus d[9]=22; // Nachheizen Fussboden ein d[10]=9; // Modus d[11]=0; // Or d[12]=255;// And d[13]=98; // Pumpen starten wegen Speicher zu heiss d[14]=45; // Boiler vom Speicher nachheizen d[15]=80; // max. Temp vor dem Heizungspumpe starten for i = 0 ... 15 // 15 Variable löschen { Zeit_Zaehler[i] = 0; } plm.beep(plm.TONE_G2); // Piepen beim Lesen clear(); /* Display löschen */ goto(1,3); print ("Defaultwerte geladen !! "); // Signalisieren, das gespeichert ! sleep 1500; plm.beep(plm.TONE_OFF); } } | |
Antwort schreiben Antworten: Etwas für die Tips&Ergänzungen! (von KlaRa - 27.11.2001 21:34) Re: Etwas für die Tips&Ergänzungen! (von Willi aus Oelde - 27.11.2001 21:47) |