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...
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ść....
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};...
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...
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...
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...
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...
Witam. Pracuję nad projektem latarki rowerowej na Arduino. Latarka świeci gdy jest ciemno i za pomocą przycisku wybieram tryb świecenia. Utknąłem na sposobie automatycznego włączania gdy zrobi się ciemno. Jako czujnik używam fototranzystora. Jak to obsłużyć w programie? Chyba powinno się w przerwaniu z ADC odczytywać napięcie z tego czujnika. Nie wiem...
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...
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...
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...
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, 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...
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...
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...
Witam! Program działa prawidłowo do momentu 11 wejść do podprogramu "poczekaj". Ify działają prawidłowo i użycie w innym miejscu end if powoduje błąd. Start timer1 w obsłudze przerwania jest umieszczone dlatego gdyż nie ma tej komendy w pętli podprogramu "czas". Podejrzewam że coś mu się nie zgadza ze zmienną D lub C gdyż po 11 wejściach do podprogramu...
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...
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 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...
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.
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...
Getencoder: Waitus Debouncetime ... Waitms 1 ... Takie kwiatki programowe w przerwaniach!? Gdzie cię uczyli programować? :(
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....
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)=...
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...
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ę...
.... 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...
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. "
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 kod, w którym pętla loop() wykonuje się dosyć długo (około 100ms). Chciałbym teraz do tego projektu dołożyć debouncing jednego przycisku, ale biblioteka Bounce2 (którą wszyscy opisują) bazuje na cyklicznym i w miarę częstym wywołaniu debouncer.update(). I tutaj pytanie: czy istnieje jakaś alternatywna biblioteka do debouncingu oparta o przerwania/timer?...
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...
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...
...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...
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...
Witam, Do INT0 ATmegi16 mam podłączone urządzenie dające impulsy - łączące masę. Dopisałem filtr na drganie styków, ale jedno rozwiązanie działa, a drugie nie. Wolałbym całkiem wyłączać przerwania tak jak w listingu 1, ale w tym przypadku po upłynięciu timeoutu przerwanie uruchamia się jeszcze raz. Czyli na każdy impuls na wejściu licznik zlicza dwa...
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...
https://obrazki.elektroda.pl/5705697300_...
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)...
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...
Czyli jakiś debounce programowy? Na ESP32 najlepiej z użyciem przerwań. Przykład: https://www.switchdoc.com/2018/04/esp32-...
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ę...
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...
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 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ę...
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...
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...
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ź...
1. odczyty są od zera do jakichś krzaków Przed każdą instrukcją związaną z komunikacją 1-wire musisz wyłączyć wszystkie przerwania ponieważ 1-wire będzie się rozjeżdżał i będą wychodzić głupoty. 2. nadal menu z wyświetlaniem temp strasznie mruga Nie ma się co dziwić, że mruga jeżeli masz tak to napisane: [syntax=basic4gl] Debounce S1 , 0 , Zmiana ,...
Sprawdź ten kod. Powinno być wszystko OK. Początkowo chciałem tego "PLL Lock" zrobić na przerwaniu ale widzę, że podłączyłeś tam LCD. $regfile = "M8def.dat" $crystal = 1000000 Dim X As Byte Dim Wpis As Word Dim Wpis2 As String * 5 Dim Przed As String * 3 Dim Po As String * 3 Dim Dlugosc As Byte Config Portd.13 = 1 Config Portd.12 = 1 Config...
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...
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...
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...
To niewielki problem: dodatkowy licznik w przerwaniu załatwia sprawę. Prawdziwy problem jest taki, że obsługę przycisku masz zrobioną po prostu źle. Już mniejsza, że chcesz sprawdzać przycisk co 200ms (rozumiem, że to taki prymitywny debouncing), gorzej że wykonywanie kodu w pętli w main jest powtarzane tak długo, jak długo przycisk pozostaje wciśnięty....
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...
http://obrazki.elektroda.pl/5924959500_1... Witam ponownie! Kilka dni temu chwaliłem się projektem "PALM v1.0 BETA Atmega128", a dziś chciałbym przedstawić komputerek do motoru lub roweru jaki zrealizowałem już jakiś czas temu na zamówienie. Urządzenie miało zastąpić oryginalne psujne, mechaniczne zegary. Funkcje i założenia: *Wyświetlanie...
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ć...
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ą...
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...
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)
Aaaale... Czy generowanie tego przebiegu ma być jedynym zadaniem twojego mikrokontrolera? Jeśli w pętli głównej będziesz chociażby odczytywać czujnik 1wire lub mocno utylizujesz przerwania, błąd nie będzie rzędu 10% (220Hz zamiast 200Hz), tylko rzędu 50%, a może i nawet 100%. Tego nie wie nikt, i nie ma takiej mocy żeby to policzyć... Co tu dużo tłumaczyć?...
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...
Nie znam Bascoma Odpalasz timer, tak żeby generował przerwanie co 50 ms. W tym przerwaniu sprawdzasz stan portów i to w zasadzie wszystko. W pętli głównej monitorujesz ten stan i odpowiednio reagujesz.
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...
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...
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ć...
Ponieważ niejednokrotnie zachodziła potrzeba pisania obsługi klawiszy, postanowiłem napisać bibliotekę, która będzie szybka w implementacji i uniwersalna oraz będzie dawać możliwości detekcji konkretnej sekwencji przyciśnięcia klawisza - przykładowo podwójne naciśnięcie szybko, podwójne naciśnięcie wolno, potrójne naciśnięcie, lub jakakolwiek inna sekwencja....
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...
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...
Kilka uwag: - korzystaj z funkcji i rozbijaj program na funkcje. Niektórzy twierdzą, że jeśli blok ma więcej niż 10 instrukcji to należy go wyrzucić do funkcji. Moze to przesada, ale ułatwia czytanie kodu. - nie zostawiaj niewykorzystanych pinów jako wejścia w układzie - łapią zakłócenia, co w centralce alarmowej nie jest zalecane. - wewnętrzny pull...
https://obrazki.elektroda.pl/5092109900_... Witam, Odkąd w moim aucie pojawił się pilot do bramy wjazdowej na posesje nie chciałem aby leżał on gdzieś na wierzchu albo żebym musiał go szukać w czeluściach jakiegoś schowka. Postanowiłem więc, że zintegruje go z autem, jednakże nie chciałem dodawać żadnych nowych przycisków, tylko użyć...
Program napisany w BASCOM AVR i wyskakujące 3 błędy , mogę wiedzieć dlaczego one wyskakują podczas kompilacji , poniżej zamieszczam kodzik. 'podwójny woltomierz i amperomierz (dwa kanały pomiaru napięcia i dwa kanały pomiaru prądu 'UWAGA _ PONOWNE WGRANIE PROGRAMU SKASUJE WARTOŚCI WSP KOREKCJI Z PAMIECI EPROM '---------------------------------------...
Problem pojawia się, kiedy próbuję w obrębie funkcji wyzwalanej przerwaniem wykonać operację dodawania i wyciągnąć wynik. napisz w przerwaniu tak: [syntax=c]stykx=stykx+1;[/syntax] albo krócej: [syntax=c]stykx++;[/syntax] Drgania styków kontaktronu będą powodować chaotyczne naliczanie. Zrób debouncing programowo albo sprzętowo.
Naskrobałem coś taskiego, po przeczytaniu bloga Mirekk36: Dodano po 3 Zapomniałem dodać, że to nie jest pełen program, bo on dopiero powstaje. Dodano po 3 w komentarzu programu jest bład: ddra = &B00001111 ' ma być input!
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...
debounce debounce przerwania debounce przerwanie debounce
pracuje silnik wyjęciu kluczyka peugeot oświadczenie serwisu igła przeskakuje
sharp 40bg5e elektronika studia
Odpowietrzanie układu chłodzenia Volvo XC90 2.4 D5 Escort 95T - komunikat "error" i jego przyczyny