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
Można zerować, ale nie trzeba, bo każda instrukcja, która ją "obsługuje" i tak ją wyzeruje jeśli nie ma błędu lub ustawi po błędzie.
W przerwaniu Int0 inkrementuj zmienną. Ustaw timer na jakąś jednostkę czasu i w przerwaniu od tego timera obliczaj cześtotliwość i zeruj zmienną
A spróbuj tak: Odczyt=Temp Dim Jednostki As Byte , Dziesiatki As Byte ' cyfry do wyświetlania temperatury Dim Temp As Byte ' temperatura Dim Pompka As Bit ' sterowanie pompką Dim Odczyt As Byte Dim Cyfrybcd As Byte Dim Ktorywysw As Bit Enable Interrupts ' oblokuj przerwania Enable Timer0 'odblokuj timer0 Enable Timer1 'oblokuj timer1 Config Timer0 =...
Nie lepiej zerować przez RS'a zmienną która zlicza impulsy ?
Kodu niestety wkleić nie mogę, ale dlaczego ma być źle napisany, skoro potrafi tydzień działać bez zarzutu, a potem nagle zeruje zmienną....???
Banalne zadanie. A więc włączasz licznik(lepiej TIMER1-większa pojemność), tak, aby odliczał ci te 10sekund. Dajesz zmienną którą zwiększasz np co 1sekunde (zmienna o nazwie sekundy). W czasie odliczania do 10s w pętli głównej zliczasz impulsy przycisku i zwiększasz je w innej zmiennej (np. impulsy). Po 10 sekundach w zmiennej sekundy będzie10s a w...
kiedyś robiłem podobny programik i chciałem powiedzieć że brakuje ci jednej żeczy a mianowicie na początku pętli za każdym razem należy zerować zmienną err . bascom ustawia ją w przypadku błędu ale nie zeruje w przypadku powodzenia.
... co do resetu to : Reset zeruje tylko zmienna globalna a zmienna lokalna pozostaje nie ruszona :) Ze tez tego nie moglem sie nigdzie doczytac... Przestrzeń w pamięci RAM na zmienne lokalne , jest przydzielana dynamicznie i dla tego nie są one zerowane , bo w czasie kompilacji ich położenie(adres w pamięci) nie jest znane. Bascom również nie zeruje...
AVR nie traci zawartości pamięci przy resecie. Więc jeżeli program nie będzie jej zerował, rozwiązanie jest pewne. Inna sprawa, że w tym wypadku sugerowałbym, by watchdog nie robił resetu, tylko wywoływał przerwanie. Co to będzie za układ?
Ano właśnie - bardzo dziękuję !
Odczytać musisz cały port B a potem zerować 3 najstarsze bity bo one mogą powodować zamieszanie. Zmienna oczywiście bajtowa. porównujesz potem zmienną z konkretnymi wartościami. Czyli masz 16 warunków sprawdzających jaki klawisz został wciśnięty.
robisz to za każdym razem tak : 1. Zerujesz rejestr/zmienna w której chcesz miec wynik. 2. Przesuwasz rejestr/zmienna o 1 bit w lewo bez rotacji. 3. Jeśli P1.1 = 1 to ustawiasz najmłodszy bit w rejestrze/zmiennej, jeśli nie to zerujesz (poprostu dodajesz zawartość pinu do rejestru/zmiennej) 4. Jesli ni eodebrałes jeszcze 8 bitow to skocz do 2. Pozdrawiam...
robiłem tak i nic. Może zmienne string tzrba jakoś inaczej zerować?
Usuń znaczek hash i nazwę zmiennej umieść w nawiasach klamrowych. Będzie odwołanie do pamięci, a nie ładowanie stałej. Oczywiście pisze o tym w pomocy, ale szukać się koledze nie chce. :bad-words: Można uzyskać dostęp do zmiennej umieszczając jej nazwę w nawiasach klamrowych { }. By mieć dostęp do bajtu MSB zmiennych Integer/Word, należy użyć formy:...
Witam ! Cytat: .....na końcu zerowałem zmienną. Nie ma tego w programie. Pozdrawiam. Stefan
Coś mi się wydaje, że kol. xPatryk chodzi o to, że układ się resetuje, ale cały czas jest zasilany (chyba, że się mylę). A w takim przypadku dane wystarczy umieścić w pamięci SRAM, która nie jest czyszczona w trakcie resetu, więc dane w niej zapisane nie zmieniają sie po resecie. Jednak, kompilatory wysokiego poziomu (nie wiem jak robi to BASCOM) często...
Dim Empty As Eram Byte At 0 Dim Tzap1 As Eram Single Dim Ua As Eram Byte Dim Ub As Eram Byte Dim Uc As Eram Byte Dim Ud As Eram Byte Czy to jest wszystko co powinienem zrobić.?. Czy powinienem jeszcze używać dyrektyw typu np $eeprom i $data ?. Czy wręcz odresować bezpośrednio tą pamięć zapis/odczyt?. A powinno być takie proste, ale nie jest, więc w...
Tak. Powyższy program będzie działać. W zmiennej A będziesz miał numer naciśniętego klawisza.
Panowie, przecież BASCOM podczas symulacji podaje czas i ilość cykli maszynowych. Wystarczy posprawdzać i zpisać sobie. Na przykład, standardowy startup (bez LCD) dla Mega8 trwa 6149 cykli maszynowych (zerowanie pamięci, ustawianie stosów, reset zmiennych BASCOM). Z drugiej strony nie po to BASCOM budowano tak jak jest, by wnikać aż tak bardzo w kod....
A po przepełnieniu co się dzieje ze zmienną err? Mam ją ręcznie zresetować? Po przepełnieniu licznika on się zeruje automatycznie?
Rozwiązanie Twojego problemu jest banalne. Na początek proponuję wykorzystać zmienną, która jest zwiększana przy każdym wciśnięciu przycisku i w zależności od wartości tej zmiennej (tu wystarczy od 0 do 3, przy wartości 4 zmienna jest znowu zerowana) ustawiasz jedynkę na odpowiednim porcie jednocześnie uruchamiając zliczanie. Kiedy licznik dojdzie do...
Może odpal jakiś Timer żeby generował przerwanie bardzo często. Powiedzmy co 10us. I w przerwaniu sprawdzaj czy pin ma stan 0 czy 1. Jak 1 to inkrementujesz jakaś zmienną. Jak zmieni się na 0 to zwracasz wynik i zerujesz tą zmienną. Oczywiście w tym samym przerwaniu sprawdzaj tak samo drugi pin. Niestety wymaga to kodu obsługi przerwania w assemblerze...
Jeśli chcesz zrobić wait na liczniku to możesz uzyskać dwa efekty. W obu ustawiasz w przerwaniu flagę. Pierwszy do instrukcja czekaj aż flaga będzie ustawiona wykonuj dalszy ciąg programu loop Generalnie w takim rozwiązaniu nie ma sensku dawać timera. Druga opcja do instrukcja if(flaga ustawiona) reszta kodu loop Oczywiście drugie rozwiązanie...
Robisz sobie dwie zmienne: blokada i aktywność. Blokada jako prosta wartość 0 lub 1: jeśli blokada jest założona i wykryjesz, że oba przyciski są naciśnięte, to ustawiasz blokadę na 0 (i aktywność na 0, dodatkowo można dać opóźnienie, aby nie uwzględniać naciśniętych przycisków dalej). Jeśli blokada jest zdjęta, to robisz wszystkie testy, dodatkowo...
Stwórz w programie głównym zmienną licznika 'Buzer' zwiększaną co jedną sekundę Po doliczeniu do 10 zeruj itd...
Pewnie niewiele pomogę ale zrób to na zasadzie nadpisywania ekranu. 1. Zrób ekran z opisami 2. wykryj przyciski pilota i przypisz flagi, np. góra, dol, lewo, prawo - zakładając, że przycisk włączony to 1 a wyłączony to 0 3. sprawdź flagi i gdy np. góra=1 to; powtórz punkt 1 ale już z innymi opisami. 4. Nie zerujesz zmiennej góra, zerowana jest dopiero...
Zmiennej Napiecie nigdzie nie zeruję i to by mogło być przyczyną? Jak najbardziej.
Rozumiem o co ci chodzi tylko nie potrafię ubrać tego w język BASCOM. Wiem że muszę naliczać zmienną 4 razy następnie ją zerować i wartością zmiennej będą case-y. i tak będzie sobie przełączać. Ale co zrobić ze zliczaniem impulsów częstotliwości pulein ? też w case-ach ją podawać ? znalazłem także super projekt http://mirley.firlej.org/sterownik_tasmy...
Chyba dokładniej się nie da skomentować ;) Powinno być już wszystko jasne... [syntax=basic4gl]Do ' pętla główna jakiegoś programu ' ' ' tu jest badany przycisk If P = 0 Then 'czy wciśnięty przycisk (P to pin procesora od guzika) If Lk = 0 Then 'czy licznik programowy doliczył już do zera Lk = 50 'jeśli tak to ustaw znowu na 50ms ' (można też nieco mniej,...
kolega może mieć racje jeśli chodzi o napiście zasilania. magistrale I2C jest typu otwarty kolektor i musi być zasilana z 5V. co do rezystorów to w różnych żródłach piszą różne żeczy gdzieś czytałem o 4,7k gdzieś nawet o 10k i o 1k też coś było. z tego wynikż że to mam małe znaczenie. ja używam 4,7k i działa ale wcale nie mówie że to poprawna wartość...
Kolego M.S chodzi mi o sam pinB.3, brak procedurt zerowania Kolego bkwrzos potrzebujesz zmienna a nawet dwie zmienne.
Nie wiem czy dobrze kombinuję: Czego tu jeszcze brakuje? Bo w symulatorze nie działa, tzn nie zwiększa zmiennej scnt. Spróbuj uruchomić Run programu w trybie "Step into Code" (F8) aby przekonać się że zmienna jednak za każdym razem inkrementuje się, ale także się ona zeruje bo zaczynasz program od początku (tam gdzie zostaje wysłany przez Return, zgodnie...
Najprościej: Wprowadź zmienną liczącą przebiegi pętli, zeruj ją gdy zostanie naciśnięty klawisz, zapisuj do EEPROMu gdy zmienna osiągnie odpowiednią wartość KotS
Hasło klucz programowe pwm. Tutaj masz przykład dla C i trzech kanałów - [url=http://pastebin.com/ZLjBVW0J]link - kod jest na tyle prosty, że powinieneś zrozumieć zasadę działania. U Ciebię będzie to wyglądać tak, że zmienną którą inkrementujesz w przerwaniu timera, będziesz musiał zerować podczas wykrycia zera.
Można sobie ułatwić robote na kilka sposobów.Użyć aliasów zamiast definiować zmienne bitowe: Dim Przekazniki As Byte Pk0 Alias Przekazniki.0 Pk1 Alias Przekazniki.1 Pk2 Alias Przekazniki.2 Pk3 Alias Przekazniki.3 Pk4 Alias Przekazniki.4 Pk5 Alias Przekazniki.5 Pk6 Alias Przekazniki.6 Pk7 Alias Przekazniki.7 Set Pk0 'tak ustawiamy bit Reset Pk5 'tak...
Prosze bardzo: 'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64 'Przycisk S1 zwiększa prędkość obrotową silnika 'Przycisk S2 zmniejsza prędkość obrotową silnika $regfile = "m8def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $crystal...
Nie wiem po co się tam gimnastykują od początku z jakąś pseudo oszczędnością SRAM (chyba) zamiast pracować na zwykłych zmiennych. Dodaj sobie zmienną Licznik. Nie musisz jej zerować na początku bo Bascom zrobi to automatycznie (chyba, że nie chcesz) Czyli zmień to i sprawdź ;) [syntax=vbnet] Dim Licznik As Byte Zwieksz: 'etykieta zakończona dwukropkiem...
Witam. Zrobiłem sobie zegar na wyświetlaczu lcd + termometr chciałem to wstawić do działu DIY ale w moich zamiarach było jeszcze przynajmniej RC5 a przy okazji jeszcze coś by się wymyśliło. Jednak na drodze stał DEMO BASCOM'a jak komplikowałem to wychodziło 50 % i wyskakiwał błąd, prawdę mówiąc to skróciłem go troszkę i jest teraz 47% ale i tak to nie...
No przecież prosto. Konfigurujesz timer1 do pracy w normalnym ale nie robisz start timer. robisz przerwanie dzialajace na zbocze np. narastające-> Dalej : robisz zmienną flaga w przerwaniu robisz if flaga=1 then start timer1 flaga=0 else stop timer1 w rej od timera masz czas... kopiujesz gdzie Ci tam pasuje flaga=1 zerujesz licznik endif I tyle, oczywiście...
Przepraszam, przeoczyłem znacznie grubszy błąd. Problemem jest to, że inkrementujesz x i y zarówno w przerwaniu, jak i poza nim. Zupełnie nie wiem, po co to robisz, ale to na pewno nie zadziała dobrze - po drodze zgubisz parę inkrementacji, i żadne volatile na to nie pomoże. Możesz w pętli zerować zmienne, które inkrementujesz w przerwaniu, ale nie...
Przetwonnik zlicza napięcia tylko do 2047, pokazując ujemne napięcie nie ma znaku minus i wartość, tylko np 65320. Czyli przetwornik zwraca wyniki w kodzie U2. Tam nie ma znaku minus. Jest za to przesunięcie poziomu. Najprościej mówiąc, zastosowanie takiej funkcji do konwersji: Napiecie = Zmierz1 * 256 Napiecie = Napiecie + Zmierz2 da Ci złe wyniki....
w sumie nie chodzi nawet o przerwanie, zwyczajnie wymuszam zmianę stanu wyjścia (Compare A = toggle) kiedy wartość timera się zrówna z rejestrem porównywania i dodatkowo zeruje timer: Clear Timer = 1 W efekcie mam generowany sygnał o zmiennej częstotliwości zawsze z wypełnieniem 50%.
Deklarujesz zmienną do liczenia czasu po wciśnięciu przycisku. Gdy puścisz przycisk, określona wartość wykonuje GOSUB do wykonania zadania(LCD czy sterowanie portami) i zeruje zmienną. Kolejne naciśnięcie przycisku zaczyna liczenie od początku i czeka na puszczenie przycisku. Możesz też wykorzystać TIMER do liczenia czasu.
Kwarc dajesz np. 12 MHz Robisz sobie pętelkę pomiarową wywoływaną z Timera np. co 200 µs sprawdzającą dane wejście pomiarowe. Jeżeli wejście jest =0 to nie zliczasz jeżeli = 1 to zwiększasz zmienną WYNIK o 1 (zmienna 16 bitowa) zakres będzie do jakichś 6.4 sekundy. W pętli sprawdzasz także czy zmienna nie przekroczyła 25000 (5 sekund). Jeżeli...
Przeorganizowałem twój kod z pierwszego postu bo w tym z dzieleniem i modulo to może działać ślamazarnie. Jeśli ci pasuje oczywiście. Licznik obsługuj w przerwaniu timera. A zmieniaj tylko wartość zmiennej za pomocą przycisków. To musisz sobie dopisać. Gdyby obliczenia w przerwaniu były za długie, przenieść je do głównej pętli, ale tutaj zawsze będzie...
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ąć...
Temat uważam za zamknięty Pomogło przerwanie Urxr w którym pobieram prze inputbin do zmiennej. a potem na końcu pętli głownej ją zeruję, bo wywoływała mi się ciągle jedna z opcji SELECT CASE. Kliknąłem wam "KCIUKI" :) Pozdrawiam
Jeśli chcesz aby np. dwie diody mrugały z różną częstotliwością to w najprostszy sposób możesz to zrobić tak: na początku pętli głównej dajesz małe opóźnienie powiedzmy 5ms. Potem w każdym obiegu pętli (co 5ms) zwiększasz wartość dwóch zmiennych np. Licz1 i Licz2. Kiedy Licz1 osiągnie wartość 50 wtedy zerujesz ją i zmieniasz stan pinu do którego dołączona...
Hmm. Nie wiem jak. Bascoma uczę się od dopiero 2 dni. Może kolega podać jakiś przykład? 1. Do rozpoznania naciśniętego przycisku zastosuj "DEBOUNCE" 2. Do pomiaru czasu w multiplexing zastosuj dowolnyTimer (może byc timer1, skoro już zacząłes go używac). Dla ławości rachunków zastosuj podstawowy czas pomiaru 4 mSec. Co 4 mS zrobisz multiplexing cyfr...
Ze względu na to, że w Bascomie nie mamy pełnej kontroli nad sprzętem, nie polecam rozwiązania poprzez skok pod adres 0. Podłączenie dowolnego pinu pod reset też nie jest dobrym rozwiązaniem - nie pamiętam dokładnie jak to było, dlatego nie będę opisywał dlaczego, ale należy przyczyny szukać w czasach i stanach jakie występują na pinach podczas resetu....
jezeli do nozki int0 podlaczysz wykres prostokatny... to przerwanie wystepuje tylko przy zmianie wartosci na tej nozce i trwa ono ulamki sekundy wiec chwila pomiarow nie bedzie widoczna. nie wazne czy okres przebiegu bedzie trwal 5us (mikro sekund) czy moze 5s a na wyswietlaczu bedzie sie caly czas wszystko wyswietlalo Tylko pamietaj ze tym sposobem...
Chciałbym zrobić coś takiego: Odbieram przez USART odpowiedzi z telefonu i chcę wykryć np. brak lub wyłączony telefon. Sęk w tym, że w tym momencie korzystam z Watchdoga i kiedy jest brak odpowiedzi z telefonu to program zawisa na Input'cie i wtedy go watchdog resetuje. Chciałbym w jakiś sposób zliczać te resety by np. po dziesięciu próbować włączyć...
Dobrze kolega napisał najpierw naucz się migać diodą a później naucz się obsługi timerów. Kolejny krok jak zliczysz 648 impulsów to zwiększasz zmienną litr o jeden. Zerujesz licznik i zaczynasz od nowa. I tak w koło. To jest przepływomierz do wody czy auta?
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Wydaje mi się, że najpierw powinno być „uruchomione” odliczanie tych 0,1 sek, wyzwalane pierwszym pikiem z „paczki”. Potem trzeba odczekać te 0,1 sekundy na zanik „szumów” i zacząć zliczanie w czasie 0,9 sek. Ilość zliczonych pików podzielona przez czas da mi częstotliwość. Wynik ma się utrzymywać na wyświetlaczu...
Witam To nie jest skomplikowana sprawa. Deklarujesz zmienne kontrolne które beda zmieniału swoją wartość po wykryciu 0 na pinie. dim kontrolka1 as byte dim kontrolka2 as byte kontolka1 = 0 ' najpierw je zeruje kontrolka2 = 0 ' / Teraz musisz dodać jakies warunki które bedą powodować zmiane ich wartości If pind.0 = 0 then kontrolka1 = 1 then wywołaj...
Jeśli masz do dyspozycji timer to zmień podejście do rozwiązania problemu. Ustaw timer tak, aby przepełniał się np. po minucie. To bezpośrednio zapewne nie jest możliwe (długość licznika), ale np. ustaw tak, aby przerwanie ovf występowało np. co 1s, 100 ms, obojętnie. W handlerze tego przerwania umieść dodatkową zmienną zliczającą te przepełnienia,...
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...
Najważniejsze to chociaż troszkę samemu najpierw pokombinować i ew później dopytać co i jak ;) ale po co ten Inkey? toż jak już zajdzie zdarzenie Bytematch - to znaczy, że w twoim buforze jest już co najmniej jedeń łańcuch tekstowy, którzy przyleciał z Rs232 i zakończony znakiem ENTER (13) .... w związku z tym wystarczy dać polecenie Input linia i już...
slavcio2012 - Czyli umiesz coś napisać, napisz program tak żeby każde naciśnięcie przycisku zwiększało zmienną ( przykładowo zmienną zadeklarowaną jako Przycisk_X ), pomoże Ci w tym instrukcja "incr Przycisk_X ", nie zapomnij też o instrukcji "Wait" żeby podczas naciśnięcia przycisku stan zmiennej "Przycisk_X" nie zmieniał się za szybko. Następny krok...
Widzę że tutaj jest podobny wątek co mój - to samo robimy:) Marcin - ja zadeklarowałem stan_licznika jako Long Sekundy, Minuty i Godziny jako Integer (nie Byte bo będzie gubił sekundy) i jeszcze do tego pomocnicza Temp także jako Long. I wszystko działa zupełnie poprawnie. Pozostaje mi jeszcze tylko zrobić ustawianie (zerowanie) jakimś przyciskiem a...
niestety w obu kodach brakuje czegoś co by dodawało cokolwiek do zmiennej A, więc nie przyjmie ona nigdy wartości 1 lub 2 skoro na początku się ją zeruje. Jesli chodzi o podciągnięcie programowe to nie działa (dałem rezystor zewnętrzny). Próbowałem tak i działa: config debounce = 50 ' 50ms dla przycisku dim a as byte ' deklaracja zmiennej a=0 ' zerowanie...
Kolego coś takiego wymyśliłem :[syntax=vbnet] $regfile = "m16adef.dat" $crystal = 80000000 $hwstack = 40 $swstack = 16 $framesize = 32 Config Porta = Input 'port A jako wejścia Config Portb = Output 'port B jako wyjścia ' Config Portd = Input 'Port D Jako Wejścia Config Portc = Output 'port C jako wyjścia Config Sda = Portc.1 'konfiguracja pinu magistrali...
czyli jak przykładowo dam: .... czyli flaga zmienia stan co ok. 1s,..... Z przedstawionej informacji wynika że masz w systemie tylko jeden układ DS, więc nie ma potrzeby go adresować (&H55-match ROM). wystarczy 'skip ROM'. Jeżeli flaga jest używana tylko do obsługi odczytu temperatury, to nie ma potrzeby aż tylu jej stanów (0/1/2/3; -wystarczy 0/1)....
Zupełnie inaczej. Obsługa przerwania, która tylko ustawia znaczniki, zupełnie nie ma sensu. W przerwaniu timera zgłaszanym np. 50 (20..100) razy na sekundę, czy poprzednio przycisk był zwolniony, a teraz jest wciśnięty. Jeśli tak - ustaw znacznik do ew. wykorzystania w ew. pętli zdarzeń (to dość nieszczęśliwe rozwiązanie, ale w Bascom i u początkujących...
if (j>21 && j<23) // 5-secundowy delay po 22 W miejsce operatora logicznego && możesz próbowac zastosowac operatora bitowego & . To jest nieprawidłowa rada, logiczny a bitowy to zupełnie inne działanie. A co do nieszczęsnej stałej 23, gdyby to był mój algorytm bym to bardziej wyraziście rozwiązał, albo przez zmianę stanu w...
Dlaczego wstawiłeś pół alfabetu jako zmienne? :O :) Timer2 powinieneś włączyć po odebraniu pierwszego bajtu, a wyłączyć i zresetować po odebraniu ramki lub zresetowaniu bufora. Chyba, że ma działać cały czas, wtedy zerować Ramkatimeout odbierając pierwszy bajt. Zerujesz bufor, ale nie zerujesz In_pos . Wyłącz przerwanie Urxc , gdy to robisz. Bezpieczniej...
problem ze zdwojeniem częstotliwości rozwiązany. Kolega kamyczek miał racje. Bascom (nie wiem czemu) nie radził sobie z zerowaniem zmiennej Frqz = 0. A co najdziwniejsze nie zerował tego w ten sposób Frqz = 0 a dopiero w ten Frqz =Frqz * 0. Błąd sie pojawiał w momencie gdy w procedurze Sub Policz Frq = 0 Frqz = 0 (usunałem) Frqz = 1h * 43 Frq...
Jeśli bez timerów to zadeklaruj 4 zmienne typu long ( dla odliczania dużych wartości - to będą czasy przerw ) i 4 zmienne typu byte (czas impulsu) zerujesz zmienne przed pętlą . W pętli incrementujesz kolejno te cztery zmienne. sprawdzasz komendą if czy kazda z nich osiągneła założoną wartośc (czas przerwy) . Jeżeli tak to : zerujesz zmienną , incrementujesz...
$crystal = 8000000 $regfile = "M16def.dat" $hwstack = 128 Tu zmieniasz wg wlasnych parametrow '- deklaracja zmiennych dla usart ---------------------------------------- Dim Index As Byte 'kolejny znak w buforze odbioru Dim Odebrano As Bit 'flaga ustawiona po odebraniu znaku Dim Buf(10) As Byte 'bufor wejsciowy - 10bajtow '- konfiguracja...
Sposób odbioru poprzez procedurę obsługi przerwania od URXC jest lepszy, ale: 1. Nie możesz przy wejściu do procedury obsługi przerwania kasować zmiennej Ciag_rx ponieważ przerwanie od URXC jest wywoływane dla każdego odebranego znaku; 2. Nie możesz w procedurze obsługi stosować Do...Loop ponieważ blokujesz odbiór i pętlę główną do czasu odebrania końca...
Tak co jeden cykl. Prescale jest 64 wiec nie tu chyba problem. Nic sie nie dzieje na wyswietlaczu a w symulatorze tez nie pokazuje zmian zmiennych. To nie jest jeden cykl, ani też 64 jakby wynikało z podziału prescalera. Wszystko można odczytac w symulatorze, tylko musisz potrafic posługiwac się jego ustawieniami i funkcjami. Poniżej masz przykład...
Jak zwykle czasu nie ma, ale nie mogłem się powstrzymać. Nakręciłem pierwszy klip - ahahahaha :D No musiałem się pobawić edytorem. Efekt to półtora minuty magii :D Ahahaha miałem kupę zabawy z tym :D Przy okazji możesz zobaczyć jak się używa wbudowanego symulatora by zadawać wartości ADC ;) Twój pomniejszony kodzik też poniżej, tylko używając poza symulatorem...
Niestety to nie działa, gdy inkrementacja zmiennych "przesunięcie1 i 2" się zeruje po osiągnięciu len(x) w warunku if...then w głównej pętli, cały napis z Bufor_text zanika i tworzy się na nowo. BASCOM domyślnie indeksuje od 1, dlatego z zerem źle działało. Zmienić 0 na 1 , >= na > i powinno być ok. Dodatkowo można poprawić warunek dla Left , bo teraz...
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...
Bo kontaktrony w licznikach rowerowych są jakieś szybsze. Robiłem kiedyś eksperymenty z rowerem i faktycznie zwykłe kontaktrony "rurkowe" nie nadążały się przełączać. Pierwszy z brzegu kontaktron KA-02 ze sklepu na literę T przy napięciu 5V i i prądzie 100mA ma częstotliwość przełączania 125Hz. Czas załączania do oporu 1Ohma wynosi ok 2,5 ms Czas odpuszczenia...
Uśrednianie ci nie działa, bo nie zerujesz zmiennej Sre po dziesięciu pomiarach. Wynikiem funkcji format musi być zmienna tekstowa, a ty próbujesz zapisać to do Dys typu Single. Zresztą Dys po Round nie wymaga formatowania. Co najwyżej konwersji na tekst.
Trzeba klawiszem zerować zmienną odpowiedzialna za wypełnienie (ustawiać wypełnienie 0 - zatrzymanie silnika), a przedtem zapisać jej wartość w zmiennej pomocniczej. Kolejne naciśnięcie klawisza powinno przepisywać zapamiętaną wartość do zmiennej określającej wypełnienie. Czyli klawiszem zmieniałbym zmienną jednobitową (0 lub 1), a w instrukcji warunkowej...
Witam. Przypuszczam że znalazłem błąd w funkcji MemCopy , ale chciałbym sprawdzić czy nie występuje on tylko u mnie. :). Funkcja zwraca do zmiennej WORD lub INTEGER ilość skopiowanych bajtów. Jeżeli wynik ma być zwrócony, do zmiennej globalnej jest wszystko w porządku. Kłopot zaczyna się jeżeli wynik ma być zwrócony do zmiennej lokalnej, po zakończeniu...
- PROGRAM GŁÓWNY ---> naciskam przycisk np. portd.1 i wchodzę w USTAWIENIA1 ----> naciskam kolejny raz klawisz portd.1 i wchodze w USTAWIENIA2 Witam. Robiłem cos podobnego ale na 89c2051 - wiadomo mało portów. Dlatego menu zrobiłem inaczej. W pętli głównej zrobiłem odwołanie do wejścia i napisałem: if P1.0 = 0 then call Ustawienia else call praca end...
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....
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
INCR czas IF czas > 122 then A ile wynosi „czas” za pierwszym razem? I pewnie z tego powodu sprawdzanie na wszelki wypadek czy nie większy i dziwaczne if > else if =. Działa? Świetnie ale jakoś podejrzanie to wygląda. Bo to nie ma "wyglądać" tylko precyzyjnie działać :wink: A teraz poważnie.Ponieważ Bascom po zadeklarowaniu zmiennej numerycznej...
Koledzy dziękuję wam bardzo za rozwiązanie problemu. a więc przestawienie prescalera na 8 odniosło pożądany skutek. Miałem jeszcze jeden błąd w programie. otóż w przerwaniu oczywiście zerowałem timer3=0 ale już w głównej pętli wyświetlałem lcd timer3 przez co wyniki skakały. w przerwaniu dałem aby timer3 zapisywał do zmiennej a w głównej pętli tą zmienną...
Witam Mam tak, jak w kodzie poniżej obsługiwane przyciski i pilot NEC. [syntax=vbnet] '********************* obsługa pilota '******** ustawianie stanu bitu If Command = 104 And Blokuj_pilot = 1 Then ' klawisz 1 Blokuj_pilot = 0 Licznik_blokuj_pilot = 0 Klawisz_1 = 1 Command = 0 Licznik_zeruj_led = 0 ' zerowanie licznika powrotu do wyswietlania godzin...
Sygnał podaję na nóżkę PORTD.6, mam go skonfigurowanego tak: [syntax=basic4gl]Config Portd.6 = Input[/syntax] Timer konfiguruje jako timer, ponieważ chcę mierzyć czas trwania zbocza: -konfiguruję za zbocze opadające -przepisuję wartość timer1 do zmiennej A -przełączam na zbocze narastające -przepisuję wartość timer1 do zmiennej B -od zmiennej B odejmuję...
możesz użyć zmiennej tymczasowe do przechowania stanu pinu w przerwaniu i w następnym przerwaniu sprawdzać czy zmienna jest taka sama jak stan pinu czy nie, jesli jest inna to znaczy że pin zmienił stan. Spróbuj przy tym pokombinować skoro sam chcesz dojść do rozwiązania. Co do zerowania zmiennych to najprościej zrób tak zmienna=0 i masz ją wyzerowaną....
Jeśli chodzi o PWM to dorzucam Ci 2 programy sterowania PWM za pośrednictwem 2 przycisków w języku BASCOM. 'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64 'Przycisk SI zwiększa prędkość obrotową silnika 'Przycisk S2 zmniejsza prędkość obrotową silnika...
Powinno być tak, że w przerwaniu zmieniasz stan flagi na 1, przepisujesz zawartość (znak) z bufora do jakieś zmiennej. W pętli głównej sprawdzasz, czy flaga=1, jeśli tak, to sprawdzasz jaki znak odebrano i na podstawie tego znaku wykonujesz jakąś tam operację, po czym zerujesz flagę (czekasz na następną). Ale, generalnie, program jest prosty i działa,...
Cześć Jesteśmy na wysokim stopniu abstrakcji ale metode asemblera jeszcze bym uprościł: - włączamy przerwania i timer - czekamy na przerwę synchro - pierwsze przerwanie startujemy timer - drugie przerwanie przeładowujemy timer do zmiennej i zerujemy - trzecie przewanie powtarzamy sekwencję - itd. po nalizie ilości impulsów albo wykryciu synchro możemy...
Użyj timera do generowania przerwań, i co przerwanie będziesz inkrementować zmienne np R, G, B, i jak osiągną zadaną wartość ustawisz stan wysoki na odpowiednich pinach. gdy zmienne osiągną np 255 to je zerujesz. To się dzieje w przerwaniu. a w funkcji głównej masz pętle nieskończoną w której to mogą się zmieniać wartości R, G, B i tym samym tworzyć...
To jest fragment kodu, którego używałem , żęby zrobić obsługę licznik, ale nie działa w symulacji $sim $regfile = "m8def.dat" 'Informacja dla kompilatora. $crystal = 8000000 'Też dla kompilatora,zastosujemy kwarc zewnętrzny 10MHz. Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E =...
Musi on zwiększać wartość PWM w uC, Zamiast S1 i S2. If S1 = 0 Then 'jeśli przyciśnięty S1, to Waitms 10 'opóźnienie dla eliminacji drgań 'styków If S1 = 0 Then 'sprawdzenie ponownie, czy 'przycisk S1 dalej naciśnięty, 'jeśli tak, to Incr I 'zwiększenie o jeden wartości I If I = 0 Then 'jeśli wartość I = 0, to I = 255 'wpisanie do I wartości 255 End...
Witam po raz kolejny. Zrobiłem to za pomocą przerwań, jak radziliście i można powiedzieć że działa. Niestety pojawił sie kolejny problem. Mianowicie, jak pogodzić obsługę przerwań z dwóch źródeł na raz? Mniej więcej chodzi o to, że na przerwanie int0 mierzy ten czas, zapisuje do zmiennej np "a" zeruje timer, a następnie czeka na przerwanie int1, mierzy...
Ale Ty potrzebujesz tylko on/off? Jeżeli tak to użyj przerwania od jakiegos timera i zmiennej licznikowej. Jeżeli np x=1 oznacza 1 sekunde, a chcesz żeby wyświetlanie gasło po 20 sekundach to robisz tak że w funkcji obsługi przycisku zerujesz zmienna x, a w przerwaniu inkrementujesz ją, w pętli głównej sprawdzasz jej stan, jeżeli mniejsze od 20, włącz...
w zasadzie wystarczyła by mi komenda SET z możliwością ustawienia pinu na określony czas. Nie przypominam sobie jednak takowej... ktoś mnie naprowadzi? W momencie ustawienia pinu, wrzucasz też do zmiennej jakąś wartość, proporcjonalną do czasu trwania tegoż ustawienia. Jakiś Timer, na przykład Timer0, generuje cyklicznie przerwania (np. co kilka milisekund)...
Czy ktoś wie dlaczego nie chce mi się zerować wartość sekund co te 60 sekund? Zmień nazwę zmiennej sekund ("Sec") na coś innego np: "sec_", albo "sek" (bez znaków " "). Bascom akceptuje instrukcje ASM, gdzie "SEC " oznacza "Set Carry", zatem prawdopodobnie może tu wystąpic konflikt. Nie bardzo rozumiem po co ta cała kombinacja. Zliczania czasu zalączenia...
Hmm dalej nie kumam do końca o co chodzi jestem początkujący ... Znalazłem taki program w książce do odmierzania 1 s tylko jak to do mojego programu dołączyć [syntax=basic4gl]'Przykład wykorzystania Timer0 do generowania w przerwaniu '1 sekundowych odcinków czasu 'Program co sekundę w przerwaniu zmienia na przeciwny stan linii 'PD0 sterującej diodą...
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....
zerowanie zmiennej zmiana zmiennej bascom bascom ustawienie zmiennej
piszczenie dysku twardego zacięcie stacji serwisowej schemat gramofonu
sharp lc46le824e falownik powmr
Sharp E-Scooter KS2 – jak odblokować prędkość powyżej 25 km/h? KSL-2102AAM Sony – gdzie kupić mechanizm, zamienniki, dostępność Allegro, eBay, North.pl