Mam taki kod do zliczania impulsów z enkodera: http://obrazki.elektroda.pl/8629655100_1...
Zalecane taktowanie do obsługi serw to 10MHz (przynajmniej dla softu w Bascom).
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.
Jaki to enkoder? Jeśli mechaniczny to rzucam hasło pt. drgania styków.
nie wiem jak w avr ale w 8051 byla funkcja debounce ktora eliminowla problem drgania stykow.
Bez sensu, po co pierwsze zmieniasz rejestr port, po ro by go odczytać? Pozatym gdzie eliminacja drgań styków?
Kazaliście mu wyrzucić Debounce, a dla początkujących, umiejętnie użyta jest bardzo przydatna. Początkujący będzie miał problemy z własną obsługą drgania zestyków.
Obsługa przycisku w przerwaniu jest niezbyt wskazana. Owszem przycisk uruchomi przerwanie ale do tego należy również doliczyć drgania styków. Jak wiadomo opóźnienia w przerwaniu to niepożądane zjawisko. Dobrym sposobem jest dodanie kondensatora który będzie się ładował i rozładowywał tym samym eliminując drgania styków.
Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
(at)woszu - wydaje mi sie ze powinienes to uwzglednic - bez znaczenia jest czy wtrysk zalaczany jest masa czy nie - zawsze pojawia sie drgania stykow. http://devil.siedlce.net/~luuki/?body=Te... Tu masz troche o drganiach styku.
w bascomie jest gotowa instrukcja "encoder" , czy nie byłoby ci łatwiej jej użyć ? , ja w swoim projekcie co 2,2 ms wchodzę do podprogramu z obsługą encodera i nie mam żadnych problemów z drganiem styków
Możesz sobie podłączyć przycisk pod zewnętrzne przerwanie i w programie przerwania na początku zrobić Disable INT0 , wtedy drgania stuku będą chyba wyeliminowane.
Port a nie ma przerwań, ale jeśli to ma być obsługo przycisku można wykorzystać przerwanie timera co np 50ms. przy 2 wykryciu stanu niskiego wykonujesz odpowiednie działanie. przy 2 bo dzięki temu od razu wyeliminujesz drgania styków.
wykluczyc drgania mozesz za pomoca funkcji debounce, albo tak: if s1=0 then 'przycisk jest wcisniety waitms 45 ' czekaj az mina drgania if s1=0 then ' gdy przycisk jest nadal wcisniety to zrob: end if end if Pokaz (najlepiej na schemacie) lub wyltumacz jak masz podlaczony przycisk do procesora. Poza tym wytlumacz mi, co dokladnie ma robic twoj kod...
A w Bascomie nie ma jakichś pętli lub procedur? Bo ja nietutejszy ;-) Albert
Akurat takich mam dostatek, jednak nie bardzo rozumiem, jak wykożystac sprzętową obsługę w bascomie W helpie jest opisana funkcja ENCODER(), zatem może warto najpierw te parę zdań przeczytać? W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem Nie zapominajmy o drganiu styków. Jeszcze nie spotkałem enkodera mechanicznego,...
Tak jak pisze (at)atom1477 pokaż layout płytki, dla kwarcu 16 MHz kondensatory powinny być rzędu 8-12 pF, ale dokładnie możesz je policzyć jeśli poznasz pojemności kwarcu z noty. Jest jeszcze jeden problem - BASCOM. Zobasz na wygenerowany asembler, jak wygląda procedura przełączania zegara. Być może tu jest problem. Próbowałeś odpalić program w debuggerze...
Ok, czyli efektów powodowanych przez drgania styków wcale nie uwzględniłeś w programie. Dobrze zrozumiałem? Każdy mechaniczny styk w momencie przełączenia, na skutek drgania (sprężystości) styku generuje kilka załączeń/rozłączeń. Musisz to uwzględnić w programie i odfiltrować. Przeszukaj sobie elektrodę pod hasłem "drgania styków".
Zapomniałem dodać że program ma być w bascom i czy kolega dr.hannibal mógłby podać przykład w bascom.
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...
Podciągnij PinA.6 do VCC: Porta = &B01100010 Przekaźnikiem zwieraj PinA.6 do masy a stan sprawdzaj za pomocą: If Pina.6 = 0 Then ps. Zadbaj o eliminację drgań styków przekaźnika !
Błąd przy kompilacji , czy po załadowaniu do proca :?: Piotrek NIE po naciśnięciu jednego klawisza Linnia nadawcza PRZECHODZI W STAN NISKI i wszystko staje pewnie brakujre na końcu czegoś no i nie stabilnie czyta naciskanie "nie sprawdza drgań styków" Darek
Nie wiem co jest nie tak, nie bardzo mogę sobie z tymi LED-ami poradzić. Próbuje i próbuje i nic z tego. Dodatkowo mam jeszcze mały problem z drganiami styków. Wiem że w bascom jest DEBOUNCE, ale nie wiem jak to zaimplementować do mojego programu (gdy próbowałem to cały program sie wykłada) Ma może ktoś jakiś pomysł jak to zrobić ??
Niech Kolega poczyta co to są drgania styków - to one powodują generowanie przerwania w nieodpowiednich momentach.
Bo musisz sprawdzać kiedy puściłeś klawisz i odczekać, aż styki przestaną drgać.
Procedura getkbd zwraca 0 gdy nie naciśniesz zadnego klawisza (albo jakas inna wartosc). Musisz zrobić tak, aby po naciśnieciu dowolnego klawisza program czekal na wartosc 0 a dopiero pozniej jezeli odbierze jakas wartosc to niech zapisuje to do tablicy. Np: dim x as byte dim i as bit do x=getkbd if x= 0 then i=0 end if if x<>0 and i =0 then tablica=x...
W kodzie nie napisałeś "crystal = ...". W tej linijce do ustawiania programatora możesz wpisać jak podała instrukcja. Switchów się tak nie podłącza do portów wejściowych. Kabuto15 - Możesz mi powiedzieć dlaczego nie można tak podłączać przycisków? W kodzie dajesz tylko Set Portx.y I przycisk działa jak powinien (pomijając kwestie drgania styków).
Jeśli wyeliminujesz drgania przycisku, to najprościej to zrealizować podając wyjście przycisku na wejście zegarowe jednego timera (bedzie on zliczał ilość wciśnięć), a drugi timer wykorzystać do odmierzania czasów 1s - dokładnie co 1 s należy kasować licznik pierwszego timera. Ot i wszystko.
Gdzieś na elektrodzie ktoś już podawał fajny mały i szybki programik w BASCOM do obsługi enkodera, który przede wszystkim był naprawdę odporny na drgania i błędne zliczanie - wiem, bo sam go kiedyś sprawdzałem. Działał dokładniej niż gotowa bascom'owa instrukcja. Program był na tyle prosty, że i na C bez problemu byś go przepisał.
Bascom posiada instrukcję "debounce" do eliminacji drgań styków i standardowo sprawdza styki powtórnie po 25ms . nie zdarzyło mi się żeby to nie zadziałało poprawnie. fakt, że zawsze z mikroswitchami, ale przy dwupozycyjnym wyłączniku raczej nie ma niebezpieczeństwa zbyt krótkiego załączenia, więc mozna wstawić większy kondensator( opornik) bez żadnych...
Może dodasz jakieś małe opóźnienie (20-80 ms) w celu eliminacji drgań styków przy sprawdzaniu stanu S3 ?
Fusebit C powinien być disable. A jest enable i procesor chodzi na 1Mhz. Wszystko normalne, tak jest fabrycznie ustawiony. W programatorze wchodzisz w zakładkę fusebits i ustawiasz fusebit C na disable. NIE RUSZAJĄC INNYCH FUSEBITÓW! P.S Sprawdzony program wysłałem Ci w mailu. Ale jest on przeznaczony do pomiaru czasu z fototranzystorów a nie z przełączników-...
jeszcze raz dzięki, programik już działa - faktycznie, że przerwania bez sensu w takim przypadku - zastosowałem się głównie do rad euromatica o zamianie zmiennej typu byte i jest ok. drgania styku wogóle nie występują. Pozdrawiam Przemo
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...
Wiem o tym, czytałem te wszystkie wywody na temat jaki to Bascom jest plugawy , ... Zastanów się młody człowieku co czytasz i piszesz. ... stąd też przy tym głupieję ( sam fakt, że muszę w tym Bascomie operować jest dość... ). :) ... ale nie mam wyboru - z przyczyn ode mnie niezależnych muszę go jakoś okiełznać... (a przynajmniej w stopniu podstawowym)...
Zasadniczo przycisk ma wybudzać z powerdown a potem normalnie ma służyć jako przycisk funkcyjny z programową eliminacją drgań styków to znaczy czeka on 20ms.
Diodę gaś tak jak ją zapalasz. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 Config Portb.0 = Input Config Portb.1 = Input Config Portd.5 = Output Przycisk1 Alias Pinb.0 Dioda Alias Portd.5 Przycisk2 Alias Pinb.1 PORTB.0 = 1' to jest podciąganie do Vdd - działaj w tym celu na rejestrze 'PORTX lub PORTX.Y PORTB.1 = 1 Reset Dioda Do If Przycisk1...
If pinX.X=0 then portX.X=not portX.X bitwait pinX.X , set end if Wtedy mamy zmiane stanu po kazdorazowym nacisnieciu i puszczeniu przycisku. Inaczej drgania stykow wprowadza przeklamania.
Prawdopodobnie będziesz się męczyć z drganiami styków (jak wiele początkujących osób) więc użyj komendy Debounce lub odczekuj chwilę podczas detekcji wciśnięcia.
Witam. W petli glownej programu musisz sobie napiac jakas procedurke wyboru podprogramow. Np mozesz uzyc do tego 3 przyciskow - jeden do zwiekszana zmiennej np wybor , drugi do jej zmniejszania atrzeci przycisk do potwierdzenia "enter" . Nie pamietam juz dokaldnie skladni w Bascomie ale moze to byc np tak: DDRB=&b11111000 // - piny 0 1 i 2 portu...
Odpowiedzią na twoje kłopoty jest instrukcja DEBOUNCE, gdyż: 1. Potrafi wywoływać podprogramy przy dowolnym stanie linii portu, 2. Przycisk raz naciśnięty i puszczony wywołuje podprogram tylko jednorazowo, 3. Filtruje drgania styków przycisków które potrafią narobić niełego bigosu początkującym, 4. Jest elegancka, pewna i uszyta "na miarę". PS. Atmega...
Ja bym sprawdzał w przerwaniu ale przez np 100 ms. Drgania mogą być i przez 30 ms jak masz nie za bardzo styki. Przykłady sa na np www.8052.com W bascomie jest rozkaz debounce i on załatwia wszystko Arek
W 3 linii Debounce nic nie zmieniłeś więc nie spodziewaj się usunięcia błędu. Zrób swoją własną eliminację drgań dla dwóch jednocześnie naciskanych klawiszy...
"Pewność" podciągania zależy po prostu od wartości rezystora podciągającego. Wewnętrzny ma 20...50k. Nie ma znaczenia czy użyjesz wewnętrznego, zewnętrznego czy obu. Chyba, że zewnętrzny dasz daleko od mikrokontrolera, albo przewidujesz możliwość urwania rezystora. ;) Włączenie podciągania nie zaszkodzi, a w programie wiadomo, że jest podciąganie do...
jak to sa przyciski to beda drgania warto wyelyminowac. Oczywiscie ten program musi byc w petli do loop
Takie powtarzanie ma na celu eliminację drgań styków a co za tym idzie niechcianych przypadkowych uruchomień.
A po co zaprzęgasz Bascomowy ENCODER() Zobacz na ten przykład :) Jest to bardzo proste ] Testowałem to, ale z uwagi na to że posiadam "gówniany" enkoder mechaniczny, drgania styków, powodują że kawałek kodu z linku nie działa jak powinien.
1. Czy w kodzie do tej karty, aby dodać przyciski to wystarczy podać który pin jest wejściem i co program ma zrobić po wykryciu sygnału czy jeszcze coś trzeba zmienić ? 1. Ustawić piny jako wejścia. 2. Sprawdzać ich stan w głównej pętli 3. Przemyśleć sprawę wyeliminowania drgania styków 4. Zmienić stan portów sterujących. 2. Czy tak mają wyglądać wejścia...
W celu eliminacji drgań styków należy użyć przerwania licznika, by odczytywać stan przycisku tylko raz na około 10 ms . Nie używamy funkcji Debounce i delay_ms ! Czy przycisk został naciśnięty sprawdzamy w zmiennej globalnej dostępnej w programie głównym.
Może jest to spowodowane drganiami styków klawiszy? Spróbuj przylutować kondensatory(1nF-100nF) równolegle do przycisków. U mnie takie coś pomogło. Pozdrawiam Yakuza
Czy na płytce są sprzętowo wyeliminowane drgania styków ? A jak obsługujesz ten enkoder ? Masz jakiś przykładowy kod ?
W INT0 - STARTUJ dodałbym DISABLE INT0, a dopiero potem w INT1 komendę ENABLE INT0 Drgania styku "startującego" spowodują ci wielokrotne wywołania INT0 i zerowania timera i fałszowanie czasu. Drgania przycisku stopującego nie wpływają na pomiar i można je zignorować.
Drgania styków i ich eliminacja - poszukaj, poczytaj. Domniemam że impulsy nie pochodzą z innego układu cyfrowego ale z przycisku;-)
Po za tym do obsługi klawiszy używaj Debounce . Wyeliminujesz wtedy drgania styków. Możesz także dodać do nich aliasy, wtedy będzie o wiele prościej i przejrzyściej.
Prototyp zrobiłem na pomiarze napięcia (ADC) na fotodiodzie - to chodziło, dopóki nie zacząłem testu na dworze.... Fotodioda łapała podczerwień z... no właśnie, skąd? Nie wiem. To oczywiste. Światło z otoczenia również zawiera podczerwień, więc pojawiają się zakłócenia. Po odłączeniu fotodiody i dotykaniu kabelkiem do + na wyświetlaczu także pokazywały...
Kolega pisze w bascomie. Jeśli chcesz tłumić drgania tego przycisku to musisz go dać równolegle do niego. Poza tym, jeśli filtrujesz już tak ten przycisk to daj też rezystor szeregowo do resetu jakiś mały (100-300Ω). Rezystor do resetu jest ciut za duży, ja bym tam dał 10k AVCC też musi być podłączone (z kondziolem)! Aref tak samo musi mieć filtr....
Ja bym jednak wymienił kontaktron na czujnik halla, sygnał z kontaktronu trzeba kondycjonować, zrobić eliminację drgań, a ciągle zostajemy z zawodnym elementem mechanicznym. Wyjście z cz. halla (i po odpowiednim filtrowaniu z kontaktronu) wystarczy podłączyć pod pin ICP procesora i mierzyć wsp. wypełnienia. Z tego masz w prosty sposób prędkość.
Ta komenda to Debounce. Eliminuje m.in. drgania styków. alien_audio Co to ma być: set pinb.4
jezęli chcesz sprawdzac stan przycisków to lepszym rozwiazaniem jest w bascom instrukcja DEBOUNCE eliminuje ona drgania stykow ...popatrz w Helpie natomiast zastanawiam sie dlaczego zwierasz PIL do 1 a pozostałe do 0??? poza tym na początku programu deklarujes P1=0 jezeli program przechodzi do podprogramu OTW na dole masz deklaracje If Pr = 0 And Pru...
Hehe... no to następny pomysł - a jak szybko obraca się pętla główna programu? Nie wiem jak masz skonstruowany program, czy w ogóle jest? Dużej precyzji czasów chyba nie potrzeba, nie ma różnicy, moim zdaniem, czy przytrzyma się przycisk 1s czy 1,1s, więc może ten pomysł wsadzić do pętli głównej i bez przerwań. Wtedy w zależności od szybkości pętli...
Witam. Jeżeli konfigurujesz pin jako wejście to używaj instrukcji : Config Pinc.0 = Input zamiast : Config Portc.0 = Input Jak wykrywasz zmianę stanu przycisku i wysyłasz dane przez RS to wstaw małe opóźnienie aby uniknąc drgania styków.
Zastosowanie kondensatora jako zabezpieczenie przed drganiem styków nie wydaje mi się zbyt dobrym pomysłem ponieważ gdy przycisk zostanie puszczony , procek będzie "myślał" jeszcze przez pewien czas (dopóki ten kondensator się nie rozładuje) że przycisk jest wciśnięty. Sam programuje w BASCOMIE ale nigdy nie używam gotowego polecenia "debounce" (czy...
Tak. Tylko mniej świadomość że procek będzie odrywany od pracy wieloma nieprzydatnymi impulsami. Ewentualnie po pierwszym impulsie na INT, wyłącz przerwania na czas drgań. Jak teraz masz podłączony kontrakton ? INT podciągnięty pod +5V ? Jak INT wyzwalasz ? W docelowym projekcie koniecznie czujnik kontraktonowy zamień na jakiś halotron albo transoptor...
{ LCD_clear(); LCD_putstr_P(PSTR("TTTTTT1&... LCD_xy(3,1); LCD_putstr_P(PSTR("1"&... } void menu2(void) { LCD_clear(); LCD_putstr_P(PSTR("TTTTTT2&... LCD_xy(1,1); LCD_putstr_P(PSTR("2"&... }...
Jaka zwłoka czasowa powinna wystąpić podczas podwójnego kliknięcia ? To Ty decydujesz jak ma urządzenie działać. Na pewno zwłoka musi być większa od czasu drgań styków (kilkadziesiąt milisekund od wykrycia zwolnienia przycisku).
I pytanie, by zaspokoić ciekawość: Co planujesz za pomocą C8, R14, R24 i S12 ? Są one po to by niwelować drgania na stykach. Już wszystko ok źle podpiąłem programator
tak przycisk caly czas trzymam a wsumie to wkładam drut w +5v i dlatego powyższy warunek wykonuje się z każdym obiegiem loop. Lepiej już wykrywać pin przycisk_wyzwolenia jako przerwanie zboczem. Nie pisze w bascomie .. ale program to program tylko nie mam jak tego sprawdzić Lepszy przykład stosowania: https://english.svet-el.si/index.php/inp...
Napisałem program z rożnymi funkcjami, przełączam je przyciskiem ale nie raz muszę go przetrzymać aby się przełączyła i bywa tak że przełącza o kilka do przodu co koledzy polecacie aby wyeliminować te dwa problemy? W Bascom niestety Ci nie pomogę, ale to przeskakiwanie to prawdopodobnie kwestia drgań styków przycisku: http://mikrokontrolery.blogspot.com/2011...
Najprościej mówiąć: piszesz w bascomie debounce, zaznaczasz i klikasz klawisz F1. Pojawia się help w którym jest opisane:p Generalnie redukuje drgania styków.
w bascomie jest polecenie DEBOUNCE, jak dobrze pamietam. A jeśli się nie myle to wystarczy zwykły czwórnik RC (rezystor w szereg, kondensator równolegle)
W Bascomie robisz to jedną instrukcją: DEBOUNCE pin_portu , stan , etykieta [, SUB] Radzę otworzyć help'a. Towarzyszy jej w razie potrzeby CONFIG DEBOUNCE = czas
Nie panujesz poprostu nad zmienną Menu, nie ma ona żadnego ograniczenia. Przeniosłem główne menu z case 0: do case Else:. Poprawiłem powyżej program. Teraz powinieneś już pomału dojść jak to zrobić. Zmienna menu jest wyświetlana na LCD po wartości płomienia więc zobacz co się z nią dzieje. Przyciski mają drgania i zmienna trochę też wariuje, pomyśl...
Osobiście też już nie pisze w Bascomie ale robisz błędy które łatwo wychwycić. Na pierwszy ogień zapomniałeś o pull-upie. Po za tym jak już opóźnienie to w warunku(eliminacja drgań). Do autora tematu: popraw schemat bo nawet rezystorów nie dałeś do diod.
W Twoim programie nie wiem, :] Nie wiem do czego Ci służy to liczenie w tych pętlach - pytałem wcześniej i chyba nie było odpowiedzi... to: Licz = Licz + 1 Dodano po 3 Przypuszczam, że łatwo się nie pozbędziesz tamtego problemu... bo kiedy ruszasz z zamkniętej bramy, krańcówka puszcza i są drgania styków, i wtedy uC odbiera to jako co?:) jako silnik...
no wlasnie a jaka jest komenda :o ktora rozruzni mi zmiane stanu ? .... ja nie wiem jak to zrobic Komenda to komenda, a rozwiązanie problemu to już sztuka korzystania z komend ;) Avatar - zaproponowany listing jest troszkę mało odporny na drgania styków, ale dodanie drugiego warunku sprawdzania stanu po 20ms powinno rozwiązać to niedopatrzenie Pozdrawiam
zapytam z czystej ciekawości. Na jakim interfejsie Miałeś podłączony wyświetlacz ? EBI w trybie 3 portowym + zatrzaski dla LSB i MSB. Dzięki temu przez DMA przesyłane były słowa, które nie wymagały modyfikacji. Nie polecam. W tym przypadku założyciel posta otrzyma jedynie przesuwający się punkt, a nie pełny wykres na wyświetlaczu. Mylisz się, a Kolega...
Wystarczy jedno wejście I NTx , które będzie wykrywało ten impuls. Ale jeśli to będzie impuls "z ręki" jakiś klawisz to bez sensu - ze względu na drgania styków a potrzebny minimalny czas np 1ms. Jeśli to będzie impuls z jakiegoś wyjścia cyfrowego to ok. Założenia: - wykorzystamy tylko jedno wejście INTx - wykorzystamy tylko jeden Timer sprzętowy Przygotować...
Powoli myślę nad Atmega64 ponieważ cały czas kręcę się w okolicach 95% pamięci Flash. Czy na pewno nie ma innego sposobu? Sposób jest bardzo prosty ... zmień język na C lub assembler. W drugiej kolejności zastanów się nad zewnętrznym flashem, bo jak sądzę tę pamięć zajmują Ci próbki dźwięków, a nie program. Przerwania zarezerwowane. Timery i ADC także?...
Tok rozumowania nie jest prawidłowy. Jesteś przywiązany do idei że jeden procesor sobie z tym nie poradzi. Być może nie- ale na tym etapie założenie to jest niesłuszne. Co do debounce- w przypadku czujników indukcyjnych czytających z koła z zębami to w zasadzie nie występuje. Tam nie ma styków i jest histereza z natury czujnika. Jęśli optyczne- to zależy...
Ad9850 to sie do tego nie nadaje, taki układ wymaga raczej generatora sterowanego napięciem i wzmacniacza sterowanego napięciem lub wpisania algorytmu drgań gasnących w procesor i generowanie ich za pomocą przetwornika DAC
Drgają ci styki. Użyj filtru dolnoprzepustowego na wejściu portu, lub też skorzystaj z instrukcji DEBOUNCE.
Ja powiem szczerze kiedyś się nad tym zastanawiałem jak to zrobić (dokłandniej nawet właśnie w tokarce) i pomysł jaki miałem to tak: Zazwyczaj nie interesuje mnie położenie bezwględne tylko względne. Dlatego można zrobić jakąć krańcówkę i zawsze liczyć wymiar od tego miejsca (np. od osi obrotu), a drugą krańcówkę zrobić ruchomą przy uchwycie bo przecież...
Nio zobaczymy. Doszlismy wkoncu do wniosku ze zliczanie bedzie poprzez port uC a wyswietlanie w przerwaniu timera zeby nie migotaly wyswietlacze. Przy zliczaniu przez timer zlicza on wszystkie drgania przycisku czy przekaznika a RC sie nie sprawdzi bo musi to byc bardzo uniwersalny licznik.
Okazuje się, że w Bascomie 8051 nie można zdefiniować własnej funkcji, ta możliwość istnieje dopiero w Bascomie AVR - ciekawostka .. http://avrhelp.mcselec.com/changes_compa... Spróbuj czegos takiego może zadziała ... Declare Sub Klawiatura Dim przycisk As Byte Dim kol1 as Byte Dim kol2 as Byte Przycisk=0 Do Call Klawiatura ' Tu...
Podczas moim przygod z bascom nie musialem dawac zadnych kondensatorow bo Debounce na drodze programowej usuwalo drgania. Teraz chce zrobic to samo. Zrobilem tak ze odczekalem 50 ms, i sprawdzilem czy przycisk jest nadal wcisniety, jednak czasem jak nacisne, przytrzymam i puszcze to dioda tez zmienia stan, mimo ze nie powinna ( przerwanie jest tylko...
Ja zrobiłem coś w rodzaju matrycy. np. 4 przyciski podłączone do 4 linii i przez diody do przerwania. Przerwanie wywoływane jest dowolnym przyciskiem,a w podprogramie sprawdzałem (po pewnym czsie)jaka liczba wychodzi z tych 4 bitów (przycisków). Dzięki temu mogłem zrobić kombinacje naciśnięć kilku przycisków jednocześnie. Opóźnienie odczytu liczby było...
Kolego do przycisku użyj funkcji debounce i nie będziesz miał problemu z drganiem styków przycisku. Może napisz jak ma działać to urządzenie bo według mnie masz dziwny ten kod
Musisz po wykryciu wciśnięcia przycisku czekać w pustej pętli na jego puszczenie. ...uprzedzając pytanie "jak" wrzucam moją propozycję kodu, przejrzyj, przemyśl, dorzuć do swojego programu. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 8000000 Config Lcd = 16 * 4 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7...
A w ogóle to ten input zadziała Ci tylko raz, po uruchomieniu programu (poza pętlą Do...Loop), ponadto w przypadku takich urządzeń nie robi się "eliminacji drgań styków". A ma szanse się skompilować i ba, nawet działać, tylko chyba bascom nie dopuszcza porównywania stringów wprost, dlatego zastosuj odpowiednio skonfigurowaną funkcję INSTR. Ale pierwsze...
Dzięki za program, działa bardzo dobrze, trochę go zmodyfikowałem dla swoich potrzeb, ale idąc Twoim tokiem myślenia chce zrezygnować z bitwait. Niestety drgania styków nie dają mi spokoju, a bardzo bym chciał wyeliminować je programowo. Proszę o pomoc z tym problemem. Próbowałem wykorzystać też debounce ale słabo mi to wychodzi ;/
To się nie robi jak myślisz. Najprościej jest zrobić to na "przepełnieni" licznika czyli jak doliczy do zera. Na początku ustawiasz mu np. 64287 i podział przez 256. Po dokładnie 0,01s nastąpi przepełnienie i włączenie przerwania. W przerwaniu pierwszą rzeczą jaką musisz zrobić jest ponowne ustawienie licznika na 64287. Jak chcesz jednocześnie sprawdzać...
1. Zwracam honor Bascom'owi :D 2. Wiem, że ten kodzik nie jest super hiper pro. Pro Bascom koderzy napisali by taki coś pewnie w 5 min i zupełnie inaczej 3. Mój przycisk to dwa kabelki podłączone do VCC i GND, którymi próbuje spolaryzować piny. 4. Usuwanie drgań no hm...eh....nie za bardzo wiem jak to tu zrealizować 5. Co do opóźnień w przerwaniach...
Zrobiłem taki schemat 'na kolanie' (czyt. bardzo niechlujnie :) ) i za nic nie mogę zejść poniżej sześciu scalaków. Robiłem to na licznikach '192 (dwie sztuki), dekoderach '47 (dwie sztuki), bramki NAND schmitt (wykorzystane są dwie, ale w obudowie są 4) i bramki NOR (wykorzystana jedna, chociaż w obudowie też są 4). NANDy oczywiście do eliminacji drgań...
Spróbuj tak: ... Cursor Off Cls Do If S1 = 0 Then A = A + 1 Lcd A End If ' Petla: If s1=0 then goto Petla '...aż zostanie puszczony przycisk! ' Waitms 10 'małe opóźnienie dla zniwelowania drgań Loop Pozdrawiam.
Ciekawe, że wiesz, jak jest napisana moja funkcja bez pokazywania funkcji 😁. Algorytm opisałem w uproszczeniu. Ale nieważne, moim zdaniem nie da się sensownie rozwiązać problemu, żeby funkcja nie zwróciła wcześniej LONG zanim nie zwróci REPEAT, bo przecież musisz przytrzymać przycisk, żeby najpierw był LONG a ewentualnie później REPEAT. To znaczy...
segal: ja biore np jakąś kombinacje np $5af, każdy bit odpowiada jednej lampie... teraz dziele sobie to na starszy bajt i młodszy bajt.. i otrzymuje: $05 i $af $05 wysyłam na portd a $af na portb i kłopot rozwiązany... nom.. niestety ja pisze tylko w asm.. w bascomie nie... jak jusz napisałem no to dam na forum.. może komuś innemu sie przyda.. komuś...
Mam książkę o programowaniu mikrokontrolerów, w której przy odczytywaniu stanu przycisków jest opóźnienie 25ms, może 10ms też wysarczy. Tak jak pisał Samuraj, wystarczają dwa takie same warunki "IF" w odstępie tych kilku milisekund. W Bascomie można również wykorzystać instrukcję Debounce, która właśnie określa opóźnienie przy odczytywaniu stanu portów...
A to jest nie tak, że nie doczytałeś o tzw "drganiach styków" i ich w ogóle nie eliminujesz programowo. A jakbyś jeszcze helpa bascomicznego poczytał to zobaczyłbyś, że masz w tym celu gotowe polecenie jak Debounce, które od razu załatwi te problemy z obsługą klawiszy ;)
Ale z Ciebie kombinator :D Widzę , że nie masz dobrego pomysłu na obsługę klawiszy i czy to będzie w Basicu , czy w C , to sprawa drugorzędna :( Rozwiązanie z dwoma przerwaniami - przerost formy nad treścią , ale stosowanie funkcji Debounce w przerwaniu , które jest wywoływane co 4ms , to już całkowita porażka , bo Debounce po wykryciu naciśnięcia klawisza...
Witam! Lepiej co jakiś czas w przerwaniu zegara sprawdzać stan przycisków, nawet jeśli zegar jest potrzebny do czegoś innego można rozbudować jego podprogram. Popieram, też tak robię. Sprawdzam stan klawisza po 20ms od wykrycia wcisnięcia w celu eliminacji drgań styków. Było to opisane kiedyś w EP.
drgania styków bascom volvo drgania drgania wydechu
reset komputer volvo ostrość telewizor lanos głowica
tylko zegar integra tylko zegar
Rurka w czajniku elektrycznym: jak działa? Laser w pile ukośnicy Rywali świeci, ale nie wyświetla linii cięcia