Sari la conținut
ELFORUM - Forumul electronistilor

Lucreaza cineva cu FLOWCODE ?


bercioiu

Postări Recomandate

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

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

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 de mars01
Link spre comentariu

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

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

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

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 de mikella
Link spre comentariu

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

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

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

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 de mikella
Link spre comentariu

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări