Zmień schemat: Przyciski podłącz do masy, elektrolit zamień na ceramik 100nF a diodę podłącz przez rezystor do zasilania a katoda do uc. Program: $regfile = "attiny2313.dat" $crystal = 1000000 ddrb =&B11111100 PORTB = &B00000011 ddrd =&B11111111 PORTD = &B00000000 do if pinb.0 =0 then waitms 100 portd.0 = 0 end if if pinb.1 =0 then waitms...
1.Konfiguruje się PORT 2.Podciąganie do plusa włącza się w PORT 3.Przyciski czyta się z PIN Sterować można PORT`em a sprawdza się PIN [syntax=basic4gl] Config PORT.x = Input 'nie podłaczamy driverow - port bedzie wejsciem PORT.x = 1 'sterujemy portem, podłączamy wewnętrzny rezystor Przycisk Alias PIN.x ' PIN PIN PIN PIN! [/syntax]
Standardowy błąd początkującego. Nie włączone wewnętrzne podciąganie (pull-up) na wejściach na których są switche.
Witam Napisz dokładniej czy Ci zadziałał program i czy zrozumiałeś o co w ogóle chodzi. Miło by było gdybyś kliknął na przycisk "pomógł". Pozdrawiam i życzę sukcesów w programowaniu :)
A gdzie masz Makedec ? Popatrz sobie w helpie. Sub Zmgodz '#### zmiana godzin #### H = Makedec(h) Incr H 'zwiększ godzinę If H > 23 Then 'jeżeli godzina większa od 23 H = 0 'to godzina = 0 End If H = Makebcd(h) End Sub
Należy zastosować rezystor 10K podciągający pinc.4 do plusa. Można też dać kondensator 1nF z tego pinu do masy. Celem zniwelowania stanów nieustalonych. Powinno pomóc.
Witam Najprościej będzie jeśli w podprogramie obsługi I2C zdefiniujesz je jako SCL i SDA, natomiast w podprogramie obsługi przycisków zdefiniujesz te same piny jako wejście. Chodzi o to, żeby procek za każdym razem odpowiednio ustawiał te piny. Nie ustawiaj tych pinów w pętli głównej na dwa sposoby , jako wejścia i jako piny do obsługi I2C. Pozdrawiam
Chcę zrobic na tym pilocie sterowanie oświetlenia itp. Tylko mam problem ponieważ w linku poniżej http://www.elektroda.pl/rtvforum/topic21... są tylko kody 4 przycisków a ja chciałbym wykorzystac w tym pilocie Creativa również inne przyciski i prosiłbym o podanie ich kodów ! Niejestem na tyle doświadczony w tych sprawach aby sam to rozgryśc !...
Czy włączyłeś podciąganie linii portów, do których są podłączone przyciski? Obsługa przycisków w programie też jest "nie tak". Naciśnięcie przycisku powoduje, że na wejściu będziesz miał 0, nie 1. To, co dalej robisz w programie, też jest średnio sensowne, ale to zauważysz dopiero wtedy, kiedy wykryjesz poprawnie naciśnięcie przycisku.
Dzieki Panowie za podpowiedzi ,mam problem z ustawieniem konkretnej godziny bo do pcfka musi byc godzina zapisana w formacie BCD,i jak zastosuje cos takiego Zwiększaj/zmniejszaj binarną , a dopiero po tym rób z tego BCD. H = 21 'dwudziesta pierwsza if pinc.2=0 then incr h end if H=Makebcd(h) 'w H znajdzie sie wartość &H22(binarnie 34)...
Zastawia mnie po co ciągle robisz warunek w warunku jak np. tu If Pinb.4 = 0 Then Waitms 1 Incr Setki If Setki = 10 Then Setki = 0 Incr Tys If Tys = 7 Then Tys = 0 End If End If End If Jak już mówiłem wcześniej, jeżeli zaprzęgnąłeś timer to wykorzystaj go do odliczania sekundy wtedy pętla główna zostaje do twojej dyspozycji i bez problemu tam umieścisz...
Tabelki są zrobione wg schematu - przykładowo jak zwarty jest przycisk czerwony, to jak na A podasz 1-kę (na B-0), to na Y dostaniesz 1-kę (bo A-Y sa zwarte), a na X będzie 0 (bo między A-X jest przerwa) , natomiast jak na B podasz jedynkę, to X i Y będą 0 (bo czerwony nie styka B do żadnego pinu). A mi się wydaje, że będzie stan nieustalony.;) Ja...
Jak mogę zrobić aliasy: komenda 10 to przycisk1 = 1, komenda 20 to przycisk2 = 1, komenda 255 to przycisk1 = 0, przycisk2 = 0? Nie możesz. :P Aliasy to tylko dodatkowa nazwa, a ty chcesz bajtem ustawiać odpowiedni bit. Mógłbyś tak zrobić gdyby był ustawiany konkretny bit w bajcie, np. Command.0 Alias przycisk1 Moja propozycja jest taka: W przerwaniu...
Zmiana stanów led po przytrzymaniu przycisku ma jedną zaletę, otóż jeśli chcę szybko przejść do stanu gdzie świecą się oba ledy. W niczym mi to nie przeszkadza. Jeśli tak, to nie ma problemu. Możesz jeszcze zebrać opóźnienia w jednym miejscu: [syntax=basic4gl] $regfile = "attiny13.dat" $crystal = 1000000 Config Portb = &B111100 Portb = &B000010 Dim...
[syntax=basic4gl] Przycisk_on Alias Pinx.y Przycisk_off Alias Pina.b DDRx.y = 0: DDRa.b = 0 PORTx.y = 1: PORTa.b = 1 Dim Zapamietalem As Bit Do If Przycisk_on = 0 then Zapamietałem=1 If Przycisk_off = 0 then Zapamietałem=0 Loop [/syntax] Zmienna Zapamietalem pamięta który przycisk został ostatnio naciśnięty. "0" jeśli Przycisk_off; "1" jeśli Przycisk_on....
Do if Pin = 0 then incr Zmienna_Pomocnicza if Zmienna_Pomocnicza > 2 then Zmienna_Pomocnicza = 0 if Zmienna_Pomocnicza = 0 then Wyslij kod 13 if Zmienna_Pomocnicza = 1 then Wyslij kod 14 if Zmienna_Pomocnicza = 2 then Wyslij kod 15 Bitwait Pin, set end if Loop To taki prosty programik na kolanie napisany. W miejsce Pin wstawic nazwe pinu do ktorego...
Nie rozumiem po co dioda LED ukazująca stan nawiewu jest podłączona do osobnego pinu. Nie ma takiej potrzeby, a nawet jest to nie wskazane. Stan wejściowy pinu portu D, nawet kiedy w DDRD jest on ustawiony jako wyjście, można odczytać z rejestru PIND, natomiast wyjściowy z PORTD - tak, ten rejestr można również odczytywać. Nie programuję w Bascom, ale...
seja4321 Napisałem kilka linii kodu ,jest to jedno z możliwych rozwiązań twojego problemu z przyciskiem . program przetestowałem. Moja rada to testuj program na kilku kilkunastu sekundach. powodzenia. Dodano po 46 Nie rozumiem dlaczego seja4321 został skarcony przez LordBlick, przecież pisze w dziale początkujący? Co do kodu, to jest dziwny, Piszesz...
Żeby zrobić za pomocą Timera - to nie możesz używać trybu PowerDown tylko Sleep - żeby właśnie Timery mogły działać to po pierwsze. W taki trybie jednak będziesz miał nieco większy pobór prądu niż w pełnym PowerDown. Więc wszystko zależy na ile ma wystarczać bateria o ile jest to coś zasilane z baterii. Bez PowerDown'a na pewno będzie to sporo krótszy...
Najprościej coś takiego: 1. pętla czeka na naciśnięcie przycisku 2. zmiena stanu diody led 3. pętla czeka na puszczenie przycisku 4. idź do pkt1 PS obie pętle muszą jeszcze dodatkowo mieć wprowadzone opóźnienia w celu debouncingu przycisku.
Nie będę sie rozpisywał: Dim T1 As Single , T2 As Integer ... T1 = -123.50 T2 = T1 'bez części ułamkowej T2 = Round(T1) 'zaokrągli zgodnie z prawami arytmetyki ... Pozdrawiam Piotrek
Polecenie Do umieść przed pierwszym If Jest: Set Pind.7 Set Pind.6 Powinno być: Set Portd.7 Set Portd.6 PS Przy takim kodzie, musisz wcisnąć jednocześnie dwa przyciski.
wejście jest sterowane minusem. Po napisaniu coś takiego, układ działa ale po za tym że nie czeka 1 s i nie przechodzi do Pwm1b = 100. Z pewnością przechodzi do Pwm1a = 100, (dlaczego Pwm1b ?) tylko ty mu nie dajesz szansy (czasu) abyś to mógł zobaczyć. Poza tym, nie masz kontroli nad czasem ponad 1 sec. pętla dalej jest przewijana w nieskoczoność....
1) jeśli używasz przycisków to zawsze podłącz go tak aby przyciśnięcie zwierało nóżkę portu do masy czyli do -. To naprawdę ułatwia sprawę i zawsze działa 2) dobra praktyka - przyciski, jumpery itp podłączaj do pinu procesora przez rezystor np 180 omów. Chodzi o to że kiedyś możesz się pomylić, ustawić pin jako wyjście, dać na nim 1 czyli napięcie +...
I jak tam postępy z projektem, udało ci się go zrealizować?, jeśli tak to może byś zamknął temat. Rozumiem że na kliknięcie "pomógł" nie mam co liczyć, bo przecież cel osiągnąłeś, a "jeleń" nie jest już do niczego potrzebny.
1. rezystor wywalić - przyciski bezpośrednio do GND 2. diody odwrotnie (obydwie) 3. w kodzie (część konfiguracyjna) uaktywnić wewnętrzne podciąganie do Vcc PIND5 i PIND6 (PORT.X = 1 : DDR.X = 0) 4. no i oczywiście zmienić interpretację przycisków w programie na przeciwny stan Pozdr, Light-I
...I dalej mam takie pytanie czy da się to zrobić prościej Bascom posiada funkcję skoków do podprogramu w/g indeksu. Portc.4 = 1 'podciagam port - przycisk Dim A As Byte , B As Byte Declare Sub Temp Declare Sub Temp2 Declare Sub Nap Declare Sub Przyc Const Maxa = 2 'maksymalna ilosc podprogramow A = 0 : B = 1 Cls Do 'petla glowna Debounce Pinc.4...
Wykorzystaj podprogram w którym umieścisz swoje instrukcje a na jego końcu umieść bitwait a potem tylko ponownie wywołaj ten podprogram.
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
Witam. Spróbuj tak napisać etykiety podprogramów. Zamiast Menu_1 : Napisz Sub Menu_1
Nie do końca , ja ostatnio męczyłem się bo na wolnych portach chciałem puścić i2c , niestety bascom odmówił współpracy , musiałem na tych portach zrobić przyciski . Dziwne ?!
Na początek programowania w bascom'ie można spokojnie używać komend debounce i innych. To jest o tyle dobre że o nic więcej nie trzeba się troszczyć - wpisujesz 1 linijke i masz. Co do tego pomysłu z goto jest też dobry(w przypadku tego programiku sprawdzi się wyśmienicie) ale czasami lepiej używać call bo uC po wykonaniu podprocedurki wróci do następnej...
Jak wyjść z pętli do loop, w której znajduje się encoder(). ? Funkcja ENCODER ma parametr określający czy czekać na zdarzenie, czy tylko sprawdzić i przejść dalej. Ty ustawiasz tryb "czekaj". Samo wyjście z pętli to po prostu EXIT DO.
Tak jeszcze przed END IF: [syntax=basic4gl]Rc5send Togbit , Address , Command[/syntax]
Dodałem drobną poprawkę, przetestowałem w symulatorze i wyglada że teraz jest ok. Ustaw $crystal odpowiednio. Podłącz pod PD.3 przycisk i pod PD.0 LED (led będzie świecił gdy sprzęt jest w stanie czuwania). O powerdown nie ma co walczyć i tak używasz zasilacza. Najpierw przetestuj ten program, dopiero potem połącz go z twoim silnikowym i przekonfiguruj...
A w tych dodatkowych skokach których nie chcesz powinny być wszystkie Case i IFy. A te wszystkie debounceusy powinny być w 1 procedurce do której skakałbyś 1 Gosubem gdybyś tylko chciał obsłużyć jakiś klawisz.
Co do bascomowego symulatora to działa on u mnie bardzo wolno, a Hardware simulator wyświetla jakieś bzdury Symulację można przyśpieszyć dodając $sim , ale działa to przez usunięcie opóźnień, więc może zmienić zachowanie. W każdym razie polecam przyjrzeć się co się dzieje w pamięci RAM. [url=https://avrhelp.mcselec.com/index.h...
If Pinb.2 = 0 Then Waitms 25 If Pinb.2 = 0 Then ... Zapoznaj się z Debounce !!! Do .... Debounce Pinb.0 , 0 , Dodaj , Sub Debounce Pinb.1 , 0 , Odejmij , Sub Loop Dodaj: Incr Zmienna 'lub zmienna = zmienna + {jakaś wartość} If Zmienna > {wartość końcowa} then Zmienna = {wartość początkowa albo wartość końcowa} Lcd...
Przyciski powinny zwierać do masy i mieć ustawione wewnętrzne pull-upy lub w aktualnym układzie (czego się nigdy nie robi) mieć zewnętrzne rezystory pull-down.
Może sam spróbuj ;-) Tak w zarysie : w pętli głównej musisz dodać warunek: jeśli przycisk wciśnięty to zwiększ zmienną "czas" o 1 jeśli puszczony to zmienna "czas" =0 następnie: jeśli zmienna "czas" = 123 (dla przykładu, bo nie wiem jak szybko ta pętla przebiega) to : zmień tryb pracy (to masz strasznie napisane, więc trudno ogarnąć)...
Wejście (pin procka PORTB.0) programujesz jako wejście . Ustawiasz wysoki poziom tego wejścia , tak aby naciśnięcie przycisku (zwarcie do masy) wymusiło niski poziom na tym wejściu , wykrywany przez program jako If PINB.0 = 0 Then ' coś do wykonania (naciśnięty przycisk)
To już musisz poczytać i popróbować. Nie możemy Ci każdej jednej rzeczy tłumaczyć.
W procedurze/podprogramie obsługi przycisku wciśniętego zwiększaj zmienną o 1 a w programie głównym, czy też tam gdzie to jest potrzebne, wykonuj program w zależności od tej zmiennej, np. wykorzystując SELECT CASE.
[syntax=basic4gl] If Alarm = 1 And Portd.0 = 0 Then Reset Alarm ' Jeśli alarm wysyła dźwięk i zostanie naciśnięty przycisk nr. 1 - wyłącz go[/syntax] powinien być Pind.0
Zobacz to: Dim Przycisk As Word , Czas As Integer , Czas_zamka As Integer Czas_zamka = 0 Czas = 0 Do Debounce Pinb.1 , 0 , Licz , Sub If Przycisk > 0 Then Incr Czas If Czas = 300 Then Przycisk = 0 Czas = 0 End If If Przycisk = 3 Then Portb.2 = 1 If Portb.2 = 1 Then Incr Czas_zamka If Czas_zamka = 300 Then Portb.2 = 0 Czas_zamka = 0 End If Waitms...
Spróbuj tak: do Debounce Pind.0 , 0 , algorytmy ' Twój s1=pind.0 loop algorytmy: toggle A ' zmienna A jako bit If A=0 then Algorytm 1 sterowania wyników na LCD else Algorytm 2 sterowania wyników na LCD end if return Użycie debounce eliminuje drgania styków. Pozdrawiam.
To bedzie działać zgodnie z złozeniami Oto kod: If Portb.1 = 0 Then Toggle Portb.2 każdorazowe pojawienie się 0 na portb.1 spowoduje zmianę stanu portb.2 Pozdrawiam. a to nie if PIND.0 = 0 then PORTD.1 = 1 end
Witam. Mam pewien problem. Zacząłem uczyć się Bascoma (tak, wiem, głupi wybór, ale chodziło mi o prostotę). Na razie na swoim koncie mam zegar na DS1307 i LCD 2*16, teraz coś mnie napadło na wykorzystanie timerów i kupionych kilka lat temu wyświetlaczy 7-segmentowych wspólna katoda. Na razie napisałem tyle: [syntax=basic4gl] $crystal = 12000000 Declare...
Poszukaj w hepie bascoma instrukcji Config Pin, oraz w dokumentacji procesora jak się włącza pull-upy.
Jeśli wciśniesz przycisk to GOSUB do podprogramu. W podprogramie wykonuje się pętla Do...LOOP. Jeśli przyciśniesz przycisk w podprogramie to RETURN do programu głównego.
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
Jeżeli przyciski masz do VCC, to todaj rezystory od pinów do masy (10...100k). Dodano po 7 W pierwszym programie pomyliłeś porty. Portb ustawiłeś jako wejście a tam podłączyłeś diodę. Portd ustawiłeś jako wyjście i tak podłączyłeś przycisk.
"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." Myślę że jesteś w błędzie. To daje A=1 Cls Lcd "krotkie" A=1 wait1 A to: Cls Lcd "dlugie" A=2 wait1 możesz jej nie kasować w ogóle i tak po skoku do MENU będzie ustalona. A to:...
Witam, tu w Zegarek docelowo będzie używany przez dziewczynę, więc musi być przejrzysty. - to już szowinizm...
instrukcja Pinx.y służy do odczytu stanu portu natomiast Portx.y do ustawienia stanu na porcie
Witam, wydawało mi się że idea jest prosta widocznie źle ją przekazałem i źle została zinterpretowana-co zauważyłem w kodzie. Dopisałem coś do powyższego programu-mam nadzieje że kolega się nie obrazi :P Może to ułatwi zrozumienie tego na przykładzie znanym autorowi tematu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16...
przycisk progresywny? te materiały sam musisz chyba sobie wykombinować. robisz to za pomocą pętli , wciskasz przycisk , tworzysz sobie zmienną x = ileś tam milisekund która określa odstęp czasowy , w pętli zmieniasz sobie jakąś tam swoją inną zmienną, zmniejszasz x i czekasz x czasu, jeśli przycisk puściłeś to wychodzisz z pętli i the end.
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...
Nie działa bo masz nie włączone podciąganie do plusa. Rejestry PIN nie służą do zapisu w tym procesorze (tylko w niektórych modelach zapis 1-dynki do nich powoduje zmianę stanu odpowiadającego bitu w rejestrze PORT). http://www.atmel.com/Images/doc2503.pdf - strona 64 Musisz dać dla każdego przycisku po instrukcji Config ... Input instrukcję Set Portd.x...
Kod jest już poprawiony. Ten działa w 100% Na pewno nie będzie działał brak zakończenia dwóch warunków w pętli Do -Loop oraz coś bardzo ciekawego : [syntax=basic4gl]Config Rc5 = Pind.2 If Command = 16 Then Portd.2 = 1 [/syntax] Najpierw deklarujesz jako RC5 a potem zmieniasz na nim stan ? . Coś mi się wydaje że za bardzo nie wiesz jak się do tego zabrać...
Ten drugi pomysł jest moim zdaniem lepszy. Do tego możesz użyć końcówki przerwania INT - ma konfigurację zbocza, którym jest wyzwalane przerwanie.
Dla sprawdzania jednego klawisza: do ... ... ... gosub sprawdzanie_klawiszy if flaga = 1 then instrukcje gdy wciśnięty klawisz end if ... ... ... loop sprawdzanie_klawiszy: flaga = 0 if Ok = 0 then waitms 50 if Ok = 0 then flaga = 1 end if end if return mniej więcej tak to ma wyglądać. Jeśli chcesz sprawdzać kilka klawiszy robisz bardzo podobnie....
Możesz zamienić waity na pętle, w których będziesz sprawdzał stan przycisków i odpowiednio reagował.
Problem powoduje używanie waitms. Podczas wykonywania waitms procesor pracuje tak jakby w pętli do..loop i nie reaguje na nic. W zasadzie nie powinna być używana. Rodzi więcej problemow, a wcale nic nie ułatwia. Zastosuj timer do sterowania diodą zamiast waitms.
Poczytaj np. [url=http://www.elektroda.pl/rtvforum/vi... to może Ci się nieco rozjaśni ;) A kilka postów wcześniej cytowanego linka jest podobne rozwiązanie z zastosowaniem timerów. Połącz oba i będziesz miał złoty środek... Pozdrawiam.
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...
Tak na szybko: Nie: If Portd.2 = 0 Then Liczba = Liczba + 1 Tylko: If Pind.2 = 0 Then Liczba = Liczba + 1 Zamiast tej plątaniny: If Liczba = 0 Then Reset Portb.0 Set Portb.1 Reset Portb.2 Reset Portb.3 Reset Portb.4 Reset Portb.5 Reset Portd.0 Elseif Liczba = 1 Then Reset Portb.0 Set Portb.1 Reset Portb.2 Set Portb.3 Reset Portb.4 Reset Portb.5 Reset...
Łap. Napisałem w przerwie między... Zajmuje połowę mniej niż Twój a działa :D [syntax=vbnet]$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 8 $swstack = 8 $framesize = 8 Config Portb = &B01110 : Portb = &B10001 Sw Alias Pinb.0 D1 Alias Portb.1 : Set D1 D2 Alias Portb.2 D3 Alias Portb.3 Config Timer0 = Timer , Prescale = 1024 , Clear...
' Trzy przyciski kolejno .... (TSA ;) ' wersja bez przerwań i Timera czas_a as integer ' zmienna czasowa A czas_b as integer czas_c as integer we_a alias pinx.1 ' wejście A we_b alias pinx.2 we_c alias pinx.3 wy_a alias Py.1 ' wyjście A wy_b alias Py.2 wy_c alias Py.3 stan_a as bit ' stan układu monostabilnego A: 0 - czeka, 1- liczy stan_b...
Prościej sie nie da : 'w góre if pinb.5 = 0 then if A <> 4 then 'wartosc maxymalna A incr A waitms 100 end if end if 'w dół if pinb.6 = 0 then if A <> 0 then 'wartosc minimalna A decr A waitms 100 end if end if
W C to bym ci nawet pokazał jak to zrobić, o BASCOMie nie mam pojęcia i nie chcę mieć :) Swoją drogą lepiej porzuć tą ciemną stronę mocy i przejdź na stronę światła :)
Naprawdę nie potrafisz [url=http://www.elektroda.pl/rtvforum/vi... przystosować do własnych potrzeb??? Zapewniam Cię, że robiłem to na 10 key i wszystko biegało aż miło...
Hej! Oto programik w Bascom-AVR. Jeżeli naciśniesz przycisk(portd.0) na mniej niż pieć sekund to zapli Ci się dioda(Portb.7), a jeżeli będziesz trzymał przycisk wciśnięty przez pięć sekund to przesunie Ci jedynkę po całym porcie b. Config Pind.0 = Input Config Portb = Output Dim I As Dim I=1 Program: Do If Pind.0 = 0 Then For I = 1 To 5 Wait 1 If Pind.0...
Proszę. Kod masz taki, delikatnie pisząc, rozwlekły :D Trochę poskracałem zmieniane fragmenty. Sprawa jest nieskomplikowana. Kiedy naciskasz przycisk wyboru wyjść to czeka aż puścisz przycisk bo inaczej to od razu by z tej procedury wyszedł. Czeka więc aż puścisz i potem powtórne wciśnięcie spowoduje że zmienna Exit_this dostanie wartość 1 a to jest...
A Twój program nie chce działać? Jaki jest problem. To co w programie masz nieprawidłowo to odczyt stanu przycisku. Procedura odczytu przycisku powinna przewidywać takie sytuacje jak drgania styków lub przypadkowe zakłócenia na linii przycisku. Jedną z możliwość odczytu przycisku jest: [syntax=basic4gl]If Wejscie = 0 Then Waitms 100 If Wejscie = 0 Then...
Pittt, działa dobrze ale czy nie dało by się zrobić tak, by cyfry przeskakiwały tylko o 1 ale w szybkim tempie?
[syntax=basic4gl] If Klawisz = 1 Then F_petla = 1 'to umiescic naljepiej w przerwaniu For Adres = 100 To 200 Step I If F_petla = 1 Then Exit For Cls Lcd Adres Waitms 250 Next Adres [/syntax]
Działa a duzo to roboty żeby dodać to tego kodu ustawianie czasu za pomocą dwóch przycisków.
Witam ! do dioda1 = 1 If przycisk1 = 1 and prycisk4 = 0 then dioda1 = 1 waitms 2 dioda1 = 0 waitms 20 end if loop itp. to początek resztę spróbuj sam Powodzenia życzę Stefan . GG6293398
Jakiś użytkownik też miał z tym kiedyś problem, rozwiązał to w taki sposób: Pinb.0 = 0 ' pin RW Waitms 100 Initlcd Nie sądzę, że jest to potrzebne, gdy pin został skonfigurowany w config lcdpin . Co z tą częstotliwością? W symulatorze raczej jest podany czas wykonywania kodu (sprawdź bez $sim ). Nie podałeś, jaki masz kod, ile się wykonuje na mikrokontrolerze,...
A czytasz co napisałem wyżej ? Problem polega zapewne na tym, że przyciski nie są podciągnięte ani fizycznie ani programowo do + , czyż nie o to chodzi kolego piotrva? PS. Napisałem 'podciągnie' -literówka
Nie ma to jak odpowiadac samemu sobie ;) Ale być może ktoś z tego skorzysta, więc podam przykałd: config portd = &B00000000 'wszystkie piny jako wejście na porcie D portd = &B11111111 'wymuszamy stan wysoki na wszytskich wejściach (podciagamy - port ma wudowane rezystory podciagajace) config debounce = 30 'zwiększamy opóźnienie eliminacji drgań styków...
Napisz podprogramik migniecia dioda i wywołuj go po każdym warunku sprawdzającym czy jest wciśnięty przycisk.
Weź sobie załaduj do jakiegoś podprogramu fragment w którym sprawdzane są przyciski, jednocześnie w tym podprogramie odliczaj opóźnienie. (np zrób pętle która będzie miała waitms 1 - ilość wykonań pętli ilość opóźnienia ale równocześnie sprawdzany port przycisku) Zamiast rozkaz waitms wywołuj ten podprogram. To tak najprościej i bez przerwań.
Grala1 - Nie wiem czy ta wersja spełni oczekiwania : '$prog &HFF , &HE1 , &HD9 , &H00 ' Fusebity fabryczne !!! $sim ' dyrektywa opuszczania zwłoki (usunąć ten wiersz przy wgrywaniu w chip) $regfile = "m8def.dat" ' dyrektywa kompilatora o rodzaju procka ATMega 8 $crystal = 16000000 ' określenie kwarca 16 MHz Config Pinb.1 = Output...
Witam chciałbym aby w bascomie zaprogramować przycisk że po wciśnięciu i przytrzymaniu określoną liczbę sekund np 20 włączy program Czemu nie używasz kolego klawisza "szukaj" ? Niedawno była dyskusja na ten temat. http://www.elektroda.pl/rtvforum/topic18...
Tzn, że przycisk mam dać pod mase?? bo mam pod vcc
Witam mam taki mały problem z tym kodem... Nie wiem za bardzo jak do tego podejść. Działanie: 1. Przytrzymaj kilka sekund Przycisk - Wtedy uruchamia się procedura rozjaśniania. 2. Gdy puścimy przycisk i znowu naciśniemy, bądź przytrzymamy procedura rozpoczyna się od nowa czyli przyciemnianie i rozjaśnianie ... A powinno być tak: 1. Aby po przytrzymaniu...
Włącz w symulatorze odświeżanie zmiennych. Przycisk z kartką i łapką.
Witam! Jak w bascomie sprawdzić, czy naciśnięcie dwóch przycisków nastąpiło równocześnie lub prawie równocześnie (maksymalna różnica to 300 ms)?
Może zrób tak: If Pind.2 = 0 Then 'i jest wciśnięty przycisk PIND.2 Incr Opoznienie_odczytu 'no bo przycisk ma drgania dłużej niż 237us- niech zwiększy 'to sprawdzanie powtórne do 17ms If Opoznienie_odczytu >= 70 Then 'dajmy mu na wygaszenie drgań 17ms If Temp0 = 0 Then ' i jest zezwolenie na zmianę stanu Gosub Ustawianie Temp0 = 1 ' zablokuj zezwolenie...
[syntax=basic4gl]while a=1 x++ if x==100 zapal led if x==200 zgas led x=0 waitms 5 wend zgas led[/syntax]
I sama nazwa miała by taki wpływ na działanie? Aż sprawdzę ale nie jestem do tego przekonany że to wina tego, ale sprawdzę po południu. Aliasy masz dla PINx a to jest rejestr tylko do odczytu. Rejestr sterujący pull up nazywa się PORTx. Zrób set PORTx.
Int0 ma najwyższy więc trop z priorytetem nie był dobry. Na próbę ustaw sztywno czas i wywal wszystkie wait. Może na czas oczekiwania w wait nie działają przerwania? I sprawdź czy wyzwala z przycisku.
Proponuję przy aliasach przycisków wpisać nie port a pin, bo to są wejścia. No i faktycznie aby stany na wejściach nie szalały podciągnąć wejścia do plusa. Moze być np. tak: regfile = "m8def.dat" $crystal = 1000000 Config Portd = Output Portd = &B00000000 Config Pinb.0 = Input Config Pinb.1 = Input Led1 Alias Portd.1 Led2 Alias Portd.2 S1...
U mnie twój program działa bez problemu :D . Może to wina zakłóceń.
Pragne zrobic uklad ktory bedzie mial za zadanie dokonywanie 2 pomiariw(czestotliwosci i temperatury) oraz wyswietlanie informacji na wyswietlaczu graficznym... zrobilem juz dosc duzo bo opanowalem pewne elementy ale, mam nastepujacy problem. pragne by moj uklad dzilal nastepujaco: 1. dokonywal obydwu pomiarow jednoczesnie. 2. sterowanie jest jedno...
marco47 - przepraszam, nie zauważyłem. marek19951 - proste if-then nie załatwi problemu. Jeżeli masz zapał, a widzę , że masz, zacznij od procedury obsługi klawiatury , która nie powoduje opóźnień poprzez martwe pętle ( czyli m.in wait, debounce, bitwait itp). Ja to zrobiłem na przerwaniu programowym z timer1, które odliczało mi okresy 10 ms w połączeniu...
Dawno nie pisałem w Bascomie, ale myślę że na końcu każdego podprogramu musisz dać return. Inaczej program idzie w następne etykiety. A u ciebie jest tylko na końcu ostatniej .
Spróbuj: $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 24 Config Portd = Output Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output Config Pinb.3 = Output ' ustawiam porty do saa1057 Dat Alias Portd.3 'SPRAWDŹ CZY DOBRZE ZDEFINIOWAŁEM Ena Alias Portd.2 Clk Alias Portd.1 'przyciski Ddrc =...
bascom przycisk przerwaniu przycisk dotykowy bascom przytrzyma przycisk bascom
zakładanie nowych tematów klawiatura labtec piasta łożyska
telewizor samsung restartuje telewizor samsung restartuje
Dekoder DVB-T2 HEVC – Ferguson T40, Tesera AT3, New Digital T2 007 – odbiór TV naziemnej, kompatybilność, funkcje Samsung UE55MU6172 błąd 2014506-1 – zablokowane konto, akceptacja warunków Smart Hub, naprawa kodu błędu