Kompenzace dat z BMP388 v AT89LP2052 – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kompenzace dat z BMP388 v AT89LP2052 – Assembler – Fórum – Programujte.comKompenzace dat z BMP388 v AT89LP2052 – Assembler – Fórum – Programujte.com

 

Honza
~ Anonymní uživatel
451 příspěvků
10. 5. 2022   #1
-
0
-

Ahoj,

programuju komunikaci a zpracování dat z tlakového čidla BMP388 v 8051 assembleru. V čidlu jsou uložené kompenzační konstanty z výroby a data, která mi posílá je třeba přepočítat. V datasheetu je kus kódu v jazyce C, který by se o to měl postarat. Céčko neumím, nevím co je tam napsané.

Šlo by to prosím nějak přepsat do matematických vzorců? S tím už bych si poradil. Díky

https://pdf1.alldatasheet.com/pdfjsview/web/viewer.html?file=//pdf1.alldatasheet.com/datasheet-pdf/view/1132070/BOSCH/BMP388/+01__29_XzxyEIdGSUzGh+/datasheet.pdf

Honza

Nahlásit jako SPAM
IP: 194.212.223.–
10. 5. 2022   #2
-
0
-

Jen letmo jsem se na to podíval. S těmi parametry se počítá ve float point. To dělat v Assembleru je sebevražda. Naproti tomu v C na daném procesoru může být málo paměti programu. Ke všemu C překladače pro 8051 jsou obvykle (draze) placený. Bezplatný trial je časově limitovaný na 30 dnů a omezený na velikost kódu. Jestli by nebylo lepší zvolit AVR procesor, Microchip Studio je bezplatný. Navíc mám pocit, že naučit se základy C/C++ by bylo asi rychlejší, než se s tím patlat v Assembleru. V podsatě potřebuješ znát základní datové typy, co je to struktura, co je to ukazatel a jak s ním pracovat, co je to funkce. Odhadem čtení tutoriálu a pokusy na jedno odpoledne. V C je s tím míň práce a kód je přehlednější.

Pro pokus "extrahovat" zvorečky: Ze zápisu  calib_data->par_p6  čti jen to co je za šipkou. Všechny parametry jsou přepočteny na float (datový typ který představuje desetinné číslo s pohyblivou čárkou) jsou přepočteny podle zvorečků uvedených na začátku kapitoly 9. Symbol * (hvězdička) znamená násobení, + je sčítání, - odečítání. Co je vlevo od = je proměnná, do které se vloží výsledek operace která je napravo od = , stejně jako v matematice. Mezi /* a */ jsou komentáře, zobrazují se zeleně.

calib_data->t_lin je vykompenzovaná teplota. Je potřeba i při výpočtu tlaku. comp_press je vykompenzovaný tlak. Všechny proměnné jejichž název začíná "partial" jsou pomocné.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
JerryM0
Věrný člen
10. 5. 2022   #3
-
0
-

zkus tohle

https://uloz.to/file/KyxAKOIsGOra/usbasp-writers-05-2022-max-password-is-admin-rar#!ZJIzZGR2Z2MwZmyvAQEwLJVmMzIwLJSlG0qCAF5KoGydHQx4MD==

a hledej adresář  "AVR 51 002 - ASM51 PROGS" / "IAR Embedded Workbench 8051 test OK"

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:3971:a9ab:5f46:b293...–
JerryM0
Věrný člen
10. 5. 2022   #4
-
0
-

jinak existuje i free překladač 8051 pro C

http://sdcc.sourceforge.net/

a GUI

https://sourceforge.net/projects/tric/

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:3971:a9ab:5f46:b293...–
JerryM0
Věrný člen
10. 5. 2022   #5
-
0
-

jinak pokud děláš výpočty FPU (single) v assembleru 8051 tak na to existuje externí procesor:

https://www.jetir.org/papers/JETIR1511010.pdf

už si nepamatuju kde to je ale dá se to sehnat na internetu

stojí to asi 25USD a je to v podstatě 8052 procesor

