Re: I2C GPS-Modul auslesen Kategorie: I²C-Bus (von André H. - 8.10.2005 17:58) | ||
Als Antwort auf Re: I2C GPS-Modul auslesen von Marco - 8.10.2005 1:09 | ||
| ||
Hallo Marco, Mache bitte keine Doppelposts zum selben Thema. Du hast bereits einen Thread zum selben Thema weiter unten angefangen. Bleibe bitte in diesem, sonst wird's für Mitleser sehr unübersichtlich. Hier für Mitleser der Thread, auf dem sich dieses Thema bezieht. Benutze bitte auch unbedingt die Code-Tags, wenn Du Quellcode postest. Deutlicher kann ich es oberhalb des Kommentarfelds nichtmehr schreiben. Nun aber noch ein paar Anmerkungen zu Deinen Routinen: Da� das funktioniert, bezweifle ich eher. Zumindest wirst Du Dein EEProm ziemlich schnell zerstören, da schon nach ca. 15maligen Ausführen des Programms mehr als 100.000 Schreibzyklen auf einzelne Speicherzellen durchgeführt wurden. Da 4x 1800 Byte pro Schleifendurchlauf geschrieben werden, welche sich von den Adressen überschneiden, und das 1800 mal !? So, wie ich es sehe, willst Su auf dem EEProm folgendes Format haben: Byte 0 bis 1799 den Wert TAS, pro Schleifendurchgang einen neuen Wert. Byte 1800 bis 7199 die Werte GS_H, GS_T, und GS_U im folgendem Format: HTUHTUHTU... usw. Das geht z.B. so: const GS_H=0; const GS_T=1; const GS_U=2; //------------ thread main //------------ { float TAS, DP, AP, T, R, TASEQN, VSDP, VSAP, VST; byte GS[3]; int offset; loop { VSDP=1.1; VSAP=4.6; VST=2.3; 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; sleep 15; i2c.cstart(214); i2c.write(50); i2c.stop(); sleep 15; i2c.cstart(215); GS[GS_H]=i2c.read(); GS[GS_T]=i2c.read(); GS[GS_U]=i2c.readlast(); i2c.stop(); sleep 15; eeprom.writebyte(0,offset,TAS); eeprom.writebytearray(0,(offset*3)+1800,GS,3); offset=offset+1; if offset==1800 quit 1; } } } Ach ja, noch eine Bitte: Mach' ein OS Update. Das Original OS ist schon seit Jahren veraltet. Weder von mir noch von irgendjemand anderem gibt es dazu noch Support ! Du hast mit dem alten original OS keinerlei Vorteile, sondern nur Nachteile. MfG André H. > Problem gelöst. So funktionierts. > > //------------ > thread main > //------------ > > { > float TAS, DP, AP, T, R, TASEQN, VSDP, VSAP, VST; > byte TASBYTE[1800],GS_H[1800],GS_T[1800],GS_U[1800]; > int arrayzaehler_TAS,eepromadresse_TAS; > int arrayzaehler_GS_H,eepromadresse_GS_H; > int arrayzaehler_GS_T,eepromadresse_GS_T; > int arrayzaehler_GS_U,eepromadresse_GS_U; > > eepromadresse_TAS=0; > arrayzaehler_TAS=-1; > eepromadresse_GS_H=1800; > arrayzaehler_GS_H=-1; > eepromadresse_GS_T=1801; > arrayzaehler_GS_T=-1; > eepromadresse_GS_U=1802; > arrayzaehler_GS_U=-1; > > loop > { > VSDP=1.1; > VSAP=4.6; > VST=2.3; > 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; > arrayzaehler_TAS=arrayzaehler_TAS + 1; > TASBYTE[arrayzaehler_TAS]=TAS; > eeprom.writebytearray(0,eepromadresse_TAS,TASBYTE,1800); > eepromadresse_TAS=eepromadresse_TAS+1; > sleep 15; > i2c.start(214); > i2c.write(50); > i2c.stop(); > sleep 15; > i2c.start(215); > arrayzaehler_GS_H=arrayzaehler_GS_H + 1; > GS_H[arrayzaehler_GS_H]=i2c.read(); > arrayzaehler_GS_H=arrayzaehler_GS_H + 1; > GS_T[arrayzaehler_GS_T]=i2c.read(); > arrayzaehler_GS_U=arrayzaehler_GS_U + 1; > GS_U[arrayzaehler_GS_U]=i2c.readlast(); > i2c.stop(); > sleep 15; > eeprom.writebytearray(0,eepromadresse_GS_H,GS_H,1800); > eepromadresse_GS_H=eepromadresse_GS_H+3; > eeprom.writebytearray(0,eepromadresse_GS_T,GS_T,1800); > eepromadresse_GS_T=eepromadresse_GS_T+3; > eeprom.writebytearray(0,eepromadresse_GS_U,GS_U,1800); > eepromadresse_GS_U=eepromadresse_GS_U+3; > if arrayzaehler_GS_U==1799 > { > quit 63; > } > } > } > } > Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: I2C GPS-Modul auslesen (von Marco - 9.10.2005 20:04) |