Mozesz sprawdzic X Mouse Button Control i zmiane podanej opcji De-Bounce na 1ms -> https://www.howisolve.com/how-to-fix-a-d...
Zastąpić można np. If sw=0 then waitms 10 if sw=0 then Coś tam wyelimnuje to tzw. drgania styków, czyli zastąpienie DEBOUNCE
Akurat w przypadku tego kodu przycisk wyjątkowo zwierał do plusa. Jeśli zwiera do masy, to powinno się porównywać z wartością 0b11111110. Na ogół nie ma sensu rejestrować aż 8 stanów - wystarczy wymaskować zmienną keystate maską złożoną z 2..3 jedynek i porównywać z odpowiednią maską, np. 0b110. keystate jest typu uint8_t. Wyglądałoby to np. tak: if...
Przede wszystkim błąd jest tutaj: S1 Alias Porta.3 (O ile s1 to button)
Czysta ciekawość a podciąganie masz na tym pinie? (Zewnętrzne oczywiście, bo wewnętrzne masz wyłączone) Ł.
No lepiej, ale jasno to do końca nie jest. Teraz myślę, czy chodzi Ci o coś takiego: [syntax=c]#define DEBOUNCE DEB #define NO_DEBOUNCE NOTHING #define NOTHING(name) #define DEB(name) DEB_##name, #define LIST_IO PIN(A1, DEBOUNCE) \ PIN(B3, NO_DEBOUNCE) \ PIN(C2, DEBOUNCE) \ PIN(D1, NO_DEBOUNCE) uint8_t x = [ #define PIN(name, deb) deb(name) LIST_IO...
dodałem do programu debounce i blokady czasowe które defacto wyeliminowały wszystkie błędne impulsy! Moim zdaniem obszedłeś problem zamiast go rozwiązać :)
Wszystko zależy jak rozwiązano w danym przypadku sposób liczenia interwałów taktowania zegara, ale typowo w elektronicznych układach odmierzających czas są montowane te typowe kwarce 32768 kHz w cylindrycznej oprawce. Owe kwarce znajdziesz w zegarkach czy to wskazówkowych kwarcowych z budzikiem czy też w płytach głównych PC :) Jeżeli przycisk masz na...
Pozwolę sobie dodać kilka słów. Ja mam Licznik SDM120D ze złączem impulsowym, dokładne dane: https://obrazki.elektroda.pl/6536298400_... Podłączyłem go do ESP83266: (-) licznika do GND ESP , (+) licznika do GPIO bezpośrednio bez żadnych rezystorów zewnętrznych. Na tym GPIO załączyłem Internal PullUp i zliczanie zdaje się działać poprawnie....
Witam. Wypróbuj to: [syntax=basic4gl]Ddrb = &B11111111 : Portb = &B00000000 Ddrd = &B1100000 : Portd = &B0011000 Dim Pomoc As Byte 'zmienna zliczająca wciśnięcia przycisku Do Debounce Pind.4 , 0 , Wlacz , Sub Debounce Pind.3 , 0 , Wylacz , Sub If Pomoc = 1 Then Portb.0 = 1 'w zależności od stanu zmiennej pomoc If Pomoc = 2 Then Portb.1...
Krancowka1 Alias Portb.0 Krancowka2 Alias Portd.7 Radio Alias Portd.6 powinno być raczej ..... ALIAS PINB. .... Debounce Radio , 0 , Ruch1 Debounce Radio , 0 , Ruch2 to już w ogóle nie ma sensu
Jak napisać menu (np. 4 poziomy x 4 funkcje) Np: możesz zrobić tak że 4x4 to jest 16 stanów (lub w zależności jak to prezentujesz więcej). Więc piszesz funkcje która jest wywoływana gdy wciśnie się to MENU, a w funkcji pętle gdzie masz 16 warunków oraz jedna zmienna która wskazuje który stan jest obsługiwany. Zamiast warunków można użyć switch ale...
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...
Ten przykład działa, ale tylko dla jednego "przełącznika" ale gdy robie np dwa kolejne to już coś jest źle. Buduje urządzonko, które będzie załączać 3 przekaźniki: - 3 przyciski (portd.4, portd.5, portd.6) - 3 przekaźniki (portd.1, portd.2, portd.3) Jak to można zrobić w BASCOMie?? Kod dla w/w konfiguracji: Config Debounce = 30 Config Portd = Output...
Proszę, gotowy przyklad rozwiązania. Napisałem przy kawie i potestowałem w symulatorku czy się nie pomyliłem gdzieś ;) [syntax=basic4gl]$regfile = "m8def.dat" '$sim 'dla symulatora Config Portd.5 = Input : Set Portd.5 : Czuj_1 Alias Pind.5 Config Portd.6 = Input : Set Portd.6 : Czuj_2 Alias Pind.6 Config Portd.7 = Input : Set Portd.7 : Czuj_3 Alias...
Myślałem o czymś takim :) Dim Ax(7) As Byte , X As Byte , Pozycja As Byte Dim Suma As Long Config Debounce = 100 ' lub ... jak kto woli ;) Poz Alias P3.7 Zmien Alias P3.5 Star Alias P3.1 Pozycja = 1 Cls Do Locate 1 , 1 Lcd "wprowadz liczbe" ; Pozycja Locate 2 , 1 For X = 1 To 7 Lcd Ax(x); Next X Debounce Poz , 0 , Incrpozycja...
Spróbuj tak: [syntax=basic4gl]Play: Printbin $55 Printbin $aa Printbin $00 Printbin $03 Printbin $01 Printbin $f7 Return [/syntax] Nie ma sensu stosować funkcji tam gdzie wystarczy podprogram. Nie działa bo jest - Debounce Portb.0 , 0 , Play , Sub - LITOŚCI!!! Debounce Pinb.0 , 0 , Play , Sub - MA BYĆ!
Niestety, to nie pomogło, usunąłem wszystkie wait'y które tam były i dalej jest to samo. Może macie jakieś inne pomysły? Wszystkich nie usnąłeś - zostało 25ms z debounce. Poza tym konfiguracja przerwania jako Low level powoduje, że jest ono generowane raz za razem dopóki jest stan niski na pinie. Przerwanie nie zdąży się obsłużyć, bo debounce potrzebuje...
[syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3 Config Lcd = 16 * 2 Config Debounce = 10ms 'konfiguracja magistrali I2C Config Scl = Portd.0 Config Sda = Portd.1 'przypisanie nazw przyciskom P_1 Alias Portb.0 Ok Alias Portb.1 Esc...
[syntax=vbnet] Zmienna = Ileśtam Gosub Sub_przycisku Do .. Debounce Przycisk, 0, Sub_przycisku, Sub Loop End Sub_przycisku: Select Case Zmienna Case Ileśtam : Zrób to End Select Return[/syntax]
Myślę że bez własnej pracy się nie obejdzie - nie spodziewaj się że ktoś Ci da gotowca który robi wszystko co byś chciał. Kod w github zawiera mnóstwo przykładów, tylko jeden z nich dotyczy klawiaturki - to ten: https://github.com/Guitarman9119/Raspber... Ale przykłady są tylko przykładami, nie gotowymi...
Do autora - przyjrzyj się [syntax=vbnet]Config Portd.5 = Output : Dc_wlacz Alias Portd.5 Config Portd.1 = Input : S12_wolniej Alias Portd.1 Config Portd.2 = Input : S11_szybc Alias Portd.2 Config Pina.0 = Output : Kier_lewo Alias Pina.0 Config Pina.1 = Output : Kier_prawo Alias Pina.1 Config Pina.4 = Input : S10_start Alias Pina.4 Config Pina.5 = Input...
Dodaj na początku dim flaga as byte. Resztę masz- podprogramy i główną pętlę. 'PROGRAM DO STEROWANIA SILNIKIEM KROKOWYM $regfile = "m8def.dat" $crystal = 8000000 Config Portb = Output 'czyli uaktywniam porty D Portb = &B01110111 'określam który z portów będzie jako pierwszy aktywny Config Pind.2 = Input Pind.2 = 1 Config Debounce = 30 'czekaj...
napisz config pind.1 = input config pind.0 = input do debounce pind.0,0,klawisz1,sub debounce pind.1,0,klawisz2,sub loop klawisz1: jakas akcja1 /np set pin.c=1/ return klawisz2: jakas akcja2 /np set pin.c=0/ return A zasilanie i mase musisz podpiąć też do tych 2 pinów co pisałeś. Tylko podłącz tak jak jest w programia albo zmień porty Aha mogą...
If...Then to nie pętla... tylko warunek. Jeśli chodzi o przyciski to proponuje debounce który na pewno wyeliminuje drgania styków. Poczytaj tabelkę i zrób sobie podprogramy w których będziesz zwiększał głośność itd. Przykład: Debounce PINB.0 , 0, VOLUP, SUB .... .... .... VOLUP: I2CSEND ..... 'jakieś tam bity Return Dodano po 8 ... Powtórzone usunąłem....
Jak nie wierzysz to wrzuć w symulator i zobacz. Po za tym ja dałem ci przykład a nie gotowiec :!: $sim Dim X As Byte Config Pind.7 = Input Set Portd.7 Config Pind.6 = Input Set Portd.6 Dim Flaga As Bit Flaga = 0 X = 0 Do Debounce Pind.7 , 0 , Up , Sub Debounce Pind.6 , 0 , Dw , Sub Locate 1 , 1 Lcd X Loop Up: If Flaga = 0 Then 'to znaczy że x=0...
nie dokładnie rozumiem kod wolałbym otrzymać kompletny kod Oczywiście, z przyjemnością udostępnię Ci kompletny kod kalkulatora dla Arduino Uno, który nie wykorzystuje wyświetlacza. Zamiast tego wyniki zostaną wysłane do komputera przez port szeregowy. [syntax=cpp] const int buttonPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // Przyciski dla cyfr 0-9 const...
Wkradł się bład przy wpisywaniu. Fuse Bity E4 D9 a nie 99 bo to pokazuje jasno na Twoim screenie Watchdog Always On :D Wyswietlacz nawet bez nadajnika ma wyświetlac po starcie trzy poziome kreski. W programie łatwo odczytać że żeby ustawić zero na wyświetlaczu procesor podaje masę na sześć segmentów. Wspólna końcówka wyświetlacza jest sterowana poprzez...
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.
Dim Generator As Byte , Czujnik As Byte , Wynik As Byte , Gen As Byte , dim A as byte declare sub czekaj Czas As Byte Portd = 3 Cls Do Debounce Pind.0 , 0 , Gen , Sub Debounce Pind.1 , 0 , Czu , Sub If Generator = 10 Then Wynik = Generator - Czujnik Generator = 0 Czujnik = 0 Lcd "WYNICZEK= " Lcd Wynik End If Waitms 1 ' odczekaj 1 ms incr...
Najprościej będzie zmodyfikować program tak: [syntax=vbnet] Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Wait 1 'wykrywanie przeciążenia Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Reset Portd.0 'wyłączenie silnika Reset Portd.1...
Witam. Ten kod powinien działać tak jak chcesz. Myślę, że komentarze wyjaśniają jego działanie. [syntax=basic4gl]Dim Flaga As Bit , Flaga_temp As Bit Do Debounce S1 , 0 , Zwieksz , Sub Debounce S2 , 0 , Zmniejsz , Sub If Temp >= 40 Then 'jeśli temperatura wieksza lub równa 40 If Flaga = 1 Then 'jeśli flaga ustawiona Flaga = 0 'wyzeruj flagę aby ustawienie...
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...
może spróbuj inną metodą, może coś z tego rozbudujesz: Dim Mem_wiert As Byte Dim Powtorzenie As Integer Declare Sub Obrot1 Declare Sub Obrot2 Mem_wiert = 1 'wstepna wartosc numeru cewki '---------------------------------------... Do Debounce Pind.0 , 0 , Obrot1 , Sub Debounce Pind.1 , 0 , Obrot2 , Sub Loop End '---------------------------------------...
Nie chce mi się zagłębiać dalej w pisanie. Tych trybów możesz sobie dopisać ile chcesz. I jak Przewijajac menu naciśniesz Set to zmień tryb na, na przykład, "Ustawiam_temp" i w tym trybie znów przyciski Plus i Minus bedą działać dla zmiennej ustawianej. Potem naciskasz ESC i wracasz do trybu jakiego chcesz.. to proste i pewne. [syntax=basic4gl]$regfile...
a to program Dodano po 11 Mam problem z załącznikiem może teraz.:) Dodano po 6 plik się nie dodaje ?? wyślę tak : $regfile = "m8def.dat" $crystal = 11059200 '$baud = 9600 '$baud = 19200 $baud = 38400 Echo On '******** KONFIGURACJA WYŚWIETLACZA LCD ****************************************... Config Lcd = 20 * 4 ' Deklaracja...
Popraw Debounce zgodnie z tym co chcesz zrobić Teraz dopisz obsługę COM programowa lub sprzętową w zalezności od tego jak się podłączyłeś (a podłacz sie lepiej na sprzętową). Wszystko masz w helpie.
Dać kondensatory do masy od mikros.... rezystory podciągające lub w programie dać coś takiego jak DEBOUNCE w BASCOM jeśli w nim piszesz.
czy masz może pomysł jak bym mógł uzyskać 1 sygnał z halla? a ja potrzebuje, zeby mi trzymalo silowniki pod napieciem do nastepnego impulsu P.S. i liczylo od nowa Kiedykolwiek coś robiłem z zastoswaniem hallotronu otrzymywałem zawsze pojedynczy "czysty" impuls. Taka jest jego zaleta że nie ma potrzeby stosowania debounce. Jak j uż wcześniej pisałem...
Możesz podłączyć poprzez rezystory bezpośrednio do portów, tylko trzeba pamiętać, że diody mogą wziąć 20mA i to teoretycznie pin ma wytrzymać, ale też chyba nie można brać więcej niż 100mA na cały port. To tyle teorii a w praktyce to sam sprawdzisz i pewnie procek to zniesie. Wprowadziłbym jednak pewna optymalizację. Wyświetlacze podłącz do portów PB...
Byłby ktoś w stanie mi z tym pomóc? Miałoby to wyglądać tak: * sterowanie wentylatorami czasowo * sterowanie poprzez odczyt temeratury 2 osobne funkcje (działa albo jedno albo drugie). Do tego co mam dołożenie wł/wył czasowego (w zupełności wystarczy najprostsze z możliwych) OK, Popatrz na swój program; sterujesz ustawienia trzema przyciskami, z których...
znaczy na wejściu bramki jest za duży prąd upływu To nie jest prąd upływu ale prąd wejściowy w stanie niskim, jest dość duży w klasycznych bramkach TTL i wynika z ich fizycznej budowy (obwodu wejściowego). U Ciebie ten prąd wejściowy płynie do masy przez R6 + R9 = 101 kΩ i wywołuje zbyt duży spadek napięcia, zmierz napięcie na wejściu tej bramki...
$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 '-- Wejscia przycisków Config Portd.2 = Input Config Portd.3 = Input ' -- podciągnięcie Set Portd.2 Set Portd.3 ' -- porty sterowania segmentami LED Config Portd = Output Config Portc.5 = Output Config Portc.4 = Output Config Portc.3 = Output Config Portc.2 = Output ' -- tranzystory Config...
Nie wiem czy chcesz się nauczyć czy potrzebujesz program. Na początek te uwagi: 1. Nie wiem co tam robi dyrektywa $eeprom. Jest niepotrzebna w tym kodzie 2. Zmienna Ds jest zwiększana w przerwaniu niezależnie od tego czy jesteś w Menu czy nie. Tak więc po powrocie z Menu już na pewno nie zdążysz załapać się na warunek If Ds = 2 i wyzerować jej wartość....
Zmień całkowicie podejście do pętli Do...loop. Jeżeli zaczynasz zabawę z programowaniem stosuj tylko jedną pętlę Do..loop Wszystko co będziesz pisał umieszczaj w tej jednej pętli , nigdy nie stosuj Wait'a , nie skacz niepotrzebnie do rozbudowanych podprogramów itd. Kolego leon1313 Zgadzam się z Tobą ( wcześniej przecież napisałem co sądzę o DEBOUNCE...
...Dałem polecenie debounce i powinno zwiększyć zmienną o 1 i poczekać do puszczenia przycisku, ale nawet szybkie naciśnięcie zwiększa zmienną o kilkadziesiąt jednostek. Może chodzi o przerwania? Może to być "sprawka" przerywań, proponuję na początek: [syntax=basic4gl]Klik: Disable interrupts Incr Bsend If Bsend = 100 Then Bsend = 0 Enable Interrupts...
paavo91 Podkreślam że działanie musi być natychmiastowe i nie zależne czy przycisk wcisnę na moment czy wcisnę i przytrzymam. .............. ,......jak to rozwiązać. Zastosuj konstrukcję 'DEBOUNCE' w połączeniu z "Toggle Switch" jak dla przyładu przełączania/załączana świateł głównych: [code][syntax=basic4gl] $regfile = "attiny2313.dat" $crystal =...
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...
1) Do Debounce dodaj dopiski SUB 2) Program prawdopodobnie wywala ci się na pierwszym Lookup od setek, szukasz po CYFRA zamiast TEMP (wywalenie to być nie musi ale może być problem) 3) Zrób najprostszy test: wywal te swoje lookupy, przyciski i resztę kombinacji. Na sztywno przypisz cyfry, zrób ich lookup i wyślij na wyświetlacz. Zobacz czy chociaż to...
rozwiazan tematu jest wiele ale bitwait czy debounce nie tutaj kooledzy Dim A As Bit A = P1.2 Do If P1.2 <> A Then If A = 1 Then P1.3 = 1 Waitms 10 P1.3 = 0 A = P1.2 Else P1.4 = 1 Waitms 10 P1.4 = 0 A = P1.2 End If End If Loop
debounce przerwa przerwania debounce przerwanie debounce
niemieckie gniazdo telefoniczne software house obudowa profili
Schematy sterownika mikroprocesorowego do przewodowego odkurzacza mopującego 230V – STM32, triak, SMPS Vileda JetClean – układ scalony sterownika: Sonix SN8F5702ASG, STM8S103F3, identyfikacja