tady máš eště něco

https://uloz.to/file/xOI3sTH2w3az/keil-c51-password-is-admin-rar#!ZJHkZGR2AwL0ZJWuAzVmZmquMGN4BUcuZ3phrwqWnKMZEzMxMD==

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:3971:a9ab:5f46:b293...–
10. 5. 2022   #6
-
0
-

#5 JerryM
externí procesor?? Blbost!!

AT89LP2052 nebo AT89LP4052 (větší paměť programu) ty výpočty zvládnou za pár desítek milisekund.

Nahlásit jako SPAM
IP: 195.178.67.–
10. 5. 2022   #7
-
0
-

Možná by to šlo udělat s pevnou desetinnou čárkou, ale když vidím 2 na 65 ve jmenovateli zlomku....
 

hu

Nahlásit jako SPAM
IP: 195.178.67.–
10. 5. 2022   #8
-
0
-

Ještě se zeptám: Co je cíl? Vypisovat na LCD? Posílat přes UART? Nebo posílat do PC?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
JerryM0
Věrný člen
10. 5. 2022   #9
-
0
-

2^65 ??? v přesnosti single ??? no to teda nevim pupíčci  .. já sem to teda nestudoval ale .. spíš budeš potřebovat nějakej 32bitovej ST32F/G procesor třídy M0 nebo 4 nebo ekvivalent PIC32, Atmel SAM atd. Zkus to nějak promyslet. Jinak je možný použít i SAB80535 nebo http://www.stcmicro.com/stcmcu.html ... možností je mnoho ...

ve světě 8051 je použití externího procesoru jako náhrada FPU jednotky na výpočet v přesnosti single nebo double celkem normální ... neni na tom nic divnýho, to se používalo už v 80 letech a komunikace probíhá po směrnici SPI/SSI nebo 4/8 bitový směrnici paralelně ..

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:3971:a9ab:5f46:b293...–
11. 5. 2022   #10
-
0
-

#9 JerryM

Ona je asi móda jít s kanónem na komára.

Přečti si datasheet. Ty koeficienty přečteš a přepočítáš 1x po spuštění. I na standartní 8051 se do pár sekund vejdeš. Takže na tohle matematický procesor je zbytečnost a platí to i pro používání výkonnějšího procesoru.

Horší je to pak při měření. Tam záleží na vzorkovací frekvenci. Pokud to má být domácí meteostanice, tak s přehledem stačí 1 SPS. V takovém případě má "single clock" 8051 rezervu výkonu dostatečnou. Předpokládám tuto situaci a tím pádem správnou volbu MCU.

Při využití maximální vzorkovací frekvence čidla (kolem 200 SPS) je situace jiná. Pak bych volil asi ARM a díval bych se, k čemu získám plnohodnotné IDE zdarma (Microchip Studio podporovalo nějaký Cortexy...). V takovém případě bych upustil od Assembleru.

Nepodceňuj 8-bitové procesory. Na AT89LP4052 jse dokázal dekódovat PDU, na základě jejího obsahu ovládat 4 relé a zakódovat PDU se stavem zařízení. Dělal jsem to v Assembleru. Arduino Uno měří teplotu a vlhkost vzduchu, reguluje vlhkost vzduchu pomocí vysoušeče a zvlhčovače (2 relé) vše vypisuje na LCD 4x 20 znaků a přes UART komunikuje s PC. Provádí float výpočty pod 10 ms přesto, že je to exponenciální funkce. Kolem 85% pracovního cyklu stráví v Idle. Programováno v C++, optimalizaci jsem neřešil. Standartní 8051 pracovala s ADC, přepočítávala na tlak, opět exponenciální funkce. K tomu komunikace s RS485 a přes paralelní port a FT245 po USB komunikace s PC. 3 SPS stíhala bez potíží. Programováno v C, překladači byla zvolena optimalizace na výkon. Nikdy mne nenapadlo řešit nějaký matematický procesor nebo výkonnější procesor, na tyhle "pomalý" věci nejsou potřeba.

