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 | ||
| ||
> 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) |