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...
[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....
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...
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...
Standardowy błąd początkującego. Nie włączone wewnętrzne podciąganie (pull-up) na wejściach na których są switche.
Wykorzystaj podprogram w którym umieścisz swoje instrukcje a na jego końcu umieść bitwait a potem tylko ponownie wywołaj ten podprogram.
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...
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...
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.
Napisz poprostu na początek program który bedzie tylko sprawdzał stan tych pinów i będzie wiadomo czy problem jest z wyswołaniem procedury czy z wykrywaniem kliknięcia przycisku ewentualnie spróbuj odwołać się bezpośrednio do końcówek zamiast przez aliasy
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]
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 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.
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ąć)...
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
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 :)
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.
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.
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ść....
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.
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...
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...
To już musisz poczytać i popróbować. Nie możemy Ci każdej jednej rzeczy tłumaczyć.
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.
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
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,...
Poszukaj w hepie bascoma instrukcji Config Pin, oraz w dokumentacji procesora jak się włącza pull-upy.
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.
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
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ć...
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 +...
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.
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
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....
Tak jeszcze przed END IF: [syntax=basic4gl]Rc5send Togbit , Address , Command[/syntax]
"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:...
instrukcja Pinx.y służy do odczytu stanu portu natomiast Portx.y do ustawienia stanu na porcie
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.
Ł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...
Witam Napisałem program który ma po naciśnięciu przycisku dodać lub odjąć 50 do zmiennej a następnie wyświetlić to na LCD Problem jest taki ze po wgraniu programu bez naciskania na wyświetlaczu zmienna cały czas przeskakuje co 50 na LCD a jak nacisnę 2 przyciski naraz to się zatrzymuje jaki jest tego powód ? [syntax=basic4gl][/syntax] $regfile = "m8adef.DAT"...
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 :)
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 !...
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.
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.
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...
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...
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ń.
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...
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...
A masz podciągnięte wejście przycisku do VCC albo programowo albo zewnętrznie sprzętowo w ogóle ?
Witam, tu w Zegarek docelowo będzie używany przez dziewczynę, więc musi być przejrzysty. - to już szowinizm...
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...
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...
...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...
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...
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...
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 ?!
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...
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.
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,...
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...
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...
[syntax=basic4gl]while a=1 x++ if x==100 zapal led if x==200 zgas led x=0 waitms 5 wend zgas led[/syntax]
Jeśli chodzi o bascoma to ci nie pomoge bo nie znam. Ale skoro piszesz: potrzebuje napisać program, który będzie załączał przekaźnik po naciśnięciu przycisku. Problem jest w tym, że za przycisk będzie robił układ, który poda na pin procesora napięcie - czyli tak jakby przycisk był podłączony pod VCC. Skoro przekaźnik ma się włączać zaraz po podaniu...
Mam podobne zadanie i zrobiłam tak: [syntax=vbnet] Do Incr Czas1 If Czas1 >= 2000 Then : Czas1 = 2000 : Led = 0 : End If Incr Czas2 If Czas2 >= 2000 Then : Czas2 = 2000 : Led = 0 : End If Debounce K1 , 0 , Guzik1 , Sub Debounce K2 , 0 , Guzik2 , Sub Waitms 1 Loop Guzik1: Czas1 = 0 If Czas2 < 200 Then Led = 1 Return Guzik2: Czas2 = 0 If Czas1...
Po co stosować tu przerwanie? Kardynalny błąd to stosowanie polceceń opóźnień w przerwaniach. W tym programie problem tkwi w: If Przycisk = 0 Then Waitms 100 If Przycisk = 0 Then Incr Sekwencja If Sekwencja = 0 Then Incr Sekwencja If Sekwencja = 4 Then Sekwencja = 1 End If End If End If End If Popraw na: If Przycisk = 0 Then Waitms 100 If Przycisk =...
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.
' 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...
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...
Co innego ustawiasz, a co innego kasujesz. To jest błąd.
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...
[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
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...
Nastepnym razem napisz jaki masz blad, na moje to zapis powinien byc i=i+1 oraz i=i-1
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)...
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
Miałem kiedyś jakąś potrzebę na taki 8-o przyciskowy program dla attiny2313. Zamieszczam go w całości z komentarzami, może Ci się przyda: [syntax=basic4gl]$regfile "attiny2313.dat" $crystal = 1000000 '-- Config Portb = Input Portb = &B11111111 Config Portd = Output Portd = &B00000000 Config Porta.0 = Output Porta.0 = 0 Dim Nr As Byte 'licznik...
Witam Napisałem program w Bascom do obsługi dwóch serwomechanizmów. Program jest prosty i po naciśnięciu przycisku załącza na pewien czas 1 serwo potem 2 następnie wraca obydwa . Odczekuje jakiś czas i ponawia cykl. Wszystko działa , ale chciałbym aby po naciśnięciu przycisku w dowolnym czasie program ruszał od początku. Próbowałem zrobić to instrukcjami...
Niestety też nie działa
Gdy przycisnąłeś przycisk ale trzymałeś go mniej niż 70 okresów to zmienna Opoznienie_odczytu dochodziła do powiedzmy 65. Ale po puszczeniu przycisku nie resetowałeś zmiennej. Czyli miała ona dalej 65. I kolejne przyciśnięcie było obsługiwane za 5 cykli, a nie za 70 cykli tak jak chciałeś. Bo zmienna musiała doliczyć do 70 a już miała 65 czyli brakowało...
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...
Cześc mam takie pytanko zczytuje kod przycisku w prog. girder ! np kod przycisku 843515EA ! I teraz chciałbym napisac program w bascomie tak aby po naciśnieciu tego przycisku zmieniał się stan portu i tu mam problem ! Mianowicie tu są litery a nie same cyfry w tym kodzie tego przycisku czy trzeba jakoś go zamienic i jak miałby wyglądac program dekodujący...
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)
Witam. Napisałem program do 89c2051 który działa tak że wciśnięcie danego przycisku na pilocie powoduje włączenie danego bitu, ponowne wciśnięcie powoduje wyłączenie go. Jak napisać program żeby wciśnięcie powodowało włączenie a zwolnienie przycisku wyłączenie bitu?
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...
Wiec zrobiłem to tak: [syntax=vbnet] Dim Piloty As Byte Dim Old_piloty As Byte Dim Klawisze As Byte Dim Old_klawisze As Byte Dim Licznik_kasuj As Byte Dim Flaga_kasuj As Bit Zeruj_klawisze Alias 250 Zeruj_piloty Alias 0 Klawisze_1 Alias Klawisze.0 Klawisze_2 Alias Klawisze.1 Klawisze_3 Alias Klawisze.2 Klawisze_4 Alias Klawisze.3 Klawisze_5 Alias Klawisze.4...
tak, teraz te 2 przypisania odnoszą się do Timera 1 i wyprowadzeń oc1a i oc1b, więc poprawnie zakładając, że konfiguracja uwzględnia tryb 10-bit, czyli: Config Timer1 = Pwm , Pwm = 10, Compare A Pwm = Clear Up, Compare B Pwm = Clear Up, Prescale = 1
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 nie jest jeszcze to co oczekuje, mianowicie: Są 3 tryby pracy: -Wyświetlanie temperatury (główny) - Po jednym naciśnięciu przycisku przechodzi do wyświetlania temp max i min i czeka na kolejne instrukcje - a jeżeli ten sam przycisk jest naciśnięty dłużej (np. 3sekundy) to przechodzi do resetowania wartości max i min i wraca do wyświetlania temperatury....
Witam. Nie sprawdzałem tego, ale proponowałbym coś takiego: W pętli głównej programu Main: Do If K1 = 0 Then Call Generacja End If ....... Loop End W podprogramie Sub Generacja If K1 = 0 Then Set ...jakis port Waitms 50 Reset ... jakis port End If Do If K1 = 0 Then Loop End If If K1 = 1 Then Set ... jakis port Waitms 50 Reset ... jakis port Exit...
Możesz zamienić waity na pętle, w których będziesz sprawdzał stan przycisków i odpowiednio reagował.
Witam. Napisałem program zegara na timer1 (atmega8) z zewnętrznym kwarcem. Chcę, by podczas przytrzymywania przycisku do ustawiania czasu naliczało coraz szybciej lub chociaż co 5. Próbowałem wielu przykładów ale żaden nie chce działać poprawnie. Mój fragment kodu: Do Call Wyswietl_czas If S1 = 0 Then Waitms 25 If S1 = 0 Then If Przysp = 0 Then Incr...
Program wykona się tylko raz. Jeżeli naciśniesz odpowiedni przycisk i przytrzymasz go do momentu az uruchomisz uc to odpowiedni warunek zostanie sprawdzony i wykona się odpowiednia akcja
Witam ! Najpierw zmień tą linię: If Pind.7 = 1 Then na If Pind.7 = 0 Then dodaj też Else do If Pind.7 = o Then Portc.5 = 0 else Portc.5 = 1 loop end
Pisałem abyś wszystkie diody LED połączył przez rezystory do +5V , a Ty tego nie zrobiłeś ? Mam rację ? Dziękuję za 10, nie trzeba było. GG6293398
Włącz w symulatorze odświeżanie zmiennych. Przycisk z kartką i łapką.
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
Witam. Poczytaj w polskim helpie do bascoma ale jak narazie to moge ci cos doradzic: program wywolujesz tym - call nazwa podprogramu , pamietaj ze musisz go wczesniej zadeklarowac tak: declare sub nazwa aby byl tylko on wykonywany zamknij go w petli do loop i w tym podprogramie wpisz np if pind.0=0 then call inny podprogram end if itd. Pozdrawiam
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
przerwanie bascom przycisku bascom obsługa przycisku przytrzymanie przycisku bascom
wskazać amperomierz przepustnicy fiesta dodge caravan skrzynia
Opłacona karta przestała działać - przyczyny i rozwiązania Wybór dysku SSD dla płyty głównej LNVNB161216