Index |
Index forum |
Autentificare |
Inregistrare
|
Cine este online |
Galerie imagini
|
Calendar evenim. |
Cautare detaliata |
Ghid forum |
Colaboratori
Te intereseaza un domeniu al astronomiei si ai vrea sa scrii pentru siteul nostru? Alatura-te echipei noastre.
Statistici forum |
|
Numar total de mesaje in forum: 225362 |
|
Numar de utilizatori inregistrati: 2843 |
|
Cel mai nou utilizator inregistrat: GabiBirsanu |
|
|
|
Cei mai multi utilizatori conectati au fost 543 la data de Vin Mar 29, 2024 |
|
|
|
Actualmente sunt 0 utilizatori pe chat
|
|
Aceste date se bazeaza pe utilizatorii activi de peste 5 minute |
|
Legenda |
|
Mesaje noi |
|
Nu sunt mesaje noi |
|
Forumul este inchis |
|
|
Subiectul anterior :: Subiectul urmator |
|
Autor |
Mesaj |
valy Membru
Data inscrierii: 21 Iul 2005 Mesaje: 10674
Localitate: Bucuresti
|
Trimis: 13 Feb 2024 16:20 Download mesaj |
Titlul subiectului: |
|
|
|
Pare un algoritm de forma:
t = 0
t = t + a1/2
t = t + a2/2
t = t + a3/2
.....
=>
t = 0 + a1/2 + a2/2 + a3/2+...
=>
t = 0 +(a1+a2+a3+..)/2
Astfel algoritmul se transforma in:
a = 0
a = a + a1
a = a + a2
a = a + a3
...
=> t = 0 + a/2 |
|
Sus |
|
|
varadinagypal Membru
Data inscrierii: 27 Iul 2013 Mesaje: 189
Localitate: Cluj-Napoca
|
Trimis: 13 Feb 2024 16:46 Download mesaj |
Titlul subiectului: |
|
|
|
Un programator low level care se respecta, cand vede un numar din asta de 36000000, isi ia medicamentul de inima (de prune, de exemplu) si isi da jos ochelarii, ca nu mai are ce sa faca.
Inmultirea de orice natura impnge biti in stanga, impartirea in dreapta, imagineaza-ti multe carti pe biblioteca mai modesta, iar repetand pasii, succesiv, cartile cazute raman cazute si nimeni nu le mai recupereaza. Motiv pentru care hotii, scuze, bancherii nu folosesc float, bancile folosesc fie int, fie big decimal, fie de din astea.
Conversiile din astea, menite utilizatorilor de camp (userus vulgaris), de obicei se fac in ultimul pas si nu pe parcurs, iar retinerea datelor se face dinamic (ca la float), cu rezolutie mare la valori mici, si cu rezolutie mica la valori mari. Ca nu te intereseaza daca consumul a fost 1000002Wh sau 1000001Wh, adica 1.00e6 sau 1.00e6, dar de intereseaza daca a fost 1 sau 2, adica 1e0 sau 2e0.
Mai e bancul cu muzeul de paleontologie. Apare sub scheletul de T-rex ca 71 milioane de ani, 3 saptamani si 2 zile. Si se uita elevii, cu proful de biologie, ca nu inteleg treaba. Cum adica 71 mil. de ani 3 saptamani si 2 zile. Pai, zice muzeologul, a fost un mare expert din Bucuresti, luna trecuta, si a datat scheletul ca fiind de 71 mil de ani.
Si la job acum dezbatem (adica tin prelegerea) despre epsilon, despre functiile de trigonometrie cu limita la 1.0 care ce sa faca sau sa nu faca cu numerele obtinute din aritmetica cu valori de gen 1.00000000000002, care in mod evident e mai mare decat 1, in afara intervalului de -1..+1, deci cat e gen arcsin(1.00000000000002), nedefinit???? |
|
Sus |
|
|
AVD Membru
Data inscrierii: 04 Iun 2022 Mesaje: 87
Localitate: Dudu
|
Trimis: 13 Feb 2024 17:03 Download mesaj |
Titlul subiectului: |
|
|
|
valy a scris: | Pare un algoritm de forma:
t = 0
t = t + a1/2
t = t + a2/2
t = t + a3/2
.....
=>
t = 0 + a1/2 + a2/2 + a3/2+...
=>
t = 0 +(a1+a2+a3+..)/2
Astfel algoritmul se transforma in:
a = 0
a = a + a1
a = a + a2
a = a + a3
...
=> t = 0 + a/2 |
Adica, asa ceva ar fi mai frumos?
time1 si time2 sunt din nou unsigned long.
time1=millis();
[...]
prev_pwr_used = (prev_pwr+PWR/2)*(time1-time2);
prev_pwr=PWR;
time2=millis();
current_pwr_used = PWR*(time2-time1);
total_pwr_used = prev_pwr_used + current_pwr_used;
PWR_TOTAL = PWR_TOTAL + total_pwr_used / 3600000 ; // total power in W*h |
|
Sus |
|
|
valy Membru
Data inscrierii: 21 Iul 2005 Mesaje: 10674
Localitate: Bucuresti
|
Trimis: 13 Feb 2024 17:21 Download mesaj |
Titlul subiectului: |
|
|
|
Nu prea e ok, pare ca defapt e acelasi lucru ca in versiunea originala.
Sper sa nu stricam corectitudinea. dar acea impartire n-ar trebui sa apara deloc, decat la final detot dupa ce calculezi ultima iteratie. Desigur daca pe parcurs afisezi puterea pana la mom. respectiv, va trebui sa faci impartirea, dar doar pt afisare, insa banui ca nu te intereseaza la fiecare milisec ce ai consumat.
Ultima linie ar trebui sa fie:
PWR_TOTAL = PWR_TOTAL / 3600000....
Ai multe variabile locale pe acolo, e un algoritm iterativ si pare incomplet specificat, nici eu nu sunt foarte atent acum... dar ca idee schematica, ce am zis eu doua posturi mai sus cred ca se valideaza matematic. Daca acea abordare corespunde cu algoritmul tau, eu asa as face. Pana la urma conteaza sa fie corect si mai putin important sa fie optimizat.
Dar aici subscriu la ce zicea colegul pal mai sus, acea impartire la 3600000 e naspa, rostogolesti niste erori de nu te vezi...
varadinagypal a scris: | ..Motiv pentru care hotii, scuze, bancherii nu folosesc float, bancile folosesc fie int, fie big decimal, fie de din astea. | Ai vazut Office space? Spune ca da!!
Ultima modificare efectuata de catre valy la 13 Feb 2024 17:29, modificat de 1 data in total |
|
Sus |
|
|
AVD Membru
Data inscrierii: 04 Iun 2022 Mesaje: 87
Localitate: Dudu
|
Trimis: 13 Feb 2024 17:27 Download mesaj |
Titlul subiectului: |
|
|
|
valy a scris: | Nu prea e ok, pare ca defapt e acelasi lucru ca in versiunea originala.
Sper sa nu stricam corectitudinea. dar acea impartire n-ar trebui sa apara deloc, decat la final detot dupa ce calculezi ultima iteratie. Desigur daca pe parcurs afisezi puterea pana la mom. respectiv, va trebui sa faci impartirea, dar doar pt afisare, insa banui ca nu te intereseaza la fiecare milisec ce ai consumat.
Ultima linie ar trebui sa fie:
PWR_TOTAL = PWR_TOTAL / 3600000.... |
Nu cred ca ne gandim la acelasi rezultat PWR_TOTAL este un "Gauge" in NINA, care este updatat odata pe secunda de driver (driverul "citeste" valoarea stocata pe variabila PWR_TOTAL in arduino si o atribuie acelui camp din NINA). Nu e o valoare pe care o citesc cand sting lumina.
Codul complet este asta: functia ruleaza in bucla (in void loop()).
Cand pe serial vine comanda care cere valoarea, pur si simplu se trimite PWR_TOTAL prin serial.
void GET_POWER() {
time1=millis();
if (AVERAGE_COUNT == 150) AVERAGE_COUNT = 0;
float VOLTAGE_SAMPLE_SUM=0;
for (int v=0;v<150;v++)
{
PIN_VALUE_V = analogRead(VM);
VOLTAGE_SAMPLE_SUM +=PIN_VALUE_V;
}
VOLTAGE_SAMPLE_SUM /=150;
VOLT_TEMP = (VOLTAGE_SAMPLE_SUM * 5.0) / 1024.0;
VOLT = VOLT_TEMP / 0.0982;
if (VOLT < 0.1) VOLT=0.0;
CURRENT_SAMPLE_SUM=0;
for (int i=0;i<150;i++)
{
PIN_VALUE_A= analogRead(AM);
CURRENT_SAMPLE_SUM = CURRENT_SAMPLE_SUM + PIN_VALUE_A;
}
AMP_AVERAGE[AVERAGE_COUNT] = (2.494 - ((CURRENT_SAMPLE_SUM/150)*(5.0/1024.0))) / ACS_resolution;
AVGAMP=0;
for (int c=0;c<150;c++) AVGAMP += AMP_AVERAGE[c];
AMP = AVGAMP/150;
if (AMP< 0.01) AMP=0.0;
PWR = VOLT * AMP;
AVERAGE_COUNT = AVERAGE_COUNT + 1;
prev_pwr_used = (prev_pwr+PWR/2)*(time1-time2);
//PWR_TOTAL = PWR_TOTAL+ ((((prev_pwr+PWR)/2)*(time1-time2))/3600000); // total power in W*h
prev_pwr=PWR;
time2=millis();
current_pwr_used = PWR*(time2-time1);
total_pwr_used = prev_pwr_used + current_pwr_used;
PWR_TOTAL = PWR_TOTAL + total_pwr_used / 3600000 ; // total power in W*h
} |
|
Sus |
|
|
valy Membru
Data inscrierii: 21 Iul 2005 Mesaje: 10674
Localitate: Bucuresti
|
Trimis: 13 Feb 2024 17:31 Download mesaj |
Titlul subiectului: |
|
|
|
Acu' sincer, prefer sa fac un algoritm decat sa inteleg ce au facut altii.
AVD a scris: |
Codul complet este asta: functia ruleaza in bucla (in void loop()).
Cand pe serial vine comanda care cere valoarea, pur si simplu se trimite PWR_TOTAL prin serial.
|
Pai nu vad ce faci cu PWR_TOTAL, pare ca doar se actualizeaza si atat. |
|
Sus |
|
|
AVD Membru
Data inscrierii: 04 Iun 2022 Mesaje: 87
Localitate: Dudu
|
Trimis: 13 Feb 2024 17:35 Download mesaj |
Titlul subiectului: |
|
|
|
Codul sursa pentru Arduino este in link-ul pus mai sus. Am observat ca lumea adauga sugestii si comentarii bazate pe cod, deci mi-am imaginat si am presupus ca ati inteles ce face. Stiu, greseala mare, sa presupui
As fi complet de acord sa se faca impartirea odata la final si gata. Asa are foarte mult sens, daca vreau sa obtin o valoare finala. Doar ca eu vreau sa o actualizez in timp real pentru ca ea sa fie adusa in NINA, tot in timp real. |
|
Sus |
|
|
valy Membru
Data inscrierii: 21 Iul 2005 Mesaje: 10674
Localitate: Bucuresti
|
Trimis: 13 Feb 2024 17:40 Download mesaj |
Titlul subiectului: |
|
|
|
Da, assumption is the mother of all Fuckups.
AVD a scris: | Doar ca eu vreau sa o actualizez in timp real pentru ca ea sa fie adusa in NINA, tot in timp real. | Daca prin timp real intelegi ca dupa fiecare calculatie sa o exporti, pare logic sa faci impartirea de fiecare data. De cate ori pe sec se intampla o astfel de calculatie? |
|
Sus |
|
|
AVD Membru
Data inscrierii: 04 Iun 2022 Mesaje: 87
Localitate: Dudu
|
Trimis: 13 Feb 2024 17:42 Download mesaj |
Titlul subiectului: |
|
|
|
Am masurat time2-time1 si este 20ms. Timpul intre cicluri este si el cam 100ms, deci cam de 8-10 ori pe secunda. |
|
Sus |
|
|
varadinagypal Membru
Data inscrierii: 27 Iul 2013 Mesaje: 189
Localitate: Cluj-Napoca
|
Trimis: 13 Feb 2024 17:50 Download mesaj |
Titlul subiectului: |
|
|
|
alta softareala: model, view, controller. Tu ai nevoie de valoarea interna, un acumulator, si ai nevoie de un view value, care afiseaza valoarea respectiva pe serial in cazul asta. Is doua lucrurui diferite. As putea tine o prelegere si despre asta, dar ma abtin, si mentionez doar ca m-am lovit odata de careva destept care facea conversii celsius-fahrenheit-kelvin, cu o singura cifra dupa virgula, si se mira ca iterand intre unitatile de masura, i se tot schimba valoarea de celsius... pai, C-F e o formula urata, dar si K-C e cu .15 la capat, nu .2 si nu .1. Ca nu avea valoare in spate { valoare model, unitate: microcelsius} => { valoare view, unitate: celsius/f/k }, ci avea {valoare, unitate} si... nu-i iesea. Vai cate din astea as putea povesti, ca in PLM ca nu se face ucenicie si mentorat pe bune in programare, si firmele multicultinationale, carora nu le pasa, arunca cu titluri dupa niste bebe care stiu sa se dea pe bicicleta, senior tati, si nu mai ajungi tu sa comentezi ce a facut maria sa. |
|
Sus |
|
|
|
|
|
Nu puteti crea un subiect nou in acest forum Nu puteti raspunde in subiectele acestui forum Nu puteti modifica mesajele proprii din acest forum Nu puteti sterge mesajele proprii din acest forum Nu puteti vota in chestionarele din acest forum Nu puteti atasa fisiere in acest forum Puteti descarca fisiere in acest forum
|
|