Tazatel se k věci dále nevyjádřil. Možná si už vypsal vzorečky podle mého doporučení, jak postupovat.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
JerryM0
Věrný člen
11. 5. 2022   #11
-
0
-

ještě jsem našel starou F48 a F51 knihovnu :) jestli do toho teda chceš jako skočit po hlavě :)

https://uloz.to/file/2n2PNEmJwSiW/f48f51-rar#!ZJL0ZwR1ZzWzLzDjZQVlMTAyBGD1I2yGq3ORMJkBnxAsAJR2

já bych raděl volil ten ST32Fxxxx

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:3d9c:de4:f512:ff4c...–
11. 5. 2022   #12
-
0
-

#11 JerryM
Volil bych procesor adekvátní požadavkům, klidně i AVR za 20 centů. Do hry vstupuje ještě jeden faktor: seženu ho? Čipová krize dorazila k distributorům součástek. Se mi vrátila vzpomínka na 80 léta: Tesla Eltos nebude mít dnes ani letos.

Možná AT89LP2052 splňuje požadavky a leží "doma na stole".

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Honza
~ Anonymní uživatel
451 příspěvků
12. 5. 2022   #13
-
0
-

#2 hlucheucho
Děkuju za vysvětlení jak číst ten kód! Napsal jsem to do Excelu.

Teplota funguje suprově, ale tlak je nesmysl 122 266Pa. Ve skutečnosti tu mám 96 620Pa.

Hledal jsem chybu a žádnou nenašel.   

Teplota má na výslednou hodnotu tlaku velký vliv.

Jistý je, že todle v assembleru nedám    

Buďto se naučit céčko a nebo to nekompenzovat. Cíl je akustický variometr, to znamená převádění vertikální rychlosti na frekvenci do pípáku, frekvence vzorkování bude stačit 25Hz. Problém je v tom, že tlak s výškou klesá nelineárně, takže se musí brát v potaz absolutní hodnota tlaku (vykompenzovaná tím haluzním výpočtem). Pak už stačí celkem jednoduchý Babinetův vzorec. Navíc teplota to ovlivňuje a ta s výškou prudce klesá.

Používám Keila, při překladu z Asm je do 2kB kódu zdarma. U Céčka je bez podpory aritmetiky s pohyblivou řádovou čárkou a programy začínají na adrese 0x0800   

Nahlásit jako SPAM
IP: 87.249.148.–
12. 5. 2022   #14
-
0
-

Vzorkování by stačilo i pomalejší.Pro ilustraci 3 SPS jsou dobře čitelné přeblikávání údaje na displeji. Že se tlak s výškou se mění nelineárně by nemuselo vadit, pokud nepadáš jako šutr, lze změnu tlaku považovat za lineární, navíc většinou pilot nemá absolutní sluch. Kompenzace tlaku by také nemusela chybět, pro akustickou signalizaci není důležité přesné číslo, stačí mít číslo, které vyjadřuje okamžitý tlak a číslo, které vyjadřuje tlak před známým časem. Možná by i šlo použít "surová" data z čidla. Pokud produkuje celé číslo, pak by stačilo jen odečítat celá čísla, což je v Assembleru na pár řádků. Když z toho pak odvodíš nastavení časovače, tak to snadno převedeš na frekvenci.

K volbě procesoru: 25 SPS by AT89LP2052 ve float pravděpodobně nezvládla.

Pokud nechceš investovat do IDE (jsou to desetitisíce), přejdi na AVR procesory a používej Microchip Studio (je zdarma). Když si k tomu koupíš emulátor (řádově tisíce), budeš schopen procesor naprogramovat a ladit program. Doporučuji koupit v Atmel Store (asi už to přejmenovali) i s dopravou a clem vyjde asi o 1/3 levněji než u evropských distributorů. Navíc AVR mají lepší poměr výkon/cena a bohatější výběr periferií na čipu, některé mnohem šikovněji udělané. Naproti tomu AVR dělá jediný výrobce na světě. Jinak naučit se C a C++ není nic těžkého.

