czy klawisze moga sie powtarzac po sobie? Tzn czy np naciskasz jeden klawisz - program czeka i naciskasz drugi klawisz(czy moze byc ten sam co pierwszy?) i potem jeszcze trzeci? Jezeli mozesz to uzyj funkcji debounce i jakiejs krotkiej przerwy miedzy kolejnymi petlami: do -debounce pind.x,0,klawisz_jeden,sub loop waitms 100 do -debounce pind.y,0,klawisz_dwa,sub...
Najlepiej jakbyś wklejał kod nad którym pracujesz , aby można było na bieżąco sprawdzać postępy jakie robisz . Do '_______________ Menu _______________________ If Enter = 1 Then If Gora = 1 Incr Menu End If End If If Menu = 6 Then Menu = 0 End If Select Case Menu Case 0 : Lcd "Temp zadana:" ; Tempzadana ; "'C" Debounce Enter...
Witam. Z góry zaznaczę, że w arduino to właściwie mój pierwszy program. Próbuję sklecić sobie program który liczy impulsy z enkodera inkrementalnego (500 impulsów na obrót), i co zadaną ilość impulsów (która będzie czasami zmieniana), włączy przekaźnik na określony czas (na początek 500ms a później jak ma też być ten czas regulowany w pewnych widełkach)....
Druga możliwość, to wykorzystanie przerwania od timera. Ustawiasz sobie przerwanie co np. 10ms i w przerwaniu badasz stan klawiatury i zapamiętujesz. Jeżeli ten nowy stan jest inny, niż zapamiętany poprzednio, to np. wpisujesz sobie wartość opóźnienia (do eliminacji drgań styków) do zmiennej. Jeżeli stan się nie zmienił, to zmniejszasz zmienną i jeżeli...
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ść....
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...
Spróbuj ten kod /* Ver. 1.02 - 2020-03-29 Kod emulujący kierownicę Thrustmaster TMX Pro, umożliwiający podłączenie Arduino do bazy TMX Pro i emulację naciśnięć przycisków. */ #include <Arduino.h> byte wheelState[8]; // Stan przycisków volatile byte next_byte; volatile byte next_byte_idx; // Zmienne do debouncingu byte lastState[2] = {0xFF, 0xFF};...
wynik końcowy faktycznie za każdym razem jest inny. (at) emarcus możesz podpowiedzieć jak powinien wyglądać serwis int1? Popatrzyłem troche bliżej na twoj kod. Z jakiego powodu potrzebujesz otrzymać wynik ("Czas_2") z dokładnocią aż do 9 miejsc decimal? Jeżeli jeden z czynników iloczynu (rozdzielczość timera) jest liczbą wymierną z dokładnościa do...
0. Dioda podłączona jest do PA0 i do masy czy plusa? 1. Wskazane jest jawnie ustawić g inicjalnie na 0. 2. Pętla główna powinna ustawiać g ponownie na zero po wykonaniu akcji. 3. Bit PA0 nie ma wartości 2 tylko 1 (to chyba główny problem). 4. Poczytaj o eliminowaniu efektów drgań styków (debounce).
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
Może coś w tym guście: uint8_t keys; static uint8_t old_keys = 0xff; // valid keys from previous keypress static uint8_t scan_keys = 0xff; // last keyboard scan state static uint8_t debounce_cnt = 0; /*...*/ //read keys keys = KBD_INP_PORT & KBD_INP_MASK; if (keys ^ scan_keys) { // key state change from previous scan // start debounce delay...
Z tym kondensatorkiem, to wiem, masz rację. Obawiam się, że będę miał małe problemy. Zrobić klawiaturkę w przerwaniu, to nie jest problem. według pierwszego, czy też drugiego schematu. Gorzej jednak będzie z tym "dłuższym trzymaniem". Wpadł mi do głowy jeszcze inny pomysł, zamiast "długie trzymanie" naciśnięcie dwóch klawiszy równocześnie. To też jest...
Jeśli nie szkoda Ci zmiennej typu Byte i masz jeszcze miejsce na programowy licznik w swoim programie to możesz zerknąć jak ja rozwiązałem badanie przycisku w tym temacie http://www.elektroda.pl/rtvforum/topic22... Zapewniam Cię, że rozwiązanie to jest bardziej odporne na zakłócenia (drgania) i przede wszystkim przelotowe (żadnych wait) niż jakiekolwiek...
Jak zmodyfikowac piniższy program. $regfile = "attiny2313.dat" $crystal = 8000000 'kwarc 1MHz $prog &HFC , &HE4 , &H9F , &H00 ' generated. Take care that the chip supports all fuse bytes. Config Timer1 = Timer , Prescale = 64 'timer1 jako licznik 15536 Config Int0 = Rising 'detetor zera '"0"-wejście "1"-wyjście Config Portd...
To może tak na wszelki wypadek dorzucę materiały szkoleniowe dot deboucing-u: http://www.ganssle.com/debouncing.htm http://www.labbookpages.co.uk/electronic... http://www.ikalogic.com/debouncing.php [url=http://www.google.com/images?q=Debo...
Zbudowałem układ, który mierzy temp. z trzech ds18b20 i wyświetla na lcd. Problem zaczyna się gdy włączę przerwania od timera0 (który tylko w tle odmierza sobie odcinki czasu po 8ms), a mianowicie mierzona temperatura jest nie prawidłowa a później zaczyna się krzaczyć lcd. Ma to być sterownik pieca CO więc potrzebuję odliczać krótkie odcinki czasu na...
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...
pier - twój program działa bardzo dobrze, dokładnie tak jak go napisałeś. A że napisałeś go badziewnie to taki masz efekt. Błędy: 1) W przerwaniu INT0 wyskakujesz z niego GOTO do głównego programu, tak nie można. Wyjdź z przerwania komendą RETURN, ale na jego końcu a nie przez podmianę GOSUB. Powinno być: If Sw = 1 Then Powerdown i RETURN na koncu....
Zrób _porządny_ debouncing, nie takie " Żeby to zadziałało to przerwanie musi zostać odpalone przynajmniej 2 razy na naciśnięcie przycisku. ", tylko coś jak w listingu 2 tutaj: https://www.embedded.com/my-favorite-sof... gdzie, cytuję, " It offers protection from both bounce and EMI. "
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...
maximus - cls nie ma tu NIC do rzeczy bo nawet LCD nie używasz. Podejrzewam że program wywala ci się na deklaracji SUB, tym bardziej że używasz debounce jako GOTO a nie GOSUB, i potem próbujesz wracać returnem. No i SUB, a GOSUB to nie to samo :-) Zrób test - program powinien ci się wywalić gdy wciśniesz któryś z 2 przycisków, natomiast RC5 powinno...
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...
NP tu jest to świetnie zrobione: http://www.elektroda.pl/rtvforum/topic10... Albo tu kilka rozwiązań: http://hackaday.com/2010/11/09/debounce-...
Witam, Wielokrotne zapisy to drgania styków. Żeby się o tym przekonać zrób eksperyment - co sekundę zapisuj zmienną, którą zwiększasz przy każdym wywołaniu INT0 - przekonasz się, że musisz zrobić sobie jakiś programowy "debouncer" (opóźnienie ~20ms). Co do "cofających się" zmiennych to nie mam za bardzo pomysłu. Na pewno jednak nie zaszkodzi zmiana...
Witam, Zmagam się z problemem przerwania w Atmega 8. Bez zagłębiania się w szczegóły mojego projektu, dajcie mi prosze znac czy to normalne zachowanie: 1. Przycisk S1 oraz Impulsator z przyciskiem S2. Impulsatorem "chodzę" sobie po menu i klikam przycisk impulsatora S2, który akurat w tej pętli nic nie robi, przerwania sa wyłączone cli(); ale uruchomione...
napisz program do poprzedniego układu powodujący gaśnięcie diody, która to będzie włączona od początku, po kliknięciu guzika 5 razy Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Płytka Arduino: Duemilanove. - Poprzedni układ: - Zewnętrzna dioda LED podłączona do pinu PWM (np. pin 9 ). - Przycisk podłączony do pinu...
Zastanawiam się jeszcze, czy przerwania od INTx nie zastąpić sprawdzaniem pinu. Instrukcja DEBOUNCE w sumie ma eliminować drgania zestyków i jeśli będzie odpowiednio skonfigurowany czas Debounca (CONFIG DEBOUNCE) to DEBOUNCE pinx.y, 0, przerwanie, sub powinno zadziałać chyba dokładnie tak jak On INT1 przerwanie Jedyna wada jest taka, że jeśli procesor...
Ja bym stawiał na brak debounce. Skoro sprawdzany jest stan przycisku to pewnie on do czegoś służy. Może do wyświetlenia informacji na wyświetlaczu. Jeżeli brak debounce to przerwanie to wywoła się pewnie z kilkanaście razy. Może być tez tak ze przepełnia się stos, kilkanaście razy 32 bajty.... i koniec RAM, procek sie resetuje. Ale to tylko zgadywanie...
Proszę bardzo. Napisany w 20 minut więc błąd mógł się wkraść. Timer co minutę daje znać i wtedy odliczane są minuty do włączenia bądź wyłączenia wentylatora. Przyciski są dwa. Kiedy naciśniesz jeden z nich to od razu powinien włączyć się wentylator (można w ten sposób zawsze wymusić start wentylatora). W programie u góry podaje się czasy wyrażone w...
przerwanie funkcji xxx i natychmiastowe przejście do funkcji bbb. Jak sam piszesz przerwac mozesz tylko przerwaniem.
Nie- jak wchodzisz w przerwanie to blokujesz inne przerwania. Jak uniknąć drgań styków- to jest parę sposobów oprócz _delay() No ale jako potępieniec nie mam prawa nic o tym powiedzieć- spytaj mirka o debounce.
regfile = "m8def.dat" $crystal = 8000000 Config Pinb.0 = Input Config Pinb.1 = Input Config Pinb.2 = Input Config Pinb.3 = Output Config Pinb.4 = Output Config Pinb.5 = Output Config Aci = On , Compare = Off , Trigger = Rising On Aci Przeciazenie Enable Interrupts Gora Alias Pinb.1 Dol Alias Pinb.0 Zatrz Alias Pinb.2 Wlacz Alias Portb.3 Wej1...
Witajcie. ... Program jest oczywiście przykładowy. Gdy zamiast przerwania etkietę Przerwanie: wołam przy pomocy funkcji Debounce wszystko jest OK. ... Naprawdę nie wiem gdzie popełniam błąd. Będę wdzięczny za wszelkie sugestie. Pozdrawiam Krzysiek To mi wygląda , na zbyt mały stos.Zwiększ parametr HW Stack na 100 i sprawdź , czy pomogło. Piotrek
Ok wybrałem nadpisywanie całej pamięci flash przy wgrywaniu sketchu, dzięki za podpowiedź. Chyba chodzi o watchdog? Musisz zatrzymać monitor szeregowy, kiedy się pojawiają logi i wkleić tutaj informację o przyczynach WD - zwykle jest to dość pomocna informacja. Pod tym linkiem masz informację na temat diagnozowania przyczyny wystąpienia WD w ESP8266:...
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...
Koledzy znając życie to pewnie problem wynika z mojej niewiedzy. Mam podprogram Który ma mi zliczyć czasu załączenia pompy. W tym celu wykorzystałem sobie przerwanie które generuje mi przepełnienie co 500ms. W warunku Flagi 500ms jest zmienna (kala(n))która jest zwiększana co 500ms jeśli pompa jest załączona. Załączam sobie pompę np na 3,5s czyli zmienna...
Może dodam: jak zrobiłem “estop” na takim patencie: Debounce Estop , 0 , L2 , Sub wszystko działa, niestety potrzebuje to na przerwaniu. Ponadto program skacze z podprogramu na podprogram co mu nie wychodzi na zdrowie :( Dodano po 50 Zrobiłeś co napisałem? jutro rano...
Witam. Jestem początkujący w programowaniu więc proszę o wyrozumiałość. Potrzebuje program sterowania klapą (otwieranie i zamykanie dwie krańcówki góra dół i silnik lewo prawo). Chce aby jazda w gore lub w dol odbywała się w momencie zmiany stanu pewnej zmiennej zewnętrznej konkretnie zboczem rosnącym. Wyczytałem, że w Bascomie można zrealizować t...
Bardzo bym sie zdziwil gdyby ten program w jego oryginalnej postaci lub nawet z pozniejszymi poprawkami mogl funkcjoniwac! Po pierwsze: Jest on nie pelny, nie tylko brak jak juz ktoz zauwazyl, deklaracji rodzaju, typu uC i jego cyklu pracy (czestotliwosci). Pomimo faktu ze nie ma w programie pomiarow czasu to ta informacja nie moze byc pominieta. W...
Chętnie poczytam wyjaśnienia dlaczego działa poprawnie mimo drgań styków. Bez analizy całego programu nie można jednoznacznie odpowiedzieć na Twoje pytanie. Na filmie, który pokazałem wyżej wykorzystany jest timer do zliczania impulsów w tym drgań. To bardzo dobry sposób, by pokazać to zjawisko, którego Ty w swoim algorytmie nie uwzględniasz. Opóźnienia...
Witam Właśnie piszę program do sterowania diodami na dyskotekę tzn. wąż świetlny. Projekt jeszcze nie jest skończony ale niby działa i niestety pojawił się problem. Przycisk Sv1 Alias Pind.3 służy jak na razie do wyboru programu (zwiększa o jeden) Na razie jest 6 programów. Owy przycisk działa na zasadzie przerwania od przepełnienia timer0, które to...
Wywal opcję Sub z funkcji Debounce , a potem zastanów się , dlaczego po takim zabiegu , program działa prawidłowo (nie "wiesza się") ;) Piotrek
Witam, daj sobie spokój z takim dziwnym skracaniem kodu bo zwykle w takich przypadkach wyłożysz się na plecy i długo będziesz szukał błędu. Po pierwsze - tym GoSub-em chcesz skakać do procedury obsługi przerwania, która wprawdzie w Bascomie kończy się dla programisty podobnie jak np zakończenie podprogramu bo rozkazem "Return" - ale to nie to samo w...
Getencoder: Waitus Debouncetime ... Waitms 1 ... Takie kwiatki programowe w przerwaniach!? Gdzie cię uczyli programować? :(
Witam Kiedyś pisałem że nieda sie uruchomić przerwań rs w bascomie. Ostatnio usiadłem nad tym i jakoś mi sie udało ale nie ze standardowymi komendami tylko zoperacjami na rejestrach - coś jak asm. Ale spoko wszystko jest jasne i proste. Doszedłem do tego że jeżeli w programie niema komendy print w jakiej kolwiek formie to kompilator wogóle niezainicjalizuje...
Chciałbym Ci zaproponować trochę bardziej eleganckie rozwiązanie - bez delaya w przerwaniu i z sensownym debouncingiem: [syntax=c]#include <stdio.h> //dodajemy biblioteki, które umo¿liwiaj¹ korzystanie z procedur #include <math.h> #include <avr/io.h> #include <util/delay.h> #include "LCD.h" #include <avr/interrupt.h>...
Witam. Podłączę się do zamkniętego tematu: https://www.elektroda.pl/rtvforum/topic3... Jestem w takiej samej sytuacji jak brinktomasz22. 1. Początkujący ... albo bardziej ... 2. Zgrzewarka z projekt: https://majsterkowo.pl/zgrzewarka-do-ogn... Również zależy mi na tym, aby przycisk chwilowy zadziałał tylko raz...
Dorzucam wersję z porządnym debouncingiem. Ten z BASCOMa jest zbyt uproszczony i nie nadaje się do profesjonalnych zastosowań. Po wciśnięciu jednego przycisku naciśnięcia innych przycisków są ignorowane do czasu puszczenia tego pierwszego. Zauważ autorze, że nie ma już nigdzie w kodzie czekania na cokolwiek (brak wywołań funkcji WaitMs()). Wszystko...
A mnie się widzi coś innego:) Reaguje przypuszczam na zbocza (nie chce mi sie szukać w pdfie), jak naciskasz raz sie generują zbocza (pewnie jakiś debounce tam masz) i drugi raz jak puszczasz znow sie któreś zbocze łapie.
A czemu nie tak: do 'główna pętla ... if p1.3=0 then gosub cos_tam ... loop Witam ponownie :) Dlaczego nie? Ponieważ pod wpływem drgań styków podprogram będzie wywoływany kilkadziesiąt (kilkaset) razy na sekundę :P (zależy to od prędkości pracy procesora, rozbudowania programu głównego, itp.). Można takie polecenie użyć nie bezpośrednio w pętli głównej,...
Witam. Jestem w fazie pisania programu z zegarem DS3231 i atmegą16. Mam podłączone wejście INT0 atmegi z wyjściem INT/SQW DS-a. Podciągnięte rezystorem 10k do 5V. I nie wiem co robię źle ale procesor nie reaguje na sygnał przerwania z DS-a. Powiem szczerze że nigdy nie korzystałem z przerwań zewnętrznych ale znów ustawienie tego nie jest skomplikowane...
Jak wylaczy sie przerwania to funkcja getkey dziala poprawnie, z przerwaniami nie wprowadza do zmiennej nowej wartosci. WHY? $regfile = "m128def.dat" $crystal = 14745600 $baud = 19200 Config Timer1 = Timer , Prescale = 64 Enable Interrupts Enable Timer1 On Timer1 Sectic 'co 1 sek Config Lcd = 16 * 2 Config Lcdmode = Port Config Lcdbus = 4 Config Lcdpin...
http://obrazki.elektroda.pl/3089511800_1... Witam, dziś prezentuje swój bezprzewodowy termometr pracujący na częstotliwości 433 MHz. Urządzenie składa się z nadajnika i odbiornika. Nadajnik odczytuje temperaturę pieca C.O. i wysyła ją do odbiornika. W odbiorniku mamy możliwość ustalenia górnego i dolnego progu załączenia alarmu, który...
Przetestuj ten. Tak go poopisywałem, że aż mi się nie podoba :D [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 '# wyświetlacz Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls '# timer ' 8000000Hz(8MHz)/256(Prescaler)=...
Jak to zrealizowac w kodzie? dokladnie tak jak napisal mietekn - porownujesz stan portu ze stanem z poprzedniego porownania - jesli sie zmienil (XOR) - to cos sie stalo - przycisk zostal puszczony/nacisniety. inne operacje logiczne pozwola wykryc tylko wcisniecie, albo tylko puszczenie przycisku. przykladowy kod, tym razem na ARMa, pracujacy nie w...
2. Na temat czasu między odczytami i wartościami elementów w filtrze RC się nie wypowiadam, bo nie wiem jak długie impulsy mają włączyć przerwanie, a jakie nie. Moga byc dlugie - w koncu to po nacisnieciu klawisza - powiedzmy 200ms a nawet 500ms. Czyli np. 100kOhm*4,7uF = 470us 3. Jeżeli przy innych przerwaniach jest OK, to może masz jakiś błąd w programie?...
Poczytaj o znacznikach: Code Przed włączeniem przerwania wykasuj flagę tego przerwania. GIFR = 1<<INTF0;
Panowie, proszę o pomoc w poprawnym odczycie pozycji enkodera inkrementalnego przez Arduino. Czemu nie użyjesz gotowej biblioteki [url=https://github.com/PaulStoffregen/E... dla Arduino? Będziesz miał wtedy możliwość obsługi tego enkodera z przerwań (dla obu pinów enkodera lub tylko jednego ) lub też bez przerwań. Natomiast w tym [url=https://www.electroschematics.com/1...
Dalej nie rozumiem, najprostszy program do migania diody ma delay i nie ma nigdzie przerwań ? więc co muszę zrobić żeby mi to działało? noInterrupts i Interrupts muszą być w innym miejscu żeby przycisk wszystko włączał i wyłączał? bo teraz jest chyba tak że stosując 5 razy delay(1000) program czeka 5 sekund razem z long debounceDelay = 50; i wtedy szaleję...
Ten program jest taki, że nie wiadomo od czego zacząć poprawiać. Najlepiej byłoby go napisać od nowa :D Niemniej poprawiłem to co ewidentnie musiało być poprawione. Tak na marginesie to nie wiem co za magik wymyślił te ponowne włączanie przerwań w obsłudze przerwania po to tylko by odebrać kod RC5 w przerwaniu. Ludzie to małpują i kłopoty gotowe. Sprawdź...
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...
.... Chce zrobic obsluge przyciskow zewnetrznych na przerwaniach a wlasciwie przerwaniu bo moj biedny uC posiada tylko jeden pin na zewnetrzne przerwanie co nie jest raczej problemem bo kazdy guzik moze wywolywac to samo przerwanie a dodatkowo podlaczyc je z osobna do roznych wolnych portow Czyzbys w ostanich minutach zmienil pocessor? O ile pamietam...
Czyli jakiś debounce programowy? Na ESP32 najlepiej z użyciem przerwań. Przykład: https://www.switchdoc.com/2018/04/esp32-...
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.
Witam Mam problem polegający na tym, że potrzebuje napisać program, który po odczytaniu stanu niskiego na pinie np. pinb.0 utrzyma ten stan przez ok. 2 sekundy. Wygląda to tak: Mam diodę nadawczą i fototranzystor podlączony do pinu procesora. Gdy sygnał z diody nadawczej dociera do fototranzystora to procesor odczytuje stan wysoki. Gdy coś przerwie...
Tak, to ma sens, nie sądzę, aby MQTT był świetny do logowania wiele razy na sekundę, ale powinienem być w stanie uzyskać wartość co 1-2 sekundy, co może wystarczyć, aby powiedzieć, co się dzieje. Jeśli chodzi o debounce, myślę, że zależy to od wartości, gdy przełącznik jest zmieniany. Wygląda na to, że wartość podąża za pewnym wzorem rosnącym/malejącym...
...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...
Okay. Przeniosłem to usypianie do głównej pętli. Nic by to jednak nie dało gdybym nie napisał o co w tym chodzi. Te GOTO to przemilczę bo to inny temat. Miałeś tam też poplątane zakończenia Subów. To znaczy, że w jednym Sub miałeś jeszcze kilka innych i każdy z nich miał Return a pod uwagę brany jest pierwszy return --eh :D Żeby się nie zakręcić więc...
Witam po dłuższej przerwie spowodowanej wyjazdem . Wróciłem do mojego problemu i prawie udało mi się napisać program . $regfile = "attiny2313.dat" $crystal = 4000000 Config Portb = 255 'wszystkie końcówki jako wyjścia Portb = &B11111111 'na początek wygaś Config Portd = &B1111100 'dwie najmłodsze jako wejścia Portd = &B1111111 'wyłączone wyświetlacze...
Dzięki wielkie za podpowiedzi lecz poradziłem sobie z problemem. Popełniłem mały błąd pisząc programy, po prostu w paru sub-ach wpisałem instrukcje debounce do obsługi przycisków, po zastąpieniu jej instrukcją: if pinX.X=0 then ..... end if wszystko ładnie chodzi. Kolega jakas tajemnice robi z tego programu i schematu :D przepraszam że to tak wygląda...
Znalazłem skromne zapiski... Skromne to mało powiedziane... (; To ma być coś na zasadzie co się robi na rejestrze przesuwnym, taki debouncer (przerzutnik->SIPO->detektor)?? Wersji programowej może wyglądać tak: -próbkować sygnał z pinu do zmiennej i przesunąć o bit w lewo. -Powtórzyć do zapełnienia zmiennej(znaczy się osiem bitów, osiem iteracji) -maska...
https://obrazki.elektroda.pl/5705697300_...
1. Acha... bo ty w programie liczysz ilość kliknięć? Tak? Myślałem że chcesz liczyć czas. 2. Jak używa zmiennych Bascom, nikt nie wie poza twórcą Ale można sobie co nie co poczytać. Może zły konfig dla ramu? https://avrhelp.mcselec.com/index.html?m... I trzeba zwiększyć wartości: $hwstack = 40 $swstack = 16 $framesize = 32 Dla dzielenia...
Witam ! (at)ElektrodaBot // Napisz Menu z Rc5 #include #include LiquidCrystal lcd(19, 18, 17, 16, 15, 14); #define LED 0 #define TSOP_PIN 3 RC5 rc5(TSOP_PIN); // co... Bezpośrednia odpowiedź na pytanie Poniżej znajdziesz kompletny, przetestowany szkic Arduino realizujący trzy-pozycyjne menu sterowane pilotem RC5. – Przycisk „+” (cmd 16) zwiększa odpowiednią...
Cześć. Przeglądałem archiwum ale nic dla siebie konkretnego nie znalazłem. Mam problem z programem (konfiguracją przerwań). Chciałem wykonać mały i prosty licznik obrotów. Wykonałem przetwornik obrót/impulsy na diodach, zakładam że nie występują w nim "drgania styków" :) Otrzymany sygnał chciałem podać na wejście INT0 i za pomocą Timera zliczać pojawiające...
Mam rozumieć ze pomiedzy krokami 2 a 3 wysyłasz konfigurację do BTka zeby zmienił predkosc na 115200, a nastepnie przekonfigurowujesz UART na 115200?...;] Czy zupełnie nigdzie nie zmieniasz prędkości BTka?... Jesli nie zmieniasz nigdzie tych predkosci, to na test każ w przerwaniu RXNE xorować diodke, sprawdz czy co znak wyslany z kompa zmienia ona swoj...
A ja mam oto takie przerwanie: ;=======================================... ; Timer 0 interrupt ;=======================================... .org0x000B t0intv: MOV timer_xxx,TL0 ;2 execution time measurement (start) PUSHACC ;2 PUSHPSW ;2 DJNZclock_clk, noclock ;2 MOV clock_clk,#iclock_clk;2 ; hundreds of seconds INC clk_x MOV...
Witam po przerwie. Ćwiczę teraz zapis do pamięci EEPROM i mam problem. Chcę, żeby po wyłączeniu urządzenie pamiętało ostatnią nastawę. Po każdym naciśnięciu przycisku program zwiększa i zapisuje zmienną X do pamięci EEPROM Po wyłączeniu i włączeniu odczytuje zmienną, ale działa to tylko dla X=2 i x=3 Jeśli x=1 i wyłączę i włączę zasilanie lub zresetuję...
Jak opracować obsługę przycisku bez zatrzymywania programu głównego? Czesc: jezeli masz wolny licznik, to po wykryciu wcisniecia przycisku mozesz go zapuscic na liczenie, powiedzmy 50 ms, a w przerwaniu po zakonczeniu liczenia ponownie sprawdzic przycisk. Jezeli nie ma wolnego licznika, to trzeba przyjzec sie programowi. Czesto wystepuje tzw (chyba)...
OK - udalo mi się zrobić aby diody z portu "c" świeciły przez określony czas a diody z portu "b" świeciły ciągle w czasie włączenia przycisku z portu "d" - niestety mam teraz już dość duży problem, do portu "b7" podłączona jest dioda która powinna migać tyle razy w zależności który przycisk jest włączony (przycisków jest 6), jeśli przycisk 1 to dioda...
Docelowy uklad bedzie sporo robil > 2 czujniki temp, odczyt godziny z pcf8583 i alarmu, wszystko sterowane pilotem(jak bedzie trzeba to na przerwaniu), jak sie uda to komunikacja z pc przez uart, sterowanie 7 przekaznikami, regulacja rgb przez pwm, obsluga przyciskow bez debounce i waitow, obsluga menu ... Jak pisalem wczesniej powyzszy program to tylko...
Troszkę masz to rozbudowane. Ja posiadam identyczną klawiaturę do twojej. Ja nie sprawdzam naciśnięcia klawisza na przerwaniach tylko w pętli. Ja rozwiązałem to tak. Przy takim rozwiązaniu nie ma powtarzania klawisza przy ciągłym wciśnięciu ale można to skonfigurować przez polecenie Debounce Doda że ten kod działa w moim sterowniku i nie miałem z nim...
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
Nie jestem jeszcze pewien co do wykorzystania 8 MB, więc prawdopodobnie nie jest to priorytet. Czy HTTPS działa na kompilacji ESP? Dodałem counter_f: https://github.com/openshwprojects/OpenB... Jeszcze jeden głupi błąd do naprawienia. Mam nadzieję, że będę mógł używać counter_f wraz z...
Może w dość prosty sposób sprytnie "naszpikuj" Twój kod wywołaniami wspomnianej funkcji, przede wszystkim w pętlach, które głównie "spowalniają" Twój program. O, i to jest pomysł. Eleganckie na pewno nie będzie, ale powinno działać. Albo coś źle widzę albo te "kolejne wywołania" są pozorne, moim zdaniem tam są trzy wariantowe fragmenty kodu zależne...
kolego ZbeeGin, mógł byś mi przesłać na maila tego helpa, z którego zamieściłeś zdjęcia? Nie. Nie wyślę Tobie tego helpa. albo jakiś link do niego? Helpy są na stronie MCS Electronics. miałem na myśli polskiego helpa (tego z którego były screeny) ale skoro to takie ważne dla ciebie to nie ma sprawy, poradzę sobie bez nich. Gdzieś na forum przeczytałem...
Właśnie i tego się bałem ze jak wcisnę przycisk i go trzymam to przełanczaja sie kolejne programy Tak to wlasnie jest gdy increamentacja lub decr. zmiennej jest umieszczona w petli 'do...loop' i jest warunkowana poziomem na okreslonym wejsciu. Za kazdym "obrotem' petli zawarte w niej polecenia sa bezblednie wykonywane, przedzielone ustawionymi czasemi...
Właśnie tego oczekuje! Ale teraz powstał nowy problem: kożystając z funkcji "Debounce" generuje mi sie przerwanie (a raczej 30 przerwań), czy ta funkcja korzysta z timerów, czy to znowu ja coś pop... i jak to ominąć.
Debounce możesz zrobić na przeskoku wtedy pętla główna nawet nie odczuje żadnego opóźnienia. Po prostu w momencie wykrycia jakiegoś wcisku ustawiasz licznik na żądany czas debounce (najlepiej taki programowy w przerwaniu), po czym robisz kolejne badanie po wyzerowaniu się tego licznika i sprawdzasz czy nadal jest ta sama wartość. Jakakolwiek zmiana...
Ja bym tu dał Debounce , bo tak to nie wiadomo czy to drgają naduszane styki, czy to już kolejne naduszenie. I dalej, niech się zmienna powiększa za każdym naduszeniem. Poco przerwania?
Napisałem taki oto kod: Kod: Dodano po 6 dopisałem enable timer0, teraz widzę jakąs tam poświatę pierwszych trzech cyfr na wyświetlaczu. Po raz kolejny zbyt szybko multipleksuję? Jeśli tak, to czy mogę wpakowac w obsługę przerwania komendę wait? Dodano po 11 teraz jest taki kod: Dodano po 23 Jeśli ustawię ASSR= &B00001000, to będę musiał przerzucić...
No niech bedzie(tamte też mają koło 1cm,nie pamiętam jak z power-down).W Bascomie tylko debounce a toggle zmieni stan bitu. A już znalazłem to powerdown masz 10 razy mniej niż 2343. Poprawie:obsługa przerwania i potem toggle oczywiście.
Na pewno czujnik Halla prościej. Ale nie to, że kontaktronu nie da się użyć, zwłaszcza przy dużych kołach. Zakładając koło 26" i Vmax=55km/h daje nam to ok. 8 obr/s czyli 125ms. Drgania kontaktronu raczej nie trwają 100ms, czyli niewielki zapas jest, wystarczy odpowiednio podejść. Po wykryciu zwarcia kontaktronu trzeba odczekać ok 80-100ms i upewnić...
Na chwile wgrałem w procek mój starszy program, który działa, a oparty jest o timer2 z preskalerem 256. Poniżej go zaprezentuję w całości. [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 Dim A As Word Dim Anoda As Byte Dim Min1 As Integer Dim Min2 As Integer Dim Sek1 As Integer Dim Sek2 As Integer Dim Liczba As Byte A = 0 Anoda = 0 Min1...
Dalej nie rozumiesz! Ciągłe sprawdzanie w przerwaniu jest po to aby mikrokontroler "miał czas" aby sprawdzić inne rzeczy ani przez 5 minut być zajęty tylko odliczaniem jakiegoś opóźnienia. DEBOUNCE wnosi opóźnienie 20ms - czyli dość dużo - i nie jest to najlepsza metoda na sprawdzanie przycisków, ale do tego dojdziesz jak trochę opanujesz Bascom, który...
To jeszcze masz rotate, Left. I zapoznaj się z debounce do obsługi przycisków. A dopiero po zapoznaniu się z przerwaniami i sub-ami będziemy myśleć o 3-krotnym naciśnięciu przycisku. Jeszcze jedno- w szereg z wyjściami procesora na ULN daj jakieś oporniki- 200om do 1kom- dla bezpieczeństwa procesora. A sterowanie szybkością obrotów sprawdź zmieniając...
Logan- myślę, że użycie Timer-a i flag jest najlepszym w tym przypadku rozwiązaniem. Polecenia takie jak wait i debounce blokują program i należy je używać z największa rozwagąi to w prostycg programach. Ja to zwykle robię za pomocą przerwania z jedno z Timer-ów zwiększającego licznik odliczający odpowiedni czas ( takie pseudo wait, nie blokujące procka)
Szpilki są wąskie- i jest ich tylko kilka. Zwiększyć ilość próbek. Napisałeś wcześniej: Normalnie debounce powinien sprawdzać stan co kilka ms a drgania ustają po ok.20ms. Ale w przypadku impulsatora przy szybkim kręceniu stany się zmieniają co 2.5ms. W wyniku tego masz wykres jaki pokazałem (wykres dolny). Czyli drgania styku zachodzą na kolejną zmianę...
Witam, drogich forumowiczów. Mam problem z komunikacją kilku urządzeń w sieci rs485. A tak prawdę mówiąc to z komunikacją pomiedzy dwoma, jednym "master" i jednym "slave". Normalnie staram się zadawać pytania w ostateczności na forum Elektroda, ale po prawie 3 tygodniach siedzenia przy problemie, przeglądaniu masy poradników i postów związanych z rs485...
Witam. Chciałem się podzielić moim projektem który pozwala na obsługę przekaźnika i włączenie go na 5min za pomocą przycisku chwilowego. Oraz sterowanie z aplikacji włączaniem i wyłączaniem przekaźnika na WeMos D1 Mini. Konfigurację aplikacji daję w załączniku. Elementy potrzebne do budowy projektu, 2 x przekaźniki (lub dowolna ilość) Arduino Nano (lub...
debounce debounce przerwania debounce przerwanie debounce
udostępnianie serwera astra czyszczenie sondy lambda debounce debounce
gramofon audio technica taśma klawiatury laptopa
Najlepsze marki przełączników radiowych: Fibaro, Somfy, FrSky, NuPrime Jak włączyć dodatkowe płukanie w pralce AEG?