Może Frac ?
Witam Szanownych Kolegow... Czy posiada ktos moze opracowana procedure dodawania liczb calkowitych (wprowadzanych z klawiatury) w Bascom? Liczby sa 2 cyfrowe. Poczatkowa liczba jest zero. jesli mam operacje dodawania, wynik jest zwiekszany i zapamietany, podobnie z odejmowaniem... Bardzo prosze o pomoc.
Chyba jednak nie ta instrukcja. Dzięki formatowi mogę uzyskać to że nie będzie przesuwało napisu Cool1 = Cool * 0.1953125 Cool2 = Fusing(cool1 , "#.#") Cool2 = Format(cool2 , " ") Tak masz rację, na symulatorze nie działa. Przy aliasach chyba jest błąd, dwa razy przypisy do tych samych pinów. [syntax=basic4gl]Ac Alias Pinb.0 Ss Alias Pind.7 Sg Alias...
tak jak pisał kolega wyżej 34/10=3 (pod warunkiem deklaracji jako liczba całkowita) 34 mod 10=4
Witam "integer" nie jest zmienną tekstową. Integer przyjmuje watrtość liczby całkowitej w zakresie od- 32768 do +32767 Integer nie zapisuje ułamków.
Dokładnie tak jak mówi Fredy - kiedyś w jednym z projektów na Atmega8 miałem już praktycznie całą pamięć zajętą i po przejściu tylko na liczby całkowite zyskałem ponad 0,5kb
Dobrze jest pisać jaka wersja Bascom bo czasem rozmowa jest bezcelowa jak ktoś używa ver 1.1 coś tam spolszczonej. Funkcja Round zaokrągla do najbliższej wartości czyli z 2,4 zrobi 2 a z 2,6 zrobi 3 Jeśli chcesz zwykłą zmienną to wystarczy przepisać wartość z Single i program zrobi automatyczne rzutowanie i obetnie to co po przecinku. Kwestia potrzeb...
Mea culpa zapomniałem że mega8 ma wewnętrznie podciągnięte AVCC do VCC. Dodano po 4 A jak oblicza się to 0.0048? 5/1024=0.0048. Więc 1024/5= 204.8 z tym że operujemy na liczbach całkowitych więc 205.
Nie do końca tak jak myślisz . Jeżeli liczba ma mieć postać xx,x to zamiast np. 12,5 * 3 = 37,5 do obliczeń biorę liczby 125 i 3 . Wynik 125*3 = 375 Jeżeli w programie mam ten wynik porównać z liczbą 35,0 to porównuje z 350 ( napisz program operujący na liczbach zmiennoprzecinkowych a potem na całkowitych i porównaj rozmiar i szybkość działania , wykonując...
Witam Chciałbym z liczby np. 34 Uzyskać dziesiątki i jedności Robię sobie coś takiego: Dim A As Byte , B As Byte , Wart As byte Wart = 34 Wart = Makebcd(wart) A = Wart And &B00001111 Shift Wart , Right , 4 B = Wart I w zmiennej A mam jedności a w zmiennej B mam setki. Chciałem sobie teraz zrobić tak z liczbami większymi od 99(liczby 3 cyfrowe)...
Witam! Mam tu taki kawałek kodu: Dim Tick_time As Single Dim Length As Single Dim Mps As Integer Dim Fps As Integer Dim Fff As Single Dim Tick_count As Integer Dim Czas As Single Tick_time = 0.000096 Czas = Tick_count * Tick_time Mps = Length / Czas Fff = Length / Czas Fff = Fff * 10 Fps = Fff / 3 Tick_count = 0 Cls Lcd Mps Lcd " m/s " Lowerline...
A np. logiczne zero w NECu to 560us wysoki i 560us niski. Żeby mieć liczbę całkowitą, to muszę użyć 10us. Czemu nie można ustawić przerwania od razu co 560µs?
To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą? No to w końcu chcesz mieć liczbę całkowitą w zmiennej zmiennoprzecinkowej czy liczbę całkowitą w zmiennej całkowitej? Jak to drugie, no to Round: Dim Co2_w As Single Dim Co2_int As Long ... Co2_int = Round(co2_w) Niezgodnie z Helpem BASCOMa,...
Łopatologicznie to by było tak... Masz zmienną o nazwie np. LICZBA=123 i chcesz z niej wyodrębnić setki, dziesiątki i jedności... Musisz stworzyć nowe zmienne typu całkowitego, np. SETKI=LICZBA/100 --> (123/100 = 1,23 zmienna typu całkowitego utnie te 23 po przecinku i zostanie 1 --> SETKI=1) DZIESIĄTKI=(LICZBA/10)-(SETKI*10) --> (123/10=12 --> 12-1*10=2...
A jeszcze mam takie pytanko o zaokrąglenia ponieważ funkcja ROUND nie do końca prawidlowo działa. Powidzmy otrzymuję wynik liczbowy z przetwornika ADC, dzielę go przez powiedzmy 3 i mnożę przez 100. Liczba po przeliczeniu to powiedzmy 325.4286. Jeśli zastosuję na tej liczbie funkcje ROUND mój wynik to 325 .0 Nie mam pojęcia jak się pozbyć tej kropki...
Namoje szczęście mnożenie ma być przez liczby całkowite Ale mnożenie przez liczby całkowite też będzie z błędem. Nie podaję częstotliwości i innych szczegółów- na tym etapie jest to nie istotne. To akurat jest bardzo istotne. Do wysokich częstotliwości trzeba inaczej podejść. Podaj chociaż bardzo przybliżony zakres. I powiedz czy wymagana jest stuprocentowa...
Po prostu wyobraź sobie, że liczysz na liczbach całkowitych, a jednostką jest jedna dziesiąta, czyli jedynkę zapisujesz jako 10, a półtora - jako 15.
Bash zna tylko liczby całkowite. Można wykorzystać bc, na przykład tak (porównanie do 1.23): [syntax=bash][ $(echo "$(exec 3</dev/ttyAMA0 && echo "S" >/dev/ttyAMA0 && head -1 <&3 ; exec 3<&-)" " < 1.23" | bc) = 1 ] && echo prawda || echo fałsz[/syntax] Ale to wyglądałoby lepiej jako skrypt, a nie jedna...
Doszedłem do ładu z tym, cała funkcja jest napisana prawidłowo i skrajne zakresy zawsze powinne się pokrywać niezależnie od obliczeń na liczbach całkowitych. Błąd był jedynie w zapisie złych zmienny do eepromu...
A bo bascom to taki kaszaniasty trochę jest jeżeli chodzi o wydajność i dzielenie za pomocą '/' wykonuje jako zmiennoprzecinkowe, czyli obie liczby na zmiennoprzecinkowe zamienia, dzili i wynik zamienia na format docelowej wartośc (i tu chyba jest coś skopane). Natomiast dzielenie za pomocą '\' to dzielenie na liczbach całkowitych, o wiele szybsze.
Czyli masz już w systemie przerwania zgłaszane ze stałą częstotliwością, zapewne na poziomie przynajmniej kilkuset Hz. Oznaczamy tę częstotliwość jako f. Mamy zmienną a - długą i całkowitą. Inicjujemy ją na 0. W każdym przerwaniu timera: - Dodajesz do tej zmiennej liczbę kroków na 10 s (czyli od 1 do 99) - Jeśli wartość tej zmiennej przekroczy 10*f,...
Jest to kod z Pana Wiązani być może nieudolnie przerobiony. Oryginał ma tak: Dim licz_8ms As Byte Incr Licz_8ms If Licz_8ms = 125 Then ............. I to działa, czyli ja nie mogę używać liczby stałoprzecinkowej . No dokładnie. To działa tylko dla Byte (i podobnych). Chociaż typ danych Single mówi, iz może przyjmować wartości stało i zmiennoprzcinkowe....
Więc pytanie zasadnicze. Jak zaokrąglić otrzymany wynik zmiennoprzecinkowy w bascomie AVR? Wykorzystywanie liczb zmiennoprzecinkowych do odczytu temperatury z DS18B20 jest lekko mówiąc mało rozsądne, zwłaszcza że "po przecinku" może być tylko 16 różnych wartości. Takie rzeczy to się zaokrągla na etapie pisania programu, który potem operuje wyłącznie...
Wszystko się da zastąpić liczbami całkowitymi i zawsze, pamiętaj o tym:) Co do przeliczenia napięcie -> ciśnienie -> patrz datasheet a pewno to tam napisali...
Działasz na liczbach całkowitych tylko. Pisałem, że sekundy co 2 tylko taka dokładność. Zmienna typu word.
Stosuj zasadę 2 jednostki = 1 stopień, tak jak ma to miejsce w np. DS1820. Temeratura dzielona przez 2 daje rzeczywistą wartość, a reszta równa jeden oznacza wtedy połówkę. Dzięki temu wszystko zapisuje się na liczbach całkowitych, co oszczędza pamięć.
Zwykle bardzo łatwo jest zastąpić operacje na liczbach zmiennoprzecinkowych, operacjami na liczbach całkowitych. U ciebie w kodzie masz taki kwiatek: Pomoc3 = Cykl / Y Prc = Pomoc3 * 100 Czyli najpierw liczysz wartość która u ciebie jest ułamkiem, a póżniej praktycznie zamieniasz ją na liczbę całkowitą. A wystarczy zamienić kolejność i operować na liczbach...
więc kanał możesz otworzyć tak: Open "COM1:" for RANDOM as #1 Szybkość ustawiasz za pomocą polecenia BAUD lub $BAUD na początku programu jeśli nie masz zamiaru tego zmieniać w programie Liczba 123,45 nie jest liczbą typu integer tylko single. Liczby typu integer są to liczby całkowite. przykład nadajnik: Dim a as integer Dim al as byte...
Bascoma nie znam, ale jeżeli będziesz wydzielał do zmiennych całkowitych to powinny ci się poprawnie wydzielić poszczególne wartości.
Ja bym zrobił to tak mam zmienną "a" typu single np potem dziele ją przez 10 a = a / 10 potem przepisuje ją do zmiennej typu np integer np "b" , ktora to automatycznie odcina, zostawia mi tylko liczby całkowite a potem znów mogę ją przepisać do a lub innej a = b zienną typu single można by potraktować tylko jako pomocniczą do obliczeń ale są zapewne...
dzielenie całkowite + modulo. Przy dzieleniu przez 10 uzyskasz górną cyfrę, przy modulo 10 dolną.
Mam jeszcze jeden problem, mianowicie: Mam zmienną typu single U i przypisuje jej liczbę 2.56 chcąc ją zwiększać o 0.01 robię coś takiego U = U + 0.01 a potem wyświetlam to na LCD. Lecz pojawia mi się http://obrazki.elektroda.net/98_12637529... Wiem, że resztę cyfr mógł bym zamaskować na przykład poprzez instrukcje fusing. Lecz jeżeli dalej chcę...
Masz ATmega8, czyli masz ADC i masz timer połączony z pinami I/O, czyli za pomocą timera możesz generować przebiegi na wyjściu. Rzecz wręcz banalna. Za pomocą ADC wykonujesz pomiar napięcia. przeliczasz go na okres, albo odrazu częstotliwość, nie wiem jak to w bascomie wyglada. W każdym razie częsottliwość ustala się przez zapisanie w odpowiednim rejestrze...
O ile dobrze pamiętam bascom na 2 rodzaje operacji dzielenia jedno w wyniku daje liczbę całkowita 2 liczbę rzeczywistą. Poza tym wykorzystanie dzielenia to przesada, lepiej i szybciej jest wykonać 4-krotne przesunięcie w prawo, które jest równoważne podzieleniu przez 16. AVR nie ma instrukcji dzielenia wobec tego wykorzystujesz skomplikowany algorytm....
Po pierwsze nawet jak by Ci się to skompilowało to wynik działania A = 1 / Timer1 prawie zawsze będzie równy 0. Więc późniejsze mnożenie go przez 60 nic nie zmieni. Zrób: A = 60 / Timer1 A ten błąd to jest w linii B = Int(a) ? Jak tak to pewnie Int nie przyjmuje innych parametrów niż typu Single. Po co wyciągać część całkowitą z liczby całkowitej?...
Witam Mam liczbę integer 47 którą zamieniam na single i dzielę przez 10 , wynik to 4.69999806 . I teraz w jaki sposób uzyskać dwie liczby integer całkowitą czyli 4 i ułamkową po zaokrągleniu czyli 7 ?
Tych ułamków, które tak naprawdę są liczbą całkowitą, przedstawianą przy pomocy zmiennej U. Sądziłem, że komentarze obecne w programie wystarczą do zrozumienia zastosowania konkretnych zmiennych.
To sobie zapisuj w postaci całkowitej i pamiętaj ile miejsc po przecinku dla wszyskich liczb jest przesunięcie, a resztę zaokrąglij.
Czy wystarczy tak: AA=BB/CC; Tak, jest to odpowiednik dzielenia na liczbach całkowitych (bez znaku) w C/C++.
Chyba w podobnym temacie umieściłem nawet film i Ty też... Musisz kiedyś zrozumieć dlaczego Single nazywa się Single a Double double :D Nie dość tego AVR nie wspierają sprżetowo pracy na liczbach "z przecinkiem" i lepiej jest i szybciej rozwiązywać takie sprawy na liczbach całkowitych. Są o tym temacie całe wywody i nie ma co się powtarzać bo pewnie...
Działaj na zmiennych całkowitych 1000 razy większych niż liczby które chcesz wpisywać. A na koniec wynik przepisz do zmiennej Single i podziel przez 1000.
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...
Pod warunkiem, że wartość nie przekroczy 255. Podział na bajty składowe singla w pamięci masz przedstawiony! Część całkowita? Funkcja INT() Przeznaczenie: Zwraca całkowitą cześć podanej liczby. Składnia: zmienna = INT( wartość ) gdzie: zmiennadowolna zmienna, do której wpisana będzie całkowita część podanej liczby, wartośćliczba której całkowita część...
Jak użyć znaków specjalnych LCD z tej dokumentacji Poszukać informacji o sposobie zapisu liczb naturalnych całkowitych w postaci dwójkowej (binarnie). Poszukać informacji o sposobie kodowania znaków wg standardu ASCII. Otworzyć helpa i poszukać informacji o funkcjach manipulujących na tekstach i znakach, a także podstawy języka.
Witam, mam problem ze zrozumieniem obsługi transmisji 1-wire w Bascom'ie. Chciałbym obsłużyć jeden układ DS18B20 przez mikrokontroler ATMEGA8. Zależy mi na programie odczytującym wartość temperatury i zapisaniu tej wartości w postaci liczby dziesiętnej jako zmienna. Jeżli ktoś ma chwilę czasu to bardzo proszę o umieszczeniu kompletnego kodu, wtedy po...
Ale - dla stringu "84.2" otrzymuję wartość zmiennej 84.199996946 Niestety rozdzielczość zmiennych typu Single jest skończona i nie można w nich zapisać każdej liczby zmiennoprzecinkowej. Jak sądzę, jest to problem konwersji do single - czy jest jakiś sposób, aby otrzymać tą wartość dokładnie taką jak w stringu ? Jeśli masz dużo pamięci RAM to zastosuj...
50+25+12+6=93 więc powinno to działać, WIEM: Cała liczba jest zapisana w kodzie U2 więc tak jak napisałeś wcześniej trzeba zanegować i dodać jedynke ALE do całej liczby 16bitowej. Wtedy będzie przeniesienie między częścią ułamkową a całkowitą i zamiast 20,0 będzie 21,0.
Więc tak potrzebuje wyświetlić liczbę w formacie x.x. I nie wiem jak to zrobić próbowałem tak iż daną liczbę mnożyłem razy dziesięć zaokrąglałem do liczby całkowitej funkcją round a następnie robiłem dzieliłem na dziesięć ale na wyświetlaczu lcd i tak pojawiało mi się kupę liczb po przecinku w formacie x.x00000001 lub podobne x.x999999991. Jak to zrobić...
Dzięki za podpowiedzi teraz wiem że double jest liczbą zmiennoprzecinkową i występuje jako liczba dodatnia jak i ujemna. Teraz zostaje tylko przeliczanie na liczbę ........... a to mi się wydaje jak na razie nie tak proste. To znaczy że nie wiem jak się za tą double zabrać. A może na początek bym się musiał nauczyć jak zamienić liczbę Integer (2bajty)...
Albo jak radzi mirekk - tym bardziej że m8 kosztuje około 8zł Albo wywal instrukcje STR i FORMAT. Formatowanie wyniku zrób jako dzielenie zwykłe (liczba całkowita) i po kropce MOD (pozostałość z dzielenia). Ewentualnie napisz wszystko jako wstawka assemblerowa, ja tak zawsze robiłem i było ok :-)
A w jaki sposób wysyłasz tą liczbę? Czyżbyś wysyłał ją bezpośrednio jako np 9832? Według mnie jest to liczba która zajmie dwa bajty, wiec musisz ją rozbić i wysłać osobno do dwóch komórek. Najlepiej chyba będzie do jednej komórki wysłać całkowitą część dzielenia tej liczby przez 256, a do drugiej resztę z tego dzielenia. Pozdrawiam Dawid.
wait 1us pewnie jest dokladne, ale w petli masz przeciez nie tylko ta instrukcje, wiec calkowity czas wykonania petli jest dluzszy. Pomiar spokojnie mozesz zrobic na liczbach calkowitych, przeciez zapis: X=X/10000 X= 1/X jest rowny x=10000/x, ulamkow miec nie bedziesz bo przeciez kolejne liczby czasu to liczby calkowite.
liczba całkowity reprezentować liczba całkowity ciąg liczba całkowity
canon pobiera kartek panasonic świecić czerwona dioda wtyczki winamp
listwa zasilajaca schemat elizabet
Gdzie kupić pokrętło do sterownika BUDERUS CM221? Krótkie szczotki a spadek mocy rozrusznika elektrycznego