Sari la conținut
ELFORUM - Forumul electronistilor

Cum se face suma saturata?


Postări Recomandate

Salut,Ma poate ajuta cineva cu un algoritm de suma saturata ptr pici de 8 biti, in asembler? Poate ca si C ar fi bun, atata timp cat se poate vedea algoritmul si nu foloseste mai stiu eu ce functii intrinseci sau de lib(e)rarie.Da, as putea sa testez dupa sumare, dar e cam ciobaneste. Stie cineva un algoritm mai jmekeros?Gogu si piclist nu au fost prea generosi cu raspunsuri.Multumesc,Cirip

Link spre comentariu
  • Răspunsuri 10
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

1. Solutzie eleganta: eu zic sa incerci procedura clasica, in genul suma 2x16bitzi, cu semn, aia din math routines de la microchip, care itzi scoate rezultatul pe 32 bitzi. rezultatul il compari dupa aia cu valoarea la care vrei sa-i aplici saturarea, daca nu trece, il lashi cum e, iar daca da peste incarci rezultatul cu valoarea de saturatzie.2 ptr 16 bitzi fara semn:;******************************** Begin Double precission substraction/additionD_sub comf ACCaLO, F ; negate ACCa ( -ACCa -> ACCa ) incf ACCaLO, F btfsc STATUS, Z decf ACCaHI, F comf ACCaHI, FD_add movf ACCaLO, W addwf ACCbLO, F ; add lsb btfsc STATUS, C ; add in carry incf ACCbHI, F movf ACCaHI, W addwf ACCbHI, F ; add msb retlw 0 ; Double Precision Subtraction ( ACCb - ACCa -> ACCb, or only adition )daca il foloseshti doar ca suma, potzi testa carryul la ieshirea din procedura.

Link spre comentariu

Daca lucrezi cu intregi cred ca metoda cea mai simpla este sa faci suma (vezi operatii cu intregi cu semn la notele de aplicatii Microchip), apoi sa testezi dupa sumare. N-o fi prea eleganta metoda, dar cu siguranta e rapida (sumarea si testarea se efectueaza in cativa cicli). Nu stiu sa existe vreun alt algoritm pentru intregi si chiar daca ar exista, nu cred ca ar putea fi mai rapid.

Link spre comentariu
  • 2 săptămâni mai târziu...

Pai in general, numerele sunt reprezentate binar pe x bitzi, cu sau fara semn. Pentru reprezentarea sumei a doua astfel de numere sunt necesari x+1 bitzi. De multe ori, nu prezinta nici un interes practic sa lucrezi cu x+1 bitzi, zona de interes fiind pe x bitzi din numar. Se pune problema ce faci sa transformi rezultatul in numar exprimabi in x bitzi. Potzi sa impartzi cu doi (un shift cu carry pentru reprezentari fara semn) sau potzi sa saturezi rezultatul. Asta se face prin comparare cu valoarea (sau valorile, in cazul numerelor cu semn), daca suma depasheste, se truncheaza la nivelul acestor valori. ex: 0x8e+0x9a=0x128, care nu mai incape intr-un octet. daca il impartzi la doi, iese 94, iar daca il saturezi vine 0xff.

Link spre comentariu
Vizitator ozy

Sa renunti la 'cel mai putin semnificativ' bit al rezultatului inteleg ca e corect , dar sa obtii 0xff , asta nu stiu de unde iese.Asta inseamna ca daca facem o "tabla a adunarii" pe 8 biti,cu rezultat pe 8 biti, jumatate din rezultate vor fi 0xff ?

Link spre comentariu

Este exacta remarca ta legata de "tabla adunarii". Iar 0xff iese pentru ca tu l-ai scris acolo, rezultatul sumei fiind mai mare, pe 9 bitzi. Daca nu vrei sa lucrezi cu noua bitzi, este foarte confortabil. Vezi de exemplu regulatoarele PID. Daca eroarea este constanta (sa zicem ca mecanismul este blocat intr-un regulator de pozitzie), integratorul va tot integra (care este pana la urma o suma, ca doar suntem in discret) pana da pe laturi, deci overflow. Asta este un prim aspect. Al doilea: PID inseamna Y=P+I+D, iar daca fiecare componenta este reprezentata pe 8 bitzi cu semn, shi ieshirea este de tot 8 bitzi + semn (un pwm sa zicem), este musai sa foloshesti suma saturata, daca vrei ca fiecare dintre termeni sa poata ataca ieshirea in full span. Cand faci un regulator PID analogic, aspectele astea sunt chiar evidente.Apropos Cirip: poate gaseshti cod cu suma saturata in appnote-le cu PID-ul de la microchip...

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