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...
Witam! Mam pytanie do osób programujących w Bascomie. Dlaczego po kilkukrotnym wciśnięciu przycisku P3.2 program się zawiesza i co zrobić by przez cały czas działal poprawnie? Dziękuję za poświęcenie chwili czasu. Config Timer1 = Timer , Gate = Internal , Mode = 1 Dim D As Byte Dim C As Word D = 0 Declare Sub Czas On Timer1 Przerwanie Enable Interrupts...
przerwanie funkcji xxx i natychmiastowe przejście do funkcji bbb. Jak sam piszesz przerwac mozesz tylko przerwaniem.
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...
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...
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ąć.
Witajcie. Popatrzyłem na inne tematy w google, na elektrodzie itp. ale nie mogę znaleźć satysfakcjonującej odpowiedzi :D Otóż mój problem polega na tym, że chcę sterować moją super lampkę jednym przyciskiem. Niestety po wielu próbach cały czas jestem niezadowolony z rezultatów. Tryby pracy przeskakują to z I=1 do I=3 itd. Ogólnie cały układ albo pracuje...
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
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.
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.
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).
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...
marco47 - przepraszam, nie zauważyłem. marek19951 - proste if-then nie załatwi problemu. Jeżeli masz zapał, a widzę , że masz, zacznij od procedury obsługi klawiatury , która nie powoduje opóźnień poprzez martwe pętle ( czyli m.in wait, debounce, bitwait itp). Ja to zrobiłem na przerwaniu programowym z timer1, które odliczało mi okresy 10 ms w połączeniu...
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)=...
Czyli jakiś debounce programowy? Na ESP32 najlepiej z użyciem przerwań. Przykład: https://www.switchdoc.com/2018/04/esp32-...
Wstawiłem rezystorek 640. Bez zmian. A czy jeśli zastosuję debounce, to nie będzie to koligowało z przerwaniami timera? Bo jeśli np przy jednym impulsie na sekundę debounce będzie czekał 25ms, to by znaczyło, że timer będzie liczył sekundę o czasie 1,025s
Nie bardzo widzę sens stosowania przerwania dopisz Debounce Portd.2 , 0 , Pr_Stop i masz to co chciałeś timer raczej wykorzystuje się do wykonywania procedury w jednakowych odstępach czasu np. licznik sekund itp. ewentualnie do wymuszenia testowania wejścia (wejść) częściej niż czas obiegu głównej pętli programu. Przerwanie może być wykonywane kilka...
delay() to jest o kant... Trzeba zrobić jakiś normalny debounce- wykorzystujący timer i przerwania od timera.
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
...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...
NP tu jest to świetnie zrobione: http://www.elektroda.pl/rtvforum/topic10... Albo tu kilka rozwiązań: http://hackaday.com/2010/11/09/debounce-...
Wkładam drut w +5v i obserwuje, teoretycznie powino nastapić dokładnie to co następuje bezpośrednio z przerwania a tu proszę za każdym razem problem. Tu debounce jest nie potrzebne, jedynie wprowadzi opóźnienie. Przecież debounce to nie jest nic innego jak zautomatyzowany wait
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...
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...
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...
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};...
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.
"bo jak kiedyś wystąpią wyższe obroty to ich nie uwzględni " Słusznie- debounce to paskuda. Ale od czegoś trzeba zacząć. Normalnie ma 25ms- można dać 1ms i chociaż sprawdzić. Kontaktron tak jak przycisk- ma drgania. Trzeba sprawdzić czy po 20ms ma ten sam stan- dla początkujących- debounce. A lepiej ale nie jako "pacaneum"- wygenerować przerwanie z...
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...
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, 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...
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...
Witam. Napisałem taki oto program, który generalnie działa, choć nie ma jeszcze obsługi alarmu dzwiękowego. Bardzo proszę o zerknięcie i stwierdzenie, czy jest napisany optymalnie. Dodano po 1 Teraz mam w miarę gotowy kod: [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 8000000 Rem $sim Rem minutnik do jajek Dim A As Word Dim Anoda As Byte Dim...
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...
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...
Poczytaj o znacznikach: Code Przed włączeniem przerwania wykasuj flagę tego przerwania. GIFR = 1<<INTF0;
Zasotosowałem taki układ, bo miało to pracowac tylko on/off, jednak naszło mnie, żeby układ wzbogacic o regulator prędkości obrotowej i sterowanie PWM i stąd nie chcąc zmieniac schematu zapytałem się jak można przyśpieszyc. Układ już działa jak powinien. Jakby kogoś interesowało - jest to układ do sterowania silnikiem elektrycznym rolety antywłamaniowej....
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ść....
Przełącznik mechaniczny w mikrokontrolerze? -to taki elektroniczny mezalians.Z uwagi na ważny temat napisze mój programik ' uwaga niedoskonały' $regfile = "m8def.dat" $crystal = 1000000 Config Pinb.1 = Output Config Pind.2 = Input Config Pind.1 = Input 'port do Int0 Set Portd.2 ' podciągam na stan wysoki Set Portd.1 Wy Alias Pind.1 ' zamiana nazwy ReturnWl...
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...
Chodzi o "dzwonienie" styków przełącznika, co może wyzwolić przerwanie wielokrotnie. Zrobić można na dwa(trzy) sposoby: 1.Zapoznać się z instrukcją debounce. 2.Zrobić opóźnienie programowe: if pinx.y=0 then waitms20 if pinx.y=0 then ........... 3.Rozwiązanie sprzętowe-tłumiące przebiegi elektryczne drgających styków. W tym przypadku od pinu INT0 do...
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...
Witam! Jeśli chodzi o powyższy problem, to w sumie zrezygnowałbym z komendy DEBOUNCE. Wykorzystuje ona dodatkową pętlę wewnętrzną i własny stos, co może prowadzić do różnych "powikłań". Osobiście korzystam z AVR-ów i WINAVR (C) ale czasem też biorę do ręki BASCOMA - i z komendą DEBOUNCE mam więcej problemów, niż jest z niej pożytku. Jednym słowem -...
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ę...
Tylko że koledze chodzi o coś zupełnie innego. a sądzisz , że taki problem można rozwiązać tylko za pomocą przerwania? wszystko zależy jak się skonstruuje taką pętlę. Niech więc autor się wypowie. Bo przy założeniu że w tejże pętli nie są używane jakieś polecenia Wait czy Waitms dla dłuższych czasów niż kilkanaście ms - to Debounce nadaje się jak najbardziej...
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...
No to się doucz i będziesz znał. "Super" porada, ale przerwania nie sa tu konieczne. Naucz się też używać tagów. faktycznie, użyj znaczników(tagów) SYNTAX, bo czytać sie kodu nie chce. - wywal delay - wykrywaj zmianę stanu pinu a nie reakcję na określony stan, dla Arduino jest stosowna biblioteka (Debounce) ale można zrobić i bez niej, trzeba też zlikwidować...
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...
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
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?
Zamierzam w swoim projekcie wykorzystać funkcję "config KBD" gdyż będę potrzebował użycia dużej liczby przycisków do obsługi at32. Proszę o podpowiedź czy praca takiej funkcji, a szczególnie "debounce" i "delay" w niej zawarte nie zatrzymają timerów pracujących cały czas w przerwaniu. Z góry dziękuję za pomoc.
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.
olo_3 -> to jest cały kod? ten który tu pokazałeś????? po pierwsze - gdzie masz pętlę główną po części inicjalizacyjnej programu ??? DO ... LOOP - chyba że ślepy jestem czy jak? (jeśli rzeczywiście jej nie masz to nie dziw się, że twój program wariuje bo po z tego co widać po inicjalizacji odrazu program leci do obsługi przrwania i się zapętla na śmierć)...
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...
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ć...
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ć?...
O Matko i Córko... Konstrukcja: [syntax=basic4gl] CONFIG PORTB = OUTPUT : SET PORTB CONFIG PORTD = OUTPUT : SET PORTD Do If PINB.0 = 0 Then: locate 4,1:lcd "1" Else locate 4,1:lcd " " Endif If PINB.1 = 0 Then: locate 4,2:lcd "2" Else locate 4,2:lcd " " Endif ... Loop [/syntax] Dodałbym jeszcze mechamizm kontroli przy pomocy zmiennej tymczasowej aby...
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)
A jednak dziś jeszcze przepisałem to INT0. Działa choć czasem są problemy z odczytem temperatury, ale to pewnie dlatego że za dużo powstawiałem disable/enable interrups. No i przestawiłem moją Atmegę na trochę szybszą:) W takim razie spróbuję jeszcze z Timerem. A jaką najmniejszą rozsądną jednostkę odmierzania czasu sobie przyjąć żeby było O.K.? 1 ms...
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...
To nie jest takie proste... Wez sobie wyjscie INT z tego PCFa, podłącz do inta w procku. Procek bedzie sobie odczytywal stany z wejsc PCFa, i ustawiał np. odpowiednie flagi wcisnietych przycisków...Reszte juz łatwo dopisać do programu, bo zamiast debounce itp itd piszesz sobie IFa ktory sprawdza flage. Sposób szybki i skuteczny. Poza tym zastosowanie...
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...
Bardzo proszę. Zmodyfikowałem program tak, by uzywał tablic. To jest mod pierwszego listingu: [syntax=basic4gl] Rem warstwowa obsługa LCD $regfile = "m32def.dat" $crystal = 1000000 Ddra = &B00001111 '4-7 = output Porta = &B11110000 'pull up Config Lcd = 16 * 2 Config Lcdmode = Port Config Lcdpin = Pin , Db7 = Portc.7 , Db6 = Portc.6 , Db5 = Portc.5...
$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 '-- Wejscia przycisków Config Portd.2 = Input Config Portd.3 = Input ' -- podciągnięcie Set Portd.2 Set Portd.3 ' -- porty sterowania segmentami LED Config Portd = Output Config Portc.5 = Output Config Portc.4 = Output Config Portc.3 = Output Config Portc.2 = Output ' -- tranzystory Config...
Dlatego napisałem Ci o kursie, bo to o co pytasz to podstawy, no nie wiem, pierwsza lekcja w każdym tutorialu/kursie o Arduino, a jak wejdziesz w przykłady wbudowane w Arduino to jest to w 01. Basic, np. DigitalReadSerial, potem w 02. Digital Button, Debounce. (at)krzysiek_krm może i to pewnie słuszna droga w końcowym rozwiązaniu, ale jak ktoś nie wie...
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...
Witam ponownie! Otóż zmodyfikowałem program i teraz wygląda tak... [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 '$baud = 4800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portb.0 Config Sda = Portb.2 Config Scl = Portb.3 Config Portb.4 = Input Const Ds1307w...
Witam Na wiele sposobów. Możesz w procedurze odczytu klawisza dać opóźnienie np 20ms i po tym czasie sprawdzić czy to samo, a można w przerwaniach sprawdzić. Wszystko sprowadza się do zwłoki czasowej po której powinien być taki sam stan. W prostym rozwiązaniu po zadziałaniu klawisza daj opóźnienie 20ms i nie sprawdzaj go wcale ewentualnie czekaj na...
...jeśli już jednak o tym mowa to nie żebym chciał męczyć cię o tą rozbudowaną funkcję przerwania, ale może chociaż tak w 2 słowach powiesz mi jak "to w locie" dekodujesz? tzn - przy okazji na jakim procku minimum warto się za to zabierać? M8? M16? M32? czy jeszcze większy? Bez przesady ;) Jak jest >=512 RAM-u , to wystarczy do smsowania. Co do ilości...
tak to mniej więcej robię. tyle tylko, ze przerwanie przerywa komunikację I2C i zjada sekundy , albo powstają jakieś błędy. jak dam odczyt I2C w obsłudze przerwania - to sam wiesz wszystko zaczyna migotać. nie zacząłem jeszcze wkładać do programu procedur do 1wire, ale tam też szykuje się problem z czasem konwersji - nie można dać waitms bo wyświetlacze...
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...
To jest mocno uproszczony kod funkcji F.C. dla AVR ośmiobitowych. W dodatku dla pull-up, bo pull-down nie mają: [syntax=c] #define MASKA 0x0F // uint8_t debounce(void) { static uint8_t last; uint8_t port; uint8_t wynik; port = PIND; port&=MASKA|port; wynik=port&(~last); last=port; return wynik; } [/syntax] Powinna być wywoływana w przerwaniu co jakieś...
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...
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...
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...
Zgadza się- int ma 16bit. Więc dotąd jest dobrze. Gdybyś natomiast używał takaich samych numerów pinów z różnych portów to trzeba by to przerabiać. Ja używam tej funkcji w takiej wersji: unsigned int debounce(void)// funkcja Freddiego Chopina { static unsigned int last; unsigned int port; unsigned int wynik; port = PINC&MASKA_ODCZYT; //odczyt...
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...
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...
Przykładowy warunek sprawdzenia wciśnięcia klawisza, odpowiednie piny jako wejśćie z włączionym podciągnięciem. Pętla na końcu blokuje program do momentu puszczenia - najprostsza blokada wielokrotnego wykonania więc uważać. Pod żadnym pozorem nie stosować tego w przerwaniu i generalnie myśleć. Ewentualnie zrobić jeszcze podwójny warunek z delayem żeby...
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...
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 '---------------------------------------...
Ustawienie dla 16MHz: Config Timer1 = Timer , Prescale = 256 Enable Interrupts Enable Timer1 On Timer1 Mierzymy Cursor Off Mierzymy: Load Timer1 , 62500 'żeby przerwanie było dokładnie co 1s Incr S Natomiast dla 4MHz będzie: Config Timer1 = Timer , Prescale = 64 Enable Interrupts Enable Timer1 On Timer1 Mierzymy Cursor Off Mierzymy: Load Timer1...
Witam, proszę o pomoc: buduje sterownik na zasadzie włącz/wyłącz, to akurat nie jest w tym momencie ważne :), ale przejdźmy do szczegółów - ma pobierać dane z 4 czujników DS18B20, sam odczyt działa poprawnie, problem zaczyna się w menu, do kroku "2.2" czasem "2.3" wszystko działa poprawnie, lecz z "2.2" i naciśnięciu 'dalej' (lub "2.3") przeskakuje...
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ź...
ta procedura Co1s: Timer1 = 3036 '------------ Incr Sek1 : Toggle Kropka 'cala procedura co1s do zapalania kropki oddzielającej godziny od minut 3036 daje 1sek '----------- Return Obsługuje tylko kropkę która ma odzielać godz od minuty i ona dobrze działa, a gdzie błąd w tym kodzie gdzie kolega napisał to nie wiem ? Czy Ty oczu nie masz :?:...
Niestety to nie pomogło, nie wiem czy to zrobiłem dobrze ale dodałem następujące elementy: [syntax=basic4gl] Config Timer0 = Timer , Prescale = 256 'konfiguracja timera0 On Timer0 Ontimerint 'wywołanie Ontimerint przy przerwaniu z timera Enable Interrupts Enable Timer0 Dim Count As Byte 'zmienne obsługi timera Timer0 = 6 'inicjalizacja timera Count...
Teraz trochę inna kwestia. Chcę zrobić zewnętrzne przerwanie, które reaguje na wciśnięcie przycisku i wtedy dopiero ma się uruchomić w nim generowanie tych 2kHz (działa tylko przy wciśniętym switchu, . Częstotliwość jest obecnie generowana non-stop, tak jak kolega wspomniał nie potrzebne są przerwania. Tylko jak teraz do tego napisać w/w przerwanie...
Mam wielką prośbę a mianowicie z dokończeniem poniższego softu w bascom. Jestem początkujący w Bascom i programowaniu. A więc do rzeczy, zbudowałem sobie wyłącznik oświetlenia na module bluetooth hc05 i kontrolerze mega8. Napisałem soft i nie mam żadnego pomysłu jak go skończyć. Najpierw omówię działanie sterownika i jego logikę: po włączeniu zasilania...
[syntax=vbnet] ...... Do Debounce S1 , 0 , Pr1 ,Sub Loop End ' koniec pętli Pr1: Waitms 100 Serwo(1) =150 Waitms 150 Serwo(2)=250 Waitms 200 Serwo(2)=50 Waitms 250 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Return [/syntax] Przy takim kodzie serwa działają jak bym chciał tylko procesor wykonuje...
Witam a wiec po koleji.Testowałem zmodyfikowaną wersje kolegi Gromelon (jeszcze nie na przerwaniach).i narazie nie zaobserwowałem żadnych błędów w działaniu(chodzi mi o to że raz układ reagował na przekaźnik z radia a raz nie)Wydaje mi sie że pomogłą funkcja Debounce usuwająca drgania styków w czasie załączenia.Dodana została również funkcja Watchdoga.Tutaj...
Co zmieniłem: Do startu przetwarzania ADC zamiast TIMER1 wykorzystuję TIMER0- bo ten 16bitowy na coś może się jeszcze przydać. Dostawiłem wstępnie flaga_przycisk co 16ms. Może zwiększę do 32ms. #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include "HD44780.h" #include <avr/sfr_defs.h>...
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...
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....
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:...
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...
ustaw sobie dwa porty pod które jest podpięty enkoder jako wejścia i przerwania zewnętrzne, wyzwalane opadającym i rosnącym zboczem. Oba przerwania muszą mieć jednakowy priorytet obsługi. Funkcja obsługująca przerwania będzie wyglądała tak: [syntax=c] #define read_encoder (ENCODER_GPIO_PORT->IDR &(EncT1|EncT2)) volatile signed int encoder_count;...
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?...
Z bólem serca- bo wait jest bee- podobnie debounce jest bee ale wklejam działający kod $regfile = "m8def.dat" $crystal = 1000000 Config Portb = &B11111111 Portb = &B11111111 Config Portd = &B1111100 Portd = &B11111111 Dim Temp_0 As Byte Dim Temp_1 As Byte Do If Pind.0 = 0 Then Waitms 20 If Pind.0 = 0 Then If Temp_0 = 1 Then Portb.0 = 0 Temp_0...
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...
Witam. Mam problem z zegarem na wyświetlaczach 7-segmentowych. Minuty po 09 wyświetla 16 zamiast 10, sekundy tak samo. Zawsze tak się dzieje, więc musi to być błąd w programie, ale ja już się poddałem, co może być nie tak. Config PortA = Output PortA = &HFF Config Portd = Output Portd = &Hff Config Portb = Output config portc.0 = output config...
debounce przerwanie debounce debounce przerwania debounce
pracuje silnik wyjęciu kluczyka peugeot instrukcja optimum gniazdka angielskie
naprawa sterownika salda naprawa sterownika salda
Strojenie dźwięku w Panasonic RX-CT820: Porady i funkcje Jak zapobiec zacinaniu się telefonu? Porady