Można użyć operacji stałoprzecinkowych zamiast operacji na float. Autor nie ma nigdzie operacji float. (100 - volume_coefficient) *127)/100 Ta część obliczeń jest stałą w pętli, więc nie powinna wprowadzać żadnych obciążeń. W wielu miejscach rzutujesz typ na 32-bity, podczas, gdy wynik operacji nie może przekroczyć 16 bitów. Takie rzutowanie wprowadza...
Witam. Skoro tak to zastosuj układ CD40194. Pozdrawiam.
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
Na pewno będzie szybciej 3 razy mnożyć niż 4 A jeszcze szybciej dwa razy mnożyć i wykonać przesunięcie bitowe w prawo, bez jakiegokolwiek dzielenia.
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.
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...
Przy przesunięciu bitowym w lewo zgodzę się z Tobą. Jednak w wyniku przesunięcia bitowego w prawo (dzielenie) otrzymam liczbę całkowitą co zmniejsza dokładność czujnika.
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...
To jest przesunięcie bitów w prawo. Czyli bitowo 0b00010000 >> 1 da 0b00001000 . Często użyte jako optymalizacja w kodzie zamiast dzielenia (chociaż nowoczesne kompilatory powinny to robić same) gdzie >>10 będzie równoznaczne z /1024. Gdybyś policzył 5115000/4995 to byś to zauważył.
Poza tym pobieżnie przejżałem DS ATTiny i nie widzę instrukcji analogicznej do DIV w 8051?? Jak w nim dzielić liczby?? A czy znalazłeś MUL? ;) Do takich obliczeń niestety trzeba pisać własne funkcje. Można mnożyć i dzielić poprzez wielokrotne dodawanie lub odejmowanie danej liczby, ale to jest oczywiście dosyć mało optymalna metoda. Oczywiście mnożenie...
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...
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...
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...
Zrób sobie ring bufor do którego wrzucasz pomiary i za każdym razem jak jest potrzebny wynik policz średnią. https://pl.wikipedia.org/wiki/Bufor_cykl... jak znasz angielski to zajrzyj na wersję angielską - standardowo lepsze opisy. W sumie jeśli nie potrzebujesz "wyjmować" próbek, to nie potrzebujesz wskaźnika odczytu. Ilość próbek przyjmuj jako potęgę...
Jak chcesz sprawdzić czy tak się stało dla drugiego przypadku to trzeba porównać asemblery Chyba nic innego być nie mogło, skoro w jednym wypadku jest przepełnienie po kilkuset wywołaniach, a w drugim nie ma przepełnienia po dziesiątkach tysięcy. Rzeczywiście skoro każde wywołanie odkłada na stos adres, to w drugim przypadku efekt powinien być taki...
Znam to kombinowanie jak koń pod górę.. ;) Zazwyczaj jak chce się zrobić taki zabieg to jedna linijka ale w Lua to może być wyzwanie więc powodzenia :) Możesz tez to obejść i przesunięcia bitowe potraktować jako mnożenie bądź dzielenie przez 2*n czyli np.: <<3 jest równoważne pomnożeniu wyniku przez 8
Nie mam w tej cwili czasu na dokładniejszą analizę, ale zauważ że w celu uzyskania bardziej znaczącego bajtu zmiennej typu uint16_t należy podzielić przez 256, a nie przez 255. Zwiększ też wartość zmiennej ac_adder na 256, bo przy 24 otrzymasz przebieg poniżej 5Hz. Błąd jest na pewno w algorytmie bo np. to działa bez problemu (sprawdziłem dla pewności):...
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...
Proble z obliczeniami w AVR ie polega na braku dzielenia, a na tym, że liczymy na 8 bitach. Prosta operacja 16-bitowa - to min. 2..3 instrukcje, 32-bitowe - 8..12 instrukcji. W 8-bitowym procesorze nie ma żadnego pożytku z dzielenia, bo w programach, w których potrzebne jest dzielenie, używa się danych 16- lub 32-bitowych, a w przeciwieństwie do mnożenia...
Dziś siedze całą noc nad tym jak wymyśleć algorym prostego dzielenia liczby 16bit przez liczbe 8bit ze wzracaniem reszty na procesor 8bit i szczeże mówiąc nic nie wymyśliłem.... Jedynym sensownym rozwiązaniem jest realizacja klasycznego sposobu dzielenia:( Moje pytanie brzmi... czy da sie jakoś inaczej zrealizować funkcje dzielenia?? np tak jak w mnożeniu...
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...
Jak by kol. sobie zadał trochę trudu i policzył wyniki to: mp dla odczytuz adc np 500 z wzoru ADC(wynik) * 5 / 1024 napięcie jest równe 2.44140V i trzeba float-a aby go umieścic Dla wzoru U [mV] = 5Uadc - 5Uadc / 64 - 5Uadc / 128 wynik jest 2441 i jest ładnym integerem a żadna z wartości pośredich nie wychodzi poza rozmiar danej 16bit i nie wymaga mnożenia...
Dostałem dwa zadania na wykładzie i nie mam pojęcia, jaka odpowiedź może być prawidłowa. Pytania dotyczą mikrokontrolerów AVR. Będę niezmiernie wdzięczny, jeśli ktoś zaproponuje jakąś odpowiedź do poniższych pytań: 1 Na czym polega najwydajniejsze dzielenie przez 256 i czy da się zrealizować w uC? (2 punkty), Jedyne, co mi przychodziło do głowy, to...
#define KHZ2MS(x) (1/(x))*1000 1<<KHZ2MS(27) liczy się jak 1<<(1/(27))*1000 czyli daje w wyniku 1. Ja sobiście nie wiem gdzie w tym przykładzie była by jakaś zachycka bo akurat przesunięcie bitowe jest w kolejności wykonywania za mnożeniem i dzieleniem
Prawie tak, jak myślisz, z tym że nie masz co zamienić liczby na binarną, bo już taką masz w komputerze. ;) Wyznacz resztę z dzielenia przez 2, dodaj ją do sumy, wykonaj przesunięcie bitowe w prawo o jeden. I tak 32 razy. Teraz zapisz to sobie w kodzie.
Dzielenie przez 10 możemy zastąpić przez przesunięcia bitowe w prawo. Od kiedy? Jak juz koniecznie dzielic przez 10 stosujac przesuniacia 2 prawo to może tak? Oczywiscie zakladając wymagana dokładnośc X=a/8-a/32+a/128-a/512+............
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ą).
Albo napiszesz to w C, albo musisz napisać procedurę dzielenia liczby 16-bitowej przez 10 (a właściwie przez 5, bo przez dwa dzieli się trywialnie - przez przesunięcie w prawo.
No dobra, tylko po co te przesunięcia bitowe skoro chodzi Ci o dzielenie? Czy istnieje na świecie kompilator tak głupi, żeby faktycznie dzielenie przez potęgę dwójki realizować "wprost" zamiast przez przesunięcia (na architekturze dla której ma to sens)? Czy zamiast tego: unisigned int mV = ((unsigned long int)ADC * 3300 * 5) >> 10; to nie jest bardziej...
Nie wiem jaki przetwornik jest w AtXmega, nie wypowiem się więc co do stabilności, o której pisał Marek. Ale zakres to chyba żaden problem. Potencjometr podłączam do Vcc i masy przez rezystory i po kłopocie. Jeśli je odpowiednio dobiorę to nawet przeliczenia zakresu mogę uprościć z mnożenia/ dzielenia na przesunięcia bitowe Jak pewnie zauważyłeś tez...
Już rozumiem Mam niestety kolejny problem, teraz odnośnie bitowej różnicy. 11011000111 - 1735 01011001000 - 712 ___________________________ 10000001111 - 1039 lecz: 1735 - 712 = 1023 Bitowa alternatywa działa na zasadzie dodawania bitów, przesunięcie w prawo/lewo wydaje mi się działać na zasadzie dzielenia/mnożenia. Tylko odejmowanie bitów trochę ciężko...
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 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
jeżeli nie potrzebujesz drastycznej dokładności np zadowolą ciebie częstotliwości 1khz / potęgi 2 (1kHz, 500Hz, 250Hz, 125Hz...) to ja bym to tak zrobił: #define MOTOR_PORT PORTC; #define MOTOR_DDR DDRC int main(void) { MOTOR_DDR = 0xFF; while(1); return 0; } volatile uint8_t wsp[8]={1,2,4,8,16,32,64,12...
mam problem z przesunięciami bitowymi i nie wiem jak sobie z tym już poradzić. prosta funkcja, zamienia pierwsze cztery bity z ostatnimi czterema. edit: pomyłka
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...
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)....
Przesuwanie w lewo jest realizowane na dodawaniu wartości samej do siebie (w asmie instrukcja lsl to alias do add, rol to alias do adc) więc bajt jest uzupełniany zerami. Przesunięcie w prawo jest dzieleniem przez dwa bez reszty, przesuwając w prawo liczbę bez znaku (lsr) wartość będzie uzupełniana zerami, ale przesuwając liczbę ze znakiem (asr) bajt...
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...
Dim T1 As Single Dim T2 As Single A co to? "Przesunięcia bitowe" na liczbach zmiennoprzecinkowych? Zamień single na int i powinno śmigać. Procedury obliczeńna liczbach zmiennoprzecinkowych pożerają mnóstwo miejsca. Dzielenie liczb całkowitych w bascomie AVR robi się za pomocą \, a nie /, ot taka ciekawostka. Użycie / powoduje wykonanie tego dzielenia...
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...
hmm faktycznie..... czyli przy drógim dzieleniu trzeba mianownik podzelić prze 256, usunąc młodszy bajt i w jego miejsce wpisac starszy a msb trzeba by wyzerowąć. tylko że wtedy powstaną przekłamania:/ nieduże i tylko po przecinku ale tego juz chyba nie przeskoczymy, gdyż brakuje dokładności Dodano po 12 chociaż jest sposub na to drógie dzielenie, zeby...
Tu jest taki dość "przyjazny" algorytm, bez dzielenia i mnożenia, ale potrzebne są instrukcje przesunięć logicznych, porównywania, oraz AND i OR http://www.cp.eng.chula.ac.th/~krerk/pub... Jest jeszcze coś takiego, myślę, że Ci będzie pasować. Liczy pierwiastek z 32 bitowej liczby naturalnej (n), wynik w root: root=0 for(N=15;...
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,...
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ć...
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.
Szkoda, że nikt (ze studentów) nie wpadł na to, że wystarczy jedna funkcja, by przedstawić wczytaną wartość w dowolnym systemie pozycyjnym. Chodziło tu o uzmysłowienie sobie ("odkrycie"), że wartość liczby nie jest trwale związana z jej reprezentacją i nie ma znaczenia to, jak liczba jest fizycznie reprezentowana w pamięci komputera. Dlatego było tak...
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...
gaskoin --> przede wszystkim nie zamierzam się z tobą kłócić, ale zdecydowanie się nie zgadzam, że kwestia przesunięć bitowych i to jeszcze jak człowiek nie wie co to PA3, to jakieś podstawy typu mnożenie czy dzielenie albo dodawanie wcale nie mogą się temu równać. Dla ludzi którzy nie mieli do czynienia z językiem C nigdy wcześniej to czarna magia....
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...
Kalibracja zera to za mało - żeby odtworzyć ch-kę potrzebne są conajmmniej dwa punkty, czyli trzeba zrobić np. dla 0 i dla 500omów. Jaką charakterystykę ? Prawo Ohma jest linowe, podajemy dokładnie skalibrowany prąd np. 1 mA, odczytujemy wartość w rejestrze ADC, mnożymy przez napięcie odniesienia i dzielimy przez 1024 (10 przesunięć bitowych w prawo)...
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...
Wywaliłem generator 1MHz i tak jak Ty napędzam zegar sida z mikrokontrolera (DS ma funkcję clock out na timerze 2, w przeciwieństwie do 8051, można to wykorzystać jako dodatkowy kanał do dźwięku, jednak tylko z falą prostokątną, już kiedyś tak kombinowałem). Dzięki za radę, zawsze prostszy układ. Muszę tylko podłączyć 2 piny ze sobą by na wolnym porcie...
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...
funkcja random generuje tzw. liczby pseudolosowe wg wzoru (tzw. generator kongruencyjny) : function Random:real; begin seed:=(A*SEED+B) mod C; Random:=seed; end; Gdzie SEED - wartość początkowa, po włączeniu komputera zwykle inicjowana odczytem zegara sytemowego. A, B, C - duże liczby pierwsze mod - reszta z dzielenia. Okres takiego generatora (po tylu...
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) =...
Daj sobie spokuj z dzieleniem liczb 16bitowych w 8 bitowym procesorze, bo jeśli nie chce Ci się zrozumieć tego banalnego algorytmu zamiany na BCD to na pewno nie będzie Ci się chciało przekopać przez algorytm dzielenia liczb dwa razy dłuższych niż procesor ;) Algorytm jest bardzo prosty, przesuwasz w lewo a to co odpada wrzucasz do jednostek, robisz...
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 :)... Mnożenie od razu wiadomo że służy mnożeniu. A skoro Ty wiesz że zamiast mnożyć można...
masz źle zrobione rzutowania, przesunięcia i dzielenia, to na pierwszy rzut oka: float temp=0.0; temp = (float)(((uint16_t... | (((uint16_t)temp2)&l... chcesz zmienne 8 bitowe przysuwać o 8 bitów to musisz je rzutować na typ 16 bit - inaczej tracisz cały bajt. Ponadto durgą zmienną...
ok to juz kapuje jak wyciagnac pojedyncza cyfre teraz jak mniej wiecej moze wygladac procedura przeksztalcenia liczby np 4 cyfrowej na pojedyncze cyfry? dzielic to po kolei przez 1000, 100, 10 a pozniej zapisywac ilosc tysiecy, ilosc setek, itd? dzielenie jest 'ciezkie' - lepiej zrobic petle z wykorzystaniem odejmowania. przynajmniej takie jest moje...
(at)_jta_ Mylisz pojęcia: choć przepełnienie w 'wd' występuje nadal; W języku C są dla wda pojęcia: 1. Przepełnienie - występuje jedynie dla integerów ze znakiem - i jest to Undefined Behaviour 2. Przekręcenie licznika (wrap around) - tylko dla integerów bez znaku W twoim przypadku zmianna wd się nie przepełnia. Przepełnienie występuje w wyrażeniu...
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...
(at)kris8888 Nie... Znacznie coś większego... W telegraficznym skrócie: 32-bitowy procesor obsługujący około 150 różnych instrukcji stałoprzecinkowych, posiadający sześć trybów adresowania, dwa oddzielne stosy: użytkownika i nadzorcy, osiem rejestrów uniwersalnych, osiem rejestrów adresowych, cztery rejestry segmentowe. Trzy tryby obsługi pamięci RAM...
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...
W standardzie C aż tak duże zmiany nie zaszły. Tu nie mówimy o jednej stałej, a o wyrażeniu z mnożeniem i dzieleniem. Kompilator musi zachować wstzelkie skutki działań, z gubieniem nadmiarów włącznie, dlatego np. nie może sam zastąpić mnożenia x przez 1000 i dzielenia przez 1000 operacją pustą, jeśli nie ma pewności, że wartość x nie spowoduje nadmiaru...
kedzi1 - ten sposób też zadziała, ale łamie zasady tzw. nakładania się wskaźników. Poczytaj o "pointer aliasing". Kod z unią może jest dłuższy, ale przynajmniej jasny i dla kompilatora, i dla programisty. snow - Przyjrzyj się dokładnie przykładowi z tabelki, którą przytoczyłeś na początku tematu. Jak dla mnie prawidłowy odczyt danych z tego przetwornika...
Witam, Napisanie programiku który konwertuje liczbę jedno- bajtową binarna na BCD jest dość proste i zajmuje to nie wiele cykli procesora. Niestety kiedy usiadłem do napisania konwersji 16 bitowej liczby, już na samym wstępie zauważyłem, że prawdopodobnie procesor wykonać bedzie musiał tyle operacji, że spowolni to prace całego urządzenia i nawet użytkownik...
Moim zdaniem odmierzać 24 godziny trzeba w miarę dokładnie - inaczej z dnia na dzień będzie narastało przesunięcie pory zadziałania. Czyli wypada użyć generatora z kwarcem - może zegarkowym 32768 Hz, bo o taki w miarę łatwo. Do tego CD4060 (to jest generator z układem dzielenia częstotliwości przez 2^14 = 16384) i mamy sygnał 2Hz, albo CD4045 (podobny,...
Wielomian opisuje ciąg 17-bitowy, ale jest to poprawny zapis - jeśli liczyć crc z definicji, traktując dane jako wielomian x-tego stopnia (gdzie x to liczba bitów), to przy dzieleniu aby reszta była wielomianem 16 stopnia (16 bitów), generator musi być stopnia o jeden wyższego. Do implementacji na rejestrze przesuwanym odrzuca się najstarszy bit. Co...
Czyli będzie to wyglądało przy deklaracji: ChannelMUX Nie tu mają byc wartosci jakie chcesz wpisać do rejestru ADMUX if(ConversionResults Nie. 3 to przypadkowa zbierzność. << 3 oznacza razy 8. taka przyjałem wartosć o filtra. Moze byc to dowolna liczba większa od 1. wzór wtedy bedzie = (ADCW * (liczba)) - wtedy odejmowanie ponizej powinno byc...
Witam szanownych specjalistów od przetwarzania sygnałów. Potrzebuję do realizacji pewnego projektu zastosować najlepiej niedrogi procesor DSP umożliwiający: - bardzo skuteczne filtrowanie sygnału - pomiary przesunięcia fazy, mnożenie, dzielenie przebiegów - praca z 8 sygnałami jednocześnie w czasie rzeczywistym,częstotliwość niewielka - rzędu dziesiątek...
Szum termiczny w pomiarach analogowych jest zazwyczaj wartością pasożytniczą, wpływającą negatywnie na pomiar. W związku z tym powinno się go unikać za wszelką cenę w naszych urządzeniach. Filtrowanie wejścia, odpowiednie projektowanie płytki drukowanej i schematu prowadzenia masy to krytyczne czynności które trzeba wykonać aby zaprojektować poprawny...
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...
Witam, Oprogramowywanie AD9850 trzeba zacząć od funkcji obliczającej 'tunning_word', 32-bitowej reszty z dzielenia częstotliwości ustawianej DDS przez częstotliwość referencyjną (najczęściej 125MHz). Dla zachowania dokładności nie liczymy słowa sterującego jako mnożnik rastra. Przykładowo mój DDS ma dokładną częstotliwość referencyjną 125 001 320 Hz...
Program wygląda dużo lepiej. I = 1wread(2) pobiera dwa bajty w których znajduje się temperatura. Polecam zajrzeć do karty katalogowej DS18B20 str.4. W I znajdzie się liczba 16 bitowa, gdzie pierwsze 4 bity to znak, następne 8 bitów to część przed przecinkiem, a cztery ostatnie to to co po przecinku. Liczby ujemne są w kodzie U2. S = I / 16 Powyższe...
Problemem okazały się brak mocy procesora, stąd wyższy poziom optymalizacji pomógł go, przynajmniej tymczasowo, rozwiązać. Dalej jestem ciekaw czemu tak się stało, mimo poszlak, że procesor tej wolnej mocy powinien mieć więce Nie podałeś jakim zegarem taktujesz procek (XMEGA domyślnie to 8 MHz, ale można max 32 MHz), Zegar taktowany jest 24MHz. Wynika...
Logiczne i arytmetyczne w prawo działają tak samo (wsuwają z prawej zero, a bit z lewej idzie w kosmos). Logiczne w lewo wsuwa z lewej bit zerowy, a skrajny prawy bit leci w kosmos. Arytmetyczne w lewsu z lewej wsuwa kopie najstarszago bitu, a z bit prawy leci w kosmos. Odwrotnie. Arytmetyczne w prawo sluzy do dzielenia signed numbers, a logiczne w...
Dziękuje za ten jakże profesjonalny wpis, ale jak się to ma do migania żarówki? Chciałem zaznaczyć, że nie konstruuję wehikułu czasu, czy tam napędu międzygwiezdnego, tylko losowy przerywnik obwodu, do migania żarówką. Wrzuciłem to co napisałeś _jta_ do Groka i poprosiłem o wyjaśnienie. Oto co przygotował w... 4 sekundy: Autor opisuje sposób generowania...
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...
Dla początkujących http://www.pascal.eu.org/index2.htm Powiedzmy, że masz zmienną wejściową x typu longint: Konwersja szesnastkowa: 1. zapisujesz x w zmiennej pomocniczej xp 2. wydzielasz 4 najniższe bity xp (and 15) i tak powstałą liczbą adresujesz sobie zmienną tekstową Hx zdefiniowaną jak niżej: { const hx:string='01234546789ABCDEF'; } pamiętając,...
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]
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ć...
modern C++ A co to jest? Czy jest ancient C++? Ja pisze w archaicznym C, aż dziw że nie mówię po sumeryjsku ;) "Shift-and-add-3 algorithm" Chciałbym przetestować podaną metodę z przesuwaniem bitów, której ideę rozumiem, bo przetestowałem na piechotę na kartce, ale nie potrafię tego zapisać w C Taki sobie kod roboczy, czyli powinien działać, choć może...
Wzmocnienie wzmacniaczy zmienia ci tylko jeden współczynnik przez który mnożysz/dzielisz w programie, nie ma się czym przejmować. Czy czułość masz określoną dokładniej, niż rezystory ustalające wzmocnienie wzmacniacza? Bo jeśli nie, to nie ma powodu robić ponownej kalibracji po zmianie wzmocnienia. Czyli jeżeli na przykład czułość wynosi 175mV/g, to...
https://obrazki.elektroda.pl/7246994600_... Dzisiejszy projekt będzie opierać się o Arduino. Pokażę tutaj jak uruchomić kontroler wyświetlacza/klawiatury ze starego tunera sat w oparciu o jego notę katalogową oraz bibliotekę Wire z Arduino. Poznamy szczegóły jego interfejsu szeregowego opartego o linie SDA i SCL i spróbujemy przygotować...
Jeżeli między znakami masz jedną kolumnę odstępu, to na pierwszej stronie będą dwie, a nie jedna kolumna z drugiego znaku, no ale to szczegół ;) Nie wiem, jak masz zapisaną "czcionkę". Jak na moje oko, to może być po bajcie na każdą linię i takich linii 7, jedna po drugiej, potem następny znak itd. Nieużywane bity (te z prawej, znaki wyrównane sa do...
Nie zmienia, bo masz błąd w innym miejscu. Dokładnie to miałem na myśli-że błąd jest gdzieś indziej. Zastanów się, co oznacza nazwa trybu CTC (?) – w ang. jest to ‘Clear Timer on Compare’ (pol. - wyzeruj zawartość licznika/timera, gdy jego zawartość jest równa wyznaczonej z góry i ustalonej, bądź to wyliczonej jakiejś wartości w zmiennej...
no właśnie na podstawie tego drugiego kursu udało mi się napisać tyle ile widzisz... Jasne rzucę okiem na to raz jeszcze, ale tu chodzi o to, że z gościem mieliśmy tylko 3 zajęcia w ciągu semestru a on wymaga od nas nie wiadomo czego... Dlatego proszę żebyście chociaż tyle byli w stanie zrobić za mnie. Już ponad tydzień się z tym morduje :P Dodano po...
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...
Witam wszystkich Elektrodowiczów! Muszę podłączyć wyświetlacz alfanumeryczny LCD 2x20 na sterowniku HD44780 do mikrokontrolera LPC1769 w trybie 4-bitowej transmisji danych. Wyświetlacz mam podłączony przez konwerter napięć KAMAMI Development Boards Logic Converter ST2378E. Stronę Vl (napięcie logiczne) prowadzę z płytki LPCXpresso LPC1769 (+3,3 V),...
Oczyściłem nieco kod, zablokowałem domaganie się pilota Grundig o zmianę baterii oraz przede wszystkim dodałem obsługę pilota RC6. Przy odczycie Trailer bit występuje pewien problem, ale przy ustawieniu odpowiedniego czasu odczyt pilota działa prawidłowo. Na razie jest obsługa trybu 0, sprawdzanie trybu jest zhaszowane dla testów - pilot od HP Pavilion...
Przede wszystim, jesli oczekujesz pomocy, musisz podac na jaki procek ten assembler. Po komendach widze ze nie jest to x86, czyli PCet. Byc moze chodzi o jakis mikrokontroler. Nie wiem czy wiesz, ale assembler nie ejst przenoscym jezykiem i nie ma jakies jego standardu - w przeciwienstwie do Ansi C czy pascala. Dalej nie wiem czy wiesz, ze nawet jesli...
Hej. Czuję się dziwnie, kiedy ktoś usiłuje mi tłumaczyć jak działa system binarny i robić tabelki... kiedy ja usiłuję dociec (i zrozumieć) nie ile to 7(ma) potęga liczby 2 tylko dlaczego ma być akurat siódma. Idąc za ciosem: Od razu zauważyłbyś że w ośmiu bitach zmieści się wartość 256..to za dużo więc bierzesz siedem bitów i ..bingo 128! Fajnie. Ale...
Znalazłem jeszcze kilka błędów w swoim kodzie. Chodziło o warunki mniejszy i równy gdzie powinno być tylko mniejeszy. Zmiana znaku z <= na < dała ten rezultat, że liczby Fibo będące także liczbami Pierwszymi były zaliczane do podzboru tylko raz. Co dało lepsze przybliżenie wyszukiwanej złotej liczby Phi. Teraz program działa znacznie szybciej......
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...
Stałej F_CPU nie definiuje się w kodzie. Robi się to w ustawieniach kompilatora, szczególnie, że korzystasz z opóźnień za pomocą funkcji _delay_ms(). http://mikrokontrolery.blogspot.com/2011... Dodatkowo, jeśli chcesz, żeby procesor taktowany był zegarem 16MHz, to taki kwarc zewnętrzny musisz podłączyć oraz ustawić odpowiednie...
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...
A jaka duża ta liczba ? bo jak maks 10bit, to w prościutki sposób można to zrobić na jakiejs 51, bo wtedy pierw dzielimy przez 4 przesunieciem bitowym, a pozniej operacja DIV przez 15. Jesli to ma być podzielenie jakiegoś sygnały przez 60 (częstotliwość) to się znajdzie jakiś układ HC. Licznik z komparatorem. Pozdrawiam Boogie
http://obrazki.elektroda.pl/1852929500_1... http://obrazki.elektroda.pl/5115381900_1... Mimo upływu lat w dalszym ciągu lubię od czasu do czasu odświeżyć sobie w pamięci elektroniczne brzmienia lat 80tych, kiedy to po raz pierwszy miałem okazję usłyszeć „syntetyczną” muzykę pochodzącą z wielkich drewnianych...
https://obrazki.elektroda.pl/6510354700_... Witajcie moi drodzy. Pokażę tu wnętrze inteligentnego gniazda Tuya LSPA9 które oferuje pomiar zużytej energii elektrycznej oraz sterowanie przez WiFi, a następnie omówię jego wewnętrzny protokół komunikacji z układem scalonym mierzącym energię elektryczną. Następnie pokażę jak zaimplementowałem...
przesunięcie bitowe portach przesunięcie bitowe atmega8 przesuniecie bitowe
adapter kasety schemat kosztorysy elektryczne whirlpool kontrolka
pilot uniwersalny samokopiujący pilot uniwersalny samokopiujący
Odblokowanie radia Opel Signum bez kodu Jak połączyć Xbox 360 RGH z Xbox Live bez bana?