Zdravím.
Potrebujem v jednej aplikácii vypočítavať hodnotu T_uk podľa ekvitermickej krivky na základe Tvonk.
Používam na to tento vzorec:
T_uk =(20 - Tvonk)*k + 30;
Premenná k (krivka) je reálne číslo a tu sa začína problém.Pokiaľ ju zadám “pevne” všetko je O.K.Tlačítkami sa dá aj inkrementovať aj dekrementovať,no po takejto zmene ju potrebujem uložiť do Eeprom v MCU.
Premenná “k” je zadefinovaná ako
float k;
k=0.9;
Viete mi poradiť akým spôsobom rozdelím “k” na jednotlivé byte a uložím do Eeprom?
A aj naopak? Z Eeprom do “k”.
tento spôsob nefunguje.
Nie,nie.Ja potrebujem do Eeprom uložiť hodnotu “k” po jej zmene.
Problém je z typom premennej.Float nedokážem rozdeliť na jednotlivé byte ani keď číslo vynásobím 10.Napr.inteager nie je problém rozdeliť a násl.spojiť.Lez float sa mi akosi nedá.
Relatko.
Asi jsi petra nepochopil. Jeho úprava spočívá v převedení výpočtu z plovoucí ř. čárky na pevnou. Místo ve float bys to počítal (mnohem rychleji a menším výsledným kódem) v int.
Pokud např. potřebuješ pro “k” rozsah (0-2> v krocích po 0.1, lze to taky napsat jako “((20 - Tvonk)*k)/32 + 30”, kde “k” je hodnota 0-31. Místo dělení 32 lze použít posun o 5b doprava.
Jinak float je obvykle 32bit, je tedy nutné zpracovat 4B. Např. pokud by bylo k od odresy 0 s nenižším byte na témže místě, pak:
k = eeprom_read(0x00);
k |= (eeprom_read(0x01) << 8);
k |= (eeprom_read(0x02) << 16);
k |= (eeprom_read(0x03) << 24); // nyni je nacteno cele "k"