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...
Potestuj bo tak na szybko przy poobiedniej kawie klapałem jedną ręką :D Może coś przeoczyłem i trzeba prześledzić. Te złożone operacje w jednej linii dla stałych Bascom robi bez problemu. Osobiście bym tego tak nie napisał. Nie wiem po co to ciągle obliczać jak można raz... [syntax=vbnet]$regfile = "m328pdef.dat" $crystal = 16000000 $hwstack = 64 $swstack...
A tutaj masz pełny Multithreating na AVR. W BASCOMie! Thread_0_label, Thread_1_label i Thread_2_label to 3 kody główne. Na razie jest tam miganie trzema diodami. Oczywiście każda dioda miga w innym tempie. Reszta to obsługa wątków i tego nie nalezy zmieniać jak się nie wie o co tam chodzi. Niestety wszelkie operacje na portach czy zmiennych większych...
Problem może być ... sprzętowy. Otóż Tiny2313 fabrycznie ma ustawiony zegar na 8MHz i preskaler zegara na podział przez 8 czyli pracuje na 1MHz. Jeśli nie manipulowałeś z Tinką to nie będzie zgodna rzeczywista częstotliwość taktowania uC z zadeklarowaną w programie. Magistrala 1Wire jest bardzo wrażliwa na czas poszczególnych impulsów i nie zniesie...
Przecież 63 And 19 to właśnie jest 19. Wszystko działa tak jak należy. Błąd jest, ale w tym manualu który podałeś.
Może problem jest z tym że zmienne są innego rodzaju jedna typu bit a druga typu byte, nie zawsze operacje na różnej pojemności zmiennych przynoszą oczekiwane rezultaty.?
Przecież same funkcje fuzzy logic to zwykłe operacje na zmiennych typu Float.
Witam. W jaki sposób można w kompilatorze Bascom zapisywać w jednej linii więcej niż 2 operacje matematyczne - tj. dodawanie, odejmowanie, iloczyn 2 zmiennych itp.. Bo mam złożone działania, a dzielenie tego na poszczególne kroki mające za każdym razem tylko 2 zmienne które przykładowo mnożę jest bardzo uciążliwe i muszę stosować dodatkowe zmienne pomocnicze......
Coś enigmatycznie i mało przejrzyście to tłumaczysz napisz jakio rozmiar ma zmienna i co ma zrobić . Jeśli chcesz żeby robiła operacje na porcie możesz to osiągnąć przez wybór typu"case" lub zmienna tablicową czyli w zależności od pobranej zmiennej wybierasz wartość z tablicy i wysyłasz ją na port
Po prostu operacje na zmiennych wielobajtowych zajmują więcej czasu ja staram się optymalizować pod swoje potrzeby to co można tak aby nie operować na wielobajtowych liczbach szesnastkowych o co chodzi?
Moim zdaniem najlepiej wykonywać operacje na zmiennych pośrednio przez któryś z rejestrów-to z powodu możliwości dostępu do każdej komórki RAM-u, także tych ≥128÷256 (niektóre typy 51' posiadają taki właśnie obszar RAM-u, dostępny jedynie przez adresowanie pośrednie) Fajfer2
No właśnie ta pętla For tyle zajmuje. To jest jedna z wad kompilatora BASCOMa (a nie samego języka BASCOM). Nieoptymalizowany dostęp do zmiennej licznikowej. Pętla za każdym razem ładuje zmienną z RAMu (16-bitową) i ją sprawdza (porównuje do stałej też 16-bitowej). Potem zwiększa i zapisuje z powrotem do RAMu. W C pobrana była by raz i nie była by porównywana...
jednak nie wiesz... to ze nie mozesz zadeklarowac wiekszej ilosci zmiennych NIE MA NIC DO RZECZY. fizyczne ograniczenie. lodowka ma pojemnosc 100l, to znaczy, ze nawet jakbys chcial, to nie wepchniesz do niej 101l. tyle ze produkty o objetosci 50l mozna ulozyc tak, aby zajely 52l, albo 84l. moze sie tak zdazyc, ze nie uda ci sie recznie poukladac 70l...
Koncepcja liczenia się zmieniła. Coś źle robię. Chce zapisać pomiar czasu jako jedna zmienna, Pomiar = Sekundy_d + " " + Sekundy_j "" + Setne_d "" + Setne_j Jak i : Pomiar= pomiar + str (sekundy_d) pomiar = pomiar + str (sekundy_j) wtedy to już kosmiczne wyniki mam. Jak to zapisać poprawnie ? Po pierwsze: Bascom akceptuje tylko jedną operacje arytmetyczną...
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...
Panowie, cały problem tkwi w konwersji zmiennych. Pewnie nikt nie wie co się stanie jak BASCOM zrzutuje integer (16) i to pewnie ze znakiem (signed) na bajt albo lepiej char (bajt ze znakiem). Trzeba się dowiedzieć jak on to robi albo po prostu zacząć pisać w poważnym języku na poważny kompilator (bez obrazy oczywiście) :) Pozdrawiam (M.) Nie wiedzą...
WItajcie Czy jest szansa, by w 2 kB 90s2313 zmieścić obsługę DS18B20 wraz z obliczeniami by uzyskać na LCD temperaturę z wartościami po przecinku. Walczę z optymaliacją programu i wszystko łacznie z LCD i komunikacją sie mieści, ale gdy dodam operacje obliczania temperatury to zawsze wychodzi mi ponad 2 kB. Jak do procedury DS18B20 i na jakich zmiennych...
...Ps. Tak, już dla ścisłości to skoro do tej pory nie używałem tej pamięci to czas to zrobić. A przy okazji to czy zmienną typu STRING też tak samo łatwo tam zapiszę...? To działa ze zmienną dowolnego typu :D Ijeszcze jedno podejście do tematu.. Napisałem kod z uwzględnieniem Twoich uwag Piotrek tzn: Dim x As Eram Single Kod się skompilował i jest...
Szukam od kilku tygodni jakiejś ciekawej książki o programowaniu mikroprocesorów AVR w języku C w okolicznych bibliotekach i księgarniach oraz w internecie. Jednak znajduję wszystko albo na assemblera albo na bascoma. Assembler jest dla mnie zbyt żmudny natomiast bascom niesatysfakcjonujący dlatego wybór padł na C. Niestety niewiele istnieje polskich...
Nigdy nic nie napisałem na PC.A z czym bascom miał problemy to doskonale poznałem ,nawet przy wolnym podawaniu impulsów na przerwanie i dodając coś w nim na zmiennych single LCD zaczynał wyświetlać syf. Dodając coś do worda lub bajta nie było takiego problemu, więc skróciłem podprogram na max. W przerwaniu dokonuje pomiaru przebiegu,aby ten przebieg...
E tam, nic strasznego.... Tu masz błąd: Dim U_wy As String * 2 Zwiększ to na: Dim U_wy As String * 3 I leci aż miło. Nie mieścisz się w zmiennej, that's all:) Poza tym skonfiguruj watchdog oraz TIMER. Pewnie jeszcze coś tam siedzi (wyświetlanie bez wymazywania poprzednich, większych o rząd wartości na przykład) ale to tak na szybko. Pozdrawiam, TD
Myślę że Ci którzy piszą swoje programy bo są dociekliwi i potrafią rozwiązywać problemy nie piszą postów na Elektrodzie. Tutaj jak pokażesz ranę to Ci ją jeszcze posolą Ahahahahaha. Posty z prostymi problemami najczęściej piszą osoby które chcą osiągnąć jakąś funkcjonalność a nie jest ich celem życiowym zostanie programistą. Kiedy wiec akurat mam czas...
Ź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
Zdefiniuj wszystkie zmienne na jakich robisz operacje dzielenia i modulo jako INT. Zmienna jednobajtowa się przekręca do zera po osiągnięciu wartości 256.
Jak XX i ZZZ to znaki przedstawiające liczbę, i dodatkowo ilość znaków jest zawsze taka sama to masz cztery proste operacje: s=MID(<parametry>), x=VAL(s), s=MID(<parametry>), z=VAL(s).
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
Wszstko dlatego, iż zmienne typu Single są nieco odmiennie zapamiętywane w pamięci i mają wyjątki (np. NaN, QNaN, SNaN) które nie są liczbami, i każda operacja arytmetyczna z nimi powinna wywołać błąd operacji i jego zgłoszenie - a tego Bascom niestety nie obsługuje (jak i spora ilość innych kompilatorów). Operacja z jawną zamianą znaku jest bezpieczniejsza...
A jeśli chodzi o "Błędne operacje matematyczne" , to: Czy rozumiesz dlaczego zmienną Pokaz , zadeklarowałeś jako Integer , a nie np. Byte,String czy Double :?: Sprawdź jakiego typu zmienne oferuje Bascom Basic , postaraj się zrozumieć czym one się miedzy sobą różnią , a wtedy 1-szy problem masz z głowy ;) Piotrek
A mam jeszcze taki jeden pomysł. Bo błędy będzie Ci wywalać przy próbie operacji na zmiennych różnych typów. Wszystkie zmienne w BASCOM które poddajesz operacjom muszą mieć zgodne typy. Więc prześledź jeszcze raz program lub podaj go tu na stronce może my conieco wypatrzymy :)
Witam. Operatory logiczne są stosowane przy operacjach na bajtach, bitach, zmiennych liczbowych. Nie na operacjach zmiennych tekstowych. Poczytaj w help.
Nic nie jest wcześniej robione automatycznie a także ty nie musisz robić żadnych takich sztuczek cyrkowych jak to podałeś w ostatnim przykładzie. W obydwu przypadkach albo za każdym razem bez żadnych dodatkowych czynności odbędzie się ta sama prosta operacja. Zarówno do zmienna_byte jak zmienna_typu_string trafi dokładnie ta sama wartość czyli 97 czyli...
Witam, Dawno nie korzystałem z BASCOM'a, więc nie pamiętam już składni, ale algorytm jest następujący: 1) zapisujesz sobie w zmiennej temperaturę w stopniach 2) wykonujesz dzielenie całkowite temperatury przez 10 -> otrzymujesz cyfrę dziesiątki, zapisz do zmiennej x 3) wykonujesz dzielenie modulo temperatury (reszta z dzielenia) przez 10 -> otrzymujesz...
Tak: Zmienna_Byte = Zmienna_Word ? Założyłem, że przy takiej operacji kompilator sypnie błędami, ale rzeczywiście nie sprawdziłem tego.
Help BASCOM-a mówi : ERAM Most AVR chips have internal EEPROM on board. This EEPROM can be used to store and retrieve data. In BASCOM, this data space is called ERAM. An important difference is that an ERAM variable can be written for a maximum of 100.000 times. So only assign an ERAM variable when it is needed and not in a loop Co oznacza że raczej...
Hej! Zobaczcie jak ja to robię, może komuś sie to przyda: 'Powiedzmy ze zmienna Liczba(single) wynosi 22.62555426 Temp = Int(liczba) ' dzieki temu poleceniu odcinam czesc setna czyli ' zmiennej Temp(byte) przypisuje liczbę 22 Liczba = Frac(liczba) ' dzieki temu poleceniu odcinam czesc ' dziesiętną czyli zmiennej Liczba(single) przypisuje ' liczbe 0.62555426...
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...
Moze zmien algorytm tych obliczen. Wydaje mi ze ze jak po "Do" zrobisz od razu: [syntax=basic4gl]For Cykl = 1 To Y Z = ( Cykl * X ) \ Y Prc = ( 100* Cykl ) \ Y Call Oblicz Next Cykl[/syntax] to bedziesz mial co potrzebujesz i to bez uzywania single Nie znam dobrze Bascom, wiec jak nie mozna robic tylu operacji w jednej linii to dodaj zmienna pomocnicza...
Z tego co pamiętam to BASCOM sie sypie w symulacji programowej podczas operacji na zmiennych typu Long. I pewnie nie zostało to wciąż poprawione. Wiem wiem powinienem ściągnąć nowego BASCOMa.
Error 10:Wrong type(bit,byte,integer,word,or string) Linia przy której Bascom protestuje , ma za zadanie zmienić znak zmiennej T2 , na przeciwny.To co przechodzi w BascomAVR , nie działa na Bascom8051-fakt.Każdy , kto chce pisać jakiekolwiek programy na uP czy uC , nie może być z algebrą na bakier :D 2 przykłady: If T2 < 0 Then T2 = T2 * -1 lub...
A jak byś chciał np. najmłodszy bit z bajtu odczytać i przypisać go do jakiejść zmiennej bitowej to najprościej: [syntax=basic4gl]Dim A As Byte Dim B As Bit ' ' B=A 'najmłodszy bit przypisany do zmiennej bitowej B[/syntax]
Jak chcesz wpisywać liczbę z klawiatury to powinieneś uwzględniać wagę poszczególnych składników tej liczby. Pierwsza cyfra z trzech to, waga=100 zatem key*100, przy następnej cyfrze waga=10 zatem key*10, a na koniec samo key bo waga=1 i operacja mnożenia jest zbędna, jak to wszystko zsumujesz to otrzymasz ostateczną liczbę. Np. liczba 467 to 4*100+6*10+7....
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....
Moja odpowiedź jest taka: Asembler - ciężki, na różne rodziny mikrokontrolerów musisz się uczyć innego (minimalne różnice), różne rodziny mają różną architekturę, ciężki do dużych projektów, ale za to pełna "kontrola" nad układem:D C - praktycznie na każdy mikrokontroler wygląda tak samo, drobne różnice polegające na innych bibliotekach, typach danych,...
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...
I jeżeli np. zmienna_tekstowa , z której będę pobierał poszczególne znaki może mieć max 5 znaków, a zapiszę do niej np. tylko 3 - tj. "ABC" . I jak jako pierwszy znak do zwrócenia(tj " początek ") podam pozycję np. 1, a ilość znaków 1 - to mi zwróci ze " zmienna_tekstowa " do zmiennej " zmienna " literkę A. Tak. -> A co będzie, jak podam jako pierwszy...
Prze locate nie zrobisz. Wrzuć cały tekst do zmiennej tekstowej, nawet jak będzie za długi to nie problem. Następnie w pętli wytnij wymagany fragment z tego tekstu na podstawie zmiennej liczbowej. W pętli zwiększaj lub zmniejszaj zmienną, a wycięty tekst wrzucaj na wyświetlacz. Nie pisałeś w jakim języku, zapewne BASCOM o tego wiele na forum. Poszukaj...
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"...
Pewnie zostanę zaraz zlinczowany, ale proponuję zacząć przygodę z mikrokontrolerami od programowania w Bascom. Język nie jest oczywiście rozwojowy, ale pozwala łatwo przyswoić sobie ogólne zasady programowania - pętle, procedury, typy zmiennych, operacje na portach. Jak dorośniesz, to przejdziesz na C. Osobiście bazowałem na książce Marcina Wiązani...
Nie możesz "przekierować" pinu. Przypisanie przerwania zewnętrznego jest hardwareowe. Generalnie wszystko zależeć będzie od tego jak masz skonstruowaną główną funkcję. Jeżeli stosujesz w niej co rusz jakieś opóźnienia to będzie lipa, ale jeżeli cała główna funkcja wykonuje się szybko, bez zbędnych opóźnień to wtedy bez problemu w głównej pętli analizujesz...
To akurat nie wina BASCOMa. Masz zmienne na 3 znaki podczas gdy potrzebujesz na 4: Volt = Fusing(v , "#.$$") Czyli znak, kropka (czyli też znak) i dwa znaki. Razem 4 znaki. Winą BASCOMa mogło być dopiero to że zmienne String wpływały na działanie przycisków. Ale jednak tak nie było. Teraz to przeanalizowałem i to jednak nie to. Przyciski...
operacje zmiennych bascom zmiennych bascom operacje string
dobrać bezpiecznik silnika suszarka ariston first flash
wahacze buggy schemat automatu schodowego
Programowanie pilotów Sigma AS 227 – procedura z pilotem MASTER, dodawanie i kasowanie Radio ESKA Rzeszów 99,4 MHz – brak odbioru, przerwy w nadawaniu, nadajnik Sucha Góra