Logarytm w Bascomie

Aug 14, 2004 30 Replies

Witam,



Czy ktoś z Grupowiczów mógłby mnie oświecić? ;) Czy w Bascomie-8051 jest możliwość wykonywania logarytmów? Chodzi mi o logarytm log(100/X); gdzie X to zmienna o wartościach od 1 do 100. jeśli tak, proszę o przykładową instrukcję.



Pozdrawiam i dziękuję,



Kuba


Nie prościej stablicować?

Heh :) Próbuję zrobić urządzenie do obsługi Spekola (spektrofotometr) i muszę przekształcać %pochłaniania na absorbancję. Więc takblica musiałby zawierać liczby co 0,1 w zakresie od 0,1 do 100 :) A procek wysiada przy takiej tablicy :)

Ale zrobiłem w excelu wykres takiej zależności i przekształciłem tak, żeby użyć funkcji -0,4343*Log(X)+2 I tutaj mam pytanie - czy do funkcji Const można podstawiać zmienne? Chodzi mi o to, żeby w nawiasie od funkcji Log() można było użyć zmiennej a nie jednej, stałej liczby. (Const Z = -0,4343 * Log(X) + 2)

Pzdr, Kuba

Powitanko,

Czy moze produkcji NRD?;-) Ah, lza sie w oku kreci;-) Co to za Spekol? AFAIR jakies mialy wyjscie cyfrowe w formacie BCD...

A kto Ci kaze uzywac tylko pamieci procka i zapisywac to w Dim. Przeca mozesz dac E2ROMa, albo nawet kilka, wpisac co trzeba do kazdej komorki i jush. Pozdroofka, Pawel Chorzempa

U¿ytkownik "Pawel "O'Pajak"" snipped-for-privacy@klub.chip.pl> napisa³ w wiadomo¶ci news:cfn8kq$2580$ snipped-for-privacy@mamut1.aster.pl...

Spekol 10 :P Z 1976 r. Ale elektronikê ma wymienion± a przystawka EK 1 nieu¿ywana by³a ;P A tablicê robiæ ? Hmm to by by³o tylko 1000 komórek do zape³nienia ;) A jak bym chcia³ dok³adniej %poch³aniania? Np do 2 miejsc po przecinku ? To ju¿ by by³o duuuuu¿o wiêcej wiêc jednak zostajê przy tym logarytmie - najprostsze rozwi±zanie bo i ma³o programu zajmuje i tablic nie trzeba :) A tak apropos masz mo¿e spekola 11 ? Bo poszukujê ;)

Kuba

Kuba napisał(a):

a na jakim procku to robisz? moze ci zabraknac pamieci RAM:) w uC... ja tez bylbym za EEPROM jakims szerwgowym...

U¿ytkownik "Przemcio¯." snipped-for-privacy@WYTNIJTOonet.pl napisa³ w wiadomo¶ci news:cfnani$35k$ snipped-for-privacy@atlantis.news.tpi.pl...

Na 89C4051 - ale z tym eepromem to bym musia³ zapisaæ 1000 komórek pamiêci je¶li dok³adno¶æ mia³aby byæ do 2ch miejsc po przecinku. A robi±c krzywe ja muszê mieæ 3 lub 4 miejsca po przecinku co daje 100000 i 100000 komórek pamiêci. Ju¿ sobie poradzi³em z tym wzorkiem na logarytm (Const A = -0.4343

  • Log(x) + 2) i teraz mam problem bo bascom wyci±ga funkcjê log(x) dla const X. I czy da siê jako¶ zadeklarowaæ ¿eby Const X równy by³ zmienniej single? Chodzi mi o co¶ typu :

Dim W As Single W = <obliczona przez inny fragment programu warto¶æ %poch³aniania>

Const X = W Const A = -0.4343 * Log(x) + 2

