Siemka! Musisz wziąść pod uwagę fakt, iż zmienna single przechowuje wartości zmiennoprzecinkowe ze skończoną dokładnością i to może być zauważalne przy niektórych operacjach na tego typu zmiennych. Poszukaj w helpie od Bascoma i poczytaj o kodowaniu liczb zmiennoprzecinkowych i wszystko Ci się wyjaśni:) Pozdrawiam!! Widzę że dałeś kod.:) Mi się wydaje...
... Może ktoś wie jak to zrobić bez sztucznego sprawdzania i dopisywania końcówek. PL Ja chyba wiem ;) 'dla Frm = 0 , kompiluje Fusing() 'dla Frm = 1 , kompiluje Format() 'teraz mozna porównać "pamięciożerność" Const Frm = 0 Dim A As Single , B As Integer , C As String * 10 A = 1.1625 B = A * 10 #if Frm C = Str(b)...
Nie musisz stosować dodatkowych zmiennych pomocniczych Twój przykład: "a = b * (c + d)^2" musisz rozpisać a= c+d a= a*a a= a*b Pamiętaj jednak , że procesory ośmiobitowe nie zostały stworzone do obliczeń matematycznych i staraj się unikać działań na liczbach zmiennoprzecinkowych
Może można to inaczej rozwiązać, ale jako pierwsze do głowy przychodzi coś takiego: [syntax=vbnet] Dim A As Byte Dim B As Byte Dim C As Single A = 123 B = 255 C = A * 1000 ' c=123000 C = C + B ' c = 123255 C = C / 1000 ' c =123,255 [/syntax] ..tylko przemyśl czy nie lepiej dokonywać obliczeń na tych 123255 i na samym końcu wynik podzielić przez 1000....
próbowałem tylko ze to musi być wtedy typu single bo word nie przyjmuje zmiennoprzecinkowej liczby czyli nie da sie pomnoży razy 10 próbowałem tez pozmieniać wszystkie typy na single ale też nie poszło
Zainteresuj się poleceniem FUSING. Przeczytaj helpa i zobaczysz, że da się zrobić.
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...
Spróbuj zrobić na liczbach zmiennoprzecinkowych.
Poczytaj trochę Wiki Bascoma [url=http://wiki.mcselec.com/bavr/FUSING... bo tam zawsze pod każdym tematem pisze "See also" i po nitce doszedłbyś do kłębka [syntax=vbnet]B = Fusing(b , "#.&")[/syntax] Wszystko zależy co jeszcze ma robić ten kod bo do takich zadań to możnaby chyba zrezygnować z Single ;) ..ale jak ma robić tylko to..
Bascom to nie matlab, spróbuj pozbyć się liczb zmiennoprzecinkowych!
Witam, Jeśli nie musisz nie korzystaj ze zmiennych typu single, lepiej przeskalować int'a kilka razy (np zamiast 1,232 robisz 1232 a przy wyświetlaniu dodajesz przecinek) operacje na liczbach zmiennoprzecinkowych zjadają spora flash i czasu procesora. Pozdrawiam, Marcin
Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej) ... Całość pisana jest w bascomie, w przerwaniu nie mogę zejść z czasem niżej bo dużo czasu zajmują obliczenia na zmiennych zmiennoprzecinkowych. No to nie stosuj zmiennoprzecinkowych obliczeń oraz zrób krok do przodu i zmień język na C. Co do samego...
Powinien ale cls daj przed petla a w niej zastosuj locate. Po za tym nie operuj warunkami na liczbach zmiennoprzecinkowych. Przelicz sobie jaka wartosc ma zmienna Wart_ac przy napieciu 1V i do niej napisz warunek.
Źle definiujesz typ zmiennych. Żeby można wykonywać operacje zmiennoprzecinkowe, typ zmiennych powinien być single lub double. Dim Dawka_temp As Single, Dawka As Single
To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą?
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...
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...
ja bym rozwinal problem jeszcze o liczby zmiennoprzecinkowe w bascomie
Mnożąc zmienną typu WORD przez stałą CONST wychodzi niedokładny wynik. Np: WORD = 200 x CONST = 0.0025 = SINGLE = 0.499999933. Dokładność obliczeń zmiennoprzecinkowych jest kwestią długości (i formy) reprezentacji liczb zmiennoprzecinkowych. Z oczywistych względów w ośmiobitowych procesorach z małą pamięcią reprezentacja FP nie może być zbyt długa...
Użyj języka wysokiego poziomu (C lub Bascom), wtedy nie będziesz miał problemów z arytmetyką zmiennoprzecinkową.
Można to zoptymalizować i nie przeliczać na Volty w ogóle, ale tak bedzie prościej zobrazować. Jeśli napięciem odniesienia jest AVCC to znaczy że 5V trzeba teoretycznie podzielić przez rozdzielczośc 1024 i wyjdzie 0.00488 no i to się często zaokrągla do 0.0049 Teraz żeby odczytać napięcie wystarczy pomnożyć odczytany wynik przez te 0.0049, ale to wymusza...
Chyba nie czytałeś ostatnio tego rozdziału z Language Fundamentals. W ten sposób sam sobie robisz kuku... Pomijając to myślę, że jeśli te Twoje zmiennoprzecinkowe masz tylko do dwóch miejsc po przecinku, to dlaczego, po prostu, nie pomnożysz tego x100 a na końcu wyniku nie podzielisz /100? Zapewne wszystko się wykona dużo szybciej niż na tych zmiennoprzecinkowych....
(...) Po stwierdzeniu obrotu kola wykonany zostaje podprogram ”Interrupt” gdzie inkrementuje się zmienna pomocnicza „Przebieg” wielkości bajta, by w wolnym momencie podczas wykonywania pętli, przemnożyć to przez obwód kola. Zabieg ten był wymagany gdyż bascom, nie radzi sobie z bardzo częstym wykonywaniem obliczeń zmiennoprzecinkowych...
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...
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...
Pierwsza sprawa - po Bascomie nie masz się co spodziewać optymalnego programu, to raczej język do zrobienia czegoś na szybko i bez większej znajomości programowania. Niestety, do poważniejszych zadań nadaje się w zasadzie tylko C. Druga sprawa - pewnie jest tak - w C, kiedy tylko zadeklarujesz zmienną, kompilator i tak ją usunie, jeśli jej nie używasz....
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...
lukaskay - nie piszę w Bascomie więc się nie podejmuję :) Zwróć uwagę, że w proponowanej przeze mnie metodzie pomiaru będziesz musiał wykonać dość niewygodne dzielenie stałoprzecinkowe, albo użyć liczb zmiennoprzecinkowych. Na pewno mniej dokładny sposób pomiaru jest łatwiejszy do obróbki numerycznej. Pozdrawiam, Dr.Vee
Jeśli dałoby się zmusić rejestrami mikrokontroler do liczenia sinusów na liczbach zmiennoprzecinkowych o podwójnej precyzji to faktycznie - same rejestry by wystarczyły... 4\/3!!
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...
Ja robiłem podobne testy z tym że na dużo większych programach. Najpierw napisałem program w Bascomie (ATMEGA8) - zajętośc pamięci około 72%. Po czasie nauczyłem się C i napisałem kopię programu w C (Codevision) , program zajął 54%. Pisząc w C bardzo kontrolowałem na każdym kroku wielkość kodu, nie używałem printfa, walczyłem o pojedyncze bajty aby...
Do autora: czy była by możliwość zaprezentowania tutaj kodu sieci neuronowej - jej nauki i mechanizmu wstecznej propagacji błędu w Bascomie? Czy wagi są przechowywane w zmiennych zmiennoprzecinkowych - tj. Single?Jak jest realizowana funkcja przeliczania wag dla aż tylu - 512 - zmiennych? Jak wygląda algorytm owej sieci (w Bascomie pewnie trzeba było...
W bascomie też masz liczby zmiennoprzecinkowe- np. typ single. Jest też konwersja i dzielenie z resztą modulo. Tylko Attiny2313 może się w pewnym momencie okazać za mały. Ta część całkująca- to w zasadzie ograniczenie od góry PWM- oczywiście nie może być większe niż 100%. Znalazłem kiedyś taki link: http://elm-chan.org/works/smc/report_e.h... Ale go...
Witam serdecznie, bawię się ostatnio zmiennymi w Bascomie. Zadeklarowałem dwie zmienne typu single żeby wykonać pewne obliczenia i po skompilowaniu kodu okazało się że ponad 50% pamieci flash mikrokontrolera zostalo zużyte. Czy to normalne? troche mnie to zaskoczyło. Czy nie da sie wykonywac operacji na liczbach zmiennoprzecinkowych w inny sposób, zeby...
No i mam nastepny problem data nie moze byc zmiennoprzecinkowa bo mi wyrzuca - nan w symulacji. albo 0.0
No ale właśnie mówiłem, że zysk na prędkości to wiadomo że jest pomijalny, jednak zysk na objętości kodu to już bardzo istotna sprawa i nie patrz na to w ten sposób, że tu akurat dałeś taki procek w którym masz aż tyle wolnej pamięci, bo po prostu na drugi raz będziesz wiedział że można to zrobić na mniejszym bez problemu ;) ..... a najważniejsze to...
kiedyś testowałem printf("..."); działa super ale zajmuje okropnie dużo pamięci,dla porowania to samo w bascomie zajmuje znacznie mniej :(
Albo w ogóle nie bawić się w liczby zmiennoprzecinkowe, tylko... utworzyć 2 zmienne całkowite, jedna odpowiedzialna za części tysięczne, druga za jedności i wyższe. Dodatkowo zaoszczędzisz nieco flash'a, gdyż operacje na liczbach zmiennoprzecinkowych zajmują dużo pamięci programu. A zabawę w Stringi też odradzam... nie wytaczajmy armaty na muchę :D
Zakup książek nie gwarantuje sukcesu jeśli się ich nie czyta. Osobiście przyjmę każdą książkę na temat techniki i chętnie przeczytam... Po wydaniu "takiej" forsy na lekturę powinieneś wiedzieć, że należy unikać w ośmiobitowych mikrokontorlerach typu Float/Single bo to wymaga dołączenia do kodu biblioteki do obsługi zmiennoprzecinkowych...a to wymaga...
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.
Szczerze mówiąc to prędzej napisałbym program w C który robiłby to samo, niż miałbym debuggować kod wygenerowany przez bascoma. Ja pierdzielę, jak można generować aż tak nadmiarowy kod, nikt przy zdrowych zmysłach nie używa na uC operacji zmiennoprzecinkowych, szczególnie że łatwo można się bez nich obejść w takiej prostej aplikacji.
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...
Chodzi o to ze do zmiennej typu integer nie zapiszesz liczby zmiennoprzecinkowej. Co chcesz pozniej z ta zmienna robic?
W nocie do megi8 masz pokazane jak podłączać AVCC (dławik + kondensator). Napięcie zasilania jest za mało stabilne na napięcie odniesienia, tym bardziej, że zależy Ci na dokładności. Wrzucilem kondensatory tylko prosze o sprawdzenie czy wartosci sa dobre... http://obrazki.elektroda.net/79_12163716... W kodzie wyżej kilka wartości i szczegółów...
Mama taki temat - potrzebuję przeliczyć dane z systemu hex na zmiennoprzecinkowy float (IEEE745). dane wejściowe hex np: 43 76 18 BA Po konwersji - wynik float: 246.1 Czy ktoś spotkał się z tym jak dokonać takiej konwersji w bascom. Przy odbiorze danych w PC i aplikacji to już coś innego tu nie ma takiego problemu. Pytanie również czy taka konwersja...
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...
Co do języka C to czy zastanawialiście się jakie ma możliwości procedure printf?. Urzycie jej w procesorze x86 to dodatkowe 20kB kodu. Przy programach w C zaleca się korzystanie z procedury iprintf (nie wiem czy na mikrokontrolery jest odpowiednik) która jest pozbawiona obsługi liczb zmiennoprzecinkowych. A co do BASCOMa to ja osobiście nie widze go...
Poczytaj o arytmetyce stałopozycyjnej. Liczby zmiennoprzecinkowe (np. float), mimo, że wygodne przy programowaniu na PC niezbyt nadają się do używania w mikrokontrolerach.
Witam janbernat czas goni :-) wiec siedze calymi dniami nad tym, najwiecej czasu zeszlo nad RS - 3 dni siedziałem i nie mogłem dojść gdzie leży błąd. :-( No mam juz w sumie zrobione nastawy w AT24C04, poczatkowo chcialem zrobic nastawy liczb zmiennoprzecinkowych, ale mija sie to z celem, gdyz nie stosuje ( i raczej nie bede) PID-a więc i tak na sterowaniu...
(at)ziguś - masz zmienną float (dobra, single, ważne że zmiennoprzecinkowa). Fusing jedynie określa ile ma mieć miejsc po przecinku. Chcesz nie mieć ich wcale to musisz przepisać wartość zmiennoprzecinkową do stałoliczbowej jak pokazano w language fundamentals: http://avrhelp.mcselec.com/index.html?la... Na samym końcu ;)
Ech, dopiero zauważyłem (że Ty chcesz zadeklarować zmienną). Tak więc w nazwie nie możesz użyć ani kropki ani przecikna Może daj _. Druga sprawa to INCR. Może to i działa dla zmiennych typu zmiennoprzecinkowego (dla ścisłości to BASCOM nie ma typu stałoprzecinkowego) to równanie: [syntax=basic4gl]If Licz_0 . 007987ms = 125 Then[/syntax] NIe ma zadnego...
Witam. A może ma ktoś sprawdzony program do takiego odczytu cobym popatrzył i zrozumiał? Przestudiuj Notę Applikacyjną AN#111 (mscelec.com) http://www.mcselec.com/index.php?option=... Tam masz bardzo dobry edukacyjny przykład na dwa sensory DS z odczytem pełnego I.D., sprawdzaniem CRC, wyświetleniem pełnych I.D na...
Myślę, że jest to naturalne. Zmienna typu Long zajmuje 4 bajty a Integer tylko 2. Nie da się ciężarówki zaparkować w garażu dla malucha. W helpie jest informacja, że można dokonywać konwersji typów. Oto fragment: Dim I As Integer, S As Single S = 100.1 'przypisujemy liczbę zmiennoprzecinkową I = S 'ta instrukcja zmieni liczbę typu single na Integer...
Witam. Wyobraźmy sobie takie zadanie: ma być zbudowany generator w.cz. na układzie DDS np. AD8950. Generator miałby byc sterowany z małego Atmela np. 89c4051. Język programowania to Bascom. Zakres częstotliwości to powiedzmy 10-25 MHz z krokiem 1 Hz. I tu pojawia sie problem. Mianowicie typowy system wyliczania słowa jakie ma być wysłane do DDSa to:...
Jeśli chodzi o tego typu rzeczy to polecam interpolację Newtona. Całkiem sprawny i dość dokładny algorytm interpolacji wielomianowej. Sam w ten sposób zaimplementowałem funkcje cyklometryczne (popularnie zwane arcusami). Cóż, jeśli chcesz to robić w BASCOMie to powodzenia, polecam C, jak już. W asemblerze z kolei byś się musiał za dużo męczyć. Poza...
Hmmmm, liczba o 16 znakach to dość nieprecyzyjne określenie :] Jeżeli chodzi Ci o przechowanie 16 cyfr, każdą z osobna, to oczywiście zwykły łańcuch tekstowy, czyli STRING (chyba tak to w bascomie sie zwie). Ale na stringach nie da się wykonywać operacji matematycznych na stringach (no dobra, da się, ale trzeba wszystko samemu od zera pisać :] ), operacje...
Może za dużo filmów obejrzałem ? :) No ale teraz po tym trzęsieniu ziemi to chyba wszystko możliwe... ;) Co do mnożenia zmiennoprzecinkowego w asm, to wystarczy zrobić uniwersalną procedurkę i "męczysz się" nad wszystkim tylko za pierwszym razem, a później masz z górki.
Ten Twój program to, niestety, brak zrozumienia dla sprawy. W pętli Do Loop Until zbierasz 64 odczyty i je uśredniasz, ale tego wyniku w ogóle nie używasz... Zamiast tego robisz jeszcze raz odczyt zamazując poprzedni wynik uśredniania. Gdzie tu sens? :D Spokojnie możnaby też zrezygnować z użycia zmiennoprzecinkowej Single i program byłby mniejszy -...
Co to jest double. U mnie w BASCOM-AVR nie ma tego typu Dokładnie tak, jak napisał przedmówca. Funkcja Hex oddaje wewnętrzną reprezentację zmiennoprzecinkową, która potraktowana jako liczba stałoprzecinkowa daje bzdurę. Jeśli interesuje Cię wewnętrzna reprezentacja liczby, musisz ją rozbić na cechę (wykładnik) i mantysę i pamiętać o czymś takim, jak...
Średnia można liczyć na jednej zmiennej. Wymaga to operacji zmiennoprzecinkowych. Trzeba więc stanąć przed wyborem, duże zapotrzebowanie na ram czy większe zużycie czasu CPU. Bascom ma ograniczenia co do liczby operacji zmiennoprzecinkowych w jednej linii Uwagi personalne usunąłem. O przesuwaniu przecinka słyszał? Odczyt z ADC mieści się w zakresie...
Wielkie dzięki za pomoc. Używam zmiennej typu Single ponieważ w dalszej części występuje dzielenie i pojawiają się liczby zmiennoprzecinkowe a z tego co sie orientuje to Word ani Integer takiej możliwości nie mają (chyba, że mają?) :)
Jest to "poprawne rozwiązanie". Poprawne w cudzysłowie ponieważ jak widzę typ SINGLE w Bascomie to aż mnie coś bierze :) Ten sam program napisany bez użycia typu zmiennoprzecinkowego (wykorzystując tylko typ całkowity) wykona się dużo, dużo... szybciej i zajmie mniej pamięci programu i danych.
Obawiam się, że AT90S2313 nie jest tak ambitny jak Ty. Aby wyświetlić temperaturę z dokładnością do 0,1'C z DS 1820 trzeba przeprowadzić kilka obliczeń na odczytanych z czujnika bajtach 7 i 8 (a nie tylko na 1 i 2). Wymaga to operacji na liczbach zmiennoprzecinkowych (chyba, że ktoś się zaweźmie i spróbuje zrobić to na typie Integer). Takie kombinacje...
A nie możesz po prostu robić obliczeń w funkcji obsługi timera 1, zapisywać to do globalnych zmiennych i następnie w głównym programie odczytywać te zmienne jeśli zamierzasz wyświetlić te wartości? Główny ekran to pewnie jakaś pętelka, która odczytuje pewne wartości, jak np. timer 0, temperatura, itp., następnie przelicza wszystko, potem wyświetla i...
W czym programować najlepiej w asemblerze, jeżeli masz zamiar robić w przyszłości poważne projekty! To chyba jakieś żarty :D Kto poważny dzisiaj poważne projekty pisze w asemblerze? Kto się w takim olbrzymim kodzie połapie? Kto po przerwie będzie wiedział "co robił ten fragmencik kodu"? Kto w prosty sposób przeprowadzi obliczenia zmiennoprzecinkowe...
Ale zastanawia mnie jedna rzecz. Czemu piszesz, że bascom jest ok do takiego zastosowania skoro kod zajmuje ci 30 kilo? Dyskwalifikuje to użycie tańszych procesorów. Nie mówię, że bascom nie da rady bo nie zadziała. Zadziała ale z moich praktyk wynika, że jest nieoptymalny w stosunku do C. Może nawet będzie się dało kod zmieścić na dużo mniejszym procku....
Panowie Piszę program w Bascomie do sterowania urządzeniem do cięcia drutu. Sam program jest prosty testowałem go w częściach na Attiny2313 i wszystko pieknie działa. Z uwagi na to że wykonuje operacje na liczbach zmiennoprzecinkowych potrzebuje więcej pamięci i zastosowałem Atmega8. Za żadne skarby nie mogę sobie poradzić z szybkością wykonywania programu......
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...
OMG... odpadlem [; czlowieku! liczba twoja zajmuje dwa bajty. wiec najpierw zapisz ... pierwszy, a potem... drugi. po co te kombinacje? moze zapisuj to jako ilosc wielokrotnosci jakiejs fajnej liczby pierwszej (np 23) oraz reszta - bedzie jeszcze bardziej bezsensownie. mozesz zapisywac w eepromie 16bitowo? no to w ogole po co te kombinacje? moze pokombinuj...
Ja też dorzucę swoje trzy grosze: 1. Najbardziej mnie zraziło to obcinanie wyniku z ADC do jednego bajta. Nie obraź się - ale problem w wysyłaniu więcej niż jednego bajtu na raz - to nie powód aby sobie "podcinać gałąź" 2. tak jak już podpowiadano - można uruchomić ADC w tryb free run i wręcz dokonywać odczytów w przerwaniu - bascom to też potrafi....
Może jednak zdradzisz mi te niespodzianki? Zaoszczędził byś mi sporo pracy. Teraz tak z rękawa nie posypie, hmm... przykładowo Do...Loop jest mniejsze niż while...wend. Generalnie chodzi o zastępowanie, niektórych instrukcji BASCOM'owych własnymi rozłożonymi na części pierwsze warunkami. O działaniach na liczbach zmiennoprzecinkowych już nie wspomnę,...
Przejrzałem naszą dyskusję i zajrzałem do dokumentacji Bascom i moim zdaniem masz w swoim programie problemy z arytmetyką i typami danych W Twoim programie ma miejsce następujący tok obliczeń: 1. pobierasz z ADC dwie liczby 8-bitowe w zakresie 0..255 każda (bez znaku): Pomiarl i Pomiarh 2. następnie dokonujesz podstawienia: Dodano po 3 I jeszcze jedno:...
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...
Przecież w bascomie możesz se robić wstawki w asamblerze do obsługi dokładnych operacji na rejestrach czy krytycznych czasach . ALe ktoś kto nie klepał kody w asm tego nie pojmie. Na C-64 pisałem w Basic: Dodano po 17 Ale jak trzeba dołożyć scenariusze z błędami, alarmami itp. i reakcjami na nie to nagle maleństwa przestają być wystarczające. Dokładnie,...
Znalazłem specjalnie dla Ciebie jeszcze kilka bajtów :D ahahahahaha Bascom stara się być "ignorantoodpornym" czyli jak ktoś może czegoś nie wiedzieć to on to, na wszelki wypadek, robi za niego. W języku C każdą zadeklarowaną zmienną najczęściej inicjuje się jakąś wartością ponieważ po reset nie można być pewnym, że w niej znajduje sie zero lub potrzebna...
a wiesz czemu niektorzy tak psiocza na bascoma? bo oducza myslenia. procesor jest procesorem i wciaz operuje wg zasad opisanych ... no gdzie? w instrukcji do bascoma czy w datasheecie procka? wydaje sie wam, ze skoro pisze, ze mozna zaladowac dowolna wartosc, to mozna sobie spokojnie wpadkowac tam liczbe 128-bitowa, albo moze lepiej zmiennoprzecinkowa...
Powiem tak, ze jeśli działasz swobodnie w BASCOM i umiesz korzystać z not katalogowych procesorów, to przesiadka na C zajmie Ci z dobrą książką (osobiście polecam I. książkę Mirka Kardasia - sam się na niej uczyłem) 2-4 tygodni. A co do pisania programów w C na AVR i PC to powiedzmy sobie szczerze, że jest to jeden i ten sam język - różni się tylko...
Witam Procek to ATmega16. Kurcze nie mam teraz możliwości sprawdzenia czy zadziała, ale jutro z rana może później napiszę czy zadziałało. Teraz doczytałem dokładnie, że rezultat to zmienna tekstowa a nie typu single, może jak ją deklaruje jako single to się sypie w tym momencie ? A drugie pytanie jeszcze mam takie, że chcę zrobić np. termostat, czyli...
Przy "zabawie" z przerwaniami trzeba pamiętać , by czas obsługi przerwania był krótszy od czasu pomiędzy przerwaniami. Czyli jeżeli ktoś chce w przerwaniu obsługiwać przeliczenie zmiennej zmiennoprzecinkowej , wyświetlacz itp a następne przerwanie przyjdzie np po 100 mikrosek to niech się nie dziwi , że program "wisi". Problem z BASCOM'em jaki miałem...
Mam pytanko oto część programu z postu Odczyt = 1wread(2) T = Odczyt - 16 T = T * 10 T = T \ 16 T = T \ 10 Możecie mi powiedzieć dlaczego najpierw mnożycie przez 10 potem dzielicie przez 16 i dalej dzielicie przez 10 ( czyli 10*16/10=16). Nie lepiej tylko podzielić przez 16. I jeszcze jedno pytanie dotyczące liczb ujemnych Ds przedstawia liczby ujemne...
Poprawiłem błędy, w tym ten związany z częstotliwością a nie z okresem sygnału. Dodałem zmienną typu Single Czestotliwosc, do obliczeń zmiennoprzecinkowych. W Timer0 wpisuję na starcie 131, Config Int0=Rising. Czy dobrze to robię, czy we właściwych miejscach kodu? Pytania: Jak zaokrąglić wynik ze zmiennej Czestotliwosc do dwóch miejsc po przecinku?...
Leszcz72 Już nie przesadzajmy tak z tym procesorem, po to one są by je stosować, cenowo wyjdzie niewiele drożej niż układ na elementach dyskretnych, ale za to można dowolnie rekonfigurować układ. SŁAWEKWW i Svavo Już od dawna zauważyłem liczne słowa krytyki na tym forum odnośnie języka Bascom, jakoś nie mam zamiaru się tym przejmować. Układ został...
Napisałem już programik wyświetlający ciąg znaków (string), ale nie mogę znaleźć funkcji przekształcającej zmienną zmiennoprzecinkową (single) w string. Jest na to jakaś gotowa komenda, czy muszę klepać własną funkcję? EDIT: Sam odpowiem sobie na to pytanie: Konwersję możemy wykonać za pomocą komendy „Fusing” i przy okazji lą ładnie sformatować....
Witam Ja Odczyt temperatury zrobił bym tak: .... 1wwrite &HCC 1wwrite &HBE Lsb = 1wread(): Msb = 1wread(): Minus = Msb.7 Tempa = Msb * 256 Tempa = Tempa + Lsb If Minus = 1 Then Tempa = Not Tempa Tempa = Tempa + 1 End If Tempa = Tempa * 10 'temperatura *10 Tempa = Tempa / 16 Jest to fragment kodu pozwalający na odczyt ujemnych...
Heh ze mną to już tak jest że jak siąde i pomyśle to zrobie! ;) Poradziłem sobie! Muszę zaznaczyć że funkcja ta potrzebna mi była do wysyłania liczby na wyświetlacz LCD. Gdy już napisałem funkcję stwierdziłem, że nie koniecznie musi ona wstawiać tą liczbę do tablicy znakowej i dopiero wysyłać, tym bardziej że tablica mimo że była tworzona za każdym...
Bardzo dziękuje za tak pozytywne opinie ! :) Niestety moim językiem programowania jest mało finezyjny BASCOM, ale to dlatego że nie lubię dużo myśleć i można łatwo uzyskać zamierzony efekt-ale to kwestia sporna. Dzięki za polecenie gotowych płytek pokrytych warstwa światłoczuła,ale to jednak dla mnie nadal za droga metoda :P W któreś wakacje próbowałem...
Układ działa tak jak napisany kod, to znaczy (bez urazy) - bez sensu! Co niby miałoby być wyświetlone w tych 2-ch liniach na LCD ? Przestudiuj tą strone (jest to strona polska lecz w j. angielskim). Link do wersji polskiej tej strony nie jest aktywny.... Ponadto w tym tutorialu zastosowano wyświetlenie wyniku na wyświetlaczu 7-segm LED, oraz do obliczeń...
Działa dokładnie tak jak chciałem. Przeogromnie dziękuję. Tak przy okazji dopytam... Czy w Bash można porównywać liczby zmiennoprzecinkowe? Potrzebuję zrobić coś takiego: -polecenie podane przez (at)vonar działa idealnie-PC odbiera od uC dane w formacie x.xx -chciałbym teraz porównać tą daną x.xx ze stałą daną y.yy -gdy x.xx jest mniejsze od y.yy to...
Witam! Jestem w trakcie pisania softu 3. wersji sterownika do akwarium (1. w ogóle nie wyszła, 2. była bardzo awaryjna). Przesiadam się z Bascom'a na C, przez co mam sporo problemów z nowym językiem programowania. Mój problem polega na tym, że zamierzam zdefiniować 4 piny w tablicy. A mianowicie: #define DEVICE_PIN[4] {2,3,4,5} Jak...
teoria: http://pl.wikipedia.org/wiki/Liczby_zmie... praktyka: Liczby zmiennoprzecinkowe zawsze reprezentują przybliżony wynik. Dokładność przybliżenia zależy od ilości bitów zmiennej i od samej liczby (łatwiej jest przedstawić 111111111111111111111 lub 0,000001 niż 111111111111111111111,000000001 - w tym drugim wypadku część ułamkowa na pewno...
Problem nieprawidłowego zaokrąglania liczb zmiennoprzecinkowych uprościłem i przedstawiam na poniższym przykładzie: $regfile = "m8def.dat" $crystal = 16000000 --------------------------- Dim Nr As Byte Dim Tau_s As Single Dim Tau_w As Word Cursor Off Noblink '.............ukrycie kursora na LCD Cls Do Restore Tab '...............ustawienie się na pierwszej...
piotr5000- te zasady można i należy stosować programująć w dowolnym języku mikroprocesory. One jednak są małe, arytmetyka zmiennoprzecinkowa jest za to pamięciożerna, wyświetlacze są wolne i CLS zawsze jest wolne- podobnie jak HOME. Dodam jeszcze że należy zapomnieć o _delay() i wait. Też w dowolnym języku to z reguły demoluje program. Zarówno w pętli...
Witam Zabrałem się wczoraj za napisanie jednego z pierwszych programów (chyba 3). Ogólnie działanie programu zadowala mnie ................ Zwykle, jeżeli autor uważa że program pracuje poprawnie i jest z tego zadowolony więc kode "musi" byc dobry!(?) Ale skoro pytasz o opinie, to odpowiedź jest: bez urazy.........., bardzo kiepski. Po pierwsze: Nie...
Witam Podepnę się do tematu. Pojawił mi się problem dotyczący zapisu do pamięci danej np. typu long lub single. Wykorzystuje pamięć AT24c04. Mam do zbudowania pewien sterownik, parametry ( nastawy) muszę mieć zapisane w zewn. pamięci, wszystko ładnie i pięknie by było gdyby nie fakt, że nastawy są zmiennoprzecinkowe, a nie stałe liczby. Myślałem żeby...
Hunterhouse ten sposób z liczeniem liczby modulo jest genialy :) Sam na to wpadles?? Na koncu jest jeszcze obliczany pierwiastek,tez to jest dosc czasochlonne dla procka , zastanawiam sie czy na niego nie ma podobnego sposobu :) Czyli beta przyjmuje wartosci od 0- 31, i zmienia sie w zaleznosci od k ,ale caly czas w zakresie 0-31 . Jak dokladnie obliczone...
nie, dzielisz na liczby zmiennoprzecinkowe o podwojnej precyzji i wysylasz w kolejnosci losowej... <sciana> wez no poczytaj na necie o tym co to jest string, char i o sposobie zapisu znakow wg ASCII. na przyklad tutaj http://www.exforsys.com/tutorials/c-lang... http://www.google.com/search?client=oper...
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...
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...
Dzisiaj przetestowałem wersję w C i porównałem wyniki DFT na liczbach stałoprzecinkowych, z wynikami na zmiennoprzecinkowych. Powiem, że rezultat jest co najmniej zadowalający, jeżeli chodzi o ich zbieżność :) Jeszcze pobawię się z okienkowaniem, bo zauważyłem, że po jego zastosowaniu to widmo jakoś przyjaźniej dla oka wygląda. Okienko wprawdzie rozmazuje...
więc ja tez mam zapytanko jak w bascomie zrobić coś takiego aby zapisac dane z tabeli załozmy mam cos takiego U Dodano po 1 tych danych oczywiscie ma być dużo wiecej i miejsc po przecinku też np do 4 miejsc po przecinku ...jeśli miałoby to jakies znaczenie przy wprowadzaniu danych taka informacja:) Witam Można ale jest to procedura dość pamięciożerna....
atmega zmiennoprzecinkowy procesor zmiennoprzecinkowy operacja zmiennoprzecinkowy
formatowanie karty rozmiar alokacji przepływomierz odpowiada kabel rozciągnąć
moduł komfort termet skoda felicia
Zamiana tranzystora BD135 gr10 na BD135 gr16 w stabilizacji termicznej Głośnik Harman Kardon IC6132A Esquire nie włącza się - miga czerwona i biała dioda