Elison Postat Octombrie 30, 2016 Partajează Postat Octombrie 30, 2016 In macro calibrare pentru AC1 citesti doar datele din adresa AA(MSB), insa corect este sa citesti si datele stocate la adresa AB(LSB) si apoi sa afli valoarea corecta a lui AC1 (AC1=MSB<<8+LSB). Acest lucru este valabil pentru toate datele de calibrare stocate in epromul BMP180. In macro calibrare toate aceste date de calibrare sunt citite eronat, pentru ca citesti doar o parte a lor(MSB). Link spre comentariu
mikella Postat Octombrie 31, 2016 Partajează Postat Octombrie 31, 2016 In macro calibrare fac o chemare la macro read care citeste bitul 0 pentru msb si bitul 1 pentru lsb. Nu inteleg unde anume gresesc. Link spre comentariu
mikella Postat Noiembrie 1, 2016 Partajează Postat Noiembrie 1, 2016 Am facut calculele manual si se pare ca numerele sunt prea mari pentru a incapea intr-o variabila de tip Long, de aceia valori eronate la iesire. Cred ca de asta nu am gasit pe net sa fi facut cineva acest montaj cu pic. Toata lumea cu arduino, probabil ca o fi si mai usor, nam ideie. Link spre comentariu
mars01 Postat Noiembrie 1, 2016 Partajează Postat Noiembrie 1, 2016 (editat) Variabilele tip LONG (sau UNSIGNED LONG daca numerele sunt doar pozitive) se stocheaza pe 32bit atat la PIC cat si la ATMEGA (Arduino). Ambele au ALU pe 8bit. Adica valorile care se pot stoca intr-o variabila cu tip LONG sunt intre -2,147,483,648 si 2,147,483,647. Crezi ca valorile tale sunt mai mari de 2 miliarde si ceva? Editat Noiembrie 1, 2016 de mars01 Link spre comentariu
mikella Postat Noiembrie 2, 2016 Partajează Postat Noiembrie 2, 2016 Nu sunt mai mari de 2 miliarde, dar sunt lungi in sensul ca (ex) x2=0.3322866708 sau x3=-4,715634869875. Cred ca incearca sa le rotunjeasca sau nu ia in calcul tot numarul si de aici se pierde. Am reusit sa il fac sa indice presiunea, care nu este valoarea reala, dar vad ca modifica odata cu inaltimea. Ceia ce inseamna ca citeste datele din senzor si le prelucreaza dar pierd la precizie, acest lucru nu este acceptat in aplicatia data. Produsul final se vrea a fi un variometru. Intre timp am gasit un proiect facut cu arduino si ms 5611 care diferentiaza inaltimi de 10 cm. Link spre comentariu
mars01 Postat Noiembrie 2, 2016 Partajează Postat Noiembrie 2, 2016 Valorile cu virgula sunt tip FLOAT, adica valori reale. De ex: 3.14 Valorile cu tip LONG sunt valori intregi (adica numere fara virgula). De ex: 1000000000000 Undeva este o confuzie intre tipuri. Link spre comentariu
mikella Postat Noiembrie 3, 2016 Partajează Postat Noiembrie 3, 2016 Variabilele declarate de mine sunt ca in foaia de catalog, iar numerele calculate manual sunt cu virgula. O sa ncerc sa declar variabilele in care apare virgula de tip float. Link spre comentariu
Elison Postat Noiembrie 3, 2016 Partajează Postat Noiembrie 3, 2016 Am vazut ca in program ai ales valoarea 3 pentru oss (oversampling _setting), dar scrii 0x34 in registrul de control 0xF4.Daca scrii 34 ar trebui sa pui la oss valoarea 0,pentru ca asta iti afecteaza valoarea presiunii atunci cand faci calcule.Conform tabelului 8 din datasheet, pentru oss=3 ar trebui sa scrii 0xF4. Undeva este mentionat ca bitii 6 si 7 din din registrul 0xF4 sunt alocati pentru oss. In macro calcul in ultimul icon(calcul) lipsea ceva, un x1=(x1*3038)>>12 si tot pe acolo in loc sa pui undeva >>16, ai pus >>15.Exista in program si variabile declarate si nefolosite. Link spre comentariu
mikella Postat Noiembrie 3, 2016 Partajează Postat Noiembrie 3, 2016 (editat) Programul incarcat pe forum este unul in care am modificat si rasmodificat si de aia a ajuns asa.Era doar sa vad daca citesc corect adresele. Intre timp am scris altul in Flowcode6 unde am reparat acele greseli. Il incarc mai tarziu pe cel care merge cat de cat. LE: Asta indica o valoare in jur de 10400 care creste daca apropii montajul de podea si scade daca il ridic spre tavan. Sesizeaza o diferenta de jumate de metru. Insa are zgomot ca fluctueaza valoarea putin fara sa misc montajul. Mai sap la el poate poate. bmp180 1.0.zip Editat Noiembrie 3, 2016 de mikella Link spre comentariu
Elison Postat Noiembrie 3, 2016 Partajează Postat Noiembrie 3, 2016 In macro citire_pres, ultima versiune, ai oss=2, iar in registrul de control F4, scrii 34, in loc sa scrii B4. Cel mai bine ar fi sa faci un macro in care sa tratezi ce scrii in registrul de control si durata temporizarii pentru citirea presiunii, in functie de valoarea oss. Daca oss=0, in F4, scrii 34, pentru oss=1, scrii 74, pentru oss=2, scrii B4, iar pentru oss=3, scrii F4, pentru fiecare valoare a oss ai alt delay si am vazut ca acesta este corect, 14ms in ultima varianta. Link spre comentariu
mikella Postat Noiembrie 4, 2016 Partajează Postat Noiembrie 4, 2016 Este asa din cauza ca l-am tot modificat, si cand ma satur de el il las imprastiat. Asta ca sa am motiv ziua urmatoare sa imi trag pumni in cap ca nu merge. Da sunt constient de aceste greseli si stiu cum sa le repar. In foaia de catalog zice ca trebuie sa scrii 0x34+(oss<<6) in 0xF4 si daca definesc oss la inceputut macroului nu ar trebui sa fie o problema, doar trebuie sa modific delayul. Mai scapa cate o greseala dar o gasesc pana la urma. Va multumesc ca ati avut placerea sa va uitati peste flowchartul meu! Link spre comentariu
Elison Postat Noiembrie 4, 2016 Partajează Postat Noiembrie 4, 2016 In foaia de catalog este dat un exemplu. Este specificat clar ca in acel exemplu oss=o, de aceea scrie 0x34+(oss<<6) in 0xF4. Tabelului 8 din datasheet este foarte clar. Sper ca acum ai inteles la ce ma refer. Link spre comentariu
mikella Postat Noiembrie 4, 2016 Partajează Postat Noiembrie 4, 2016 (editat) Da, acum am inteles. Credeam ca oss=0 este doar ca si referinta pentru calculele lor. Nu am inteles insa expresia 0x34+(oss<<6), mai exact(oss<<6). Poti explica putin? Maine remediez si revin. Editat Noiembrie 4, 2016 de mikella Link spre comentariu
Liviu M Postat Noiembrie 4, 2016 Partajează Postat Noiembrie 4, 2016 << inseamna "deplasare la stanga" (dupa cum >> inseamna "deplasare la dreapta"). oss << 6 inseamna ca bitii din care e format oss sunt mutati cu 6 pozitii spre stanga, adica se mai adauga 6 de 0 in dreapta lui. Daca oss e 2, in binar 10, oss << 6 inseamna 10000000. Adica din 2 se "transforma" in 128. Link spre comentariu
mikella Postat Noiembrie 6, 2016 Partajează Postat Noiembrie 6, 2016 Acum imi este clar. Dupa ce am remediat greselile indica o presiune de 9827 pa ceia ce se cam pupa cu statia meteorologica din apropiere.Poate fac un altimetru cu senzorul asta ca pentru variometru nu prea se preteaza. Va multumesc tuturor de ajutorul acordat. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum