Może Frac ?
Eh, a napisz coś takiego: [syntax=basic4gl] dim pwm_var as byte [/syntax] Tam gdzie deklarujesz resztę zmiennych, następnie przy wyświetlaniu: [syntax=basic4gl] pwm_var=cool1 lcd "Obroty"; str(pwm_var)[/syntax]
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...
tak jak pisał kolega wyżej 34/10=3 (pod warunkiem deklaracji jako liczba całkowita) 34 mod 10=4
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
Witam "integer" nie jest zmienną tekstową. Integer przyjmuje watrtość liczby całkowitej w zakresie od- 32768 do +32767 Integer nie zapisuje ułamków.
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.
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?
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.
To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą?
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...
Ale timer przyjmuje tylko liczby całkowite, chyba że się nie rozumiemy. Podaj przykład zastosowania, oraz te wyliczenia co chcesz załadować i gdzie je wcisnąć ;)
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...
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...
Ł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...
Czy wystarczy tak: AA=BB/CC; Tak, jest to odpowiednik dzielenia na liczbach całkowitych (bez znaku) w C/C++.
szymtro, niestety efekt jest taki sam. na wejściu 1.124 efekt na LCD 1.10000002 Pozostaje chyba tylko formatowanie tekstu na wyświetlacz, ewentualnie sztuczne dodawanie dziesiątek do liczby całkowitej. PL
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.
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...
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...
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...
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.
dzielenie całkowite + modulo. Przy dzieleniu przez 10 uzyskasz górną cyfrę, przy modulo 10 dolną.
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....
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...
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)...
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,...
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.
Dzięki za odpowiedź ale nim wpisałem pytanie na Elektrodę to sporo męczyłem się z tym (przesuwanie przecinka, mnożenie, dzielenie) ale niestety bez rezultatów. W bascomAVR jest polecenie "Round" ale ono zaokrągla wynik do liczby całkowitej i tym samym odpada. Może jest jeszcze jakieś polecenie coś w rodzaju formatowania wyniku, którego jeszcze nie znam/znalazłem...
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.
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 ?
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ęć.
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ć...
Też jest prosto: 1. obcinasz ułamek --> masz część całkowitą ... Jak zamienić liczbę całkowitą na znaki, nię będę pisała, bo to już trywialne. No niewiem :? Liczby zmiennoprzecinkowe są zapisywane inaczej niż liczby całkowite i mogą być pojedynczej lub podwójnej precyzji gdzie mamy mantysę ,wykładnik itd. Wcale nie jest łatwo takie ustrojstwo "rozebrać"...
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.
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ę...
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...
Kolego emarcus namieszałeś mi troszkę z tom funkcją ‘Str2digits’ ale nie umiem tego wyświetlić! Nie zrozumiaeś ’ni w ząb’ z tego co ci opisałem: Funkcja ta (Str2digits)_ zastępuje całkowicie twój rachunek umieszczony w subrytynie ‘Wpisz’, a zatem nie sa już potrzebne zmienne A, B, C i D reprezentujace poszczególne...
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.
Najprościej zrobić to tak: wyliczasz napięcie z proporcji, ale nie do 20 tylko do 2000. Następnie dzielisz to przez 100 a wynik zapisujesz do liczby całkowitej - masz to co przed przecinkiem. Potem mnożysz to przez 100 i odejmujesz od pierwotnego napięcia - masz to co po przecinku. Wyświetlasz tak jak napisałeś. LCD przed_przecinkiem;",";po_przecinku;
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 :-)
Od razu wspomnę, że nie znam Bascoma, więc mogę nie mieć racji, ale dla mnie wygląda podejrzanie wyrównywanie do całkowitej wyniku sin() i cos(). To raczej nie ma sensu. Tak ogólie to sin i cos należy stablicować - tj obliczyć N poszczególnych wartości raz i potem korzystać z gotowych wartości z tablicy. Jak masz stałe N to wręcz można (o ile można...
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...
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.
Zacznij zatem od porzucenia Bascoma i przesiadki na C, skoro zależy Ci na wydajności. Przy okazji możesz wziąć procesor tańszy od AVR i z 10 razy szybszy, np. jakiegoś Cortexa. Zacznij zatem od sensownego udzielenia odpowiedzi na jego pytanie. Może jeszcze ARM i frytki do tego? Nie wiesz, nie pisz. Dawid88: Zagadnienie bardzo interesujące, bo sam wiem...
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ęść...
Witajcie, czy istnieje możliwość zapisania dużej liczby całkowitej (powyżej 255) w pamięci eeprom procesora M32? Najlepiej aby dało się ją zapisać do konkretnych komórek pamięci - by nie nadpisać przypadkiem innych. Jeśli tak, to w jaki sposób? Druga sprawa... chciałbym zwiększyć licznik o jeden po każdym pełnym wykonaniu programu (nie w pętli). Niestety...
A gdybym chciał się zając mikrokontrolerami, czego bym potrzebował?? Mikrokontroler (jaki?) programator (jaki?) kompilator na kompie (jaki?) hmm.. coś jescze???? _emes Na początek polecam zacząć od mikrokontrolerów rodziny AVR. Nie daj się nabrać na początki w '51 - owszem, może to i "sztandarowy" mikrokontroler, tak jak Pascal w językach programowania,...
Dlatego proponuje zostać przy stablicowaniu wyników pomiaru i aproksymacji odcinkowo liniowej ;) Oba sposoby są dobre i wykonalne. Ale bardziej eleganckim wydaje sie wielomian (uproszczony do 3-ciej potęgi). BTW. W bascomie raczej sie nie potęguje tylko wielokrotnie mnoży. Jeśli te operacje przeprowadzić na liczbach całkowitych to nie zajmują dużo...
(1200-2*60)/300=3 (zapomniałem napisać, że dzieli się do liczby całkowitej - myślałem, że to oczywiste; dopiszę, że pierwsze dodawanie 1 po dzieleniu można pominąć, jeśli podzieli się bez reszty); (1200-2*60)/4=270 (mm) i to jest odległość punktów, a ich ilość to 4+1=5. (1250-2*60)/300=3, (1250-2*60)/4=282.5 (mm), nadal 5 punktów.
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?...
Powiedzmy, że mam zmienną N, która może przyjmować wartości całkowite z przedziału od 1 do 20. Chciałbym żeby dla niektórych (rozmieszczonych przypadkowo) wartości wykonało się jedno polecenie a dla pozostałych drugie. Myślałem o instrukcji "Select Case" ale czy da się to zrobić w uproszczony sposób, czyli do jednego "Case" wstawiamy pierwszą grupę...
Tak, lecz jest to sytuacja, którą opisałem w poście #3. Z drugiej strony, ja bym przedstawiony przez ciebie problem rozwiązał inaczej - w dwóch przerwaniach. W przedstawionej sytuacji wysyłkę można zrobić całkowicie w oparciu o przerwania USART, a timer niech robi to do czego służy :) A jakieś inne różnice?
Wynik który uzyskujesz jest liczbą niecałkowitą bo obliczenia tak karkołomne mają jakąś tam dokładność. Spróbuj zaokrąglić ją do całkowitej i dopiero wtedy wyślij ją na LCD. Dawno nie pisałem w BAscomie, ale czy nie wysyłasz dwóch liczb w to samo miejsce? Czy nie pomyliłeś w instrukcji locate kolumny z wierszem? Spróbuj dać pomiędzy dwoma wysyłkami...
Typy się kłaniają, typy danych, jeśli więc zrobisz tak: dim droga as long dim droga1 as single droga1 = droga/12.54 to powinno zadziałać ;) przecież dzielisz nie przez liczbę całkowitą tylko zmiennoprzecinkową, a więc w wyniku też masz dostać zmiennoprzecinkową - dlatego trza wybrać typ single w Bascomie. Ale to z kolei spowoduje ci straszny rozrost...
Zdefiniuj zmienną Temp jako Word. Jak ci ma wyświetlić 600 jesli zmiena Byte może przyjąc max wartość 255. Właśnie powyżej tej wartości będą ci sie wyświetlać dziwne rzeczy. No to może wytłumaczę jak to zrobić na zmiennej typu Byte według wyżej wspomnianej ideii. $crystal = 4000000 $regfile "attiny2313.dat" Dim Pomiar As Single Dim Temp As...
No zajrzałem do noty ale nadal zachodzę w głowę dlaczego używasz do tego zaraz tak kosmicznego nieporozumienia jak liczby zmiennoprzecinkowe w Bascomie albo w ogóle na AVR. Najlepiej zawsze od nich uciekać jak tylko się da - a można to często bardzo łatwo zrobić - tą ucieczkę ;) szczególnie w takich prostych przypadkach: masz tam przykładowy wzrór z...
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...
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...
Kod wydaje się sprawować prawidłowo. Przecinek jest względny. Operacje na zmiennych z przecinkiem są męczące dla mikrokontrolera. Jesli nie jest to konieczne to należy ich unikać. Zauważ że sam DS nie wysyła Single tylko Integer. Każda zmienna z jednym miejscem po przecinku pomnożona przez dziesięć da liczbę całkowitą. Tutaj przecinek jest "wirtualny"...
No ale w takim razie powiniem zwracać wartości ułamkowe na najmłodszych bitach. A nie zwraca. Albo inaczej: Ty traktujesz te liczby jako całkowite a mimo to masz je tylko do 2047. Czyli to nie jest przetwornik 16-to bitowy. Ale uwaga. Po obliczeniu wartości, przepisuj wyniki ze zmiennej Integer do zmiennej typu Long. Inaczej jak offset ustawisz na przykład...
Oto fragment polskiej wersji helpa do bascoma (rozdział Podstawy języka BASCOM BASIC): Komplikacje związane z liczbami zmiennoprzecinkowymi Każda liczba całkowita może zostać zapisana w notacji binarnej. Liczba zmiennoprzecinkowa już nie. Faktycznie, każda liczba niewymierna o podstawie 10, będzie także niewymierna w każdym systemie o podstawie mniejszej...
Atmega8 czy atmega8L, ta pierwsza ma zakres napięć od 4,5-5,5V częstotliwość pracy 0-16MHz, ta druga 2,7-5,5V częstotliwość pracy 0-8MHz, pierwsza strona noty. Jeśli używasz wersji zwykłej bez L to masz za małe napięcie. Jeśli chcesz sprawdzić prędkość procka to możesz skonfigurować jakiś timer to pracy w trybie PWM i porównać częstotliwość na wyjściu...
http://upload.wikimedia.org/wikipedia/co... Wartość liczby zmiennoprzecinkowej jest obliczana wg wzoru http://upload.wikimedia.org/math/2/1/9/2... gdzie: * S (ang. sign) – znak liczby, 1 lub -1 * M (ang. mantissa) – znormalizowana mantysa, liczba...
Witam goreckidiy. Twój projekt spełnia funkcę, którą chciałeś osiągnąć. Ale jest ale :) Niezwykłe zbiegi okoliczności sprawiły, że to działa (mam nadzieję) prawidłowo. Spójrz na zdjęcie. http://obrazki.elektroda.pl/9690955600_1... W programie masz coś takiego:[syntax=text]'*********WAŻNE!!!*... data1 = data_in - 1048574 'tyle suwmiarka...
Witajcie. Piszę mój pierwszy program użytkowy. Nakreślę co ma mniej więcej robić: co dobę losować nową liczbę ze zbioru liczb całkowitych mniejszych lub równych 1 i większych lub równych 30. Liczby nie mają się powtarzać przez 30 losowań (każda musi być wykorzystana) i potem od nowa. O ile poradzę sobie z tymi opóźnieniami czasowymi (bo z tego co widzę...
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...
...Efekt jest taki że na wyświetlaczu jest liczba 02 ale niestety nie mogę całkowicie zlikwidować lekkiego świecenia się pozostałych segmentów danego wyświetlacza które akurat nie są potrzebne do wyświetlenia prawidłowo danej cyfry... Mnie to wcale nie dziwi , bo "wsuwasz" dane do rejestru 164 , kiedy wyświetlacz jest aktywny. Piotrek
Co do konfiguracji portu C hm mam najnowszego bascoma i nie ma żadnych błędów po kompilacji i robot zaprogramowany tylko z czujnikiem lini lub tylko z czujnikiem wykrycia przeciwnika działają poprawnie. Co do zmiennej Word to jest to liczba całkowita bez znaku, od 0 do 65535, ok zgodzę sie bo zmienna Volt nie będzie całkowita i jest zaokrąglana do 0...
Mogę Cię tylko naprowadzić co możesz zrobić .. bo widzę że program pisany jest w Bascomie. 1) Wyrzuć wszystkie linie kodu gdzie występuje Lcd. 2) Wart_nap pomnóż przez 10 i z wyniku wyciąg część całkowitą w której liczba jedności będzie wartością napięcia po przecinku (dokładność 0,1V). 3) Musisz sobie napisać procedurę która będzie Ci wyświetlać każdą...
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...
Co to jest Prescale ? Timery w mikrokontrolerach AVR nie muszą być taktowane zegarem systemowym - często jest on za szybki dla potrzeb projektanta. Inżynierowie z Atmela rozwiązali ten problem, umieszczając dodatkowy (nieco ukryty) licznik zwany prescalerem. Z tego licznika otrzymujemy kilka nowych sygnałów zegarowych, z których skorzystać mogą timery....
Zle mnie zrozumieliście Panowie. Nie chodzi mi o sam zapis i odczyt bo to prosta sprawa ale o to, że pamieć składa się z komórek które mają rozmiar 1 Bajta, tak wiec do kazdej komórki można zapisać maksymalną liczbe 256. A ja chce zapisac liczbe typu 17352965 i kiedy to chce zrobić bascom wywala błąd "Value doesn't into BYTE" co jest całkowicie zrozumiałe...
Program próbuje zoptymalizować na maxa, potem uzyskuje trochę miejsca, dodaje nowe funkcje, znów optymalizuje i tak dalej. Kiedy uznam że nie wiele już poradzę (przetestuje różne drogi rozwiązania danych problemów, rozbije niektóre procedury na części pierwsze itd. kończę). A czy wiesz, że zastępując funkcją select case każde if-then oszczędzasz 2B?...
jak chcesz do 1 miejsca po przecinku, to mnożysz liczbę zmiennoprzecinkową przez 10 (jak do dwóch miejsc, to przez 100, itd.) zamieniasz ją na człkowitą i masz dwie (no w sumie to trzy) drogi. 1. zamieniasz liczbę całkowitą na tekst, wyświetlasz wszystko oprócz ostatniej cyfry (ostatnich dwóch, trzech...) wyświetlasz kropkę i dopiero ostatnią (ostatnie)...
Jednak liczylem na lepsza pamiec, rasowy asemblerowiec chyba powienien ja miec.Co do zmiany zdania to napisales, ze nic tu nie napisales o necie. Piszac tu zaponiales chyba co pisales 5 dni wczesniej, ze na necie sa takowe biblioteki. nie napisałem tutaj nic o tym, że coś jest na necie Tutaj, czyli tak jak się patrzysz na monitor i przewijasz ten temat...
Jak napsać program? A zajrzyj do HELPA bascoma i zobacz jak sie konfiguruje wyjscia PWM (config timerx = pwm i te bzdety, x-liczba całkowita:) ) Nie wiem ile ta twoja mega ma kanałów PWM a datasheeta sie nei chce mi szukać A jesli nie chcesz/nie lubisz/brzydzisz się/masz za mało* kanałów sprzętowych PWM, to sobie zrób programowy, _uzywajac_przycisku_szukaj_na_forum_elek...
wynik końcowy faktycznie za każdym razem jest inny. (at) emarcus możesz podpowiedzieć jak powinien wyglądać serwis int1? Popatrzyłem troche bliżej na twoj kod. Z jakiego powodu potrzebujesz otrzymać wynik ("Czas_2") z dokładnocią aż do 9 miejsc decimal? Jeżeli jeden z czynników iloczynu (rozdzielczość timera) jest liczbą wymierną z dokładnościa do...
A ja jeszcze wrócę do Bascoma ( nie dlatego że jestem ortodoksyjnym wyznawcą , ale dlatego że na moje potrzeby wystarcza więc nie widzę potrzeby nauki innego języka) W Bascomie dużo miejsca i czasu zajmuje obsługa wyświetlacza 2x16 zn Zamiast używać CLS / kasowanie ekranu/ stosuje wpisywanie pustego stringu ośmioznakowego ( ' ') Najczęściej wyswietlam...
Wielkie dzięki za odpowiedzi , rozwialiście mój problem całkowicie Więc teraz zrobie tak że timer1 będzie zliczał impulsy timer2 będzie korzystał z kwarcu zegarkowego, a timer0 będzie skonfigurowany przez funkcje Config Servos. Tadam A z moimi liczbami chodziło mi o to że w kodzie jeżeli timer zmierzył więcej niż 256 impulsów to inkrementowałem zmienną...
:arrow: smalski Watomierz w.cz / m.cz. i woltomierz w jednym. wyświetlacze LED. Sporo obliczeń na zmiennym przecinku (wszystkie podstawowe działania, pierwiastki, logarytmy, potęgi), wykorzystywałem snprintf() (bez zmiennego przecinka), dtostre() i jeszcze kilku innych funkcji. No i do tego sterowanie, trochę arytmetyki na liczbach całkowitych. W sumie...
Fuse bity i inne ustawienia raczej są poprawne, a przejście na programowanie w C lub asm raczej odpada ze względu na brak czasu aby się tego nauczyć. Zauważyłem pewną rzecz w pracy mojego programu. Jeżeli nie ma wyświetlania informacji na lcd to prędkość działania programu całkowicie mnie zadowala natomiast jeśli będę coś wyświetlał to np. liczba A...
To jeszcze ja wtrące swoje 3 grosze. Co do select case to nie polecam - mniej miejsca zajmują pojedyńcze warunki IF tylko trzeba wtedy dobrze przemyśleć aby nie wyskakiwały dwa naraz albo chociarz prawidłowa wartość była wtedy kiedy oczekujemy tego. Dodatkowo zauważyłem ze w Bascomie 8051 użycie podwójnego lub potrójnego warunku IF (if cos=1 or cos=2......
ASM jak ASM, ale w C kod też będzie dużo mniejszy, a i łatwiej go napisać. To po pierwsze. Po drugie, nie kombinuj z wieloma prockami, bo nie dość, że będzie to żarło prądu co niemiara, to jeszcze skomplikuje płytkę, a i koszty będą większe. Najlepiej zastosuj wspomniane układy 74HC595. Obsługa tego jest banalnie prosta, a w internecie znajdziesz nawet...
Witam, Ważna uwaga: typ long jest całkowity, nie ma części ułamkowej, trzeba użyć single lub double. Mała wskazówka z helpów (polski ubogi pełny po angielsku w programie) Pamięć ERAM. Większość procesorów serii AVR posiada wbudowaną pamięć EEPROM. Pamięć ta może przechowywać dane nawet po wyłączeniu zasilania. Jak podaje producent nawet do 10 lat. Pamięć...
Witam Temat troszke starawy ale sie podpinam:) Tez kombinuję z roździelczością 0.1'C i troche mi nie wychodzi:) Dziwnie mi dziesiate czesci stopni wskazuje podaje ciąg: np. 23.1;23.2;23.3;23.4;23.5;23.6;23.8;23.12... itd dziwne bo nie ma liczby 0,7,9 tylko jakies 12 i 25 a do 6 idzie ok-dziwne to co po przecinku obliczam wzorem: dziesiatki=temp(7)-temp(6)...
Hmm, to znaczy że bym musiał uruchomić drugi timer (8 bitowy). Z tego co pamiętam, to przy maksymalnym dzielniku wychodzi 1 albo 2 sekundy. I w momencie przepełnienia sprawdzać prędkość? Co do pokazywania zer to ogarnąłem wykrywając przepełnienie timera 3 i w tym momencie wyświetlanie zer. cóż wiem , że program pewnie wg Ciebie (z resztą wg mnie też)...
Witam Mam problem z właściwym liczeniem i wyświetlaniem wyniku (LED 7-segm.). Liczy procent czasu włączenia urządzenia (licz_minuty_triaka) w stosunku do czasu działania (licz_minuta_stat). Standardowo, jeśli nie dochodzi inny warunek to urządzenie chodzi 3 min. co 2 godziny, zatem wynik powinien oscylować wokół 2,5%. Wynik ostateczny z bascoma - liczba...
Zrobić tak by wyświetlał część ułamkową Więc napisz to jasno w pierwszym poście. Program jest "bardzo bogato" komentowany, brak formatowania, wiec analiza jest "łatwa". W pętli głównej masz Dodano po 8 Zrobić tak by wyświetlał część ułamkową Użyj liczby zmiennoprzecinkowej albo odczytana temperaturę z DS16B20 wyświetl w dwóch etapach, część całkowitą...
http://obrazki.elektroda.net/67_12744374... Witam! Chciałbym dziś pokazać urządzenie, które powoli i z bólami tworzyłem ostatnimi czasy. Inspiracją do ruszenia z pracami były zbliżające się urodziny narzeczonej, której chciałem podarować coś nietypowego, a jednocześnie praktycznego. A że nie może być chyba nic bardziej praktycznego i przydatnego...
http://obrazki.elektroda.pl/2534599000_1... Zegar + termometr DS18B20 - ATtiny 2313 - LED Wykonany na ATtiny 2313. Znane podobne zegary oparto na Atmega 8 i LCD. Program napisany w Bascom. Pracuje bez zarzutu. http://obrazki.elektroda.pl/9466031800_1... http://obrazki.elektroda.pl/4401807600_1... http://obrazki.elektroda.pl/5327081100_1...
czy będziesz miał temperatury ujemne? i co oznacza zmienna "Liczba" Liczba jest typu byte (0-255) jak ma być <0 ? odczyt temperatury: w kodzie ująłem zmienną znak dim znak as bit znak = 0 wartość dodatnia znak = 1 wartość ujemna znak = 0 'zakładam że wartość jest dodatnia 1wreset If Err = 0 Then 1wwrite &HCC 1wwrite &HBE Ds_1 = 1wread()...
Dziękuję ślicznie za szybką pomoc. Oba sposoby są świetne. W moim przypadku lepiej sprawdzi się dzielenie liczb całkowitych z operatorem [MOD], tak jak to podał Sp3ots. Bo otrzymuję gotowe dane do wyświetlaczy 7-seg jak i do LCD. Tak mi to wyszło - sprawdzone, działa - a nuż jakiś zielony jak ja wykorzysta. [syntax=vbnet]Dim F As Word ' pięciocyfrowa...
Co do zaokraglania to juz tak probowalem. Po 1 nie miesci sie w pamicie a po ndrugie nie dziala jak trzeba :P Nie mieści się w pamięci , bo zabawa ze zmiennymi zmiennoprzecinkowymi pojedynczej precyzji(Single) w Bascomie , jest strasznie pamięciożerna :| Żeby tę sprawę załatwić jak najmniejszym kosztem zużytej pamięci programu , trzeba Twoje obliczenia...
Witam . Chciałem zrobic tester pomp opryskiwaczy . Chodzi o mierzenie wydajności pompy w litrach na minute a moje pytanie czy nie bedzie gubił impulsów podczas wykonywania przerwania . Pomiar co 1 sekundę a wydajność pomp od 40l do 260l / min Nie musisz obawiac się o gubienie impulsów z powodu wykonywania przerwań. Impulsy są zliczane przez Counter1,...
Wybaczcie początkującemu, bo pytam zapewne o jakąś strasznie trywialną sprawę, ale póki co nie mogę sobie z nią poradzić, więc szukam pomocy. Piszę sobie cośtam. Cośtam ma multipleksowo obsługiwany wyświetlacz LED, multipleksowanie jest załatwiane podprogramem uruchamianym z przerwania od T0. Tyle napisałem i tu wszystko działa pięknie. Dalej, przed...
liczby całkowite reprezentująca liczby całkowite bascom liczby
amica cały wypompowuje wodę schemat blokady drzwi przedwzmacniacz gramofon phono
teltonika konfiguracja sprzedam tp118
Kąt wtrysku VW LT 2.5 AHD: ustawienia i wartości Brak połączenia z siecią Lycamobile w Holandii