PIC ja ujupunktarvutused - Printerisõbralik versioon +- Elektroonikafoorum.com (https://elektroonikafoorum.com) +-- Foorum: Arutelud (https://elektroonikafoorum.com/forum-3.html) +--- Foorum: Programmeerimine (https://elektroonikafoorum.com/forum-5.html) +--- Teema: PIC ja ujupunktarvutused (/thread-556.html) |
PIC ja ujupunktarvutused - felch - 21-05-2014 Kas keegi on juhtunud kasutama PICi ujupunktarvutit (assembleris)? Probleem on keerukamates funktsioonides nagu exp, log, astendamine. Nad on kõik esindatud failis ef32.a17 . Õige vastuse annab vaid ruutjuurika f-n, muud arvutavad ... mida iganes. Kaasa pandud näidis annab samuti vale tulemuse. Kui juurikas arvutab "otse" siis muud f-nid kasutavad mingeid lähenduspolünoome ja teevad sellega veel mõningaid mulle mitte eriti arusaadavaid trikke. Arvan, et viga on kuidagi seotud nimelt nende polünoomide kasutamisega (makrod POL132, POL32 jne). E astet on vaja veeauru osarõhu arvutamiseks temp., niiskuse ja rõhu järgi. Valemeid on teisigi aga kõik nad paraku sisaldavad astendamist. Oskab keegi aidata ? RE: PIC ja ujupunktarvutused - A.R. - 21-05-2014 (21-05-2014, 08:14 AM)felch Kirjutas: Kas keegi on juhtunud kasutama PICi ujupunktarvutit (assembleris)?Ei ole kasutanud assembleris aga... Olen kasutanud C-s. Paistis töötavat. Transleeritud programmist võib saada ka asm versiooni. C astendus on selline: pow.c #include <math.h> #include <errno.h> double pow(double x, double y) { unsigned char sign = 0; unsigned long yi; if(x == 0.0) { if (y <= 0.0) { errno = EDOM; } return 0.0; } if(y == 0.0) return 1.0; if(x < 0.0) { yi = (unsigned long)y; if(yi != y) { errno = EDOM; return 0.0; } sign = yi & 1; x = -x; } x = exp(log(x) * y); if(sign) return -x; return x; } Oled Sa ikka veel C vihkaja? Kas katseta(me-d)? ******** Proov 1: Programm d10=10.0; d3=3.0; dpow=pow(d10, d3); d31=2.9999; dpow1=pow(d10, d31); Tulemused d10 = 10.0000000 d3 = 3.00000000 d31 = 2.99987793 dpow = 1000.03125 dpow1 = 999.859375 RE: PIC ja ujupunktarvutused - felch - 21-05-2014 (21-05-2014, 07:01 PM)A.R. Kirjutas: C astendus on selline: Väga hea kuid mul on kogu proge juba valmis ja mõistagi asmis. Vaja vaid osarõhud arvutada. Selleks küll C-d pruukida ei kavatse. Ilmselt tuleb kas lib-is kasutatavasse aprokimeerimisse süüvida või lähendada valem polünoomile tabelarvutusega. Viimase ma tegelikult tegin ära ka ja võiks toimida. Jääb siiski sportlik hasart too kakane lib tööle ajada. Võiks ju toimida, isegi peaks... Miks siis minul mitte? Lib'i on mul ilmselt edaspidi ka vaja. RE: PIC ja ujupunktarvutused - A.R. - 21-05-2014 POW_osa_list.txt (Suurus: 3.57 KB / Tõmbamised: 571) See lõik mis arvutab astet on C asm-is selline. Vast on kasuks RE: PIC ja ujupunktarvutused - felch - 22-05-2014 (21-05-2014, 10:35 PM)A.R. Kirjutas: See lõik mis arvutab astet on C asm-is selline. See lõik (fcall _pow) ise on paraku puudu. Näha on vaid sisendandmete arvutisse tõstmine... RE: PIC ja ujupunktarvutused - A.R. - 22-05-2014 (22-05-2014, 07:49 AM)felch Kirjutas: See lõik (fcall _pow) ise on paraku puudu. Näha on vaid sisendandmete arvutisse tõstmine... Öösel mõeldes tundus ka et midagi on viltu. Jalutasin selle POWi debugeri all läbi ja see avas 8 alamosa ja keerutas seal nagu jõudis. MPLAB all paistab see disassembly Listing teistsugune. Tegin otse copy. Seal on nüüd ASMina need osad sees segamini C käskudega. Vast on abiks DIS.txt (Suurus: 145.18 KB / Tõmbamised: 735) Nimelaiendit asm ja lst paneb foorum pahaks, txt-ga lepib. RE: PIC ja ujupunktarvutused - A.R. - 23-05-2014 Nägin unes veel ühte võimalust. Ütled et on valmis suur asm ja ei taha ümber teha. Aga kui teha C-s arvutus ja kutsuda sinna sisse see valmis asm Kontrollisin, töötab: Näide ___________________ C-s tehtud omistamised F56 30CD MOVLW 0xcd F57 00AF MOVWF 0x2f F58 30CC MOVLW 0xcc F59 00B0 MOVWF 0x30 F5A 303F MOVLW 0x3f F5B 00B1 MOVWF 0x31 Sama lõik disasmist kopeeritud _asm - _endasm vahele 19: _asm 20: MOVLW 0xcd F5C 30CD MOVLW 0xcd 21: MOVWF 0x2f F5D 00AF MOVWF 0x2f 22: MOVLW 0xcc F5E 30CC MOVLW 0xcc 23: MOVWF 0x30 F5F 00B0 MOVWF 0x30 24: MOVLW 0x3f F60 303F MOVLW 0x3f 25: MOVWF 0x31 F61 00B1 MOVWF 0x31 26: _endasm See asmi osa lubab kasutada debug all ka breakpointe ja vaadata mis tegelikult toimub. ___________ Olgu, nii ei ole ilus ja aus teha. Aga kes seda keelab? RE: PIC ja ujupunktarvutused - felch - 24-05-2014 Tänud ! Ma ei taha enam kellelgi õudusunenägusid esile kutsuda... Lahendasin asja hetkel nii, et arvutasin veeauru sisaldused excelis tabelina välja ja leidsin lähenduspolünoomi. Sisaldab vaid korrutamist/jagamist. Töötab ! Tabel kehtib vahemikus -25C...+25C aga viga piiride ületamisel ei ole >10% mis antud lahenduses on lubatav. Seade annab nimelt soovitusi kas kiriku uksi oleks mõistlik avada tuulutamiseks (et ruumi niiskust alandada) või mitte. Mõned lisamugavused on veel. A.R-i astmefunktsiooni katsetan ka kohe üle kui seadme lõplikult tööle saan. Hetkel ...nagu annab lootust. Kui küllastunud veeauru rõhu tabel kedagi peaks huvitama, andke teada - laen üles. |