Jaki to enkoder? Jeśli mechaniczny to rzucam hasło pt. drgania styków.
Bez sensu, po co pierwsze zmieniasz rejestr port, po ro by go odczytać? Pozatym gdzie eliminacja drgań stykó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.
To ma zliczać impulsy z enkodera. A nie można zastosować czegoś takiego do eliminowania drgań na stykach?
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.
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
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).
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.
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".
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
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-...
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)...
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ć ??
Może dodasz jakieś małe opóźnienie (20-80 ms) w celu eliminacji drgań styków przy sprawdzaniu stanu S3 ?
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.
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,...
Niech Kolega poczyta co to są drgania styków - to one powodują generowanie przerwania w nieodpowiednich momentach.
A w Bascomie nie ma jakichś pętli lub procedur? Bo ja nietutejszy ;-) Albert
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...
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...
Zapomniałem dodać że program ma być w bascom i czy kolega dr.hannibal mógłby podać przykład w bascom.
Takie powtarzanie ma na celu eliminację drgań styków a co za tym idzie niechcianych przypadkowych uruchomień.
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...
"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...
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.
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...
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.
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.
Czy na płytce są sprzętowo wyeliminowane drgania styków ? A jak obsługujesz ten enkoder ? Masz jakiś przykładowy kod ?
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.
Drgania styków i ich eliminacja - poszukaj, poczytaj. Domniemam że impulsy nie pochodzą z innego układu cyfrowego ale z przycisku;-)
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.
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...
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
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
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...
romario4: dzięki, ale to nic nie daje. Ja już próbowałem zamiast capture1 dać timer1 i counter1 i za każdym razem identycznie - czyli kapa.... dziadek-nfc: tylko drgania jakich styków? Ja sygnał biore bezpośrednio z głównego komputera samochodu i puszczam go przez optoizolator. No chyba że drgania styków wtryskiwacza zakłócają sygnał komputera, ale...
Ta komenda to Debounce. Eliminuje m.in. drgania styków. alien_audio Co to ma być: set pinb.4
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?...
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...
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).
W Bascomie robisz to jedną instrukcją: DEBOUNCE pin_portu , stan , etykieta [, SUB] Radzę otworzyć help'a. Towarzyszy jej w razie potrzeby CONFIG DEBOUNCE = czas
Skoro w przerwaniu to będziesz musiał zastosować dodatkowy kondensatorek żeby wyeliminować drgania styków. W przerwaniu albo robisz prosty licznik albo zaprzęgasz do tego timer.
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
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)
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ę...
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.
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...
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ć...
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
Doprowadziłem program do takiej postaci: [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 16000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 Config Timer0 = Timer , Prescale = 1 Enable Timer0 Enable Interrupts Enable Int0 Enable Int1 Stop Timer0 Timer0 = 0 Config...
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...
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...
{ 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"&... }...
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.
(...)co do aplikacji przycisku to bym jednak proponowal instukcje DEBOUNCE Px.y , state , label Oczywiście, że warto stosować instrukcję DEBOUNCE, która ma za zadanie eliminowanie drgań styków przełącznika ale w tym konkretnym przykładzie, który podałem nie jest to konieczne.
2) chyba lepsze: zastosować timer Do tak prostej rzeczy wystarczy najspokojniej w świecie Debounce - po to ono jest, albo jakaś własna najprostsza metoda obsługi drgań styków - toż ta metoda to tylko jeden dodatkowy warunek i króciutkie oczekiwanie rzędu 40-50ms
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 ;/
albo rozbij oczekiwanie, wstawiając przy okazji procedurę sprawdzania klawiery, nie musisz zmieniać istniejącej płytki drukowanej (jeśli jest :) )i przy okazji pozbywasz się problemu drgania styków cum bajszpil: dim D as byte, dim U as byte D = 10 ' czekamy 200ms for U = 0 to D waitms 20 if <przycisk + wciśnięty> then incr D enidif if <przycisk...
przyciski obsługuje się nieco inaczej - switche zwierają do masy, zaś w programie dajesz podciąganie - inaczej masz stany nieustalone i wszystko będzie wariować dalej brak eliminacji drgań styków dalej - załóż nowy temat
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ś...
Skoro dopiero się zaczynasz uczyć, to ciężkiego kalibru używasz (mam na myśli assemblera) a ja uważam, że to najlepszy pomysł - zaczynać od poznania asemblera. Pomimo, że początki są trudne to poznanie podstaw przynajmniej asemblera daje już dużą wiedzę co i jak można robić z prockami. A do większych później projektów czy nawet małych można spokojnie...
Dodatkowo, dla zdiagnozowania gdzie może być problem, proponuję podłączyć dodatkowy przycisk pomiędzy pin przerwania a GND i spróbować tak go obudzić i jeszcze spróbowałbym (tylko na czas testów) tylko raz usypiać. Czyli np. zamiast POWERDOWN dodać takie coś: If Xxx = 0 Then Xxx = 1 Powerdown End If (xxx zmienna typu BYTE lub BIT) w ten sposób wykluczymy...
Witam, Mam zapytanie, Mam klawiaturę 6 przycisków połączonych do jednego wejśća analogowego A.0 Pytanie brzmi, jak W Bascom napisać program żeby wiedział który przycisk naciśąlem Takie klawiatury zbudowane są zazwyczaj z pewnej liczby oporników, przyciskanie klawiszy powoduje jakieś zmiany ich wypadkowej rezystancji. Musisz zbudować dzielnik składający...
po pierwsze źle obsługujesz przyciski - te podłącza się tak by zwierały do masy i załącza się wewnętrzne podciąganie pinów - od tego zacznij po drugie w obu przypadkach dodajesz liczbę po trzecie skorzystaj z timerów do eliminowania drgań styków, lub, jeśli nie jesteś na tym poziomie to dodaj odpowiednio funkcje wait lub poczytaj o bascomowej funkcji...
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...
Ok. Ale jest jeszcze jedna sprawa, otóż w układzie tam gdzie są przyciski od nastawiania czasu występuje coś takiego chyba jak drgania styków, przyciski podłączyłem wg. tego schematu po prawej: https://obrazki.elektroda.pl/3630341200_... jednak przy rozwartym przycisku minuty lub godziny zmieniają wraz z sekundami a przy wciśniętym...
Źle, w skrócie powinno być tak: jeśli wiatr_ena = 0 wtedy poczekaj 25 ms (eliminacja drgań styków) jeśli wiatr_ena = 0 wtedy pętla wyjście z pętli kiedy wiatr_ena=1 (czekanie na PUSZCZENIE przycisku koniec petli reszta Twoich instrukcji warunkowych endif endif
uu teraz gdy odłączyłem zasilanie samego silnika to zauważyłem, że gdy zadziała jedna krańcówka (w postaci kontaktronu) to efekt jest podobny do resetu. Więc może to być wina programu, ale nie koniecznie. Możliwe ze podczas startu kontaktrony się zwierają, ale w poprzednim układzie takie coś nie występowało. Poprzednio sterowanie miałem na bazie przerzutników...
Musi kolega jeszcze dobrać się do przycisków bo teraz każde przejście programu będzie wykonywało operację na liczbie A , więc proponuje wprowadzić opóźnienie mające zapobiegać drganiu styków a następnie czekać na zwolnienie przycisku przed zmianą wartości A . Dodatkowo można wzbogacić urządzenie o mechanizm automatycznego zwiększania wartości A w przypadku...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
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...
Po usunięciu pętli w podprogramach obsługi klawiszy przygasanie zmniejszyło się o około 90%. Obecnie widzę, że na czas obsługi nacisnięcia wyświetlacz ledwie przygasa. Spróbuję stworzyć obsługę w przerwaniu. Czy mogę w przerwaniu wpakować instrukcję debounce? Wiem, że domyslnie wprowadza 25ms opóźnienia, by wyeliminować drgania styków klawiatury. Wydaje...
Hi ! Problem w tym, że nie zabezpieczyłeś przycisków przed drganiem styków. Użyj opcji Debounce i dodatkowo zrób kontrolę puszczenia klawisza po naciśnięciu zanim program wykona kolejny krok. Pozdrawiam...
Wydaje mi się, że to: [syntax=vbnet]if przycisk_wyzwolenia = 1 then sygnal = 0 enable int1 '<--- czyli to end if[/syntax] [syntax=vbnet]Impuls: Wyzwolenie = 1 '<--- i bezpośrednio to incr sygnal If Sygnal = Czas Then Wyzwolenie = 0 sygnal = 0 disable int1 end if Return[/syntax] niezależnie kiedy odczyta powinno wyzwolić w jednym i tym samym momencie...
Poprawiłem na 9,6MHz. Czy w kodzie powinno być Start Counter0 zamiast Start Timer0? Skoro zadekarowałem w configu że to licznik to muszę napisać mimo tego counter? Nie ma potrzeby dawać 'Start Timer0' jeżeli uprzednio nie był zatrzymanyu przez 'Stop Timer0'. Timer w AVR uruchamia sie natychmiast po "Config Timer(x) = cokolwiek" pod warunkiem że preskaler...
Programowo drgania styków eliminuje się łatwo ja się nie do końca zgodzę z tym stwierdzeniem. Programowo jest taniej, niż sprzętowo (koszt kondensatora i rezystora), ale nie łatwiej. Dlaczego nie jest łatwiej? Bo wymaga pomiaru czasu, zabiera dodatkowe kilkadziesiąt bajtów kodu i kilka bajtów RAMu, co w niektórych przypadkach (mały mikrokontroler)...
Prosze bardzo: 'Program regulujący prędkość obrotową silnika DC 12 V 'Do sterowania wykorzystano sygnał PWM 'Częstotliwość przebiegu PWM ok. 254 Hz - 8 MHz/510/64 'Przycisk S1 zwiększa prędkość obrotową silnika 'Przycisk S2 zmniejsza prędkość obrotową silnika $regfile = "m8def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $crystal...
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...
aha rozumiem juz czytam o przyciskach i to waitms 45 to ma ominąć drgania styków w takim razie będe musiał czekać 9 sekund zeby sprawdziło przycisk to musze z przycisku zrezygnować bo to za długo a zrobie zeby np po przejsciu pętli for next zamigało strobem pare razy i od nowa pętle
Przepraszam za głupie pytanie, ale jak ten program działa? I po co te dwa warunki? Bo rozumiem, chciałbyś wyeliminować drgania styków, masz opóźnienie 50ms, ale wtedy sprawdzasz, czy przycisk jest wciśnięty, a nie, czy puszczony... Co prawda Twój program będzie działał, ale trzymanie przycisku nie będzie powodowało zwiększania - tak miało być? Jeśli...
Z drganiami styków nie bedzie problemow poniewaz sygnaly beda pochodzily z enkoderów optycznych (podobnie jak to dziala w myszce) wiec nie ma tu zadnych mechanicznych styków. Zastanawiam sie tez czy podlaczac z kazdego enkodera : 1)Bezposrednio 2 sygnaly pzezsuniete w fazie ,tylko wowczas trzeba by rozwiazac programowo kwestie rozrozniania kierunku...
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,...
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...
RETURN służy do zakończenia podprogramu a nie procedury. Nie pamiętam czy jest jakieś polecenie do wyjścia z procedury, ponieważ nigdy na pewno nie używałem nawet jeśli istnieje. Zawsze tak tworzę procedury aby program dochodził do końca i sama się kończyła. Ja całą procedurę przerobiłbym tak: Dim Koniec As Byte Sub Program Address = 0 Tcls Tlocate...
Nie wytrzymałem :| Można ten program napisać na 100 sposobów... Poniżej chyba najprostsza wersja, bez kontroli drgania styków i blokujący (użycie Bitwait) ale ma robić dokładnie to co napisałeś i nic więcej. To Cię powinno przynajmniej naprowadzić na właściwe tory. [syntax=vb]$regfile = "m8def.dat" $crystal = 1000000 Config Portb = Input '--- konfiguracja...
Zacznij od tego if pin.x=0 then waitms 30 call podprogram else end if Po przejściu do podprogramu też możesz dać na wstepie waitms 100 (jeśli w nim też używasz tego przycisku). Switch podciągnięty do masy? - rozwiń temat :) Kolego zabardzo, to co podpowiadasz to niestety jest niezabardzo, albo nawet gorzej :( ... spróbuj wytłumaczyć gdzie jest w tym...
niełatwo opanować tu wibracje styków, ponieważ można kręcić bardzo szybko. ;) łatwo łatwo, mikroelektronik który jest taktowany kilka MHz na pewno zdąży. nie wiem jak to się ma do bascom bo go nie znam, ale poczytaj: [url=http://mikrokontrolery.blogspot.com...
Po pierwsze pochwal się jakimś listingiem z tego co napisałeś i nie działa , gdzieś mi się już przewinął przed oczami taki projekt na elektrodzie i jak pamiętam autor również próbował wymusić napisanie programu . Między szukaniem pomocy a wyręczaniem się innymi jest cienka granica . Tym bardziej zastanawia mnie to ,że cały układ można przetestować na...
Witam zastosowanie timera w konfiguracji licznika w takim wypadku się nie sprawdzi. Naciśnięcie i puszczenie niesie za sobą efekt uboczny czyli drgania styków. Przez to twój licznik przy jednym naciśnięciu przycisku zalicza kilka impulsów. Taka konfiguracja timera jest przystosowana do stabilnych (czyt. nie drgających sygnałów) . Zamiast zaprzęgać do...
Wszystko było by fajnie z tym innym licznikiem ale niestety zostały mi tylko 8 bitowe a to za mało, musiał bym część liczenia przenieść do pętli głównej a niestety to też nie zda egzaminu bo jak np włączę menu, a tam jest np. obsługa klawiatury i chośby dyskryminacja drgania styków która wstrzymuje czas, a w tym czasie stracę impulsy i pomiar będzie...
Na tej stronie http://bart-projects.cba.pl/rozne.html znajdziesz ten kod ("Przyciski trochę inne"). Napisałem go jakieś dwa lata temu i może teraz napisałbym inaczej, ale tak, czy inaczej program potrafi rozróżnić długie i krótkie wciśnięcie. Przy krótkim odwraca stan podległego mu pinu, przy długim może robić coś innego (w prototypie wysyłał po RS485...
Dziękuje właśnie wczoraj się zastanawiałem gdzie ma byc zamiana licznika i w do...loop czy w przerwaniu bo w obu miejscach działa. Potrzebuję opóźnienia jeżeli zostawię Debounce domyślnie to zalicza mi drgania styków widać switch są już wypracowane . Wypróbuję twój styl bibloteki jeszcze raz wielkie podziękowania za pomoc i sugestie. Dodano po 21 Tak...
Jeśli chodzi o wybór języka to nie jest to sprawa prosta bo napisanie tego programu w asemblerze wymaga bardzo dobrej znajomości mapy pamięci, rejestrów (SFR) i niezłej praktyki od programisty. Poza tym wychwycenie błedów w asmie jest dużo trudniejsze niż w językach wysokiego poziomu, no i ciężko się później przesiąść na inne mikrokontrolery (inna architektura)....
..... Rozumiem że pracując w BASCOM AVR nie ma raczej alternatywnych rozwiązań(oprócz wstawek asemblerowych), które przyśpieszyły by prace tego modułu? ... I to jest słuszne stwierdzenie !!!! Następna sprawa to obsługa impulsatora. Zakładam, że impulsator jest 2 (dwu) wyjściowy i pomijam ile ma pinów wspólnych. Najprostrza i najskuteczniejsza metoda...
A jeszcze takie pytanie odnośnie Pwm. Jak zrobić by pwm miało wartość 0 lub 1. Program który stworzyłem to program do sterowania podświetlenia wyświetlacza lcd poprzez tranzystor i pwm osiąga wartość najwyższą ale najniższej raczej nie. [code] Dim K As Byte Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 64 Do If S1 = 0 Then 'jeśli...
... - rysuj schematy bez używania bus w ten sposób: ... Można owszem było dać etykiety, ale (na przyszłość) dlaczego nie korzystać z bus? ... - trochę wstyd eliminować drgania styków kondensatorami, skoro wolnej mocy obliczeniowej jest na oko z 95% :) Wiem, wiem. Ale to był jeden z pierwszych projektów w C i nie ma tu polecenia "DEBOUNCE" jak w Bascomie...
Ten kawałek: [syntax=basic4gl]Debounce S1 , 1 , S2 , 1 , Przod , Sub[/syntax] jest błędny i należy to inaczej napisać: [syntax=basic4gl]If S1 = 1 And S2 = 1 Then ' sprawdź czy przycisk S1 i S2 zwolniony Waitms 25 ' odczekaj 25 ms (drgania styków) i ponownie If S1 = 1 And S2 = 1 Then ' sprawdź czy przycisk S1 i S2 zwolniony Gosub Przod ' jeżeli wynik...
drgania styków drgania styków mirek drgania styków przerzutnik
toyota radio zasilać cewka deutz nagrzewnica scenic
ADB-2670WF – czy możliwa przeróbka dekodera na Android Box? Analiza techniczna Łożyska silnika pralki Frania – typy, oznaczenia 6201 ZZ, 6202 ZZ, tuleje ślizgowe