Wartość w poleceniu lookup to jest właśnie adres wiec nie kumam w czym problem. przeskaluj adc z 0-1023 na 0-90 i potem wywołuj zmienna=lookup(adc,tablica)
LOOKUP nie wie jakiego typu są dane, które ma przeglądać. Równie dobrze możesz mieć tablicę słów (Word) a odczytywać ją bajt po bajcie przez LOOKUP, gdzie zmienną do której zwraca ona wartość będzie Byte. To otwiera pewne możliwości: 1. Normalnie dane są jednobajtowe. Dane dwubajtowe, są w stałych i określonych miejscach oraz jest ich bardzo mało. Zatem...
Nadeszła chyba pora zapoznać się , z Bascom-owym helpem :D Dim Adres As Word Dim Pozycja As Byte Do For Pozycja = 0 To 5 Adres = Lookup(pozycja , Tablica) Next Loop Tablica: Data 1% , 10% , 100% , 1000% , 10000% , 65535% Teraz będzie dobrze :?: Piotrek
Najprościej skorzystać z gotowych funkcji. W Bascomie 51 jest funkcja MAX. Działa ona na zmiennych typu Byte. W Bascomie AVR funkcja ta działa na zmiennych Word. Więcej info w helpie do Bascom-a. Jeśli musi to być koniecznie Integer, można zastosować jakąś konwersję typu Word na Integer lub napisanie własnej funkcji, co nie powinno być trudne.
... BASCOM nie obsluguje tablic bitow... Bascom-AVR obsługuje tablice bitów , jednak z pewnymi ograniczeniami a)Tablica nie większa niż 256 bitów. b)index/numer bitu , MUSI być zmienną , choć właściwie niekoniecznie MUSI :D Piotrek
Z tego powodu ze raz uzywaz "Tablica" a drugi raz "Tabela" Zmien na to samo i bedze oki
Patrzę i patrzę na Twój kod i na opis tego co chcesz i nic nie rozumiem. Nie wiem co chcesz osiągnąć i za nic nie rozumiem tego kodu.
Poczytaj w pomocy o instrukcjach: DATA , RESTORE, READ... To się nie nadaje , ponieważ Restore potrzebuje etykiety , a Read to odczyt sekwencyjny i nie da sie wybrać konkretnego elementu tablicy , tylko trzeba odczytywać kolejno , począwszy od pierwszego elementu. Ale ... Bascom AVR posiada funkcje , za pomocą których można naśladować mechanizm wskaźników...
No więc ? Tablica: DIM Odczyt(2) składa się z dwóch zmiennych typu Byte. Więc ile masz bitów razem ?
Tak, rozwiązałem problem za pomocą tablicy.
A widzisz, pojawia się wreszcie jakiś konkret. Skoro pojawia się komenda "300" to rozumiem, że pojawi się też "120", "1", "55" itp. Więc zamieniasz otrzymany string na word i masz już wskaźnik tablicy. W odpowiedzi wysyłasz wartość zmiennej o numerze "300".
Do sortowania użyj instrukcji Sort : [syntax=basic4gl]Dim A(3) As Byte ' trzy elementowa tablica A(1)= 86 A(2)= 42 A(3)= 230 Sort A(1) , 3 ' sortuj trzy elementy w tablicy zaczynając od A(1) Print A(2) ' wyświetl drugą wartość[/syntax]
Mam taką tablicę [syntax=basic4gl]Dim Lngfreq_memory(50) As Eram Long Dim Lngstep_memory(50) As Eram Integer Dim Modulacja_memory(50)as Eram Byte Dim Vfo_memory(50)as Eram Byte Lngfreq_memory(idx + 1) = Lngfreq : Lngstep_memory(idx + 1) = Lngstep : Modulacja_memory(idx + 1) = Modulacja:Vfo_memory(idx + 1) = Vfo[/syntax] Chciałbym wyświetlić ją w ten...
nie przyjmie. Trzeba zapisywać po charze. A coś takiego jak string tak na prawde nie istnieje - jest to tablica charów.
Nie da rady w ten sposób... Ale... Załóż zmienną typu "byte". W programie możesz odwoływać się do pojedyńczych bitów tejże (np.: set zmienna.1 , reset zmienna.5 ) Właśnie tu jest pewien problem. Zawsze jest sterowane tylko jedno wyjście przez specyficzny cykliczny układ zmiennych czasowo przerwań. INT0 przełącza na kolejny pin czyli next x Zawsze mogę...
Tak na szybko - pierwsze skojarzenie: skopiować element tablicy do zmiennej tymczasowej, na niej przeprowadzić przesunięcie, a następnie nadpisać pole tablicy zmodyfikowaną zmienną tymczasową. pozdrawiam
Tak jak wprowadza się dane do tablicy...
Ściagnij sobie jeden z tych plików pomocy, uruchom, wybierz indeks wpisz "dim" klinij wyświetl i tyle, prościej sie nie da :) Dodano po 5 Sorry kolego, dim to nie tablica tylko deklaracja zmiennej, przepraszam za wprowadzenie w błąd Dodano po 6 teraz się temu przyjrzałem i okazuje się że dobrze pamietam. Dim moze być deklaracja singlowej zmiennej bądź...
Witam, W programie zapisuje kilka zmiennych String w eepromie potrzebuje uzyskać z nich taką tablicę do po prawnej działania pętli for [syntax=basic4gl] Memory(1)="zmienna a zmienna b zmienna c" Memory(2)="zmienna a zmienna b zmienna c" Memory(3)="zmienna a zmienna b zmienna c" Memory(4)="zmienna a zmienna b zmienna c" Memory(5)="zmienna a zmienna b...
oczywiście, że wystarczy $asm ... kod twojej wstawki $end asm ale oczywiście przydałoby się jeszcze wiedzieć jak można uzyskiwać w asemblerze dostęp do zmiennych itp, otóż: Dim Zmienna1 as Byte $asm lds R16, {Zmienna1} ... coś tam robimy sobie w asm ze zmienną i chcemy ją uaktualnić, więc: sts {Zmienna1}, R16 $end asm powyżej...
Tworzysz zmienną sting * 20 i tworzysz tablice byte(20) adresujesz je tak samo i poleceniem lcd chr(byte(a)) stawiasz znak z wybranego miejsca ze stinga.
Dołącz do ramki np znak nowej linii '\n' i odbieraj znaki aż do jego napotkania zapisując ramkę do tablicy potem zostaje tylko ją zinterpretować określając wielkość tablicy.
Pewnie chcesz, żeby generować serię impulsów o różniej długości na jakimś pinie. Ten kod jest nie do końca kompletny. Jest kilka zmiennych które muszą być zdefiniowane i zadeklarowane gdzieś indziej. Na przykład "c0", "lastDelay", "highSpeed". Od nich zależy jakie wartości będą w tablicy "delays". Może rzuć kodem Bascoma, to różnice się znajdą same....
Wydaje mi się że jak byś nie zrobił i będzie działało to tak jest dobrze ;] ilu programistów tyle podejść do tematu... Jeżeli już zadeklarujesz taką dużą tablicę to tak czy siak będzie ona zajmowała jakąś przestrzeń w pamięci więc czemu nie użyć jej i odczytać z eeprom wszystkiego na raz. Kiedyś robiłem podobny sterownik do CO ze sterowaniem temperaturą...
Taa, bo mialem tę linijke napisaną a potem się okazało, że zmienna Alarm już jest i tablicy z niej nie chciałem robić żeby nie było zamieszania. Stworzyłem więc Alarm_nr(5) (zamiast Alarm1,Alarm2,Alarm3..) a o tej linijce zapomniałem ;) Widzę czujność jest :D
Zaprezentuj krótszy program tylko z odbiorem, ale z wszystkimi ustawieniami, configiem i deklaracjami zmiennych. Może coś się od razu rzuci w oczy :D Nie wiadomo czy zadeklarowałeś wielkość ramki której Bascom używa do obrabiania danych pracując na stringach lub tablicach ($framesize) Kiedy jest za mała to program może jeździć po innych zmiennych ;)
tak, stosuj tablice. Ulatwi ci to robote.... ALE pamietaj zeby NIE ZAPISYWAC DANYCH W KOMORCE EEPROMA O ADRESIE 0. Jesli zaczniesz deklarowac zmienne w bascomie to : ...jakies zmienne... .... .... .... 'EEPROM dim foo as eram byte 'to ci zalatwia komorke 0, bo tu bascom umiesci tą zmienną, i z niej niekorzystasz dim tablica1(3) as eram byte dim tablica2(3)...
Szanowni koledzy! Czujnik ozonu wysyła po UART taką ramkę FF 2A 04 00 00 3E 27 10 5D z czego FF to bajt startu 2A - rodzaj gazu (03) 00 - cyfry dziesiętne ( nie istotne) 00 - stężenie gazu - bajt starszy 3E - stężenie gazu bat młodszy reszta nie istotna (choć znana) Jak w Bascom odebrać te dane do tablicy zmiennych? Zwykle odbierałem cyfry dziesiętne...
zrobiłem klawiature matrycową działa można wprowadzac dane zapisałem dane do tablicy np. dim a(3) as bit a(1)=4 a(2)=3 a(3)=6 pytanie brzmi jak dane z tablicy przekształcić na jedną zmienną x =436 :cry:
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.
Należy zrezygnować z Bascoma albo zrobić wstawkę w assemblerze, a wynik umieścić w tablicy lub dwóch zmiennych. Niestety Bascom nie potrafi operować na liczbach 64-bitowych.
Na przykład tak: Dim x(5) as byte . Tablica pięciu zmiennych.
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
Co to za dane? Czy mają stałą ilość bajtów? Jakieś stałe bajty na początku/końcu ramki danych? Poza tym uważam, że wszystko inne wyjaśniłem teraz tylko Kolega musi sięgnąć do dokumentacji BASCOM'a, znaleźć odpowiednie funkcje i napisać na ich podstawie program który chce kolega zrealizować. No i takie dane to raczej nie do jednej zmiennej, ale do tablicy...
trochę się pomyliłem, wybacz niedopatrzenie, oczywiście tablica jest ŹLE zadeklarowana, skoro pobierasz 9 bajtów, to taki rozmiar musi mieć też tablica. w tym przypadku kompilator nie zgłasza błędu, ale co się dzieje po odpaleniu programu: 1. pierwsze 2 bajty lądują w tablicy 2. kolejne 7 bajtów ląduje w kolejnych komórkach pamięci ram za tablicą (o...
nie bardzo znam się na tablicach, może jakiś przykład jak to zrobić. Jestem niezbyt dobry w programowaniu. Właśnie szukam w necie coś o tablicach.Ciężka sprawa te tablice!!
Witajcie! Gryze wlasnie swoj maly projekt (sterowanie swiatlami z pwm za pomoca pc) i natrafilem na problem. Up dostaje na com taki string: HELLO,255,11,23,45,0,END Na tej podstawie ustawia 5 zmiennych kolejnymi wartosciami (pomijajac pierwsza i ostatnia). I tutaj utkwilem - jak rozdzilic to co dostanie na pojedyncze wartosci (np. w tablicy)?
Jeśli ręcznie rozmieszczasz zmienne w pamięci, to możesz tablice (mające do 256 bajtów) porozmieszczać tak, aby wszystkie komórki w jej obrębie mały górną część adresu taką samą, przez co w kodzie możesz pominąć dodawanie do ZH. Niestety jeśli zmienne rozmieszcza kompilator, który traktuje całą pamięć jako przestrzeń liniową i nie czyni żadnych dodatkowych...
Kwarc wstaw w obu przypadkach nawet 16MHz. Baudrate jest zależna w zasadzie od jego dzielnika niż od kwarcu. Nie szalej też z dużą szybkością bo błędy mogą wyskoczyć, zacznij od 4800 bps. Połączenie po UART masz zrobić sprzętowo! Timer niech ci obsługuje multiplexing, główna pętla programu sprawdzanie czy w UART coś przyszło i przepisywanie do tablicy....
rozumiem, że w linii data mogę wpisać normalne dni tygodnia w cudzusłowach, a kod wyżej służy do zajęcia pierwszej komórki, jak zalecają w PDFie procka? sorry za naiwne pytania - ale myślałem , że aby użyć tablicy muszę zadeklarować jej wielkość - jak zmienne. po prostu jeszcze dużo nauki przede mną :-) dzięki
(at)zumek Dzięki za kod, ale nie do końca wiem jak on działa. Szkoda :( W1 to tablica wskaźników na W, przesunięta o dwa miejsca? Mylisz się :( W1 , to jakby wskaźnik na W powiększony o 1 element tablicy W , czyli 2 bajty . Natomiast tablica wskaźników , to ... nie z tej bajki ;) A dokładnie rzecz ujmując , to Bascom definiuje tablicę W1 , w obszarze...
[syntax=c]TWI_write(pgm_read_byte( &cyferki[cy4] ));[/syntax] Mam tablicę znaków wyświetlacza "cyferki" a zmienną "cy1" - "cy4" wskazuje odpowiedni znak z tablicy. W buforze z RFM12 mam stringi a potrzebuje int aby wyświetlić znaki z tablicy.
chyba normalne, ze nieda sie dima zainicjowac, bo w tiny12 niema ramu a tablice zmiennych sa w ramie
Co to znaczy ilość jest zmienna? W Bascomie rozmiar tablicy jest stały. Rozumiem, że pozostałe po prostu są pustymi stringami. Może polecenie SORT się nada, Ale do zmiennych STRING go nie próbowałem używać więc....
W sumie strzelam na oślep, nie ma tam czegoś takiego jak np. define EXTENDEDRAM=16384 ? inne słowa jakie przychodzą mi na myśl to EXTRAM, RAMSIZE RAMEND SRAMEND... He he na oślep, a w tarczę trafił :wink: ->astral Nic prostszego nie udało mi się wymyślić :( Const Extramend = 262144 / 8 -1 Const Extramstart = _ramsize '_ramsize to stała "wewnętrzna"...
Witam. A kto powiedział że ja wpisuje dane? Ja je wysyłam. Tablica jest 7 elementowa jak deklaruje "Dim Tabaa(7) As Byte" Więc wysyłam 7 kolejnych zaczynając od pozycji 1 "Printbin Tabaa(1) , 7" Inaczej chce by działało tak: dane w tablicy są zmienne więc sobie je tam wpisuje i chce wysłać wszystkie ( całą tablicę). Pozdrawiam.
Może ktoś wie jak założyć tablicę 66 elementową ( każdy element to bit) w obszarze adresowanym bitowo, tak by można było odwoływać się do poszczególnych bitów poprzez współżędne w tablicy np. bit22=Tablica(22). Bascom co prawda przyjmuje deklarację Tablica(66) as bit, ale traktuje to jak zmienną 1 bitową tzn. zapis Tablica(22) = 1 ustawia na 1 wszystkie...
Witam Cieszę się, że mój program, który defakto nie jest szczytem programowania, kogoś zainteresował. Ogólnie działa on dość fajnie ale mógł by lepiej hehe. Teraz co do programu, to nie mam czasu na dokładną analizę całości (sesja :/ ), nawet swojego kodu już dobrze nie kojarze, ale zauważyłem jedną rzecz: kolega, w tym co dopisał używa zmiennej wynik_o...
Wiązało by się to z koniecznością zapisywania seed'a do EEPROMU. Poza tym nie chcę zaprzątać sobie głowy tym RND bo ja mam tu prawi eprawdziwą losowość (o ile w ogóle prawdziwa losowość istnieje) dzięki inkrementacj tych zmiennych pomocniczych.
Set Adca_ch0_intflags.0 jest wg mnie bez sensu. Wystawiasz mu flagę, a to on ma tobie wystawiać ją gdy ma gotowy wynik. Ale w bascom to chyba zbędne. Czytam wprost 200 wyników inkrementując zmienną numeru tablicy i wszystko zdaje się być super. Spowalniasz jedynie w ten sposób na dodatek. Co do DMA to musiałbym potestować. Ale niewykluczone że nic nie...
[syntax=basic4gl] Dim A(4) As Byte Dim Nazwa As Dword At A(1) Overlay [/syntax] I ładujesz w zmienną Nazwa. Chyba o takie coś chodzi? :)
Niby to rozumiem ale nie wiem jak dane z moich zmiennych mają trafić do tej tablicy?. Mogę je oczywiście wklepać ale zmienne dane1 i dane2 będą się zmieniały. Edit: Ar(1)=A Ar(2)=B Ar(3)=dane1 Ar(4)=dane2 Dobrze kombinuje? Edit2: Sprawdziłem jest tak jak myślę. Mogę wrzucać swoje zmienne do tablicy a później skorzystać z CRC
a dlaczegio chcesz mieć je zapisane w postaci bitów zawsze możesz sobie odczytać dowolny bit rejestru bądź zmiennej i oczywiście dokonywac rotacji tych zmiennych i rejestrów
Tak, ale chodzi o: X( I ) = I Czyli nam chodzi o to I , a nie o to I. I ono właśnie idzie co 100. Jedno i drugie I (skoro to jest to samo I :D). A to pierwsze (pogrubione I ) nie powinno. Bo tablica ma 40 elementów indexowanych co 1. Więc poinny iść co 1. Czyli powinieneś mieć dwie zmienne. Jedną do indexowania co idzie co 1. A drugą do wpisywania do...
Bez podania treści programu przed i po zmianie oraz podaniu, która zmienna jest naruszan to będzie "trochę" ciężko ! Jedyne co mi przychodzi do głowy to takie przypadki jak - stos programowy może włazić w obszar zmiennych przy wywołaniu podprogramu (teoretycznie powinno być to niemożliwe) - zmienna adresująca tablicę np. w pętli sięga "o jeden most...
A poprawiłeś tą linijkę z błędem o której mówiłem: [syntax=basic4gl]Karta = Buffer_in(1)(2)[/syntax] ? Po jej poprawieniu działa. I jeszcze trzeba zainicjalizować zmienną In_pos na 1. Bez tego też będzie działało ale zgubi pierwsza ramkę. [syntax=basic4gl]... Adres = 01 In_pos = 1 Enable URXC Enable Interrupts Do Loop ...[/syntax] A i trzeba się upewnić...
Stwórz tablicę za pomocą: Dim Zmienna(5) As Byte 'lub Word, Integer, Long, Single, Double... Przed zapisem aktualnej wartości do Zmienna(1), przesuń wartości z 1, 2, 3, 4 o jeden indeks (na 2, 3, 4, 5). Pamiętaj aby zrobić to tak, by nie "zamazać" wartości przy przesuwaniu. Potem zapisujesz aktualną wartość do Zmienna(1) i masz komplet, który...
Juz odpowiadam. Po kilku testach przeprowadzonych na moich krokowcach musialem zmienic troche czestotliwosc. Maksymalna czestotliwosc to 3 khz dla max speed. Rozwiazalem to na jednym, liczniku ktory nabija 6 kHz. Nastepnie dziele te czestotliwosci (1,5 , 07 itd...) Wprzeraniu zliczam Impulsy dla wszystkich osmiu silnikow i jesli osiagne odpowiednio...
W helpie jest napisane, że ilość bajtów do sprawdzenia może być zmienną typu word więc chyba wiadomo jaką maksymalną wartość można sprawdzić.
Raczej interesuje mnie odczyt na bieżąco i gdy napotka na przecinek, to żeby program "wiedział", że to był koniec pierwszej zmiennej, a jeśli już nie będzie przecinka na końcu podanych zmiennych, tylko znak "ENTER" to zakończenie wprowadzania ;) Tylko prosiłbym o konkretniejsze info, gdyż dopiero rozpocząłem edukację bascomową ;) Czy te dane odebrane...
Nie możesz przekazywać części nazwy etykiety jako zmiennej. Etykieta danych to adres w pamięci flash. Musiałbyś przepisać adres każdej etykiety do zmiennej używając LOADLABEL. Albo oczywiście tak jak kolega powyżej zaproponował.
Czy jeśli to samo chcę mieć dla zmiennej slowo3 muszę zakładać nową tablicę (pamięciożerne) czy też mogę załadować slowo3 do istniejącej już tablicy Slowo2_array(10)? Nie do końca chyba rozumiesz jak działa OVERLAY , tak stworzona zmienna nie jest "pamięciożerna". S lowo2 (string *10) i Slowo2_array(10) As Byte At Slowo2 Overlay zaczynają się od tego...
Użyj linii data. Widzę że elementy tablicy idą co 1 stopień celsjusza, więc poszereguj je od najmniejszych do największych. [syntax=basic4gl] dim znacznik as byte 'ponieważ nie można użyć ujemnej wartości instrukcji lookup dim dana as byte ' tu będzie dana odczytana z tablicy znacznik = temp1 + 22 ' dla temperatury - 22 dodajemy 22 aby było 0 dana =...
Witam niedawno kupiłem książkę Marcin Wiązania "Programowanie mikrokontrolerów AVR w języku bascom" studiowanie książki na początku szło mi całkiem dobrze nie moge zrozumieć co to są : - stałe - zmienne lokalne - tablice może ktoś z was potrafi wytłumaczyć to na chłopski rozum?? Proszę o szybką pomoc
Trochę niejasno się wyraziłem... [syntax=basic4gl]If PINB.0 = 1 Then Upperline Lcd Tablica(1)[/syntax] Jeśli PINB.0 = 1, To chcę odczytać kolejny string. Czyli jak by to była "Tablica(2)" to chce odczytać "Tablica(3)" i ma ona zostać na wyświetlaczu gdy będzie PINB.0 = 0, gdy kolejny raz będzie PINB.0 = 1, to teraz ma odczytać kolejną zmienną ("Tablica(4)")....
heh... a wystarczyło żebyś napisał: "co sie męczysz chłopi, zamień funkcją time() zmienne typu byte na string z godziną i porównaj" .... tablicę prawdy rozrysowałem juz wcześniej :P
Źle podchodzisz do problemu - zmienna i (czyli numer wyświetlanej cyfry) powinna być zmienną globalną, którą w przerwaniu od timera zwiększasz, a następnie wykonujesz blok switch (i) { ... }. Oczywiście delay w przerwaniu to "bluźnierstwo" :) Preskaler ustaw sobie na 64, wtedy przerwanie od timera dostniesz ok. 400x na sekundę, czyli odświeżanie całego...
To teraz 2 testy: 1. Przypisz dane z tablicy najpierw do zmiennej tymczasowej a potem wyślij zmienną tymczasową na portd 2. Poprzez Select Case Nr_Wysw na sztywno wyślij na port odpowiednią wartość dla konkretnego wyświetlacza (bez odczytu z tablicy)
nie wiem w czym masz problem, a na gotowca nie licz bo nikt ci nie da. Moge ci jedynie powiedziec ze ja bym te zmienne zapisywal do tablicy i pozniej wysylal pokolei. co uzyc inputhex czy bin? moze help!!
Można zadeklarować prawidłowo zmienną eeram W ten sposób Dim Adres_er(size_t_mac) As Eram Byte At Adres_p_mac Poprzez komende AT znam adres, po jaki będzie się odwoływać zmienna eeram w pamięci. Niestety, ale z Eepromem ten numer nie przejdzie , ponieważ Bascom ignoruje etykiety w Eepromie. Deklaruje, jakie wartości powinny być zapisane w eeram...
...Czy w bascomie można zadeklarować tablicę dwu wymiarową Nie :!: Dla czego przy odczycie danych muszę ponownie resetować magistralę i podawać numer seryjny układu... Bo tak są skonstruowane - patrz tabelki w PDF-ku :) Czy jest możliwe najpierw wysłanie do wszystkich czujników polecenia mierzenia temperatury ... Jasne ;) '... 1wreset If Err=0 Then...
Pozdrawiam wszystkich. Panowie, czy istnieje w Bascomie funkcja która odczytuje określoną liczbę zmiennych (np. z tablicy) typu liczbowego poddaje konwersji do postaci tekstowej (tu się domyślam że to bedzie char) i wysyła RS 232 (print) do komputera ale w ten sposób aby znaki były wyświetlane (np. w hyper terminal) jeden po drugim w jednym wierszu...
Właśnie z funkcją "Val" również nic nie wychodzi, ale zamieniłem "nm" na zmienną typu "byte" i problem rozwiązany. Nie wiem dlaczego tak czepiłem się tej zmiennej przyjmując ją za tekstową. Problem rozwiązany, dzięki za odpowiedź.
Hi ! W tablicach możesz używać dowolnych typów zmiennych liczbowych, np: Dim A(10) As Byte Dim B(9) As Integer Dim C(8) As Long ...
Rozumiem, że nałozyłem dane z tablicy na już istniejącą w pamięci RAM inną zmienną, tak? Bardzo fajne rozwiązanie. Hmm, a da się to ciut zautomatyzować, czy raczej do każdej komórki tablicy muszę odwoływać się osobno?
Możesz wykorzystać Lookup do pobierania elementu z tablicy. Tylko pasuje żeby dane w linii Data były tego samego typu, można zrobić tak że "AUTO" będzie równe 0, a "OFF" równe 255. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 16000000 $baud = 19200 $hwstack = 64 $swstack = 64 $framesize = 64 Dim G As Byte , Nr_elementu As Byte Nr_elementu = 0...
EDIT: Dobra wszystko sobie dopracowałem, ale nie wiem jak to ująć w jednej tablicy?? Jakbyś mógł wyjaśnij mi mniej więcej jak działają te tablice ;] Ile miałeś czasu na ten wąż w BASCOM 8051 ? Tablice działają bardzo prosto, masz zbiór zmienny o zadeklaarowanym typie w przypadku BASCOM od 1 do n i możesz się odwołać do konkretnego elementu np tab(1)=x...
Właśnie mam jedną zmienną , która jest indeksem i ostatni index zapisany jest w eepromie też za pomocą jednego przycisku czyli tak Freg = Freq_EEPROM[Index] gdzie np.Index jest zmienną , ok tylko nie zbyt dużo wiem na temat tablic , tylko jak wpisałem Freg = Freq_EEPROM[Index] wywala mi error 46
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
Ar(100) - rezerwuje tablicę o długości 100 bajtów do przechowywania danych odczytanych z karty. Jeżeli miałeś błąd o braku pamięci to amień sobie w opcjach kompilatora wartość rezerwującą ilość miejsca na zmienne. 'Options' -> 'Compiler' -> 'Chip' pole 'Framesize' (zwiększyć wartość - tylko bez przesady ;-) ) Dla potrzeb odczytu kart wystarczy Ci Ar(40)...
Z dwoma bajtami uC i Dallas w 5ms wyrobią się spokojnie. Problemem jest brak synchronizacji pomiędzy przerwaniami generowanymi przez Timer a funkcją Waitms. Ponieważ przerwanie występuje teraz co 5ms to można w nim ustawić flagę że własnie się zakończyło. Wtedy w pętli głównej możesz sobie spokojnie liczyć te flagi. 50x 5ms = 250ms co bardzo tu pasuje....
Wyrzuć ten wzór i obmyśl jakiś inny. W tej postaci to się absolutnie nie nadaje. Z ADC możesz uzyskać maksymalną wartość 1024, teraz podnieś to do potęgi 6 i wychodzi ci absurdalna liczba, program wywala się juz na pierwszym obliczeniu. Obliczanie napięcia może wyglądać tak: [syntax=basic4gl] Dim Obl_nap As String * 6 Dim Wartadc As Word Dim Tymcz As...
Zamiast "bawić się" z Readeeprom można to zrobić tak: [syntax=basic4gl]Dim Tablica(12) As Eram Byte Dim Wart As Byte Wart = Tablica(3) 'odczyt 3-ciego elementu z tablicy umieszczonej w EEPROMie Tablica(5) = 123 'zapis[/syntax] Trzeba tylko pamiętać, aby przed użyciem zmiennej umieszczonej w EEPROMie, skopiować ją do zmiennej umieszczonej w RAMie.
To jest odczyt z UARTu. W pierwszej pętli program czeka na pojawienie się litery "R" Potem w drugiej pętli zapisuje wszystkie odebrane znaki do zmiennej K3 aż do momentu pojawienia się znaku nowej linii CR (czyli chr(13)
Wydaje mi się, że ten problem z długością wierszy nie będzie tu przeszkadzał. Skoro w jednej pętli zdecydowałeś się przestawiać początek tablicy to wnioskuję, że za każdym razem pobierasz taką samą ilość danych. Aha, zawsze można zrobić dodatkową tablicę, w której deklarujesz ile zmiennych do pobrania jest w konkretnej linii. Najlepiej jakbyś przedstawił...
Niestety przesiadka na C też by nic nie dała, ponieważ on też tego nie kontroluje. Jeśli zadeklarujesz tablicę o długości 10 bajtów i odwołasz się do niej: char tablica[10]; tablica[12] = 1; to się wzburzy że jest błąd, ale jeśli zrobisz tak: char tablica[10]; char tablica1[20]; strcpy(tablica,tablica1); to nie...
Najlepiej wysyłaj określoną ramkę, np.: 0xFF hou minu sek t t1 (odpowiedni typ, jeśli nie jest 8 bitowy to go musisz "pociąć") 0xFF Odbierasz do tablicy w której elementy się przesuwają i co odbiór sprawdzasz czy pierwsza odebrana i 7. odebrana są 0xFF i w takim wypadku przepisujesz odpowiednie elementy tablicy do odpowiednich zmiennych. Da się to zrobic...
Podczepię się pod temat. Problem mam bardziej skomplikowany. Muszę zrobić tabele dla 2 zmiennych (2 wymiarowa), niestety bascom tego nie umożliwia. W jaki sposób mógłbym to obejść? Może coś w stylu kopiuj-wklej EEPROM? Macie jakieś propozycje?
Ok to wytłumaczmy to: zacznijmy od tego bo to jest całe sedno liczenia crc: Suma: Crc = 0 For I = 1 To 9 Temp = Crc Xor Bd(i) Crc = Lookup(temp , Crc8) Next Return w pierwszej linijce wartość crc jest zerowana (kasowana) następnie jest pętla for..next (w next powinno być next i). Pętla będzie liczyła od 1 do 9 czyli 8 powtórzeń....
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...
Pomysł z tym programikiem jest dobry ale lepiej zrobić tak aby wykorzystać przerwanie od uart'u od danych przychodzacych. W obsłudze tego przerwania robimy taki myk że gdy przyjdzie znak "$" to niech sie zeruje licznik (wskaźnik pozycji) i każda nastepna dana z portu niech będzie zapisywana do nastepnej zmiennej. Potem można z tych zmiennych wyciągnąć...
Sprawdź jeszcze jeden "myk" Wszędzie zamiast Chr( ) wpisz ten sam numer tylko w nawiasach klamrowych (bez Chr - tylko sam nawias i trzy cyfry) Przykład: Zamiast Chr(1) wpisz Lcd {001} Zamiast Chr(7) wpisz Lcd {007} Zamiast Chr(32) wpisz Lcd {032} Kod się znacząco zmniejszy co może się czasem przydać przy małych mikrokontrolerach. Chr( ) to funkcja zamieniająca...
Dziękuje bardzo. Teraz kompilator nie daje błędu. A Powiedz aby odebrać tą tablicę w urządzeniu odbiorczym deklaruje zmienną: [syntax=basic4gl]Dim Send(3) As Integer[/syntax] później odbieram ją po uart: [syntax=basic4gl]Inputbin Send(1),6[/syntax] 6 bo zmienna integer ma dwa bajty (tak pisze help) i później już wyłuskuje poszczególne zmienne z tablicy:...
dla opisu programu w pseudokodzie(nieznam bascoma.. wole asm itp..) przyjme że bity sterujące znajdują się w dolnych częściach zmiennych.. i zamiast a..h przyjme tablice stan[0] do stan[7] TMP = 0 pętla wykonywana od 0 do 7 ze skokiem o 1 przesuń tmp o jeden bit w lewo tmp = stan[numer wykonania pętli] koniec pętli w tmp jest skompresowany stan 8 bitów...
Witam Jestem młodym elektronikiem. I nie potrafię wykorzystać mojej pamięci eeprom. Piszę w Bascomie. Mam polską wersję, helpu z Bascoma, ale tej nie rozumie. Skoro nie rozumiesz po polsku ;) , to w jakim języku mam Ci to wytłumaczyć :?: Spróbuję jednak po ... polsku ;) Oto próbka kodu, który mi nie działa. $lib "mcsbyte.lbx" $regfile = "2313def.dat"...
nikt chyba nie ma fft w bascomie więc spróbuje sam ale będziecie mi musieli trochę pomóc załózmy że mam tablice zmiennych i zczytuje do niej wartości z przetwornika ale co ile czasu i ile ich będzie potrzebnych do analizatora widma (7 pasm) następnie jakiś prosty wzór do obliczania by się przydał
W najbardziej prymitywny sposób możesz to zrobić tak jak napisałeś, ale rozdzielając odstępami czasu pomiędzy kolejnymi sekwencjami: Portd=&B10000000 waitms 200 Portd=&B11000000 waitms 200 Portd=&B11100000 waitms 200 Portd=&B11110000 waitms 200 Portd=&B11111000 waitms 200 Portd=&B11111100 waitms 200 Portd=&B11111110 waitms 200 Portd=&B11111111 waitms...
Do zadań gdzie musisz np. robić coś bardzo szybko i dokładnie móc wyliczyć zależności czasowe używasz asemblera. Ma on tę zaletę, że dokładnie panujesz nad sprzętem i wiesz dokładnie jak są realizowane poszczególne funkcje. Wadą jest jednak, że wszystkie wyższe formy (typu obliczenia zmienno przecinkowe, złożone formy zależności funkcyjnych, liczenie...
tak wygląda sam kod do odczytu predkośći "trochę nie ogarnięty sorki" [syntax=basic4gl] $regfile = "m16def.dat" 'wew rezonator $crystal = 8000000 'jest włączony wew rezonator $baud = 9600 'szybkosc ibusa Config Lcd = 16 * 2 'używany wyświetlacz i piny do jakich jest podłączony Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7...
Prawidłowo robi się to tak: XH , YH , lub ZH . Kolejnym krokiem jest odczyt młodszej części adresu i odpowiednio przepisanie jej do XL , YL , lub ZL .
tablica zmiennych bascom zmiennych tablice zmiennych bascom
ustawić temperatura klimatyzacja shure uszkodzony klawiatura zalać spirytus
dobre sklepy elektroniczne online dobre sklepy elektroniczne
Konfiguracja modemu ADSL jako routera - krok po kroku RISCO GTI: Komunikat "linia 04 alarm" i włączający się alarm