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

Re: Array auf Chipkarte speichern Kategorie: I²C-Bus (von wema - 3.10.2005 20:03)
Als Antwort auf Array auf Chipkarte speichern von Marco - 2.10.2005 23:06
Ich nutze:
C164CI-ControllerBoard, CC2-ReglerBoard, OSOPT V3.0
> Hallo
>
> Brauche dringend Hilfe! Ich versuche mit folgendem c2 Code die integer Variabel TASINT als Array auf
> meiner I2C Chipkarte (24LC65) im 1 sek.Takt abzulegen. Dies im Zeitraum einer halben Stunde.
> sollte dann 1800 Integerarrays mit einer grösse von 3600 Bytes haben. Benütze das Modul eeprom.c2.
>
> //------------
>   thread main
> //------------
> {
>   float TAS, DP, AP, T, R, TASEQN, VSDP, VSAP, VST;
>   int TASINT;
>
>   loop
>   {
>     VSDP = 0.00488*ports.adc(0);            
>     VSAP = 0.00488*ports.adc(1);              
>     VST = 0.00488*ports.adc(2);                
>     if VSDP > 1
>        {
>        DP = ((5*VSDP)/5)-1;
>        AP = ((94.4287*VSAP)/5)+14.3532;
>        R = 5/VST-1;
>        T = 1000/(math.ln(R)/3.9+1000/298);
>        TASEQN =((2*DP)/(AP/(287*T)));
>        TAS = math.sqrt(TASEQN)*3.6;        
>        TASINT = TAS;
>        eeprom.writeintarray(0,0x0000,TASINT,1800);
>        sleep 1000;
>        }
>    }
> }
>
> 0 (im eeprom.c2 Modul) sollte die Chipkartenadresse auf dem I2C Bus sein beim schreiben.
> 0x0000 Startadresse im eeprom  
> TASINT = Variabelname
> 1800 = Anzahl Arrays
>
> Könnt Ihr mir sagen, was ich falsch mache? Habe extrem wenig Erfahrung mit SW schreiben
> und Speicheradressierung.
>
> p.s.  Braucht man in jedem Fall pull up Widerstände bei der CC2 oder nur bei langen Leitungen?
>
> Besten Dank !!!
>
> MfG Marco
>

Hallo Marco,

wenn ich mich nicht irre, hast Du leider einige Fehler in Deinem Code. So kann es nicht funktionieren.
1. Wenn Du ein Daten-Array benutzt, dann muÃ?t Du es zu Beginn auch entspr. definieren, also
   int TASINT[1800];
   Damit initiierst Du 1800 Array-Einträge, muÃ?t jedoch bei den Indizes darauf achten, dass ab 0 ge-
   zählt wird, als TASINT[0] bis TASINT[1799]   !!!!!!!
2. In Deinem Programmcode lä�t Du die Berechnung jede Sekunde wiederholen, und damit auch in
   jeder Sekunde Deine frisch geschriebenen Daten überschreiben. Grund: Du erhöhst die Datenadresse
   in der Zeile "eeprom.writeintarray(0,0x0000,TASINT,1800);" nicht.

Ich kann leider Deine Berechnungen nicht nachvollziehen, würde jedoch ganz einfach mal folgendes
empfehlen:


//------------
  thread main
//------------
{
  float TAS, DP, AP, T, R, TASEQN, VSDP, VSAP, VST;
  int TASINT[1800]; // -------------------------------------------geändert
  int arrayzaehler,eepromadresse; // --------------------------------------------eingefügt

  loop
  {
    VSDP = 0.00488*ports.adc(0);            
    VSAP = 0.00488*ports.adc(1);              
    VST = 0.00488*ports.adc(2);                
    if VSDP > 1
       {
       DP = ((5*VSDP)/5)-1;
       AP = ((94.4287*VSAP)/5)+14.3532;
       R = 5/VST-1;
       T = 1000/(math.ln(R)/3.9+1000/298);
       TASEQN =((2*DP)/(AP/(287*T)));
       TAS = math.sqrt(TASEQN)*3.6;        
       TASINT[arrayzaehler] = TAS; // --------------------------------------------geändert
       arrayzaehler = arrayzaehler + 1; // -------------------------------------eingefügt
       eeprom.writeintarray(0,eepromadresse,TASINT,1800); // -------------geändert
       eepromadresse=eepromadresse+2; //um 2 erhöhen, da INTEGER , ----------------eingefügt
       if arrayzaehler==1800 //  -------------------------------IF-Schleife eingefügt
       {
          arrayzaehler=0;
          eepromadresse=0;
          // jetzt müÃ?ten die Daten ausgelesen oder die Karte ausgetauscht werden,
          // ansonsten würden die Daten beim nächsten Durchgang ab 0 wieder überschrieben!!!!!
       }
       sleep 1000;
       }
   }
}

Ich hoffe, ich konnte Dir etwas helfen und habe mich verständlich ausgedrückt.

Aber auch ich habe eine Frage an Dich: Wie lieÃ?t Du Deine Karte aus?? Ich schreibe auch ein Daten-
logg auf eine Chipkarte von André, möchte diese jedoch aber an meinem PC auslesen. Mein normaler
TOWITOKO Chipkartenleser kann jedoch scheinbar mit den I2C-EEpromkarten nichts anfangen.
Hast Du eine Lösung??????

Gru� und einen schönen Abend noch,
wema


    Antwort schreiben


Antworten:

Re: Array auf Chipkarte speichern (von Marco - 4.10.2005 18:58)
    Re: Array auf Chipkarte speichern (von wema - 4.10.2005 23:51)
        Re: Array auf Chipkarte speichern (von Marco - 5.10.2005 21:51)