Da się robić różne cuda, ale po co? Autora nie chciałbym spotkać na drodze (pisze lewo, przesuwa w prawo ;-) ) Wedłu standardu C działanie takie o które pyta jest "implementation-defined" A że się tak zapytam czy przypadkiem nie chodzi o dzielenie przez 2^n? Jeśli tak, to czemu po prostu nie dzielisz przez 2 do odpowiedniej potęgi? Albert
Chodzi o pomnożenie próbki przez liczbę x z zakresu 0-255 i potem przesunięcie o 8 bitów w prawo, żeby uzyskać próbkę o współczynniku x/255, tak? Dokładnie. Mnożenie ma niewielki narzut (procesor ma instrukcję MUL), a dzielenie przez 256 to po prostu obcięcie najmniej znaczącego bajtu. Stałą? Przecież volume_coefficient to zmienna. Owszem, ale nie...
https://obrazki.elektroda.pl/9290552300_... Witajcie moi drodzy. Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części poznamy sterownik wyświetlacza LED MM5450, połączymy go z PIC18F2550 i napiszemy od 0 implementację ich komunikacji. Docelowo użyjemy MM5450 do wysterowania wyświetlacza LED 5 na...
Dzielenie zrobiłem jako przesunięcie bitowe , więc teraz chyba na pewno nie będzie problemów z atomowością. Dziekuje za pomoc wszystkim.
ok, już wyjaśniam - operacje bitowe wykonują się dużo szybciej niż dzielenie, przykładzik: liczba AND 255 - zerujemy wszystkie bity oprócz ostatnich ośmiu które pozostają bez zmian. Jest to odpowiednik reszty z dzielenia przez 256. przesunięcie bitowe w prawo jest odpowiednikiem części całkowitej z dzielenia przez jakąś potęgę dwójki - przesunięcie...
Jedyne, co mi przychodziło do głowy, to przesunięcie bitowe w prawo i tak właśnie napisałem, jednak albo moja odpowiedź była zbyt ogólnikowa, albo nie o to chodzi wykładowcy. To jest ośmiokrotne przesunięcie bitowe w prawo. Ten sam efekt uzyskamy, odrzucając cały młodszy bajt. Jeżeli zaokrąglenie ma być zgodne z zasadami arytmetyki, to gdy młodszy...
Czy nie ma szybszych alglorytmów? Oczywiście, że są. Wykorzystaj algorytm mnożenia i dzielenia pisemnego. Dzięki temu znacznie ograniczysz ilość dodawań czy odejmowań. Na przykład 1234 * 5678 zrobione metodą powyższą to 1234 dodawania (zakładam, że program jest chytry i sprawdza na początek która liczba jest mniejsza i ją bierze jako licznik pętli)....
dziel FFFFFFFFFFFFF000 przez 00000AAAAAAAAAA - ucierpi nieco dokładność, ale jest to do wykonania na 64 bitach ALU. Wynik przesuń o 6 w prawo (otrzymasz 6 miejsc binarnych po przecinku, oczywiście przesunięcia dokonujesz modyfikując cechę wyniku). Generalnie dzielenie np liczb 32 bitowych na FPU odbywa się w rzeczywistości z wykorzystaniem 96 bitów,...
Witam, czy ktos moglby mi krok po kroku wytlumaczyc dzielenie np takiej liczby 10110011 : 110 kiedy nad kreska dzielenia wystepuje 0 a kiedy 1 bo nie moge tego zrozumiec?
W rodzinie '51 standardowo stos ma początek w rejestrze o adresie 07H (i zajmuje kolejne o wyższym adresie) można to sobie zmienić przez wpisanie nowego adresu do SP przykład: MOV SP,#30H ;przenosi początek stosu od adresu 30H Co do dzielenia to mała podpowiedź Ponieważ liczba ma być dzielona przez 16 to najlepszym sposobem jest przesuwanie bitowe w...
Witam. Czy ktoś mógłby mi odpowiedzieć na pytanie dotyczące tego czy podczas dzielenia dwóch liczb niezerowych następuje zaokrąglenie czy obcięcie?Ja stawiam na obcięcie.
Wszedzie szukam i nie moge znalezc, potrzebuje pojdzielic liczbe 16 bitowa przez 8 bitową w asemblerze Ostatecznie moze byc nawet 8 bit przez 8 bit, bez reszty, choc z reszta tez moze byc. Robie miernik prękości obrotej z enkodera (4096 na obrót). Licznik 16 bitowy zlicza impulsy, potem co 1sekunde wyzwala sie przerwanie ktore podzieli liczbe zliczonych...
Witam, wie ktoś może jak zbudować obwód żeby podzielić 4-bitową liczbę przez 2? czyli przesunąć każdą jedynkę w liczbie o jedną pozycję w lewo
Witam. Kto ma lub napisze procedurkę dzielenia dwóch liczb dwubajtowych - wynik u mnie będzie zawsze jeden bajt więc starszy bajt wyniku można pominąć... z góry dzięki. ps. ja znalazłem tylko dzielenie 6-cio bajtowych, 4, 3 itp..... a 2 niema :-(
Proboje wysylac dane z PC przez rs232 do mikrokontrolera i w zwiazku z tym mam pytanie - jak mozna podzielic liczbe z zakresu wiekszego od 255 tak aby byla zapisana w postaci dwu 8-bitowych czesci ktore moglbym wyslac po rs-sie do uP? Czy jest jakas funkcja ktora to robi? Dodano po 47 Zapomnialem dodac że chodzi o jezyk C :)
Interesuje mnie taka kwestia, czy są gotowe układy scalone (prawdopodobnie jezeli juz to z taktowaniem) ktore realizowaly by dzielenie 2 liczb binarnych, zalozmy 4 lub 8 lub iloś-bitowch ?
Zacznę od tego, że programuję mikrokontroler ATmega8. Operuję na liczbach 16bitowych w postaci 8bitMSB - część całkowita, 8bitLSB -część ułamkowa w zapisie stałoprzecinkowym. Teraz chciałbym podzielić dwie takie liczby 16bitowe. Stosując procedurki dzielenia ze strony Atmelka otrzymuję wynik w postaci część całkowita i reszta. Zastanawiam się jak tą...
Nie wiem też po co to dzielenie przez 16 w kodzie, przecież wystarczy przesunąć zmienną o 4 bity w prawo, a kod zmaleje w oczach :) Jeśli chodzi o C to przesunięcie bitowe liczby ujemnej jest niezdefiniowane w standardzie. Albert
Tak eliminacja wpływu niestałości długoterminowej (dryftu) to zaleta takiego pomiaru, podobnie w metodzie mostkowej eliminuje się wpływ zmian napięcia zasilania na wynik. Czytanie pojedynczych rejestrów jest możliwe, lepiej jednak od razu czytać cały rejestr. Kompilator zadba o odpowiednią kolejność i zoptymalizuje kod. Można porównać jak to wygląda...
Witam. Zabawnie się składa, że obecnie programuję ten sam chip (tylko z użyciem PIC18F4450). Ja problem odpowienich częstotliwoście rozwiązałem w tem sposób: - numer nuty dziele przez 12, dzielenie oznacza numer oktawy, reszta to nuta w oktawie - w programie zadeklarowałem tablice czestotliwości jednej najwyższej oktawy - niższe można uzyskać przez...
Czy takie całkowanie "trapezowe" ma sens w przypadku równomiernego próbkowania? Jest dokladniejsze, rownomierne probkowanie nie ma tu nic do rzeczy. Co do samego sposobu calkowania to wystarczy sobie wyprowadzic wzor na pole obszaru pod funkcja liniowa. Sklada sie to pole z sumy pola trojkata prostokatnego i prostokata czyli wzor podany powyzej. programowo...
Jeżeli te operacje mają na celu np. monofonizację sygnału to robi to się wg następujacego wzoru: M=\frac{X+Y}{2} (****) Dodajemy w zmiennej 16 bitowej ze znakiem a wynik po podzieleniu przez 2 zapisujemy w 8 bitowej ze znakiem. Nie podzielenie wyniku przez dwa powoduje wyprowadzenie wyniku poza zakres 8 bitowy. Obcinanie typu if x>127 then x=127 nie...
Działanie suma = suma << 1 to mnożenie przez 2. Dzielenie realizuje się przesuwając w prawo a nie w lewo. Dodatkowo można w ten sposób dzielić tylko przez kolejne potęgi liczby 2, a ponieważ 10 nie jest potęgą 2, więc nie da się dzielić przez 10 poprzez przesunięcie bitowe. Porponuję zrobić dzielenie przez 8 lub przez 16 (przesunięcie o 3 lub...
Dzielenie zmiennej int16 na dwie mniejsze możesz zrobić tak:[syntax=c]int 16_t zmienna, zmienna1; int8_t mala_zmienna, mala_zmienna1; mala_zmienna = zmienna >> 8; //przesuniecie bitowe skopiuje 8 bitów starszych mala_zmienna1 = zmienna; // skopiuje tylko 8 bitów najmłodszych zmienna1 = (mala_zmienna << 8) + mala_zmienna1; [/syntax]
powiedz prowadzacemu zajecia, ze nauka ahdl to czysta strata czasu; a moze lepiej nic nie mow ... :) /.../wydaje mi się że dobrze/.../ troche bledow jest :) 1. variable A S powinno byc zadeklarowane jako 5 bitowe DFF, a obliczane tak samo jak powyzej: S[] = ( 0, S_ab[] ) + ( ... 4.wyj[]=S[] div B"0100"; ahdl nie pozwoli ci na dzielenie niczego poza...
Dzielenie przez 8 to nic innego jak przesunięcie o 8 bitów w prawo, czyli w przypadku 8-bitowych procesorów wywalenie najmłodszego bajta wyniku. Dzielenie prze 8 to nie przesunięcie o 8 bitów w prawo, tylko o 3 bity. Do autora: dzielnie wlaczysz, tracisz czas, a na końcu koledzy podsyłają ci funkcje arytmetyczne zaimplementowane w C. Jaki jest więc...
wlasciwie te dwa sposoby to identyczne sa :D... tylko oczywiscie, jesli chodzi o iplementacje, to lepiej stosowac przesuniecie bitowe (pomnozyc przez 2^n to to samo co przesunac liczbe o n miejsc w lewo... dzielenie w prawo :)), gdyz procesor szybciej to liczy :)...
Stary i lubiany operand w C (!!) (i nie tylko :D ). Logiczne przesunięcie w prawo o 10 bitów, co daje że liczbę tlong dzielisz przez 2^(10) = 1024. Bity najmłodsze są wysuwane (tracone!), a na najstarszych pozycjach wsuwa się 0. Zakładam, że przetwornik jest 10-bitowy, co daje zakres od 0 do 1023. Prosta arytmetyka da nam zakres do <0; 1), wcześniej...
a to już zupełnie inna historia... Generalnie: nie liczyć zmiennoprzecinkowo - za mały procek - nie pomieści biblioteki. Trzeba liczyć stało pozycyjnie, np tak: x * 0.83 = (x * 849 ) / 1024; // czyli x * 0.84 = (x * 849) >> 10; jak masz zmienną a powiedzmy z zakresu (0.0 , 1.0), to mnożysz ją tak, żeby była z zakresu 0...1023 i zamiast x *a masz (x...
No więc tak: (zakładam liczby w kodzie NKB (tj. bez znaku)) - ponieważ mnożysz liczby 4 bitowe więc wynik może być 8 bitowy: 15*15=225 (11100001) z tego wniosek, że akumulator wyjściowy powinien być 8 bitowy (2 sumatory 4 bitowe, 2 rejestry 4 bitowe pamiętające wynik) Wyjście sumatorów podajesz na wejście powyższych rejestrów, Na jedne z wejść np a0,a1,a2,a3,a4,a5,a6,a7...
A dzielenie przez 2 do 16 to przecież tylko przesunięcie o 16 bitów (co przy okazji sprawia że gdzieś tam w środku obliczeń chyba trzeba jakąś zmienną 32-bitową).
Witam skrobię mały program na armie. Problem jest następujący: Z ADC'a dostaję 12bitową paczkę danych zakodowaną w U2, program w procku przepisuje ją do zmiennej typu int. Kodowanie U2 jak wiecie zależy od tego ile bitów ma dana, int ma 32 a ja mam daną 12 bitową. Jak to ugryźć by tą daną do tego int-a właściwie włożyć. Metoda naokoło tj wygląda następująco...
1. Zrób sobie jakąś dużą zmienną- np 16 lub 32 bity. 2. Przy każdym odczycie prędkości odejmij od tej dużej zmiennej 1/8 jej wartości i dodaj do niej 1/8 odczytanej wartości obrotowej. 3. Aby wyciągnąć odfiltorwaną wartość, podziel dużą zmienną przez 8. Teraz tak, czy 16 czy 32 bity to już zależy od wielkości jakie otrzymasz w trakcie pracy, musisz...
AVE... Co to jest TDS3k? Masz na myśli serię Tektronix TDS3000 z 2008 roku? Dla Twojej wiadomości od tamtych czasów sporo się zmieniło. Obecnie każdy DSO emulujący zachowanie lampy oscyloskopowej bywa nazywany DPO. Siglent swoją wersję nazywa SPO - Super Phosphor, i tak to opisuje: SPO display technology provides fast refresh rates. The resulting intensity-graded...
dystans <= ((v_dzwieku / f_zegara)*(zliczone_takty)... - korekcja; o ile operacja mnożenia jest dobrze określona, o tyle w przypadku dzielenia musisz użyć jakiegoś układu który ci ten wynik dzielenia obliczy, no chyba że dzielisz tylko przez 2^n, wtedy wystarczy przesunąć bitowo w prawo. Obawiam się jednak że próbujesz zrobić...
Przerwanie ADC jest wywoływane po zakończeniu konwersji, a ta zależy od częstotliwości taktowania ADC (preskalera). A uśrednić można przez dodawanie i na końcu odpowiednie przesunięcie bitowe - np. dodajesz 8 próbek i przesuwasz o 3 bity w prawo (dzielisz przez 8). Można też zrobić to inaczej - odejmować od średniej np. 1/8*śrendia i dodawać 1/8 wyniku....
Nie, nie, nie, bierzesz 16to bitową próbkę, przesuwasz w prawo(dzielisz przez 2) i wysyłasz, zmieniasz linie WORD i znowu bierzesz 16to bitową próbkę, przesuwasz w prawo i wysyłasz........itd W ten sposób tracisz najmłodszy bit ale nie musisz sie martwić o przesunięcie na linii WORD.
Nawet nie trzeba dzielic A/10000 wystarczy na lcd przesunac przecinek, albo pamiętać że wyniki mamy 10^4 większy. Aha sa instrukcje w tym kontrolerze do mnożenia 16-bit?
Sam trafiłem teraz na problem z odbiorem RC5 w przerwaniach i po przeanalizowaniu tego kodu myślę że można by łatwo dodać synchronizację dla każdego pilota. W programie Saabotaz mierzy czas trwania połówki bitu. Zakładając że czas wysłania połowy bitu wacha się miedzy pilotami np. od 905ms do 860ms i nie zmienia sie podczas transmisji, można wyliczyć...
Wszystko zależy od tego ile masz wolnego czasu i pamięci mikrokontrolera. Ja np. często wysyłam napięcia w postaci szesnastkowej, bo to nie kosztuje praktycznie nic po stronie uC, a program odbierający na PC odczyta je łatwiej niż z postaci dziesiętnej. Samo dzielenie przez 10, potrzebne do konwersji na postać dziesiętną, zajmuje grube dziesiątki instrukcji...
Dziękuję bardzo za odpowiedź chodź przyznam, że nadal nie jest to dla mnie do końca jasne. Nie pasuje mi to matematycznie. Skoro dzielenie przez 16 to przesunięcie w prawo o 4 pozycje więc wypada jakby 4 na jedną pozycję. Więc dlaczego przy przesunięciu w lewo wartość jest aż tak znacząco różna ? Przesunięcie (shift) o jedną pozycję ozacza pomnożenie...
Hunterhouse ten sposób z liczeniem liczby modulo jest genialy :) Sam na to wpadles?? Na koncu jest jeszcze obliczany pierwiastek,tez to jest dosc czasochlonne dla procka , zastanawiam sie czy na niego nie ma podobnego sposobu :) Czyli beta przyjmuje wartosci od 0- 31, i zmienia sie w zaleznosci od k ,ale caly czas w zakresie 0-31 . Jak dokladnie obliczone...
Masz napisać procedury mnożenia liczb: 1 bajtowej przez 1 bajtową (8x8) wynik będzie 16 bitowy (2 bajty) 2 bajtowej przez 1 bajtową (16x8) wynik będzie 24 bitowy 3 bajty 2 bajtowej przez 2 bajtową (16x16) wynik będzie 32 bitowy (4 bajty) Procedura przebiega tak w kodzie naturalnym binarnym: 1. Przygotowujesz rejestr wyniku o długości równej sumie ilości...
Witam Na czwartek muszę przygotować listingi programów napisanych w asemblerze które wykonają poniższe działania: 1. Dane są liczby: A=0F1h, B=00011111b. Obliczyć binarnie A+B, A-B, B-A. Podać wynik w postaci binarnej i szesnastkowej. 2. Napisać program mnożenia x4 liczby umieszczonej w rejestrze R7 bez użycia instrukcji mul ab. 3. Napisać program...
(at)ElektrodaBot przeanalizuj tylko ten poniższy schemat. Jaki jest stosunek częstotliwości sygnału CLK na wejściu układu do sygnałów H1 i H2 na wyjściu układu. https://obrazki.elektroda.pl/1923487900_... Bezpośrednia odpowiedź na pytanie W przedstawionym układzie sygnał CLK jest dzielony tak, że częstotliwość na wyjściach H1 i H2 wynosi...
Tu masz dzielenie liczb czterobajtowych przez dwu bajtowe (16 bit).Co prawda nie moje opracowanie, podaję w orginale. ;procedura dzielenia 4-BAJTOWYCH liczb przez 2-BAJTOWE ; wejscie: ;r0 - adres najstarszego bajtu dzielnej, ;r1 - adres najstarszego bajtu dzielnika, ; wyjscie: ;R0 - adres ilorazu ;R6:R5 - reszta ;W deklaracji zmiennych programu wykorzystujacego...
jak zadajesz takie pytanie, to zawsze podaj: -jaki procesor -ile ew. masz miejsca w pamieci (na tablice itd.) -raczej podawaj dokladnie problemy, bo to jest dosyc ogolne... -jaka ma byc dokladnosc tego jest cos takiego jak fixedpoint math - to taka matematyka na liczbach ulamkowych z uzyciem liczb calkowitych. Polega to na tym, ze zamiast...
Ale tablica potrzebna do wyznaczenia wartości elementów ciągu ma rozmiar tylko taki, który element ciągu chcesz poznać. Jak chcesz 50-ty, to potrzeba tablicy 50-elementowej typu long long. Co więcej - po wyznaczeniu wartości elementu ciągu można śmiało ją usunąć. W algorytmie sita nie ma możliwości efektywnego skrócenia wielkości tablicy o więcej, niż...
Witaj ... jeśli chodzi Tobie o otrzymanie cyfrowego dźwięku polifonicznego, musisz stworzyć w swoim programie coś w rodzaju "miksera" (sumatora) próbek sygnału. Można zrobić to na kilka sposobów :) Wszystko zależne jest od tego, czy Twoje próbki dźwięku przechowywane są w ośmiu, czy też 16 bitach. 1. Jeśli przechowujesz próbki w ośmiu bitach, a posiadasz...
Zwykłe binarne dzielenie nierestytucyjne przy 10 bitach będzie prawdopodobnie prostsze, niż każda z tych kombinowanych metod - to w końcu tylko 8 obiegów pętli z porównaniem, przesunięciem i warunkowym odejmowaniem, tyle że te trzy operacje trzeba zrobić na 10 (czyli w praktyce 16) bitach. Gdyby toto miało przynajmniej 8-bitowe dzielenie, jak stary...
dzielenie16_16: ;dzielenie 16 bitow przez 16 bitow ;we: r2 - H dzielna ; r3 - L dzielna ; r4 - H dzielnik ; r5 - L dzielnik ;wy: r2 - H czesc calkowita ; r3 - L czesc calkowita ; r0 - H reszta ; r1 - L reszta ;zmienia: acc, psw, r7 ;algorytm: ; Hi:=0 ; Lo:=dzielna ; wy:=0 ; repit 16 razy ; { ; shift_left_32bit (Hi,Lo) ; if Hi>=dzielnik ; {wy:=2*wy+1;...
No ladnie. Sliczne procedurki. Twoja proc odnosnie dzielenia jest olbrzymia. Moja jest mniejsza. Moze by tak maly konkursik na procedurke dzielenia 16 bitowego w kilku kategoriach: szybkosci wykonywania, wielkosci kodu. dzielenie16_16: ;dzielenie 16 bitow przez 16 bitow ;we: r2 - H dzielna ; r3 - L dzielna ; r4 - H dzielnik ; r5 - L dzielnik...
Tak tez robiłem do tej pory, ale teraz chcę odnieść wszystkie wielkości do wielkości rzeczywistych (napięcie, prąd, prędkość silnika). Ponieważ np. stała całkowania będzie wynosić TP = 100e-6s stąd na część ułamkową chcę przeznaczyć 16 b z czego wynika że na część całkowitą również zostaje 16b. Wtedy TP = 100e-6*65536 = 6 , a np 2A = (2<<16) =...
Na ZX SPECTRUM tak powinno to działać. Na Cobrze z wyprowadzonym przewodem z portu FE sterującym przerzutnikiem dzielącym przez 2, z wyjścia którego przez opornik jest sterowana baza tranzystora T3 (głośnikowego) także powinno to działać, chociaż tam nie będzie sprawdzany bit 4 akumulatora. Tam wywołanie OUT(FE),A ustawi na wyjściu H, następny OUT(FE),A...
Właśnie rozwiązałem u siebie jeden z Twoich problemów (tak myślę), więc się podziele. Potrzebowałem obliczyć wartość, którą muszę przesłać do DDSa mając daną częstotliwość w Hz. Wzorek taki: fw = czestotliwosc * 2^24 / 50000000 akumulator fazy ma rozmiar 24 bity, zegar DDSa to 50MHz. Moje pierwsze podejście wyglądało tak, że wykonałem tą operację dokładnie...
Cześć, muszę napisać specyficzną funkcję filtru średniej kroczącej do uśredniania pomiarów z ADC. Sam algorytm nie jest specjalnie skomplikowany, ale cała trudność polega na tym iż filtr ma mieć dynamicznie zmienną szerokość okna. Poniżej zademonstruję o co właściwie chodzi. Chciałbym zaznaczyć, że w pisanym kodzie bardzo zależy mi na jak największej...
Siemka! Tak patrzę w ten Twój kod i pewnych rzeczy nie kumam, ale spróbujmy go przeanalizować. - Resetujesz 1-Wire i wykonujesz polecenie konwersji po czym czekasz 750ms i super :) tylko zastanawiam się po co odczekujesz kolejne 750ms po poleceniu odczytu scratchpad? To jest niepotrzebne, możesz odczytywać dane od razu. Poza tym rozbijanie Waitms 750...
Osobiście wybrałbym rozwiązanie tomgarta - przetwornik C/A sterowany z uC + wzmacniacz operacyjny na wyjściu. Przetwornik 8-bitowy można tanio kupić (także na Allegro po ~2zł), lub zbudować samemu (drabinka R-2R z rezystorów precyzyjnych). 256 poziomów (8-bitów) to rozdzielczość prawie 0.1V przy sterowaniu 3-25V. Wzmocnienie i przesunięcie zapewni Ci...
przesunięcie bitowe reszta dzielenie przesunięcie bitowe portach przesunięcie bitowe atmega8
programować stm32 cmsis bateria laptop compaq środku ostry ostry
niskie ciśnienie oleju akumulator einhell
Jak odblokować hulajnogę SXT: Porady i wskazówki Volvo D5 185 KM gaśnie przy dodawaniu gazu - przyczyny i diagnostyka