W taki sposób siê niestety nie da :( Mo¿e jaki¶ inny pomys³? A z eepromem mówiê z góry - odpada po pierwsze ze wzglêdu na ilo¶æ komórek po drugie czasoch³onno¶æ przygotowania tablicy i zapisania.

Kuba

A po ludzku, czyli szereg Taylora dla ln(1+x), to się nie da?

Skoro potrzebujesz tylko 2 miejsc po przecinku dokładności, to pewnie coś koło 5 pierwszych wyrazów wystarczy.

TP.

Siê nie da bo Ln trzeba zadeklarowaæ jako Const X = Ln(1+x) A x tez trzeba jako const a nie wiem jak zrobiæ ¿eby Const X przyjmowa³ warto¶æ innej zmiennej <nie Const>

Kuba

U¿ytkownik "Kuba" snipped-for-privacy@buziaczek.pl napisa³ w wiadomo¶ci news: snipped-for-privacy@newsgate.onet.pl

Mam przed nosem ksi±zkê "Miniklakulatory w obliczeniach naukowych i technicznych" (M.Kozarski, Z.Szurmak, WNT, 1976). Czyli praktyczny zbiór przepisów, jak prowadziæ obliczenia naukowe pos³uguj±c siê kalkulatorem czterodzia³aniowym. A arytmetyka zmiennoprzecinkowa w Bascomie to mniej wiêcej ta sama klasa narzêdzi. ;-) Zarówno log10 i ln mo¿esz liczyæ do wyboru: jako sumê szeregu, z aproksymacji wielomianowej albo z rozwiniêcia w u³amki ³añcuchowe. Napisz jeszcze raz, jaki masz zakres argumentu log(x) i jakich dok³adno¶ci oczekujesz.

U¿ytkownik "Kuba" snipped-for-privacy@hot.pl napisa³ w wiadomo¶ci news:cfndjs$a4h$ snipped-for-privacy@news.onet.pl

Sta³a X uzale¿niona od zmiennej x ?? Czy ja ¼le rozumujê, czy to jakie¶ Bascomowe kuriozum?

U¿ytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisa³ w wiadomo¶ci news:411f3bf8$ snipped-for-privacy@news.home.net.pl...

A bo pewnie pokrêci³em wszystko :P W Spekolu zale¿no¶æ %poch³aniania od ekstyncji jest taka : ekstyncja = -0,4343*log(%poch³aniania)-2 I teraz ja mierzê <za³ózmy> napiêcie poleceniem A = getad2051() Przekszta³cam A tablic± na napiêcie A nastêpnie przy pomocy wzoru na zale¿no¶æ napiêcia od %poch³aniania przekszta³cam zmie¿one napiêcie na %poch³aniania. I teraz obliczam logarytm: Const Ekstyncja = -0,4343*log(%poch³aniania)-2 Tylko do deklaracji Const za %poch³aniania nie mogê "w³o¿yæ" normalnej zmiennej (np. Dim %poch³aniania as Single), ale inn± "Const" I chodzi mi o to jak zrobiæ, ¿eby : Zadeklarowaæ Const X , która jest równa zmiennej %poch³aniania I jak ju¿ bêdê mia³ t± Const X, która bêdzie równa %poch³aniania, to podstawiê do: Const Ekstyncja = -0,4343*log(X)-2

Mo¿e teraz bêdzie to bardziej zrozumia³e ;)

Kuba

U¿ytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@news.home.net.pl...

Zakres log(x) jest od 100% do 1% (przy czym przy 0% log(x) = nieskoñczono¶æ) Zale¿y mi na dok³adno¶ci do 4 miejsc po przecinku.

Kuba

[...]

Jasne. Tylko, że dużej dokładności potrzebujesz raczej w okolicach 1% niż 100%

U¿ytkownik "Kuba" snipped-for-privacy@hot.pl napisa³ w wiadomo¶ci news:cfnet7$c4h$ snipped-for-privacy@news.onet.pl

Nie znam Bascoma, ale je¿eli dobrze rozumiem to zapisu log(x) mo¿esz u¿yæ jedynie w deklaracjach sta³ych? Czyli jest to funkcja (preprocesora??), której _sta³±_ warto¶æ wyznacza bascom.exe, na PC-cie(!), podczas kompilacji. Ale nie mo¿esz jej uzyæ na Atmelku w czasie wykonania programu.

W takim razie pozostaj± Ci jedynie rozwiniêcia. W przypadku logarytmów wygl±daj± dosyæ przyja¼nie, choæ trzeba uwa¿aæ na dopuszczalne zakresy argumentów i kumulacjê b³êdów. Mo¿na j± oszacowaæ (jak kto¶ potrafi :->) albo zrobiæ w Excelu tabelkê porównawcz± i zobaczyæ czy siê za bardzo nie rozje¿d¿a.

