Wtedy jest traktowana jako liczba bez znaku, a nie konwertowana na bez liczbę znaku. Konwersja a traktowanie to co innego. Pozatym konwersja nie była by możliwa skoro liczba jest ujemna. Możliwe jest jedynie policzenie modułu (wartości bezwzględnej).
Prubuje i nadal nic. Zrobiłem jeszcze w prostszy sposób czyli nagrałem makro jak zamieniałem " ." na "" ale niestety po odpaleniu makra z liczy 1.200,000 tworzy sie 1200000 Nie wiem co dalej zrobić.....
Kod który opisujesz nie jest kodem U2, tylko kodem SM (znak-moduł). Jeśli chodzi o konwersję to jest prosta, ale jest kilka szczegółów: 1) w jakim kodzie jest cecha liczby zmiennoprzecinkowej? W 754 jest to kod z obciążeniem, czyli 0 binarnie = maksymalna wartość ujemna. 2) Czy masz opuszczać wiodącą 1 w mantysie? Konwersja przebiega tak: normalizujesz...
napisz w języku verilog prosty moduł, w którym na wejście podawane są ośmiobitowe liczby zapisane w kodzie uzupełnień do dwóch a na wyjście te same liczby zapisane przy pomocy kodu znak-moduł. Oto przykładowy moduł z opisem, który działa na ośmiobitowych liczbach w kodzie uzupełnień do dwóch i konwertuje je na kod znak-moduł: ``` module konwersja (...
Błąd jest w konwersji dekoder pokazuje to co dostaje na port . W programie brak inicjalizacji stosu . Konwersję tego typu łatwiej wykonywać odejmując od wyniku konwersji wartość przetwornika stałą i inkrementując liczbę operacji odejmowania do chwili otrzymania wartości zerowej lub ujemnej . gdy pozostała wartość będzie mniejsza lub równa zero liczba...
Witaj, Z materiałów, które zostały mi z zajęć na studiach: "Inną metodą konwersji Qm na liczbę dziesiętną jest przedstawienie liczby binarnej w postaci liczby całkowitej ze znakiem i podzielenie jej przez 2^m. np. w notacji Q7 0 100 1001 = 73(10) / 2^7 = 0,5703125 w odwrotnym przypadku mnożymy liczbę którą chcemy przekonwertowań na standard Qm przez...
Jedno pytanie, system w jakim jest zamieniana liczba to U1. W większości architektur liczby ujemne reprezentowane są w kodzie U2. Konwersję U2 -> U1 pozostawiam Tobie :) Pozdrawiam, Dr.Vee
4V w wyniku biorą się najprawdopodobniej z błędnego przetwarzania kodu z ADC na wyświetlaną wartość. Zgaduję, że w przypadku gdy kod wyjściowy ADC jest liczbą bliską zera ale ujemną następuje 'przepełnienie' i wyliczenie błędnego wskazania. Zwróć choćby uwagę że otrzymałeś wynik praktycznie tożsamy z 4,096 czyli 2xFSR Nie wiem jak wynik konwersji ADS1110...
Hmm ... strony temu poświęcone: https://support.office.com/pl-pl/article... https://support.office.com/pl-pl/article... rzeczywiście powielają "analogiczne" wyniki z "minusami" dla liczb tego typu, wyniki inne niż w...
Cecha EA = -22 Cecha E6 = -26 wg algorytmu który podałem w moim pierwszym poście 0100 0000 0000 0000 0000 0000 * 2^(-22) 01,00 0000 0000 0000 0000 0000 = 1.0 kg -1kg 1100 0000 0000 0000 0000 0000 * 2^(-22) wniosek: najstarszy bit określa znak liczby, 1 - ujemna, 0 - dodatnia 0.1 kg 0110 0110 0110 0110 0110 0110 * 2 ^ (-26) 0,00011001100110011001100110...
W powyższym przykładzie dla avr wychodzi (0x93E0) dlatego, że zmienna x jest traktowana jako "signed" (i dla x=60 000 jest już liczbą ujemną). Trzeba zadeklarować: uint16_t x; i można na wszelki wypadek rzutować obie zmienne na typ long. u mnie u16 to właśnie uint16_t czy jak kto woli unsigned int więc Twoja teoria o liczbach ujemnych jest błędna....
Użyłeś funkcji itoa - czyli integer na ascii - natomiast ICR jest typu unsigned, w efekcie każda wartość większa niż 32767 będzie wyświetlana jako ujemna. Użyj funkcji konwersji liczb bez znaku.
Co trzeba rzerobic w programi zeby obsługiwało temperatury ujemne?? Sprawdź czy bity 11-15 (bity 3-7 starszego bajtu) są równe 1. Jeżeli tak, to oznacza liczbę ujemną. Dokonaj wtedy konwersji : zaneguj wszystkie bity (z obu rejestrów) i dodaj 1 (pamiętaj o ewentualnym przeniesieniu). Dalsza interpretacja liczby jest taka sama jak dla temperatur dodatnich,...
tak samo jak konwersja bin->dec, tylko odejmujesz kolejne potęgi liczby 16, czyli: 1. Od zadanej liczby odejmujesz sukcesywnie 16*16 i zliczasz liczbę odjęć aż do uzyskania liczby ujemnej. Do uzyskanej liczby odjęć dodajesz jeden i już masz starszą cyfrę hex. 2. Do uzyskanej liczby ujemnej dodajesz 16*16 3. Odejmujesz sukcesywnie 16 i zliczasz liczbę...
Ostatnio też potrzebowałem przekonwertować i znalazłem w Pomocy Excela potrzebne informacje: DEC2BIN (liczba;miejsca) Liczba to dziesiętna liczba całkowita, która ma zostać konwertowana. Jeżeli liczba jest ujemna, argument miejsca jest ignorowany, a funkcja DEC2BIN zwraca 10-znakową (10-bitów) liczbę binarną, w której najbardziej znaczący bit jest bitem...
Zacząłbym od tego: Otrzymujesz wartość zmiennej temperatura równą np. 1871819,25. Jak przemnożysz to przez 16 to okaże się, że wyrażenie (temp1 + (temp2*256)) zwraca wartość 29 949 108. Teoretycznie zmienne temp1 i temp2 nie powinny przyjmować wartości większych od 255, więc wartość maksymalna wyrażenia (temp1 + (temp2*256)) = (255 + (255*256)) = 65535....
Witajcie, jak przekonwertować poprawnie wartość z czujnika temperatury ds18b20 w postaci dwóch liczb typu uint8_t, które odpowiadają części całkowitej i ułamkowej, do postaci jednej zmiennej typu int16_t? zakres liczby ułamkowej to 0-9, zakres liczby całkowitej jest 8-bitowy. Wartości ujemnych nie ma.
(at)szwagros Pusty projekt z tą biblioteką zajmował 450 bajtów. [syntax=c] #define F_CPU 8000000UL #include <avr/io.h> #include "moje/itoa.h" #include <stdint.h> void rsPrintInt(uint16_t liczba ) { char buffer[10]; itoa( liczba , buffer, 10); } int main(void) { rsPrintInt(123456); while(1) {} } [/syntax] Usunąłem z niej analizę znaków ujemnych...
ee no musiało pomóc, sprawdzałem u siebie i kod się zmniejszał o kilka kB pokaż jakim poleceniem ze wszystkimi flagami jakie używasz kompilujesz kod dla tych zmiennych równych 134 i 1: LS Byte: 10000110 MS Byte: 00000001 w MS Byte pięć najważniejszych bitów wskazuje na znak - zera to dodatnia, a jedynki to ujemna trzy najmłodsze bity z MS Byte i cztery...
temp2temp jest tylko do sprawdzenia, wykluczenia tego, że to zmienna decicelsius2 jest winna wykrzaczaniu temp2, co pokazało, że nie, bowiem w temp2 i w temp2temp przy wykrzaczeniu są inne wartości. Co do zmiennej licznik, to ona się ma nie zerować, ponieważ liczę średnią temperaturę przez cały czas działania urządzenia, a więc potrzebuję sumę wszystkich...
Już kiedyś pisałem tutaj o konwersji bin->bcd. Są na to specjalne algorytmy. Ponieważ nigdy mi się nie chce ich szukać, konwersję przeprowadzam metodą łopatologiczną: 1. Odejmuję od zadanej liczby 1000 tyle razy, aż uzyskam wynik ujemny. Liczba odejmowań (pomniejszona o jeden) daje cyfrę tysięcy. 2. Koryguję liczbę po odejmowaniu (dodając z powrotem...
Nie odpowiedziałeś na pytanie Rariusz'a czy TIA Portal, ale zakładam, że tak. DINT_TO_STRING to precyzyjne wywołanie S_CONV, ale tylko w SCL'u. Różnica w wywołaniu jest taka, że w LAD/FBD dopełnia łańcuch znaków spacjami do rozmiaru liczby wejściowej (DINT do 2 miliardów ze znakiem czyli 11 znaków, przy czym tylko do ujemnych doda minus), w SCL nie...
o może policz, zamiast gdybać? Nie gdybam tylko komentuję Twój głupi pomysł. Klucz może mieć 200mA, jak się spali to wymieni, łatwiej niż wymieniać procek i jest to zgodnie ze tzw sztuką inżynierską. A tak a propos sztuki, właśnie znalazłem błąd w twojej książce w liczeniu temp 1wire w dallasie dla ujemnych temp, dla -10.12 twój przelicznik daje -10.875....
Witam. Mam zmienna double którą chcę skonwertować do liczb całkowitych bez znaku (tylko 0 i dodatnie) - (arduino 023) [syntax=c] double d = cap; unsigned long x = (unsigned long) d; [/syntax] W tej postaci wyświetla liczby bez ułamków od 0 wzwyż poprawnie, natomiast jeśli cap jest minimalnie ujemny to zamiast pokazać 0 przekręca się na 429496 - chciałbym...
Ależ w funkcji lcd_int() nie masz nic wspólnego z rzutowaniem zmiennych a szczególnie float. Jest tylko zamiana liczby binarnej na ASCII za pomocą wbudowanej funkcji ITOA (Integer To ASCII) zastanów się jakie zakresy liczb może pomieścić typ int (czytałeś o typach ? - spróbuj zajrzeć do tabelki bo masz taką w książce na 1000%) to po pierwsze wyjaśni...
Jak widzę na twoim układzie to liczba ujemna przesyłana jest na konwersję a co sie dzieje w przypadku liczby dodatniej, którędy będzie szła. Dodatnia liczba w u2 jest taka sama jak w znak-moduł, więc tylko idzie na wyjście. Mi jest potrzebny układ tego typu co teraz zamieściłem. Tylko ma parę błędów. Ciągle myśle jak to poprawić. Załączam algorytm konwersji...
Cześć Program działa następująco Zmienna pomocnicza jest zerowana następnie ze zmiennej DM47 i 48 przesyłana jest zmienna podwójne BCD do DM58 i DM59 ponieważ zmienna jest typu podwójne BCD to składa się z ośmiu cyfr. Najbardziej znacząca cyfra w tej liczbie reprezentuje znak. funkcja ANDW służy do odfiltrowania właśnie najbardziej znaczącej cyfry (dlatego...
(...) (2) + " PLN" }; } return msg; } else { node.warn("Brak danych do obliczeń! Upewnij się, że msg zawiera rce_pln i Wh jako liczby."); return null; } Mam taką funkcję która oblicza Wh i cenę rce_pln ale razem z wynikiem zwraca błąd i nie wiem dlaczego. (at)ElektrodaBot Bezpośrednia odpowiedź na pytanie Najczęstszym powodem zwracania błędu „Ujemna...
1. Stosuj komentarze co robisz w danym kroku a jeszcze lepiej coś znaczące (dla czytającego kod) nazwy zmiennych/funkcji. Np. co to jest: [syntax=c] int liczba= sizeof napis/sizeof*napis; [/syntax] 2. Deklaruj zmienne w momencie kiedy ich potrzebujesz a nie wszystko na raz na początku funkcji. 3. Stosuj 'const' tam gdzie to jest możliwe. To upraszcza...
Przetwonnik zlicza napięcia tylko do 2047, pokazując ujemne napięcie nie ma znaku minus i wartość, tylko np 65320. Czyli przetwornik zwraca wyniki w kodzie U2. Tam nie ma znaku minus. Jest za to przesunięcie poziomu. Najprościej mówiąc, zastosowanie takiej funkcji do konwersji: Napiecie = Zmierz1 * 256 Napiecie = Napiecie + Zmierz2 da Ci złe wyniki....
Witajcie, mam problem przy konwersji liczby 16-bitowej ze znakiem do liczby 16-bitowej bez znaku. int16_t xx; uint16_t yy; yy = (uint16_t) ((((-1)*(xx))<<1)-1); Kiedy wartość xx przekracza mi 16384, wartość yy przybiera wartości ujemne od -32768 rosnąc do zera. Co robię źle?
A co to za cudaczne obliczenia :wink: ... unsigned char wynik1=0; unsigned char wynik2=0; wynik1=read1w(); wynik2=read1w(); reset1w(); float temp=0; if((wynik2)!=0){ //temp ujemna wynik1=~wynik1; temp=wynik1+1; //dlaczego /2 i gdzie się podział wynik2 ? temp=-temp/2; //??? } else{ //temp dodatnia...
to z returnem (co w końcu tam ma stać?) Nic nie musisz zwracać. Funkcja przecież zwraca dane zapisując je do tablicy przekazanej jej jako parametr. po co dawać długośc miejsca na rzymską? Bo skąd funkcja wywoływana ma wiedzieć ile jest wolnego miejsca w tablicy, którą dostaje? Jeśli nie przekażesz rozmiaru, to funkcja wywoływana i wszystkie funkcje...
while(scanf("%s", dzialanie)) czy to poprawna funkcja jesli dzialanie to tablica char ? Nie. Zauważ, że scanf zwraca liczbę przetworzonych konwersji, lub EOF w przypadku gdy nie wykonano żadnej konwersji lub błędu wejścia wyjścia. Zgodnie ze standardem wartość EOF jest ujemna. Poprawnie byłoby w takim przypadku: while(scanf("%s",...
Czy można przez konwersję BCD wyciągnąć znak (temperatura dodatnia/ ujemna) Wynik zczytywany jest do zmiennej Integer(nie Single, żeby od razu odciąć część ułamkową) dalej poprzez BCD uzyskuję liczbę dziesiątek i jedności. Wszystko działa tylko jeśli temperatura spadnie poniżej 0, zaczyna liczyć od końca. W jaki sposób można oddzielić znak "-" ze zmiennej...
Błędne informacje na temat obciążenia silnika, czyli otwarcia kątowego jej? Naciągana teoria - obciążenie silnika to wartość wyliczana, kąt otwarcia przepustnicy - mierzona, to dwa różne parametry. Jak by był błąd w programie , to by ciągle był minus. Bo niby skąd on się bierze? Czemu zmienia się z wartości dodatniej na ujemną? Nie mówię, że tak jest...
Funkcja ta coś tam robi, operuje na danych i ma zwrócić wynik. Chciałbym móc jakoś sprawdzać czy funkcja wykonała się prawidłowo. Niby można by zrobić tak, że gdy funkcja zwraca wartości większe lub równe 0 to wtedy jest ok, a gdy zwróci np. -1 to znaczy, że jest jakiś błąd. Ale problem w tym, że wynikiem tej funkcji, może być też wartośc ujemna i...
W Twoim przypadku jak widać zadziała jak autor chciał. Ale to nie C więc "implementation defined" nie ma zastosowania. Tomek, jeśli nie chcesz dzielenia to [syntax=c] int a=-34; int b; long c; b=(long)a>>4; // Niejawna konwersja long->int obcięcie złych bajtów c = b; // Promocja do long jeśli konieczna, jeśli nie to "c" niepotrzebne [/syntax] Powinno...
Witam! Mam problem z konwersja i wyswietlaniem liczb ujemnych. W przerwaniu µC sprawdzane sa dwa klawisze: +, - Jak sama nazwa wskazuje zwiekszaja one lub zmniejszaja wartosc. Wartosc jest z zakresu od -55 do +125. Zliczanie wartosci dodatnich dziala, nie dzialaja wartosci ujemne. Zmienna SwitchesCounter (licznik) jest waroscia signed char...
Nie, przecież to jest garść drutów - skąd narzędzie ma wiedzieć jak ma zrobić dodawanie na garści sygnałów? No jakaś automatyka w syntezerze jest. Może to wydedukować jakoś :D Ale jak bity maja reprezentowac liczby? Jak kodujesz wartosc ujemna? Czy to jest format zmiennoprzecinkowy czy staloprzecinkowy? A moze IEE754? Zapoznaj sie z biblioteka numeric_std,...
Cześć max4elektroda, Przetestowałem wersję dev (dev_20241203_072219), a następnie najnowszą (1.17.794) i otrzymałem ten sam wynik, nadal błąd. Zmieniłem również liczbę kanałów (0 na 2) bez efektu. To jest komunikat o błędzie w wersji dev_20241203_072219: Info:SENSOR:D S1820[0] - Rozpoczęcie konwersji Info:SENSOR:D S1820[0] - Temp=23.12 Error:SENSOR:D...
siedze, kombinuje, odpinam, przypinam kabelki...i ciągle jakieś cuda niewidy....przed chwilą sprawdziłem na kompie stacjonarnym i zaczęło śmigać elegancko, a zdaje się, że i wcześniej było identycznie połączone wszystko. Co najciekawsze....i tu popisałem się jako elektronik :P ....otóż moja płytka testowa wyposażona jest w MAX232 i cały czas byłem przekonany,...
prosty błąd: uint16_t t; powinno być int16_t t; - bo odczyt z DS jest liczbą ze znakiem w kodzie U2. if (t < 0) { znak = '-'; t = -t; // zamiast tajemniczej negacji z dodaniem jedynki, która robi to samo, ale za to magiczniej } A dalej poszukaj, leniuszku - jeszcze dwa kroki.
Ponieważ odczyt z tablicy w maluczkich uC zajmuje "dużo" flash i czasu też, dlatego nie ma odczytu z żadnych tablic. A w tych gdzie ciąg ląduje w ram, zużywa ją niepotrzebnie. Na szczęście choinka if then else zajmuje zero bajtów i zero instrukcji oraz wykonuje się w ujemnym czasie. Proponuję najpierw sprawdzić obie wersje na min. 2 platformach, a...
Mam też wątpliwości, czy val <<= (sizeof(val)*8) - size; jest bezpieczne. W zasadzie, to mam wątpliwość, czy to w ogóle działa. To sprawdź!!! W zasadzie, to ma kolega rację. Wszystko zależy od tego, jak zostanie zinterpretowany argument size . Moim zdaniem na takie zastosowanie nazwa argumentu nie jest szczęśliwa. Wiele osób może...
Problem rozwiązany. W datasheet zalecany jest rezystor podciągający ok. 5k. Jednak dalej, jest informacja, że podczas niektórych operacji (m.in. przy konwersji temperatury) zapotrzebowanie na prąd, może wynieść 1,5 mA. 5V/5kohm = 1mA max. Zmiana rezystora na 3,3k rozwiązało problem. Szkoda tylko że maxim jest mało konsekwentny w swojej dokumentacji...
Co do zaokrąglania, wystarczy dodać 0.5 przed konwersją do int-a (odjąć dla liczb ujemnych).
Cała trudność polega na wczytaniu liczby ujemnej i zapisaniu jej binarnie. Pokazanie tego w Hex proponuję załatwić 16-znakową tablicą cyfr, indeksowaną połówkami bajta (4 bity). Przy większej liczbie bajtów (potem słów 16 bitowych, itd) pamiętaj o odwrotnej kolejności: młodszy - starszy.
Cześć, Chciałem przedstawić wam bardzo krótki i niecodzienny program, z którego stworzyłem mam duży problem. Próbowałem różnych rozwiązań, szukałem pomocy na różnych forach, książkach... Jesteście ostatnią deską ratunku. To jest moja playlista HLS (.m3u8). Lista zawiera 9-cio sekundowy fragment filmu, który jest zaszyfrowany i odtworzenie go bezpośrednio...
To jest dosyć ciekawy temat - tradycyjne dzielenie liczb jest czasochłonne bez sprzętowego układu dzielącego. Dlatego ludzie upraszczają sobie życie stosując dodatkowe algorytmy, działające dla określonych dzielników. Dla dzielenia przez kolejne potęgi liczby 2 wystarczy przesuwać rejestr w prawo. Z kolei przytoczona przez Ciebie procedurka dotyczy...
A czy ktos wie, jaka może być przyczyna. Jeśli czujnik będąc na 5 cm przewodach i z rezystorem 4k7 pokazuje poprawnie temperatury ujemne. Ale już na 3 metrowym przewodzie i tym samym rezystorze pokazują się krzaczki. Rezystor zmieniałem na 2k2 i dalej te same krzaczki. Niewiem co jest grane, do konwersji i wyświetlenia używam tego: a = ((temp2...
Dziękuję za sposób z long'ami. przynajmniej liczba ujemna mnożona przez siebie daje dodatnią:) w tym przypadku nie zależy mi ani na prędkości ani na objętości kodu, po prostu mam moduł MODBUS na atmega32 i tkneło mnie aby zrobić także barometr. Zajmuje to razem 24% FLASH'a a tempo działania programu niezbyt mnie interesuje ( a niech nawet sobie to minute...
W takiej notacji, że każda cyfra jest w osobnej komórce tablicy, problemem jest obsługa wartości ujemnych. Najłatwiej jest operować na kodzie uzupełnienia do dwóch. Wtedy wyliczanie przeniesienia nie jest skomplikowane. Tutaj możesz zastosować algorytm pisemnego odejmowania, przy czym najniższe cyfry trzymać pod niskimi indeksami, aby można było działania...
Przydała by się eliminacja pustych łańcuchów znaków, więc zastąp "licznik++" kodem: if (strcmp(liczby[licznik].... "\0") != 0) licznik++; Ponadto możesz inaczej pobierać dane z klawiatury: /* pobranie początkowego ciągu znaków, zapisanego tylko znakami dozwolonymi "q0-9A-Fa-f", tj. q, cyfry oraz znali...
Szesnastobitowa liczba bez znaku oraz ze znakiem w kodzie uzupełnień do dwóch, będzie przyjmowała następujące wartości: uint 0 = int 0 = 0x0000 = 0b0000 0000 0000 0000 uint 32767 = int 32767 = 0x7fff = 0b0111 1111 1111 1111 uint 32768 = int -32768 = 0x8000 = 0b1000 0000 0000 0000 uint 65535 = int -1 = 0xffff = 0b1111 1111 1111 1111 Trzeba stworzyć dwa...
Witam! Mam problem z konwersją int do char*. Potrzebne mi to jest do wypisywania liczb na LCD. Napisałem działający kod jednak nie jest on zoptymalizowany i jest taktochłonny... Czy nie dałoby się tego inaczej rozwiązać? Mam takie funkcje wyświetlające: void lcd_putc(char c); void lcd_puts(const char *s); Funkcja wyświetlająca liczby:...
Zanegowac liczbe, potem dodac 1, to jest dla liczb ujemnych. Dla dodatnich zostawiasz bez zmian
NO okazalo sie bledne polaczenie ale teraz pytanie takie dlaczego jest tak If T <= 2000 Then ' temperatura dodatnia T = T / 16 ' przeliczamy do ludzkiej postaci Else ' temperatura ujemna T = 65536 - T ' przeliczamy T = T / 16 T = 0 - T End If Return End Sub dlaczego akura jest warunek <= 2000 a nie jakas inna liczba Dlaczego T/16 a nie naprzyklad...
Witam, wczoraj napisałem (w zasadzie to skopiowałem z tego poradnika:[url=http://www.botched.co.uk/... podstawowy programik do obsługi MPU6050 i uwaga(!) - odczyt z żyroskopu był poprawny ( problem był z przesyłem przez UART, ale napisałem jakąś funkcję, która zamienia zmienna typu int na tablice char i...
Witam Jeśli temp jest zmienną zawierającą temperaturę odczytaną z ds18b20 to jest to zmienna 16 bitowa ze znakiem. W związku z tym proponuję: - odczytać najstarszy bit (znak) i gdzieś go zapamiętać - jeśli liczba jest ujemna (MSB = 1), wykonać bitową negację i dodać 1 W tym momencie wykonanie operacji przesunięcia bitowego o 4 w prawo zwróci wartość...
Witam Co do procedury "val" to Help się kłania. Służy ona do zamiany ciągu znaków na liczbę. Ma ona tą zaletę że zwraca kod błędu konwersji. Nie wiem jak wygląda ten program z książki ale jeżeli ramka danych się nie zmienia to można zrobić np tak: _temperatura_ := StrToInt(Copy(_bufor_, _pozycja_ , _ilosc_znakow_)); gdzie: _temperatura_ : to wynik zamiany...
Pytanie tylko, dlaczego jego post znalazłem w koszu? Wiadomość skasowałem sam. racając do tematu: Informacja o znaku ujemnym zapisana jest zawsze na najstarszym bicie. Wrzucając liczbę 16-bitową do 32-bitowej, informacja o znaku już nie jest na ostatnim bicie, tylko na 16-stym, a LongInt ma tą informację na 32 bicie. Mam rację? Nawet jeśli mam, to...
Załączam sprawdzoną, działającą bibliotekę do 1-Wire. Opóźnienia są policzone dla kwarcu 16MHz. Skoro Ty wykorzystujesz kwarc 1MHz to wystarczy, że podzielisz przez 16 argumenty funkcji opóźniających. Jakbyś miał z tym problem to napisz. Gratis dorzucam też sprawdzoną i działającą funkcję do odczytu i konwersji temperatury z czujnika DS18B20. // odczytanie...
Włączam kalkulator programisty w windows 7. Ograniczam sobie ilość bitów do 16. Zaświecam bit MSB. zaświecam bit LSB, bit 1 i bit 2. Odpowiada to dzięsętnej liczbie -32764. Następnie, w celu edukacyjnym, bawię się bitami 14,13,12 i 11. Postać dziesiętna tej liczby się zmienia. Nieprawdą jest więc to, że wystarczy sprawdzać bit MSB, bo pozostałe 4 bity...
Obydwie 'zjechały się' dopiero po wielokrotnych jawnych rzutowaniach!. Błąd. Ale czy mój? No wszystko ma jakieś swoje wytłumaczenie :) Jest raczej niemożliwe, aby jakiś normalny kompilator C (w szczególności gcc) nie respektował elementarnych zasad niejawnych konwersji, takich jak promocja do typ float, gdy jeden z operandów jest typu float lub rzutowanie...
Prawda READ. A co do tej konwersji to już kiedyś napisałem jak to zrobić, zaraz znajdę post. Znalazłem. Jeśli temp jest zmienną zawierającą temperaturę odczytaną z ds18b20 to jest to zmienna 16 bitowa ze znakiem. W związku z tym proponuję: - odczytać najstarszy bit (znak) i gdzieś go zapamiętać - jeśli liczba jest ujemna (MSB = 1), wykonać bitową negację...
a jej wynik to Kod: -06:40:00 Ten zapis wskazuje, że nie jest to wartość liczbowa (czasu :D ) tylko tekst :idea: :!: Nie uda Ci się nigdy (bez konwersji) dodać liczb do tekstu :please:
spróbuj też zamienić kod: signed short b = (8<<data[0]|data[1... na: signed short b = ((data[0]<<8)|... (źle wykonane przesunięcie w lewo) - resztą powinien zająć się kompilator. Nie chcę się czepiać, ale używanie w jednym wyrażeniu typów signed i unsigned nie jest najlepszym...
Witam. Składam sobie zegar z termometrem na Attiny2313 i DS18B20 lecz mam problem z ujemną temperaturą. Do odczytu temperatury używam programu kolegi "Elektrooonik" ponieważ zajmuje najmniej kodu co jest tu dla mnie ważne i z 1-Wire styczność mam pierwszy raz więc wpierw wolę mieć jakiś przykład. Program Oryginalny do pomiaru temperatury wygląda tak:...
Nie rozumiem po co wartości te są mnożone przez 0x3FF, a następnie dzielone przez wartość 0xFFFF. Obstawiam że chodzi o zmianę "zakresu". Jakie są (typ i rzeczywisty zakres) wartości w tym buforze? Zauważ, że mnożenie przez 0x3FF/0xFFFF to po prostu konwersja wartości z zakresu Deklaracja tablicy: Tutaj obstawiam, że chodzi o uzyskanie wartości ze...
(at)Jaca Ponieważ znalazłem trochę czasu postanowiłem wrócić do tematu, ponieważ nadal mam problemy z poprawnym przeliczeniem wartości ramki NMEA (WGS84) na współrzędne obsługiwane przez Google Maps. Odszukałem zastosowanie poszczególnych funkcji: Trunc() - funkcja Trunc zaokrągla w kierunku zera (dla liczb dodatnich oznacza to "w dół", dla liczb ujemnych...
Patrząc na Twój kod zauważyłem że wykorzystujesz funkcję z biblioteki "delay.h". Tymi funkcjami nie uzyskasz dokładnych czasów potrzebnych do obsługi interfejsu 1-Wire po którym komunikuje się czujnik DS18B20. Udostępnię Ci swoją sprawdzoną w 100% bibliotekę do komunikacji po 1-Wire. W tej bibliotece wystarczy dobrać czasy opóźnień dla Twojego kwarcu...
Witam mój program wygląda tak: [syntax=c]#include <stdio.h> #include <stdlib.h> int main() { int n = 0,x = 0; printf ("Prosze podac liczbe dziesietna: \n"); scanf ("%d",&n); if (n<0) printf ("Blad! Podales liczbe: %d, ktora jest ujemna.\n\a", n); else { printf ("Liczba w systemie dwojkowym: "); do { x = n % 2; printf ("%d", x); n...
O kurde zapomniałem :D Jeszcze raz przepraszam. Używam ATTINY 2313 a jako czujnik DS1820 A tu program: Config 1wire = Portd.5 : Dim Odczyt(2) As Byte , A As Byte , Dim T As Integer , Tmin As Integer , Tmax As Integer Deflcdchar 1 , 4 , 14 , 21 , 4 , 4 , 4 , 4 , 32 Deflcdchar 2 , 4 , 4 , 4 , 4 , 21 , 14 , 4 , 32 Do 1wreset : 1wwrite &HCC : 1wwrite...
tzn nie jest to równe 63 ale ok -63.563. i jak bardziej grzeje tym temp maleje i jest ujemna Dodano po 3 ok ..już wszystko jasne...niepotrzebna konwersja z float do double dla dodatnich liczb....
Trzeba prawdopodobnie tylko wyłączyć kursor. Funkcja void LCD_SendCommand(unsigned char ucCommand) komendy zdefiniowane l pliku .h LCD Ewentualnie spróbuj pobawić się kontrastem może uda się go ustawić tak aby nie było bardzo widać przejścia kursora podczas odświeżania. Co do porównania temperatur w bibliotece onewiere.c jest funkcja OW_CompareRawTemperature....
Witam Tworze sobie prosty termometr na wyświetlaczu 7 segmentowym. Napisałem kod w bascomie i wrzuciłem na płytę testowa z atmega32 i śmiga jak trzeba. Kolejnym krokiem było wrzucenie tego na na atmege8 (zmieniłem m32def.dat na m8def.dat i taktowanie na 1MHz ) atmega świeża , fusebity nie zmieniane. No i jak zwykle u mnie to bywa, rzecz nie działa....
Buduję napęd silnika prądu stałego oparty na Atmedze8. I moim problemem jest implementacja algorytmu kaskadowego do sterowania silnikiem, a dokładniej regulatorów PI. (przepraszam za takie "mądre" określenie problemu, ale w ten sposób najłatwiej mi to opisać. Tak czy owak potrzebuje stworzyć program w asemblerze na Atmegę który wykona zadanie regulatora...
https://obrazki.elektroda.pl/7717804000_... Witam wszystkich, Tym razem chciałbym zaprezentować termometr dwukanałowy zasilany z dwóch równolegle połączonych akumulatorów Li-Ion, zbudowany w oparciu o mikrokontroler ATTiny84 i dwa czujniki DS18B20 oraz pozostałe części "z szuflady". Termometr ten służy mi do pomiaru temperatury w pokoju...
Witam, problem tkwi w wyświetleniu temperatury na LCD. Czujnik działa w trybie 12 bitowym. Szczytuje pierwsze 12 bitów z pamięci scratchpada, sprawdzam czy temperatura jest + czy -, a następnie dokonuje konwersji temperatury na string. Na wyświetlaczu pokazują się jednak dziwne rzeczy. Użycie funkcji typu sprintf odpada (zajmuje za dużo miejsca). Konwersja...
poziom:=cisnienie* 10.19716; (*wartosc rzeczywista - przeskalowanie ciśnienia na wysokosc slupa wody*) poziomCentymetry:=TRUNC(poziom*1... (*poziom w centymetrach+ odcięcie czesci po przecinku*) 1. czyli poziomCm = cisnienie * 1019.716, spodziewasz się wartości od 0 do 1000 cm, więc cisnienie < 1.0 bar 2. ciśnienia...
Myślę, że koledzy nie do końca wytłumaczyli o co chodzi. ... Niestety mylisz się. Zarówno typ przyjmowany przez funkcję jak i binarne reprezentacje liczb ujemnych w kodzie U2 są tu bez znaczenia. Spójrz dokładnie na linka którego podałem. Stronka ta to taki "standard języka C/C++ w bardziej strawnej formie". Po kolei. Z rozdziale "Usual arithmetic...
z ta kalibracjo to ciekawy temat ,ale jak podepne czujnik do termometru zrobionego na rs232 to temperature pokazuje idealnie,a ten kwarc to faktycznie 12.902400 ,tylko zmieniłem go na 11,059 oczywiscie tez zmieniając w kompilatorze. Wybacz kolego , ale Cię troszkę "obsztorcuje" :D 1)Twierdzisz , że używasz DS1820 (9-bit) , a temperaturę obliczasz jak...
I jeszcze jedno pytanie. Jak czytać temperatury ujemne ? Chyba zapisywane są one jako U2... czyli muszę czytać 9 bitów, zamiast 8 i sprawdzać stan najstarczego bitu. Jeśli jest równy 1 to obliczam jak U2, a jak równy 0 to z BIN do DEC ? A czy ty z tych dwóch bajtów gdzie jest zapisana temperatura wybierasz sobie tylko 8 bitów? Czyli odczytujesz sobie...
Witam. Jakiś czas temu przerobiłem zasilacz ATX dodając do niego regulacje napięć i prądu. Zasilacz działa jak powinien. Dwa napięcia oraz prąd chcę wyświetlać na trzech wyświetlaczach 7-segmentowych, w sumie 12 znaków. Napięcia są wyświetlane prawidłowo. Mam jednak problem z interpretacją/zrealizowaniem pomiaru prądu. W ujemnej gałęzi napięcia wyjściowego...
Witam. Prosze osoby obeznane w temacie o pomoc w znalezieniu błędu w poniższych podprogramach obsługi termometru. Całe urządzenie ma wyświetlać temperature z dokładnością do 1stopnia Celsjusza. W programie wykorzystuje dwa przerwania : od licz. T0 do wyznaczania sekundy , i po upływie tej sekundy w procedurze przerwania wywołuje procedury : ;upłynęła...
Też kiedyś pisałem w asm ale to było w czasach gdy kompilatory C były drogie i niezbyt inteligebntne. Teraz czasem robię wstawki w asm ale to bardzo rzadki przypadek. Dlaczego wolę C? Np taki kod: [syntax=avrasm]b2d ; konwersja 16-bit bin na dec ; dzielenie przez 1000d = 0x03E8 movlw0x03 movwfxw1 movlw0xE8 movwfxw0 callb2da movwfst1 ; dzielenie przez...
Witam. Mam pytanie dlaczego mój termometr nie działa poprawnie. Zapamiętuję temperaturę maksymalną lecz nie zapamiętuje temperatury minimalnej. Minimalna temperatura jest tylko zapamiętywana tylko przy minusowych temperaturach. Oto program: Config 1wire = Portd.5 : Dim Odczyt(2) As Byte , A As Byte , Dim T As Integer , Tmin As Integer ,...
O zasilaniu czy sprawności kodu nie pisałem z prostych przyczyn: Piszącego w Bascom interesuje tylko to by program działał a nie ciągnął mało prądu (zasilanie bateryjne i Bascom? Nigdy nie słyszałem by ktoś to łączył) Piszącego w Bascom interesuje by progam działał niezależnie czy musi użyć procka z 16kb czy 32kb Ja wolę by program mieścił się w 1kb...
Witam Po przesunięciu w prawo w miejscu gdzie mamy informacje o temperaturze +/- są uzupełniane automatycznie bity 0000 i nie mamy możliwości rozpoznania tego znaku Dlatego stosujemy maskę i wszystko wraca do normy Jeżeli kolega zumek ma inne rozwiązanie to proszę o przedstawienie kilku linijek kodu Jestem ciekaw jak to robią inni Ten kod był sprawdzany...
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...
Witam, Na tej stronie znalazłem opis jak podłączyć czujnik DS18B20 do wyświetlacza LCD http://www.portalnaukowy.edu.pl/termomet... Oto kod: 'Jednopunktowy termometr z czujnikiem DS18B20 'www.portalnaukowy.edu.pl 'Program na podstawie kursu z ksiażki "Mikrokontrolery dla Poczatkujacych" Pana Piotra Góreckiego $crystal = 4000000 'deklaracja...
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...
Czyli o kupowaniu kota w worku i farbowanym lisie słów kilka. Seria ads 1xxx to dość popularne przetworniki w świecie hobbystów. Jest kilka modeli różniących się parametrami. Ja dziś opiszę dwa modele 1015 i 1115. Nie będę opisywał szczegółów konstrukcji bo wszystkie dane są w dokumentacji Zasadniczo to bliźniacze konstrukcje, wszystkie wyprowadzenia,...
BlueDraco - dzięki ale zagiąłeś mnie tym :/ PDT , wielkie dzięki! Działa z moimi modyfikacjami :) i w samym C - czas nie jest dla mnie krytycznym czynnikiem, a aż takie oszczędzanie ażeby sięgać do ASM też mi nie potrzebne. Obsługa wedle twojego pomysłu zajmuje ok ~700bajtów więc nie mam problemu. Wklejam kod z DevC++ gdzie testowałem wraz z wersjami...
Załącz plik ds18x20.c, załączyłeś tylko plik nagłówkowy. Potem będziesz musiał zamienić zmienne cel i cel_fract_bits na tablice i będzie ok. Twoim zdaniem utworzenie tablic będzie zbawienne, może to trafne. Od jakiegoś czasu ma pomroczność i nie mogę się skupić, najprostsze rzeczy stwarzają mi ogromną trudność - to chyba przesilenie. A zatem stworzenie/zamiana...
https://obrazki.elektroda.pl/6203916300_... Pytanie: Jak mogę dokonać pomiaru wartości analogowej, jeśli w moim systemie pozostało tylko jedno GPIO na FPGA/mikrokontrolerze? Odpowiedź: Zamiast przetwornika analogowo-cyfrowego można zastosować przetwornik napięcia na częstotliwość. Ponieważ zapotrzebowanie na funkcje pomiarowe staje...
Najtrudniej analizuje się własny kod, bo zawsze patrzy się przez pryzmat wiedzy o tym co on powinien robić i nie dostrzega się drobnych błędów :) Zgadzam się z tym w 100%. Przy Bascomie rzadko sięgałem do PDF'ów kontrolerów, przy C nie da się bez tego wszystkiego zrobić. Bez tych 500 "przekręceń" licznika nawet w Bascom by nie poszło, jak zwykle zbyt...
No to jedziemy dalej :) Problem polega na tym, że nie bardzo chcą działać przyciski P_tryb, start, stop. O ile opóźnione działanie P_tryb jest chyba związane z trzema komendami WAITMS 330 w pętli głównej, to nei rozumiem dlaczego dwa pozostałe przyciski niezbyt chcą być obsługiwane. To jest tak, że jak przytrzymam dłużej, to czasami zaskoczy, a czasami...
Niedawno miałem podobny problem i kolega ZUMEK mi pomógł przerobił swój program na moje potrzeby może tobie sie przyda do wyciągniecia wniosków u mnie działa bezproblemowo: $regfile = 89c2051.dat $crystal = 11059200 Const Displays = 4 ' liczba wyswietlaczy LED Const Cyclespushall = 45 'ilosc cykli od przepelnienia T0 , do jego "przeladowania" Const...
konwersja liczba konwersja liczba rzeczywisty konwersja liczba stringi
blaupunkt uderzenia sprawność klimatyzatora lampowy przedwzmacniacz gramofon
zasilanie festynu zasilanie festynu
Moc silnika pralki Amica AWCE 12 DA - szczegóły Żarówki panelu nawiewu w Toyota Camry 1999