Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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)