Np. ln(1+x) dla (x>-1) w rozwiniêciu na u³amek ³añcuchowy wygl±da tak: = x/1 + (x/2 + x/3) + (2x/2 + 2x/5) + ... + (nx/2 + nx(2n+1)) + ... Obliczenia sprowadzaj± siê do dzieleñ przez liczby naturalne oraz sumowañ. Jak siê przeskaluje, to pewnie wystarcz± 32bity sta³oprzecinkowe

A np. log(x) w prostej aproksymacji wielomianowej dla

1/sqrt(10 <= x <= sqrt(10) (czyli w zakresie jednej dekady) oraz przy |eps| <= 6e-4 wygl±da tak: log(x) = t ( a3 + a1*t^2) gdzie: t = (x-1)/(x+1) a1 = 0.36415 a3 = 0.86304

Mam równie¿ np. rozwiniêcie log(x) z b³edem <=1e-7 ale to ju¿ bêdzie wielomian 9 stopnia.

Jeszcze jedno... jaki Ty tam masz przetwronik A/C? Bo tak mi siê wydaje, ¿e z getad2051 to wyci±gniesz 5.. mo¿e 6 bitów :-> . Przy 64 niezale¿nych stanach wej¶ciowych to zrób tablicê tab[64] i nie zawracaj sobie g³owy liczeniem logarytmów. A Ty tu co¶ wspomina³e¶ o 2..3..4 cyfrach po przecinku. ;-) Je¿eli tak to po pierwsze zacznij od przetwornika o odpowiedniej rozdzielczo¶ci i dynamice.

Te¿ to tak odczyta³em ale nie ¶mia³em sie wtr±caæ :)

AK

Powitanko,

Ohjojoj:-) Toz to cudo niebywale:-) W technikum pozwolili mi to rozwalic, mam gdzies nawet siatke dyfrakcyjna (tak to sie nazywalo?). AFAIR zrodlem swiatka byla tam zwykla zarowka zasilana przez trafo. Biorac pod uwage wahania napiecia w sieci -> "wahania" widma samej zarowki daj sobie spokoj z n miejscami po przecinku, bo wprawne oko ma lepsza dokladnosc niz Spekol 10;-). No chyba, ze wymieniona elektronika dokonuje pomiaru "slepej proby" i odpowiednio struje zarowka itd...

JW, ale co za problem.

  1. Tablica bedzie dokladniejsza (w swoim wzorze "dopasowales" sie do krzywej, tu mozesz te krzywa zapisac)
  2. Szybciej bedzie taki Atmelek "liczyl", wynik masz niemal odrazu
  3. Latwiej cos poprawic
  4. Mniej kombinowania = mniejsze prawdopodobienstwo spieprzenia czegos

Niestety, w czasach gdy konczylem Technikum byla to nowosc. Tam prad zarowki AFAIR byl juz stabilizowany, no i ten wyswietlacz CYFROWY, eh ale wtedy przetwornik A/D kosztowal kilkaset dewiz;-)

Pozdroofka, Pawel Chorzempa

U¿ytkownik "Pawel "O'Pajak"" snipped-for-privacy@klub.chip.pl> napisa³ w wiadomo¶ci news:cfo2gd$2nn2$ snipped-for-privacy@mamut1.aster.pl...

Ja mam spekolka z palnikiem rtêciowym :P Wiêc jest ca³kiem dok³adny jak na taki model ;) A do tej pory wiele laboratoriów u¿ywa spekola 10 , bo nowe modele s± niestety bardzo drogie (11 - 13 tys pln)

Kuba

U¿ytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@news.home.net.pl...

Na razie chcê sie pobawiæ i po prostu sprawdziæ czy takie co¶ wypali. A pó¼niej bêdziemy my¶leæ o przetworniku A/C, pod³±czeniu kompa, klawiatury drukarki itp (ach te dalekosiêzne plany :P) A mogê prosiæ o ten wzór na logarytm z wielomianem 9 stopnia ?

Kuba

On Behalf Of Marek Dzwonnik

Bardzo dobrze rozumujesz. :-D Stała, to stała - nie zmienia swej wartości nawet w Bascom. :-D

pzdr Artur

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required