czy Crossworks jest taki madry, aby sam potwierdzac przerwania w ich ISRach? w kazdym z nich brakuje przypisania dowolnej wartosci do rejestru VIC odpowiedzialnego za adres... osobiscie nie sadze, aby Crossworks zalatwial to sam, bo w koncu oparty jest na gcc, ktory tego nie zalatwia. bez tego kolejne wywolanie przerwan nie bedzie mozliwe raczej......
dalem korekcje CRC i czas miedzy pomiarami 1s.. gdy oziebiam schodzi do 11.5 i koniec ... crc nie przepuszcza dalej chyba w takim razie.. od czasu do czasu pojawiaja sie wtedy wyniki przerozne 27.5 -87.5 +33.0 niewiadomo skad... przy starcie pokazuje temperature prawidlowa... jak zwiekszam tez (nie probowalem wiecej niz 10 st) chociaz przy przycisnieciu...
SendSpi(17UL << 11);
Słabo wiedzę ten procesor jeżeli pytania są na takim poziomie. Może jakaś literatura o architekturze procesora/komputera najlepiej taka z lat 70/80-tych XXw bo tam rozwiązywano takie problemy. Oczywiście można próbować stworzyć opis ALU zadając pytania na forum ale chyba podręcznik nie jest celem dla forum. Co do problemu Jeżeli rejestr ma oddzielne...
Vitling , przeczytaj ten artykuł [url=http://mikrokontrolery.blogspot.com... i zerowanie bitów, powinien Ci pomóc w zrozumieniu przesunięć bitowych. Zerknij też na [url=http://mikrokontrolery.blogspot.com... mikrokontrolerow...
1. Eliminacja niepotrzebnych skoków tu i tam. Da się to zrobić inaczej - patrz CPSE, SBIC, SBIS. 2. Brak podstawy czasu - impulsy nie będą zawsze równe w czasie. Użycie licznika bardzo wskazane. 3. Brak synchronizacji zmiany stanów na portach - możliwe przesunięcia fazowe. 4. Skąpe komentarze. Za dwa dni nie będziesz wiedział co, jak i dlaczego tak.
Nota, co prawda dla AVR, ale te same reguły obowiązują dla innych USART. Pobieranie prowizji punktowej za publicznie dostępne i darmowe materiały jest sprzeczne z etyką i regulaminem forum. Załącznik usunąłem i dodałem link to źródła.
1. Podstawowa ramka rds to 104 bity podzielona na 4 bloki po 26 bitow. Te bloki są podzielone na 16 bit danych i 10 korekcji błędów ex-or przesunięcie. Każdy z 4 bloków ma inne bity przesunięcia, blok 3 ma 2 rodzaje bitów przesunięcia, zależy czy idą dane typu A czy typu B. Mamy początkowe słowo korekcji błędów = 00h sprawdzamy poszczególne bity danych....
Próbowałem też rzutować - również źle A konkretnie jak? Tak próbowałeś: [syntax=c] time.data |= (1ULL<<58);[/syntax] ?
XOR to nie jest odejmowanie. negacja z dodaniem jedynki a pozniej OR to jest odejmowanie. Żebyś lepiej zrozumiał, xor nie daje ci przesunięcia, w związku z tym jeśli przesuniecie w działaniu powinno nastąpić to xor nie zadziała jak odejmowanie. przykład: 12 - 8 = 4 i 12 xor 8 = 8, to tak jak byś w systemie dziesiętnym próbował odjąć od 2 liczbę 8. Jeśli...
Kolega wyżej już wyjaśnił ja dodam jeszcze, że tego typu prostych błędów jest więcej: http://mikrokontrolery.blogspot.com/2011... Druga uwaga, to zdecyduj się - albo stosuj makro _BV(), albo przesunięcia bitowe (1<<x). Ja sugeruję tę drugą wersję.
Powiedzmy, że jest zmienna 64-bitowa (long long int). Do tego mam 4 liczby 16-bitowe. Jak wpisać te 4 liczby po kolei do zmiennej 64-bitowej? | 64bit | = | 16bit | 16bit | 16bit | 16bit | Rozumiem, że trzeba to zrobić przesunięciami bitowymi ale właśnie coś nie chce mi to iść gdy np zrobię to w ten sposób: long long int w = 0; w = (1000 <<...
Tak też myślałem, ale wtedy tracę te 8 bitów. Ale przy rzutowaniu też tracisz i to te o najwyższej wadze a przy przesunięciu te najmniej znaczące. Czy jest potrzebna dokładność większą niż 16 bitów? Jak ograniczysz sygnał wejściowy do 16 bitów to osiągniesz podobny efekt do przesunięcia a może być gorzej bo po stłumieniu sygnału stosunek sygnał szum...
Ustaw wszystkie bity FTH w rejestrach FCR, zarówno dla RX jak i dla TX. To jest pierwsza rzecz którą zauważyłem w Twoim kodzie, która u mnie jest zrobiona inaczej. Natomiast druga - kluczowa - też już była wspomniana: Postraj się używać definicji zawartych w pliku opisowym danego układu. Wpisywania i odczytywanie tych zer i jedyne z przesunięciami przyprawia...
Napięcie w gniazdku też pływa. Porównałeś z innym woltomierzem?
UL to jawne zdefiniowanie stałej jako należącej do typu unsigned long (kiedy kompilator nie jest w stanie tego domniemać z wartości, jak w tym przypadku). Podobnie L to typ long a LL to typ long long (rozszerzenie gcc). Ewentualne wyjaśnienie szczegółów: W AVR gcc typ int ma 16 bitów. I taki jest domyślny typ stałej 1. Jeżeli kompilator nie promował...
Napisz z jakiego kompilatora korzystasz i na jakim poziomie optymalizacji kodu wynikowego. Jeśli chodzi o standardy C to ISO99 mówi o ujemnym przesunięciu bitowym " the behavior is undefined" i właśnie dlatego lepiej unikać takich operacji. Jeśli koniecznie musisz być przygotowany na ujemne przesunięcia może utwórz własną funkcję: [syntax=c] uint8_t...
Witam! Czy ktos moglby mi jak krowie na granicy podać zasade przesuwania bitow arytmetycznie i logicznie( z jakims przykładem) Myslalem ze wiem jak sie robi ale jednak na zadaniach sie wykładam. pozdrawiam
a moze ktos bardziej szczgolowo napisac jak korzystac z tej opcji .db ?? walcze z wyswietlaczem graficznym i nie moge sobiez tym poradzic wyswietlacz dziala ok, moge wysylac na niego pojedyncze bajty, zdefiniowalem tez z jakich bajtow po kolei sklada sie dana cyfra np .DB $0F,$0F,$30,$30,$30,$30,$30,$30,$0F,$0F,... ale nie wiem jak przeslac te poszczegolne...
Problem rozwiązany - nie przypatrzyłem się, że odwrotnie mam ponumerowane wyświetlacze do "mej" koncepcji.
(at)GrzegorzKostka Przez jednych nie są, przez innych są - gdyby wszyscy ich nie lubili to by ich nie było :) Prosty przykład, żeby ktoś kto czyta ten wątek mógł sam zdecydować. Czy zapis poniższego kodu bez pól jest czytelniejszy? Dodano po 16 BTW, co do wypowiedzi Linusa - oni w kernelu stykają się z sytuacją o której pisałem na początku - wiele...
Przetestowałem rozwiązanie zaproponowane przez Kolegę nsvinc . Napisałem swój program testowy tak: adc_value=adc->dat; jest równoważny zapisowi: adc_value=*adc.dat; ?
Po pierwsze to po resecie mikrokontrolera piny są ustawione jako wejścia więc nawet nie trzeba tego robić Po drugie to kierunek ustala się za pomocą rejestru DDRx a nie PORTx (to nie Bascom) Po trzecie to musisz doczytać jeszcze o przesunięciach bitowych bo szybko na tym polegniesz w C. To podstawa. Po czwarte to klawisze (słicze) musisz mieć albo podciągnięte...
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...
Witam Jak rozumiem zgodnie z teorią języka C dla AVR [syntax=c] PORTB |= (1<<PB5); [/syntax] jest równoznaczny z PORTB = PORTB | (1<<5) czyli dla PORTB = 0xF0 (0b11110000) wynikiem 11110000 | 00010000 jest 11110000 czyli 0xF0. Logiczne Ale jak należy rozumieć [syntax=c] Tryb |= (0x10 << Wartosc); [/syntax] gdzie zarówno Tryb jak i...
Qmexx: a jakiego wyniku oczekujesz? Nawiasy nic tu nie dają, bo dochodzi do promocji typu do int, a po tej promocji operacja negacji przesunięcia jest tożsama z operacją przesunięcia zanegowanej wartości.
Witamy kolegę. Jak widać na naukę nigdy nie jest za późno. Cyfrowy świat nie jest tylko dla młodych. M. S. 52l. Nie znam narzecza arduino ale zapoznaj się z pętlą for, której przebieg "programuje" się na konkretną ilość razy. Np. [syntax=c]for(x=0;x<X;x++) { } //Rozpocznij od x=0; jeśli x<X ponownie wykonaj pętlę i zwiększ x o 1, w //przeciwnym...
Przesunięcia bitowe są prostsze
1. VRef + kondensator, Vcc można wybrać jako VRef programowo. 2. To zależy od rozdzielkczości ADC, dla 10 bitowej masz zakres 0..2^10-1 3. To fragment niepotrzebny, gdyż pisze się po prostu dana=ADC lub ADCW. << to operacja przesunięcia bitowego.
No to musisz mieć dane jakieś zasady postępowania. Bit przeniesienia to ten bit, który "wypada" jak wspomniałem. Opcje też wymieniłem, przepada, ustawiana bliżej nieokreślona zewnętrzna flaga C lub pojawia się z drugiej strony po przesunięciu. Jest jeszcze kwestia tego, co się dzieje po drugiej stronie przesunięcia, zwykle jest dopełnianie zerami, jedynkami,...
eeeh no bo zapomniałem przed każdą nazwą bitu dodać uint8_t czyli ma być uint8_t z0:1 uint8_t z1:1 itd - spróbuj Dodano po 1 Ma to działać tak, że po podłączeniu 5v do PA0 zapali się dioda podłączona do PC7, a jeśli nie to zapali się dioda podłączona do PC6. Eeeee - no to na prawdę nie wiem po co ci te pola bitowe ;) - toż to przesada na maxa - chociaż...
Probuję oprogramować kość DDS (AD9835); częstość generowanego sygnału programuje się wysyłając cztery razy 16bitowe słowa, w każdym słowie jest 8 bitów tworzących 32 bitowe słowo określające bezpośrednio częstość. Tego za bardzo nie rozumiem. 16-bitowe słowo, które ma 8 bitów? Czy chodzi o to, że poza danymi o częstotliwości wysyłane jest coś jeszcze,...
Mnożenie przez 3 odpowiada sumie danej wartości i jej przesunięcia o jeden bit w lewo (co odpowiada mnożeniu przez 2). x * 3 = x + x << 1 Dlatego użyłbym 7 (wejście pierwszego bitu połączone będzie bezpośrednio z wyjściem) [url=https://pl.wikipedia.org/wiki/Sumat... opakowanych dla czytelności w bloki (jak np. [url=http://kalitka.dhs.org/tc/cw6.html]...
Chyba normalnie, tj. przez polozenie i nr_serwa, jednak takie nienazwane unie i struktury są niezgodne z ISO C. Radziłbym używać nazwanych, kod będzie wtedy czytelniejszy i przenośny. Standard nie gwarantuje też sposobu przydziału bitów w polach bitowych. Jeśli jest to określone w ramach WinAVR i zaznaczysz, że kod działa tylko w WinAVR, to ok. W ogólnym...
Cześć, mam pytanie jeżeli chodzi o rejestry oraz taki zapis [syntax=cpp]DDRD |= (1<<PD1)[/syntax] Rejestr DDRD jest 8 bitowy i rozumiem, że na początku wygląda tak: 0000 0000 używamy operacji sumy bitowej. Nie rozumiem tylko zapisu przesunięcia bitowego w lewo (1<<PD1). PD1 jest jedno bitowe i ustawione na początku na 0 ? Przesuwamy 0000...
Operacja iloczynu logicznego oraz przesunięcia w prawo np. interesuje Cię bit 4 a jakimś rejestrze X i zapisać go na 2 bicie portu D push X //odłóż na stos and X,b00001000 //interesujacy nas bit 4 ror X,2 //ror - rotacja w prawo z wpisywaniem 0 na początek X=000000Z0 (Z - czwary bit odczytany z rejestru X na 2 bicie) z 4 miejsca na 2 wiec 2...
Nasuwa mi się myśl - jeśli ważne jest, by te ADC były taktowane symultanicznie i jednocześnie zbierały dane, to z tego co wiem SMT32F7 ma 3 ADC które mogą pracować w trybie równoległym. W pierwszym poście pisałeś coś o 4 ADC. Tu już by trzeba użyć kanałów poszczególnych ADC i wówczas chyba nie da się tego zrobić symultanicznie i pojawią się przesunięcia...
Dzięki za podpowiedź ;) Ale szczerze mówiąc to siedzę już nad tym trochę i nadal mi nei wychodzi ;/ [syntax=java] class przesu { public static void main(String args[]) { int a=256; Integer.toBinaryString(a) System.out.println(" Pierwsze przesunięcie będzie wyglądało następująco :" + (a>>=a)); System.out.println(" Kolejne przesunięcie będzie wyglądało...
A nie jest tak, że po przesunięciu pojawiają się 0? 1111 << 2 = 1100 Najstarszy bit tracony, najmłodszy uzupełniany o 0. Ale to nie chodzi o to co pojawia się po przesunięciach z tyłu (LSB) tylko o to co jest z przodu (MSB) Spróbuj coś takiego: [syntax=c]XYZ[0] = (axis[1]<<8 | axis[0]) if( XYZ[0] & 0x00008000 ) XYZ[0] |= 0xFFFF0000;...
;* ;***************************************... ;*PROCEDURA WYLICZANIA SUMY KONTROLNEJ Z NUMERU SERYJNEGO UKŁADU 1-Wire ;***************************************... ;* ;* ;*******************************OPIS****... ;*Kolejne bajty numeru seryjnego...
Dziękuję koledze LordBlick, poprosiłem go o odblokowanie tematu, bo wydaje mi się, że mimo pozornej prostoty problemu warto się nad nim chwilę zastanowić. Zanim przejdę do odpowiedzi na post #3, powiem dwa słowa o makrodefinicjach. Wiele osób z nich chętnie korzysta, w pokazanym wyżej przykładzie zdecydowanie lepiej posługiwać się makrami LED_ON i LED_OFF...
Kod wygląda na prawidłowy, jedynie zmieniłbym fragment wpisu do rej. 16-to bitowych dla pewności.... OCR0SBH=0x00; OCR0SBL=0x00; OCR0RBH=0x0F; OCR0RBL=0xFF; OCR0SAH=0x00; OCR0SAL=0x00; OCR0RAH=0x0F; OCR0RAL=0xFF; while(1);
Zmienna 'potega' jest również typu uint32_t , wartości przesunięcia występują w zakresie od zera do 19 i w żaden sposób nie powinny wyjść poza zakres tego typu zmiennej.
co to robi: int foo(uint32_t a) { a = a ^ (a >> 16); a = a ^ (a >> 8); a = a ^ (a >> 4); a = a ^ (a >> 2); a = a ^ (a >> 1); return a & 1; } Wstępna ocena dostępnych informacji Przedstawiony kod to funkcja `foo`, która przyjmuje jako argument 32-bitową liczbę bez znaku `a` (`uint32_t`). Funkcja wykonuje szereg operacji bitowych na tej liczbie i zwraca...
Po prostu po przesunięciu dodajesz bitwo 1 do wyniku przesunięcia:-)
1 jest typu int więc jest 16 bitowa Dokładnie, po prostu pierwszy argument w wyrażeniu przesunięcia x : ( x << y ) jest 16-bitowy , więc jeśli chcemy użyć 32-bitowego - to trzeba zrobić rzutowanie typu.
Przy operacjach bitowych dobrze czasem pomagać sobie przesunięciami Np. 1 << 0 oznacza bit 0 (wartość 1 - szesnastkowo 0x01) 1 << 1 oznacza bit 1 (wartość 2 - szesnastkowo 0x02) 1 << 2 oznacza bit 2 (wartość 4 - szesnastkowo 0x04) .. 1 << 31 oznacza bit 31 (wartość 2147483648 czyli szesnastkowo 0x80000000) Zamiast kombinować...
Nie wiem jak się zabrać do tego zadania. Książka od Javy do ręki i czytasz. Poszukaj informacji na temat reprezentacji liczb binarnych, dziesiętnych i szesnastkowych, oraz o przesunięciach bitowych. Tyle mniej więcej powinno Ci wystarczyć do rozwiązania tego zadania.
ja się tam nie znam ... ale nikt nie odpowiada więc wtrącę moje dwa grosze.... stosując operator<<(rezystor) kompilator spodziewa się, ze będzie to wykorzystywane do operacji na bitach. Ty natomiast używasz to do wrzucenia wyniku w strumień. musisz przeciążyć operator strumienia a nie przesunięcia bitowego: (...) friend ostream & operator<<...
tyle ze wtedy nie jest przesunieciem, a rotacja [; pozatym w C nie da sie zmusic procka do zrobienia rotacji. 4\/3!!
ustawianie bitow maskowane bitow sprawdzanie bitow
astra usterki wycieraczki przełącznik kolumna kierownica schemat skrzynia automatyczny
odbiornik superreakcyjny podłączenie radia blaupunkt
Opel Meriva 1.3 CDTI 2006 – podwyższone obroty jałowe 900 rpm zamiast 800 rpm – przyczyny Dell G16 7630 i7-13650HX RTX 4060 – utrata peryferiów po sprężonym powietrzu