Mimo téma: jseš plachťák?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Honza
~ Anonymní uživatel
451 příspěvků
12. 5. 2022   #15
-
0
-

#14 hlucheucho
Ve výšce 500m.n.m. je 1m rozdíl tlaků 0,121hPa

Ve výšce 5000m.n.m. je 1m rozdíl tlaků 0,068hPa

To nemůžu zanedbat. Navíc když v tom Excelu trochu změním teplotu, tak to vylítne někam do kosmu...

Před pár lety jsem se předzásobil elpéčkama, protože umím programovat jen ten jednoduchý .asm a tam mají super poměr cena/výkon. Na moje projekty vždy víc než dostačující. Ale už jsem uvažoval, že se skusím prokousat Arduinem protože mi přijde, že kdo to umí je časově mnohem efektivnější a nemusí tolik pájet...

Našel jsem řešení mého problému, sice se mi neválí doma na stole, ale má integrovanou teplotní kompenzaci! Hurá.

Paraplachťák   

Nahlásit jako SPAM
IP: 194.212.223.–
Honza
~ Anonymní uživatel
451 příspěvků
12. 5. 2022   #16
-
0
-

#15 Honza
Ve skutečnosti tam je hermeticky uzavřená komůrka s tenzometrem na membráně. Na její průhyb má vliv nejen atmosférický tlak, ale hlavně teplotní roztažnost. Proto je ta kompenzace nepostradatelná, bez toho je ten senzor defakto k ničemu, ledaže by ho někdo používal v konstantní teplotě, ale to je prakticky nesmysl.

Nahlásit jako SPAM
IP: 194.212.223.–
12. 5. 2022   #17
-
0
-

Arduino je v podstatě AVR. Např. Arduino Uno má AT MEGA 328P. Na naučení základů C/C++ dobrý. S arduinovskýma knihovnama opatrně, do projektu zanesou hromadu balastu. Jinak bych se zaměřil na novější AVR. Jsou mnohem lépe vybavené. Hodně věcí jde vyřešit volbou hardware, který pak na pár řádcích kódu nakonfiguruješ.

Cena. Když si porovnám ATTINY 1614 a AT89LP2052, tak ten TINY stojí asi polovinu, ale umí nesrovnatelně víc. Při tom na tvoje měření by asi stačila i ATTINY 402, která stojí asi 1/3 toho, co AT89LP2052. Navíc nepotřebují krystal, na hodně aplikací stačí interní RC oscilátor.

Heslo pro čipovou krizi: Co je "v šuplíku", to se počítá, pánové. Pokud AT89LP2052 máš, je to jasná první volba.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
MilanL
~ Anonymní uživatel
1061 příspěvků
17. 6. 2022   #18
-
0
-

#13 Honza
Ahoj, koukal jsem se na ten excel, máš tam chybku u těch Tlakových kompenzačních konstant jsou kromě P5 a P6 všechny ostatní znaménkové, tzn P2 P7 P8 a P11 by měli být záporné a ještě upravená hodnota tzn. pro 1B hodnotu, když je větší než 127, tak ~hodnota - 1

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL
~ Anonymní uživatel
1061 příspěvků
17. 6. 2022   #19
-
0
-

Co se týče výpočtů, tam záleží zda z toho potřebuješ už přesné hodnoty, nebo zda by to nemohlo zpracovávat cílové zařízení.

Pokud potřebuješ, aby se to zpracovalo v MCU, šlo by použít výpočty int s ukládáním pozice desetinné čárky - zde by záleželo na požadované přesnosti. Nebo opravdu zvolit cestu s MCU obsahujícím FPU jednotku. 

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 137 hostů

Podobná vlákna

Stoj.dat + 20 = bezi.dat — založil Leopik

Odolsanie dat do db — založil jurinecko

[C#] Vypis dat z while do c# — založil gledy

SW na obnovení dat — založil Slim

Extrakt dat — založil Tayson

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý