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ś.
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 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...
Ź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. Operatory logiczne są stosowane przy operacjach na bajtach, bitach, zmiennych liczbowych. Nie na operacjach zmiennych tekstowych. Poczytaj w help.
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 :)
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.?
Bardzo przepraszam za odkopywanie tematu. Ale mam pytanie Czy tak samo można robić ze zmiennymi single -> integer i odwrotnie. Czy konieczne jest do tego typu operacji angażowanie kolejnej zmiennej ? Czy istnieje inny sposób ?
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.
Przecież same funkcje fuzzy logic to zwykłe operacje na zmiennych typu Float.
tak jak napisał kolega bascoma AVR czeka na początku instrukcji writeeprom czy pamięc jest gotowa do zapisu. a tak wogółe to ja stosuje zmienne typu eprom gdy chce zapisaccoś do eproma. oczywiście należy uważać z ich wykożystaniem (nigdy w pętlach) dim XXX as Eram Word na zmiennych eRam nie mozna stosować operacji tylko XXX = coś lub coś = XXX
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
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]
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...
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...
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...
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...
Nie tędy droga, Ty musisz zrobić coś dokładnie odwrotnego - nie wygenerować sygnał, ale go zmierzyć. Rozwiązania są 2, ale jeśli programujesz w bascomie i nie masz ochoty na operacje na rejestrach w procesora to kurczą się do jednego. Mianowicie: 0. ustawiasz timer na zliczanie impulsów i zmianę wartości jakiejś zmiennej - parametry dobierz w zależności...
Witam! Nie moge sie doszukac polecenia, lub sposobu w Bascomie-avr, ktory umozliwiłlby wyciagniecie ze zmiennej (bajtu) kilku bitow i po ukonczeniu operacji powtornie zapisanie zmodyfikowanych bitow do bajtu. Prosze o pomoc...
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
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...
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....
Rozumiem że w przerwaniu od timera ustawiam jakaś flagę i na jej podstawie robię odpowiednie operacje czy w przerwaniu można od razu inkrementować zmienną L_d?
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...
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...
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. 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......
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...
Witam! Podejrzewałem, że z wywołaniem tej funkcji może być coś nie tak. Jedank przeszukiwanie internetu jak i lektura książki dotyczącej bascom-a nie pomogła mi rozwiązać tego problemu. Dlaczego zwracasz moją wagę na zaokrąglenie zmiennej il jest zle zadeklarowana ? Proszę o więcej światła także na operację wywyołania. Dziękuje i pozdrawiam!
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...
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...
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...
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
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...
Czy kolega wie, że w BASCOM Basic są tablice? Deklarujesz mnóstwo zmiennych Aa i potem jeszcze robisz ciągi operacji Bb = Bb + Aa jak można to łatwo ztablicować i robić w pętli. Tak samo SELECT CASE zamieniłoby się w prostą pętlę. Pomyśl nad tym, bo pamięć Flash nie jest rozciągliwa.
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,...
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....
Dobrze, że chcesz to przesyłać w trybie tekstowym. Zatem od strony mikrokontrolera poczytaj sobie w Bascomie o poleceniach: Config Seriallin INPUT Config INPUT Ischarwaiting a także do operacji na łańcuchach znaków: MID LEFT RIGHT itp to powinno cię naprowadzić.
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...
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...
Jesli chodzi Ci o rozkladanie na setki, dziesiatki i jednosci to sprobuj tego: Dim Liczba As Integer Dim Pomocnicza As Integer Dim Setki As Byte Dim Dziesiatki As Byte Dim Jednosci As Byte Liczba = 852 Setki = Liczba / 100 Pomocnicza = Setki * 100 Liczba = Liczba - Pomocnicza Dziesiatki = Liczba / 10 Pomocnicza = Dziesiatki * 10 Liczba = Liczba - Pomocnicza...
Pozwolę przyłączyć się do tematu. Przeglądając kod natrafiłem na deklaracje zmiennych w dziwny sposób Dim Tekst1 As String * 10 Dim Tekst2 As String * 10 Dim Tgodzina As String * 4 Dim Tminuta As String * 4 Dim Tsekunda As String * 4 Co oznaczają te znaki mnożenia? Czy można z takimi zmiennymi wykonywać operacje arytmetyczne jeśli tak to jak? ja jak...
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...
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...
Flagi to nic innego jak zmienne, które gdzie indziej modyfikujesz, a gdzie indziej odczytujesz. Tu nie ma żadnej filozofii - proste operacje porównywania wartości w instrukcjach warunkowych i odpowiednie działanie.
Zgodzę się z przedmówcą Przerwanie od RC5. Przejście do etykiety odczytującej komendę następnie Select case.... W zależności od odczytanej komendy wykonuje operacje na zmiennych odpowiedzialnych za kolory. Ewentualnie wyświetla jeszcze jakieś info na LCD. Takie rozwiązanie powinno pomóc ;)
A może podeszłaby instrukcja zmienna1 = MAKEBCD( zmienna2 ) gdzie: zmienna1zmienna, do której zapisana będzie liczba w formacie bcd, zmienna2zmienna zawierająca liczbę dziesiętną. Format BCD to coś takiego, że w 4 najstarszych bitach zakodowana jest binarnie liczba dziesiątek a w 4 młodszych liczba jedności. Normalny zakres liczby 8 bitowej to 0-255...
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"...
Witam Wszystko jest w pliku od kolegi SQ1FTB. Funkcję Sub Synteza realizuje wysyłanie danych do LM7001. Dane dla częstotliwości wysyłane są bit po bicie ze zmiennej Fpom. Zapis Fpom.a oznacza, że pobierasz bity opisane zmienną a. Tak robisz dla bascom-a. W c taką operację zrealizujesz wykorzystując maskę bitową np. 00000001 mnożysz ją przez Fpom. Wyniku...
Jest jeszcze jedna możliwość jeśli zawartość zmiennych ma być zapisana kodzie BCD. Skorzystanie z klauzuli AT...OVERLAY. Wtedy mamy zmienną bazową typu Word i dwie mapowane na nią zmienne typu Byte. Daje to oszczędność w postaci braku operacji matematycznych, a także oszczędność miejsca. http://avrhelp.mcselec.com/dim.htm?zoom_...
[syntax=basic4gl]If Flaga = 1 Then Flaga = 0 Incr Co4ms[/syntax] IIRC JEDNA operacja w linii. IF WARUNEK THEN DZIAŁANIE i koniec, a u Ciebie masz przypisanie 0 do zmiennej Flaga oraz zwiększenie o 1 zmiennej Co4ms.
Czy jeżeli w Bascomi-e, w przerwaniu, ............ ......... czy zapis będzie trwał, a procesor w tym czasię będzie już wykonywał inne rozkazy? Zapisywana jest zmienna bajtowa. Wpis wartości zmiennej do EEPROM nie odbywa sie samoczynnie, jak powiedzmy przesączanie wody przez lejek(!). Tego wpisu dokonuje processor; nie ma tam pośrednika (chyba jedynie...
Poszukaj jeszcze moich postów na ten temat. Co prawda było to w bascomie ale operacje na rejestrach = da się zastosować gdziekolwiek. I tam było sprzętowe I2C slave w M8 z 4 zmiennymi które można było przeczytać sobie po i2c.
Zwiększ czas między przerwaniami a dodatkowo wiekszość operacji związanych np z wyświetlaniem zamieść w pętli głównej programu pod odpowiednią flagą. Temperaturę to na dodatkowej fladze np co 1s albo co 2s wystarczy.
... A więc, wynikało by z tego, że jeśli w pętli przemiatamy po kolei kanały ADC 0...7 to każdy pomiar zabierze minimum 25 cykli dla każdego kanału. Nie wspominając o tym, że w rzeczywistości bascomowa instrukcja GETADC() (pomiar i przypisanie wartości do zmiennej) może zabrać więcej niż 25 cykli. Nie do końca, mylisz illość taktów przetwornika ADC...
Witam, mam wrażenie że Bascom strasznie pożera pamięć RAM, wystarczy zadeklarować kilka zmiennych typu double i już program nie chce się kompilować, podczas gdy na analogicznym procesorze PIC, programowanym w C, te same instrukcje nie powodują zajęcia pamięci RAM, a robi to dopiero inicjacja zmiennych, czy wykonywanie na nich operacji arytmetycznych,...
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...
Spróbuj użyć tego sposobu obsługi parametrów zapisywanych w EEPROM (traktujesz je jak zwykłe zmienne): Dim Reserved As Eram String * 8 'Przyzwyczajenie ze starych AVRów - zapobiega(ło) utracie danych z początku obszaru EEPROM :) Dim Zmienna1 As Eram Byte Dim Zmienna2 As Eram String * 8 Dim Zmienna3 As Eram Long Dim Temp as Byte [...]...
Hej. Tak też działa. Bajtow = DL_Lini * Il_Lini 'Adres = 2 For A = 1 to Bajtow ReadEEprom Bitmapa8, A 'Adres ' tu operacja z przesłaniem danej ' Incr Adres Next A I pozbywamy się zmiennej inkrementowanej 'Adres' im mniej tym lepiej. Roko
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?
hmmm a ja muszę jeszcze coś dodać :) dane odczytujemy ze scratchpad'u (RAM) "słowo jest przesyłane w odwrotnej kolejności"... w funkcję makeint() też wpisujemy z odwrotnej kolejności (najpierw LSB) więc idealnie sięona do tego nadaje zmienna stypu single zabiera aż 4 cenne bajty ramu i potem trzeba jeszcze dodawać fusin co znacznie zwiększa ilość generowanego...
Wciąż nie wiem jak działa bascom...;] armcc umieszcza zmienną lokalną na stosie jeśli gdziekolwiek jest używany jej adres. Analizując kiedys listing zauważyłem nawet patent, że operacje na zmiennej wykonywały się tylko na rejestrze (wyliczał się kolor), a bezposrednio przed pobraniem jej adresu wartość została skopiowana na stos (dla DMA). Optymalizacje...
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
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...
To pewnie wynika z tego że powstało dużo różnych AVR`ów. Jeśli na początku ktoś korzystał tylko z jednego typu to mógł sobie w IDE ustawić konfigurację dla stosów a nawet wyświetlacza LCD czy I2C. Stąd dla wstecznej kompatybilności dalej tak można zrobić. Na przykład ustawienia dla stosów są tutaj tylko moje są już zmienione bo mogę szybko wkleić to...
mam przerwanie w którym wykonuję operacje na zmiennych "globalnych" niestety po powrocie z przerwania moja zmienna odtwarza sobie wartość z przed przerwania. Czy jest jakaś możliwośc przekazania wartości z przerwania do programu głownego, oprócz on interrupt nosave? Zdanie rozpoczynamy wielką literą - proszę poprawić. Proszę stosować tagi w tytule -...
wiele przykładów na tym forum dopuszcza działania na zmiennych w eramie. Czyżby ich autorzy nigdy nie sprawdzali czy proponowane przez nich rozwiązania są możliwe do realizowania. Sam niejednokrotnie napotykałem przykłady programów gdzie zmienne w eramie są poddawane rożnym operacjom... Nic nie kumam, cały czas mam nadzieję ze coś robie źle, coś maksymalnie...
O ile mi wiadomo to Bascom w jednym wierszu potrafi wykonać tylko jedno działanie i tylko na dwóch zmiennych Pisałem o tym w #6: Bascom, który w jednym wierszu potrafi wykonać jedną operację dzielenia, mnożenia i tak też jest napisane u mnie to równanie. Widzę i to jest problem Bascom, bo nie ma w nic czegoś takiego jak kolejność działań, nawiasy....
Witam po dalszych nocnych eksperymentach. Okazało się, że problem leży nie w konflikcie pomiędzy int0 a timerem, a w samej inkrementacji zmiennej single. gdy typ zmiennej, którą inkrementowałem w przrwaniu od int0 zmieniłem na word wszystko jst OK, dlaczego inkrementując single w tym przerwaniu dostawałem w wyniku jakieś śmieci po przecinku a i wartość...
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ą...
Ostatecznie rozwiązałem to tak: dim ulamek$ as single dim zmienna_byte$ as byte Sub Wyswietl_wynik Ulamek$ = Frac(wynik$) If Ulamek$ <> 0 Then Print Fusing(wynik$ , "#.##") ; If Ulamek$ = 0 Then Zmienna_byte$ = Wynik$ Print Zmienna_byte$ ; End If End Sub Dobrze, że kompilator akceptuje przypisanie wartości zmiennej single...
Nie stawia się nigdy operacji w tym miejscu, szczerze to jestem zdziwiony że to w ogóle się kompiluje. Taki zapis zaciemnia program. Co to jest test[3]? To tablica pojedynczego znaku, liczby? Musisz objaśnić wszystkie używane zmienne, z kapelusza nikt nic nie wywróży;)
Mam taki problem z napisaniem kodu w BASCOMIE. Nie chodzi o to abyście mi podali na tacy fragment kodu źródłowego tylko ogólnie podsunęli koncepcje jakby to można zrobić a ja sobie już poradzę. Otóż dajmy na to mam 8 zmiennych (np. a,b,c,d,e,f,g,h). Problem polega na tym ,że uC ma "wylosować" na początku pracy programu wartości tym zmiennym w przedziale...
W Bascomie optymalizacja stara się skrócić program, rozpisując inaczej pewne operacje. Dowodzi temu załączony przykład. Oczywiście przekłada się to na zmniejszenie rozmiaru kodu, a co za tym idzie - także przyśpieszenie jego wykonywania. Niestety kompilator jest tak zbudowany, że tam gdzie tylko można używa gotowych fragmentów - pobranych z bibliotek,...
Zasiedziałem się trochę i porobiły się błędy. Zmieniłem co trzeba, fragment kodu wygląda mniej więcej tak: D1 Alias Portb.1 ... Dim A As Byte ... Do ... Elseif Pind.1 = 0 Then Toggle D1 A = A + 50 Waitms A Elseif Pind.1 = 1 Then Ml1 = 0 Mr1 = 0 Ml2 = 0 Mr2 = 0 D1 = 0 ' Wykluczenie możliwość wystąpienia stanu 1 po Toggle End If Loop ... End *W miejscach...
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...
Proszę listingi umieszczać w otoczeniu "Code". Post poprawiłem. I zniknął BOLD :P Dodano po 2 polecenie Command = Command And &B01111111 realizuje sumę logiczną ponieważ interesuje nas tylko 7 bitów tego bajtu Nie znam się na Bascomie, ale AND to iloczyn (logiczny). Po tej operacji w zmiennej Command będzie zawsze wyzerowany najstarszy bit.
operacje na single zajmują więcej pamięci ( tracisz cenne miejsce na kod ) . Jeśli w pętli 100 razy wykonasz operacje na zmiennej SINGLE to na pewno będzie to wykonywane znacznie dłużej niż na zmiennej WORD . Dlatego do uśrednienia weź dane w postaci WORD lub LONG ( zmienna Wo czyli wartość odczytana ) , również porównania wartości rób na tych typach...
Przy wykonywaniu operacji arytmetycznych w Bascomie wszystkie zmienne powinny być tego samego typu (u mnie np. Long) jednak zajmuje to trochę RAMu, jedna zmienna to aż 4 bajty. Przedstawiam tutaj moje rozwiązanie podziału zmiennej na wyświetlacz 6 cyfrowy LED. 'globalne zmienne dla wyświetlacza 7seg Dim Cyfra1 As Long 'cyfra jednosci Dim Cyfra2 As Long...
To może zacznijmy od początku. Od samych mikrokontrolerów. Tyle, że w dzisiejszych czasach wybór uC można podzielić na 8, 16, 32-bit. Czy to Z-8, czy ARM to już sprawa drugorzędna bo nie pisze się w ASM tylko w C. Pomijam niszowy, nierozwojowy (w sensie innych rodzin niż AVR i zapomnianego 8051), nieprzyszłościowy Bascom. ASM to już mało kto używa,...
Nie dokładnie opisałem. U mnie A01 jest uzyskiwane ze zmiennej Sring - i tu jest problem jak to wyświetlić. Może tak - w wyniku operacji na zmiennej string otrzymuję wynik A01(też string). I teraz potrzebuję wyświetlić to co jest zapisane pod zienną A01 (czyli w przykładzie tekst1. c jest string = 5 , d jest string = 0, A50 ="Test1" B = C + D E = Val(b)...
Tak, programuje procesor bezpośrednio w Bascomie używając stk200/300. Problem rozwiązałem usuwając zmienne Dim Etab_czas1(40) As Eram Long At 1 'tablica zawiera wszystkie kolejne czasy operacji na zaworach Dim Etab_czas2(40) As Eram Long At 161 wtedy odczytuje z pamięci właśnie za pomocą Readeeprom Z, adres_bajtu Jest to dla mnie trochę...
W bascomie różnica będzie niewielka , tylko dlatego że bascom jest a w zasadzie to trzeba powiedzieć że nie jest doskonały . Różnica jest taka jak wynosić śmieci samemu lub wykorzystać do tego młodszego brata i o ile brat nie wymaga patrzenia przez okno czy śmieci trafiły do naszego śmietnika , to w tym czasie można spałaszować lody w lodówce , wysłać...
Błędy w operacjach na zmiennych float - błędne porównania Skopana obsługa timera0 w niektórych up To samo z spi Beznadziejna obsługa stosow Niejasne błędy z rc5 Niektóre programatory źle działają we współpracy z tym programem, m in stk500. I jak kolega chce się uczyć c to niech da spokój z bascomem
To może (chociaż nie musi) mieć jakiś związek z tym, że czytasz 3 razy rejestr Udr. Podstaw go jeden raz pod jakąć zmienną i kolejne testy i operacje rób na tej zmiennej, a nie na Udr. No i wyrzuć ten Waitms z obsługi przerwania! Coś tak: [syntax=basic4gl]Enter = 0 Kod_znaku = Udr if Kod_znaku = 13 Then Enter = 1[/syntax]
Witam. Wiem, wiem powiecie wrzuć w wyszukiwarkę, a nie zawracaj nam głowy. Jednak wyszukiwarka dzisiaj ciągle wywala mi pustą stronę dlatego piszę tutaj bezpośrednio. A oto co mnie gnębi. Mam odczyty z DS18B20 temperatury zapisanej w zmiennej typu SINGLE. Dla utrzymania zadanej temperatury stworzyłem stałą liczbową instrukcją CONST i to mi działa. Nadszedł...
1 Czy używasz timerów ? 2 25 zmiennych single i dużo operacji matematycznych ? Jeśli masz timery i dużo liczysz to może czas obliczeń przekracza czas trwania timera i program " idzie w krzaki " Sprawdź czy jeśli zmienne single zamienisz na np. double lub long ( nie dbając o prawidłowy wynik ) program też zawiśnie podaj kod może wymyślimy coś więcej
Ja Bascoma w zasadzie nie znam, ale cudów nie ma - dzielenie 32-bitowych liczb na 8-mio bitowym procesorku jest operacją kosztowną... Jak nie brakuje Ci pamięci to możesz ewentualnie stablicować dzielnik (zamiast go dzielić przez 10) - powinno być c.a. dwa razy szybciej. Jeżeli w Bascomie jest typ Word, to cztery ostanie dzielenia mógłbyś robić na zmiennej...
dużo prościej byłoby jakbyś zastosował 16-bitowy licznik COUNTER1 u mnie w bascomie często "counter1 = 5878" nie działa.. nie wiem może bascom coś miesza przy operacji na tych dwóch rejestrach więc polecam coś takiego jest TH1 czyli starszy bajt counter1 i TL1 czyli młodszy jeśli starszy = 1 a młodszy 0 to całość wynosi 256 korzystając z counter1 (16bitów)...
O matko! nie wiedziełem że ty w Bascomie piszesz. Hmmm a może Bascomowi przeszkadza ten nawias (95) ? zresztą po co go w ogóle dałeś ? Poza tym taka operacja jest i powinna być w pełni możliwa przecież zarówno zmienna1 jak i zmienna1e są typu Word. No chyba, że to jakiś babol Bascoma albo może coś ty źle na błąd patrzysz.
Nieznam bascoma ale w każdym języku jest przesówanie bitowe.. mając 4 osobne bajty można je scalić w zmienną 4 bajtową np tak: jakas_zmienna = bajt_najwyzszy jakas_zmienna = jakas_zmienna shl 8 + kolejny_bajt jakas_zmienna = jakas_zmienna shl 8 + kolejny_bajt jakas_zmienna = jakas_zmienna shl 8 + najnizszy_bajt (zakładając że shl 8 to operacja przesówania...
W bascomnie ciężko zrobić LED + Ds18b20 wszytko psuje Waitms 750. Zwiększ do 8 a jak możesz do 16MHz kwarc. A od kiedy to musimy czekać 750ms nie robiąc nic innego? Od czego mamy timery? Przepraszam najmocniej Kolegę, ale jeśli Kolega tego zrobić nie potrafi to: 1. Nie oznacza że się tego zrobić nie da - ja nie potrafię zbudować komputera klasy PC...
Aby obliczyć prawidłowe wartości stosów wystarczy znać swój program, zwłaszcza to co ze stosów korzysta najwięcej. - Ile jest przerwań i jak mogą się wywoływać wzajemnie. Każde przerwanie może odłożyć na stos prawie 40 bajtów w prologu. - Ile mamy wywołań podprogramów przez GOSUB. Ile mamy wywołań wbudowanych funkcji i czy korzystają z operacji na zmiennych...
Co zrobić żeby ustawić czas np 300s ? Różnego rodzaju działania matematyczne nie wchodzą w grę, ma być prosto i płynnie. skoro przeszkadza ci wprowadzenie dodatkowej zmiennej typu byte i jej inkrementacja - bo to przecież już jakby nie patrzeć działania matematyczne (choć może się nie orientujesz ale samo polecenie wait także wykorzytuje operacje matematyczne)...
Przecież JmL(TM) dość szczegółowo ci napisał jak to wykonać. Chyba że liczysz na gotowca, jeśli tak to nie tędy droga. Zrób sobie zmienną i w niej zapamiętaj wynik pomiaru. Przy kolejnym odczycie od tej zmiennej odejmij aktualną temperaturę: - jeśli wynik tej operacji będzie ujemny to temperatura spadła i strzałka w dół. - jeśli wynik równy jest 0 to...
Ma 128 bajtów sramu a nie 64. No stary slepy nie jestem :roll: Ma 64B SRAM, 64B EEPROM i 1kB Flash A bledy to: Err nr. 86 w lini configuracji Timera Err nr. 22 w lini konfiguracji zmiennej A, B, I jako Byte Err nr. 46 w lini gdzie wpisuje do I=0 Err nr. 31 w liniach gdzie sa operacje na zmiennych A. B, I Err nr. 242 w lini gdzie jest Pwm0b=I I standardowo...
Ale Round zwraca liczbę całkowitą, a nie zmiennoprzecinkową. Zwraca i całkowitą i zmiennoprzecinkową jednocześnie. To znaczy liczbę całkowitą zapisaną jako liczba zmiennoprzecinkowa. Przecież liczba zmiennoprzecinkowa też może być całkowita. Nie ma sensu przypisywać jej do zmiennej typu single. Jest sens. Są algorytmy które wymagają zaokrąglania i...
Pomijając literówkę w słowie "eeprom" to deklarując zmienną jako eram byte to siłą rzeczy zostaje ona automatycznie zapisywana do eepromu pod adres 0. Masz dwie opcje: pierwsza to deklaracja zmiennej jako eram byte i odczytywanie jej z eepromu z adresu 0 lub zapisanie zmiennej jako byte i wcześniejszy jej zapis do eepromu pod dowolny adres i następnie...
bascom zmiennych bascom operacje string tablice zmiennych bascom
licznik inverter działa kuchenka gazowa tranzystor 78l05
Jak wymontować zbiornik na sól w zmywarce Amica ZIM 629E? Czy przewody głośnikowe mogą leżeć obok kabla zasilającego 230 V?