Jump to content

fire

Full members
  • Posts

    13.980
  • Joined

  • Last visited

  • Days Won

    15

Everything posted by fire

  1. stvar je da se ti smijes iz toga, onda vecina koja se ne kuzi u to shvaca ozbiljno i smatra se da je vems igrica kao nitendo i takve pizdarije. I onda mene ljudi gnjave dal je to istina i moram gubiti sate i sate na objasnjavenje da nije to tak samo zato jer je tebi u zivotu dosadno. Super si :thumbsup:
  2. Ok, a zasto se nomozes normalno razgovarati? Sad mi je jasno zasto volis motorolu.
  3. Kova meni se cini da malo prcas a nemas pojma o temi. Ako tko oce usporedivati procesore evo, http://www.maxim-ic.com/products/microcontrollers/maxq/performance/competitive.cfm http://www.coremark.org/benchmark/index.php Postoji vems s atmega2561, ali za obicne aute nije potreban. To se koristi za aute koji imaju cudne zahtjeve(ali jakooooo cudne, npr auto na wood gas i tako . Posti vems arm verzija. Plocica je gotova, dio softvera... ali za sada dostupno samo razvojnom timu. A sad zasto je arm procesor a ne neki drugi, to mi se neda raspravljati s ljudima koji vjerovatno neznaju sto su registri na procesoru i koji cemu sluze, koji su od kud dostupni.... Inace vecina ecu-a koristi freescale procesore, ali iz jednog drugog razloga. O tome otom potom. edit: kova. ova verzija vemsa se moze preko blue tooth upravljati. A ima i preko 900MHz i tako. Tak da mozes bez problema na 2km mapirati auto na utrci.
  4. Do sada jedini tko je uspio doci u vemsu cpu load 100% je auti 2.2 na nekih 9700rpm s onim njegovim cudnim TW od 135 zuba kada je upaljena opcija analize vremena izmedu svakog zuba i to. To je korisno jer dok je to upaljeno i npr zvekne zamasnjak motor ce samo zatrokirati i zgasiti se. A drugo vidis kolko svaki cilindar posebno daje snage ili oduzima ako je feul cut ili npr svecica/injektor/kompresija ne valja. A ako se malo potrodis analizirati podatke vidis otrpilike di je PPP. Ako se ugase te analize ili se stavi TW s manje zuba idu okretaji ohoh. I hic, postoji na vems v8 motor koji se vrti preko 10000rpm i radi u full sekvencijali i cpu load uopce nije veliki. Za 20000rpm nisam vidio, ali da postoji mehanika dostupna sigurno bi to netko napravio i sto se tice elektronike bi radilo.
  5. ako si dobro pisao za prosjecan interupt nebi smio trositi vise od 10takta prosjecno, znaci oko 1% procesorskog vremena pri 16000interapta. Ako dode vise interapta istovremeno, zna se kojim redosljedom se izvrsava i svi ce biti izvrseni.
  6. Ma dovoljno je brz, samo treba optimizirati kod. 16miljuna operacija u 1s, puno je to
  7. Pa sam ti rekao da dodes ovaj tjedan do mene, znaci sutra ti je zadnji dan . Ali prije toga mi skini mape i sve confige i posalji na mail. I pasu tri razlicita tw na radilicu od xe-a.
  8. npr motor knocka stalno egt nece biti preko 700C i s smijesom 1, tako da..... i kolko znam ti jos uvjek neznas koji trigger wheel(od tri vrste) imas.
  9. imam i ja par verzija. Ako je netko stvarno zainteresiran za raditi, objasnit cu mu sto treba.
  10. Za sada se ti podaci salju, normalno moze se vise toga slati. Dovoljno ti je 0.1ms, jer ce ti dead time uzrokovati vecu pogresku od tih 0.1ms.
  11. Evo da ne nabrajam case 0: return (uint8_t)rtc.sec; //secl case 1: /* TODO: check this. "squirt" is apparently a bitmap of the something: ....BBAAba where capital A, B : ???? lowercase a, b: if the given channels are actually squirting // each squirt_t has its own status field, merge these fields a = inj_port1.status; b = inj_port2.status; return ((a & 0x01) | ((a & 0x06) << 1) | ((b & 0x01) << 1) | ((b & 0x06) << 3)); */ return engine.boostalt_command_duty; case 2: // remove the 'idle' bit to avoid confusing mstweak: return (engine.status & (uint8_t)~_BV(idle)); //engine return engine.status; //engine case 3: return engine.kpa_tps_blend; // AlphaN load; originally sensors8(BARO) // high resolution MAP case 4: return engine.kpa250 >> 8; case 5: return engine.kpa250 & 0xFF; case 6: return engine.mat; //mat case 7: return engine.coolant; //clt case 8: return engine.tps; //tps case 9: return engine.batt; //batt case 10: // o2 #ifdef WBO2 if (WBO2_SENSOR_CONFIGURED) { // traditional stuff via lookup table // return wbo2.Ip_output; /* make a concept. Make sure gauge displays 20.9 for 20.9% O2 * eg. gauge means lambda 0.6 .. 5 than O2% between 5..25 * Refer to megatune/vemstune compatible lookup table file * Test it. DO NOT NEGLECT THESE INSTRUCTIONS. * Anyone who changes this without the above, most significantly without: * written concept, working and tested tablefile BOTH for vemstune and megatune * or if it does not show 20.9 for 20.9% O2, will be prevented from accessing SVN */ // Andrey's solution, precise values required for AutoTune process possible, and perfect for dataloging // 20.9 already showed with StallO2 (see PW bytes 16:17), therefore 20.9 not needed to seen here // MT calcs lambda with simple scale/offset without any lookup tables // MT vems.ini uses: lambda = {(egoADC + 306)/470} // So rt_byte_10=164 means lambda = 1.0 uint16_t t16; t16 = wbo2.current_afr>>5; // 15052 -> 470 if (t16>306){ if (t16<562) return t16-306; // lambda range is 0.65...1.19 else return 0xFF; }else{ return 0; } } else #endif return ego_voltage(); //ego case 11: return mult16_8(corr.ego16,100)>>8; //egocorr case 12: return corr.air; //aircorr case 13: return (corr.warm >= 1535) ? 255 : (mult16_8(corr.warm-230,50)>>8); //warmcorr railed to 600% // high resolution RPM case 14: return engine.rpm_vhr >> 8; case 15: return engine.rpm_vhr & 0xFF; //show O2 instead pw in meatune for sensor calibration with stalled engine case 16: return ((engine.rpm==0) && wbo2.current_o2) ? wbo2.current_o2 >> 8 : (inj_port[0].pwcalc >> 8); //pw high case 17: return ((engine.rpm==0) && wbo2.current_o2) ? wbo2.current_o2 & 0xFF: (inj_port[0].pwcalc & 0xFF); //pw low case 18: return corr.baro; // barocorr is 128 based case 19: { // calculate from the stored high-res value (/100 and railing is needed) uint16_t ge; ge = mult16_8(corr.gammae381, 68) >> 8;// 381 * 68 / 256 = 101 (NOT 100 !) if ((ge >> 8) != 0) // check for overflow return 0xFF; else return (uint8_t)ge; } case 20: return corr.ve_hp; // should we use this style ? // #define MT_RT_OFFSET_XXX (21) // #define MT_RT_OFFSET_IGNADV (MT_RT_OFFSET_XXX+1) case 21: return engine.dwell>>4; // 64 usec resolution (possibly but unlikely overflowing) case 22: return (engine.ignadv < 510 ? (engine.ignadv>>1) : 255); // 128 + ignadv_halfdeg case 23: return iac.position; // make sure 16 bit variables start on even offsets: // raw egt data, do scaling externally (in megatune based on egtofs and egtcal) case 24: return getMCPdataHIGH(4); // EGT1 HIGH case 25: return getMCPdataLOW(4); // EGT1 LOW case 26: return getMCPdataHIGH(3); // EGT2 HIGH case 27: return getMCPdataLOW(3); // EGT2 LOW // also raw adc data for te other sensors case 28: return getMCPdataHIGH(6); // EBP HIGH case 29: return getMCPdataLOW(6); // EBP LOW case 30: return getMCPdataHIGH(7); // FP HIGH case 31: return getMCPdataLOW(7); // FP LOW #ifndef KNOCK_ALTERNATIVE case 32: return getMCPdataHIGH(5); // MISC1 HIGH case 33: return getMCPdataLOW(5); // MISC1 LOW case 34: return getMCPdataHIGH(0); // MISC2 HIGH midopa case 35: return getMCPdataLOW(0); // MISC2 LOW case 36: return getMCPdataHIGH(1); // MISC3 HIGH midopa case 37: return getMCPdataLOW(1); // MISC3 LOW case 38: return getMCPdataHIGH(2); // MISC4 HIGH case 39: return getMCPdataLOW(2); // MISC4 LOW #else case 32: if (alternative_rtdata()) return knock_cyl[0].knock_adjust; else return getMCPdataHIGH(5); // MISC1 HIGH case 33: if (alternative_rtdata()) return knock_cyl[1].knock_adjust; else return getMCPdataLOW(5); // MISC1 LOW case 34: if (alternative_rtdata()) return knock_cyl[2].knock_adjust; else return getMCPdataHIGH(0); // MISC2 HIGH midopa case 35: if (alternative_rtdata()) return knock_cyl[3].knock_adjust; else return getMCPdataLOW(0); // MISC2 LOW case 36: if (alternative_rtdata()) return knock_cyl[4].knock_adjust; else return getMCPdataHIGH(1); // MISC3 HIGH midopa case 37: if (alternative_rtdata()) return knock_cyl[5].knock_adjust; else return getMCPdataLOW(1); // MISC3 LOW case 38: if (alternative_rtdata()) return knock_cyl[6].knock_adjust; else return getMCPdataHIGH(2); // MISC4 HIGH case 39: if (alternative_rtdata()) return knock_cyl[7].knock_adjust; else return getMCPdataLOW(2); // MISC4 LOW #endif case 40: { //#ifdef KNOCK_ALTERNATIVE // Andrey's changes to save CPU time // MT uses: lambdatarget={256/(latgtADC+200)} return corr.lambda; /*#else // old stuff // MT uses: lambdatarget = { (latgtADC + 71) * 0.00390625} uint16_t mt_val; mt_val = mult16_8((corr.lambda + LAMBDA_INT_OFFSET), 72) >> 7; mt_val = (mult16_8(div_65535_x(mt_val), 72) >> 7) - MT_LAMBDA_OFFSET; return mt_val & 0xFF; #endif*/ } #ifndef KNOCK_ALTERNATIVE // dump knock related variables for cylinder 0 case 41: return knock_cyl[0].knock_val >> 8; case 42: return knock_cyl[0].knock_val & 0xFF; case 43: return knock_cyl[0].noise_val >> 8; case 44: return knock_cyl[0].noise_val & 0xFF; case 45: return knock_cyl[0].knock_adjust; case 46: return knock_cyl[0].state; #else #ifdef CHARGE_TEMP case 41: return engine.charge_temp; #endif #if A340E case 42: return at_control.at_temp; #endif #ifdef TOYOTA_1JZ_VVTI case 43: return engine.vvt_target; case 44: return engine.vvt_position; #endif #ifndef PS2KEYBOARD case 45: return engine.revlimit; #ifdef SECOND_VSS case 46: return engine.speed1; #endif #endif // case 45: return knock_cyl[0].knock_adjust; // adjust value if retard all // case 46: return knock_cyl[0].knock_val&0xFC00 ? 0xFF : knock_cyl[0].knock_val >> 2; // knock value if retard all #endif // status bytes like WBO2 activated and alike case 47: { uint8_t status = 0; #ifdef ALS if (engine.status_ext & _BV( als_switch_activated )) status |= 0x80; // als switch active // if (is_als_active()) status |= 0x01; // als function active #endif if( engine.status_trig & _BV(n2o_active)) status |= 0x01; // N2O active #ifdef SOFTLAUNCH if ( is_launch_input_or_function_active() ) status |= 0x40; // launch control active or launch input button active #endif if ( engine.shiftcut_state & ( _BV( IGNCUT_SHIFTCUT ) | _BV( FUELCUT_SHIFTCUT ) )) status |= 0x20; // shift cut if (engine.status_trig & _BV( injector_staging_active )) status |= 0x10; // inj stage2 active // if (engine.status & _BV(idle)) status |= 0x08; // idle control if (config.confswitch & 0x10) status |= 0x08; // Config slot if (engine.status_ext & _BV(o2_closed_loop)) status |= 0x04; // closed loop (ego) #ifdef BENCHMARK if (benchstats.wheel_err & 16) status |= 0x02; // wheel error turn on and off if wheel errors persist #endif return status; } #ifdef BOOSTCONTROL // without boostcontrol the default 0 will be returned case 48: return boost_data.boost_target16 >> 5; // 1/8 kPa => 4 kPa case 49: return engine.boost_command_duty; // boost solenoid duty case 50: return (uint8_t)((boostcontrol_pid.integral+0x4000)>>7); // boost PID integral, assume PID_INTEGRAL_EXP=6 #endif case 51: return (uint8_t)(iac.integral>>8)+0x80; // iac.integral, assume INTEGRAL_LIMIT_SCALE=7 case 52: engine.status_ext &= ~_BV(individual_allowed); return engine.sparkcutlvl; // 0 .. 16 ( 0 is no igncut, normal operation) #ifndef KNOCK_ALTERNATIVE case 53: return individual_power[0]; case 54: return individual_power[1]; case 55: return individual_power[2]; case 56: return individual_power[3]; case 57: return individual_power[4]; case 58: return individual_power[5]; case 59: return individual_power[6]; case 60: engine.status_ext |= _BV(individual_allowed); if (debug.enable_flags & _BV(7)){ pushfunc(&MTsendRTvar, MT_RTVAR_COUNT); } //TODO: return (corr.tpsaccel >= 2040) ? 0xFF: (corr.tpsaccel>>3); //tpsaccel, 4usec => 32 usec ; set back to individual_power[7]; #else case 53: if (alternative_rtdata()) return knock_cyl[0].knock_val&0xFC00 ? 0xFF : knock_cyl[0].knock_val >> 2; else return individual_power[0]; case 54: if (alternative_rtdata()) return knock_cyl[1].knock_val&0xFC00 ? 0xFF : knock_cyl[1].knock_val >> 2; else return individual_power[1]; case 55: if (alternative_rtdata()) return knock_cyl[2].knock_val&0xFC00 ? 0xFF : knock_cyl[2].knock_val >> 2; else return individual_power[2]; case 56: if (alternative_rtdata()) return knock_cyl[3].knock_val&0xFC00 ? 0xFF : knock_cyl[3].knock_val >> 2; else return individual_power[3]; case 57: if (alternative_rtdata()) return knock_cyl[4].knock_val&0xFC00 ? 0xFF : knock_cyl[4].knock_val >> 2; else return individual_power[4]; case 58: if (alternative_rtdata()) return knock_cyl[5].knock_val&0xFC00 ? 0xFF : knock_cyl[5].knock_val >> 2; else return individual_power[5]; case 59: if (alternative_rtdata()) return knock_cyl[6].knock_val&0xFC00 ? 0xFF : knock_cyl[6].knock_val >> 2; else return individual_power[6]; case 60: engine.status_ext |= _BV(individual_allowed); if (debug.enable_flags & _BV(7)){ pushfunc(&MTsendRTvar, MT_RTVAR_COUNT); } if (alternative_rtdata()) return knock_cyl[7].knock_val&0xFC00 ? 0xFF : knock_cyl[7].knock_val >> 2; else return individual_power[7]; #endif case 61: return engine.tok_diff; // this dV/dt will stay #ifndef PS2KEYBOARD case 63: { uint8_t t8=0; #ifdef A340E if (at_control.at_status&_BV(LOCKUP)) t8=100; #endif return engine.gear+t8; //gear } case 62: return engine.speed; //speed #else case 62: return now_64msec() - engine.launchinact_time; //elapsed time #endif default: return 0;
  12. Ako mislis pratiti potrosnju, to ti je malo sjebano za tocno napraviti. Jer vems prek aim siba van duljinu otvorenosti injektora, a ne kolko bi injektori bili otvoreni da se injektori idealno brzo otvaraju i zatvaraju. Isti problem ti je kada mjeris kolko otvoreni, jer npr kod mene u leru su oko 1.65ms otvoreni, a od toga je oko 1.1ms dead time. A taj dead time dosta ovisi o naponu akumulatora(znacajno bi se moglo reci). Pa mozes ovak mjeriti. Slozis si timer neki da je clock tako da ti je tocnost 0.1ms cca. I sada svaki put dok se upali injektor umanjis taj tajmer za cca 11(1.1ms) i stavis da broji. Dok se ugasi injektor ugasis brojenje. I onda dok prede 1s pogledas kolko je taj timer izbrojio i izracunas otprilike potrosnju. btw lpg injektori se brze otvaraju
  13. I ovaj algoritam je univerzalan, jako lako se programira za druge brojeve. Nego za djelenje s novim gcc nije tak strasno, oko 700ciklusa za podjeliti dva 16bitna broja. Posto to ne radis tako cesto, nije problem.
  14. Jednostavno ti se djeli s 1:2.11 . Samo napravis polje i za svaki impuls postavis to stanje van. Znaci ovak ce ti otprilike izgledati 01010101010101010110101010101010101011 (38bito, moze biti 19). Znaci tako ces izgubiti na 19 ulaznih dobiti van 9 impusla sto je djelenje 2.1111.
  15. Onda mozes ovak. Stavis za timmer1(16bitni) djelenje s 1024 i interapt kada dode do 0. Izracunas kolko je to vremena i dodajes nekij tunit16 varijabli(znaci tako efikasno brojis vreme, tj imas sat). Onda iskoristis jedan od 8 bitnih timmera, njih npr stavis na 10(ili kolko treba tak da pri 100km/h se relativno cesto osvjezava) i da se okidaju s impulsom od zadnjeg kotaca. Kada dode prvi impuls neka pocnu brojiti i zapamti vremene(nekad 32 bitna varijabla, samo u prvoj dio pretocis onu prvu za brojene, a u ostalih 16bita od timera1(16bitni)). I kada dode do 0 taj timmer ides opet gledati vrijeme, oduzmes i izracunas brzinu. Normalno zapamtio si vreme kad si krenuo i to sve.
  16. stavi si timmer u interupt mod da npr svaki 0.1ms pogleda kolko impulsa si izbroji i doda vrijeme(znaci imat ces 0.1s rezoluciju). I ako je u tih 0.1s izbrojeno dosta impulsa postigao si tu brzinu. Imas onaj 16bitni timmer za to. Makar i 8bitni bi se vjerovanto dao ok iskoristiti.
  17. posto upravo vadim papire i to za jedan drugi projekt vezan s autima, neda mi se to raditi jos jednom da bi eventvalno prodao 10primjeraka, iako bi imao 95% zarade sto se tice djelova. Jedostavno to je tavka muka i tolko love treba da mi se vise neda s tim jebati. Evo ja ti kazem, ja ti napravi proizvod koji ce davati kvalitetne podatke van, biti robustan i to sve, a ti sredi papire. Moze? kova: bilo bi dobro da pogledas koji pdf od tih senzora, mozda primjetis kompenzacije po temperaturi. Istina bjezane po temperaturu postoji ali je malo.
  18. Kakav spline, pa to je obicno spajane tocaka. Kako veze ima to s mjerenjen? Pa dok mjeris stvari prvo sto moras eliminirati gausov sum. Mozes to raditi s obicnim niskoproposnim filterima, ali ako zelis tocnije rezultate uvjek ides s statistikom. Ja jos npr nisam vidio voltmetar bez nekog filtra, a da ne govorim o vrhunskoj opremi, uvjek je jedan dio zaduzen za statistiku da bi se dobili tocniji rezultati. To je isto dok autu mjeris ubrzanje od 0-100km/h. Dali obicno ides samo jednom izmjeriti i reces to je to ili ides vise puta mjeriti. I onda u jednom mjerenju se zasaltas i ispadne rezultat 5s veci. Normalno neces taj rezultat uzeti u obzir(e to je statistika), a ako bi npr imao neki nisko propusni filter uzeo bi i taj rezultat u obzir i krajni rezulatat nebi bio cvijece(osim ako bi imao punooo ispravnih mjerenje, malo neispravih(zasaltavanje)).
  19. Pa s statistikom se mogu poboljsati rezultati ako je sensor brz. Ali to stavio da bi pokazao da se 1k sample u 1s moze s tim jefitnim senzorima napraviti. Normalno u autu to bas i nije nesto korisno, tj ne treba tak puno mjerenja..
  20. Nije problem u tocnosti(npr ove senzore koje koristim imaju interni refresh rate 24kHz, a externi do 1kHz. Koristi statistiku da bi se dobilo tocnije mjerenje i to sve dode ispod 2$ u normalnom ducanu, ali senzor bez kucista i toga), senzor za mjerene temp koji je oho tocan i nije skup. Nego problem je u licencama i tome. Napravio sam jedan proizvod(ima kontroler, dosta senzora i mnogo toga) i sad se jebem s certifikatima. Prvo moras dati na koncar da ti izmjere razinu el. suma ikao da je sklop 100% generator suma s tom potrosnjom nebi presao normative. Pa moras dati jednom drugom labaratoriju(btw koji ne postoji u hr) da griju ureda, razbijaju ga i tako. Ugalvnom potrosis dosta love dok skupis sve te papire/testove i zbog toga je cijena velka. Pogotovo dok se ide na malo prodaju kak za aute specijalne namijene. I vjerovatno za rally bi trebalo jos miljun papira skupiti za FIA certifikate. Ja vam napravim uredaj, koji ce biti jako tocan, radit ce dok ce sjekire padati, a netko drugi neka sredi papire i idemo trziti.
  21. oces probati ove kaj ja koristim?, ja fakat ne vidim neku velku manu u njima. Pogreska bi max trebala biti 0.1%, utjecaj drugih osi do max 5%, makar ako se ulozi 50kn onda te brojke idu jos dolje. I za sad nikad nisam izmjerio nerealne podatke s njima(tipa 2.5g ubrzanje .
  22. Nekako bi se okladio za ohoho love da senzor koji je nutra toga za 350E ne dode preko 100kn kada se normalno kupuje. Npr bilo jedno jebeno pojacalo(tak se pricalo) za preko 2500E i bilo je zaliveno(cijelo) u smolu. I svi se kleli jebeno pojaclao za te novce, dok jednom jedan nije popizdio, uzeo fleksi i biax i sresao dolje tu smolu. Na kraju vidio da je to pocalo bazirano na integralcu lm3886 i ima svega 5 dodatnih komponenti. Taj integricac kod nasih lokalnih lopova dode oko 40kn, vani se dobije za 10kn komad. I ostale komponte su isto daba. Ali autor toga je ljepu svotu zaradio za nist. Niti shemu pojacala nije mijenjao/napravio(nalazi se u datasheetu). Jedino sto je dobro napravio je iskoristio ljudisku glupost, kolko para tolko muzike. Ali dali taj senzor je samo senzor ili ima neku obradu podataka? Tipa ti njemu das napjanje i on van daje podatke preko can bus ili tako nesto slicno. Ili je to goli senzor koji daje van 2 napon ovisno o g silama?
  23. Npr s ovim chipsetom ide do 10Hz http://www.skytraq.com.tw/download/Venus_CeBIT5.pdf Trenutna cijena 35$ s postarinom.
  24. Na pc trenutno, ali vemstune radi dobro s gps-om, pa mozes i podatke koje dobivas s gps logirati skupa s ostalim stvarima. Ma neki gps s ebay, sad se ne sjecam koji chipset. 90% tih s ebay-a su ti novi chipseti koji rade s 5Hz bez bada, samo su cesto zakljucani pa moras naci neku foru da ga otkljucas.
  25. ok, znaci priznas da senzori nisu ultra skupi? Inace radim lagano na jednom sustavu koji bi sve to mogao, iako je sustav za nesto drugo namijenjeno. A ovak za amtersku primjenu, mogu mjeriti sile u 3 osi i to logirati skupa s gps podacima(brzina, polozaj...). Meni za amtersku primjenu je to dovoljno i ne tvrdim da s time mozes auto podesiti savrseno. A i za sam ulozio 40$ za 5Hz gps prijemnik, 30kn za g sensor, stabilizator napona, nisko propusni filter(usrednjavam rezultate koji se samplaju po 1ks(kilo sample) na cca 20samplova u 1s) i sve to spojio s 5 zilnim kablom na vems(masa,+5V i tri osi). I ljepo sve to mozes ubaciti u google earth s podacima, tako da vidis stazu. I za sada nisam vidio nikakva cudna mjerenja.
×
×
  • Create New...