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! 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...
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).
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 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...
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
delay() to jest o kant... Trzeba zrobić jakiś normalny debounce- wykorzystujący timer i przerwania od timera.
natychmiastowe przejście do funkcji bbb. czy starczy 5 msek ? Co do przerwania "Timera" nikt nie udzieli Ci odpowiedzi . Do przerwań potrzebna jest informacja jaki procesor. poz. dioda ps. Napisz co to ma robić może jest inne rozwiązanie bez przerwania.
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
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...
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...
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
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...
Czyli jakiś debounce programowy? Na ESP32 najlepiej z użyciem przerwań. Przykład: https://www.switchdoc.com/2018/04/esp32-...
...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...
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...
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ł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ąć.
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...
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...
Poczytaj o znacznikach: Code Przed włączeniem przerwania wykasuj flagę tego przerwania. GIFR = 1<<INTF0;
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...
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.
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....
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...
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...
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...
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...
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.
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,...
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...
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...
Jakiś bałagan podajesz. 1. Nie podałeś wersji z debounce- która chodziła przy wolnych obrotach. 2. W programie który wkleiłeś nie ma żadnego odniesienia do Licz: Czy to jest podprogram czy obługa przerwania? 3. Po co w tym Licz wyłączasz prerwanie? Jak to jest obsługa przerwania- to i tak inne przerwania są wyłączone.
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...
Warunek w if nie będzie spełniony bo raczej te kilka instrukcji w przerwaniu nie bedzie się wykonywać 20ms. Czas wykonywania tego ISR nie ma nic wspólnego z wartością _debounce_timer w momencie porównania.
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, 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...
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...
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...
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?
NP tu jest to świetnie zrobione: http://www.elektroda.pl/rtvforum/topic10... Albo tu kilka rozwiązań: http://hackaday.com/2010/11/09/debounce-...
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.
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ć...
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.
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...
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...
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...
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...
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...
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)
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...
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 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...
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ę...
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ć?...
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...
$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...
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.
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
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...
...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...
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)=...
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...
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...
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ść....
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...
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...
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ć...
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...
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...
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...
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ś...
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...
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...
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...
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 '---------------------------------------...
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...
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...
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...
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...
napisz program dla poprzeniego ukladu powodujący wyświetalnie się na konsoli cyfry odpowiadającemu liczbie kliknięć guzika, to znaczy kliknięcie raz spowoduje wyświetlenie się cyfry 1, ponownie wciśnięcie wyświetli cyfrę 2, itd. Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Płytka Arduino: Duemilanove. - Poprzedni...
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...
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...
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...
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 :?:...
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...
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...
Odgrzebuje, bo mam podobny problem ze swoim układem, jak koledzy: Schemat układu zamieszczam poniżej, układ zgodny z książką: "Programowanie mikrokontrolerów AVR w języku BASCOM". Program też zgodny z listingami z książki. http://img259.imageshack.us/img259/7086/... (Odnośnie schematu, jest dołączony zewnętrzny rezonator 8MHz -nie zaznaczone...
Witam. Borykam się z problemem odbioru sygnału w podczerwieni. na razie prosty program obsługi kodu RC5. Schemat układu zamieszczam poniżej, układ zgodny z książką: "Programowanie mikrokontrolerów AVR w języku BASCOM". Program też zgodny z listingami z książki. http://img259.imageshack.us/img259/7086/... (Odnośnie schematu, jest dołączony...
Już z tym też kombinowałem, ale nie wydaje mi się by było to "fachowe" rozwiązanie.. Kazde rozwiazanie z uzyciem 'Wait,' 'waitms' jest NIE-fachowe i bez sensu. Uzywasz calej mocy processora dla glupiej dyrektywy czekania. Malo tego, w tym czasie processor jest zajety wlasnie odliczniem tego czasu i nic wiecej nie moze robic, gdy tymczasem wbudowane...
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...
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?...
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...
Witam, zaczynam "zabawę" z uC i programowaniem. Na pierwszy strzał chciałem zrobić prosty (tak na początku mi się wydawało) sterownik. Planowane opcje to: zegarek, termometr i obsługa 2-6 wyjść 230V. Wszystko chciałem stworzyć na atmedze8 ewentualnie 16. Założenia: - LCD na którym będą informacje prawdopodobnie będzie 4x20 - czas + ewentualnie data...
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...
Witam już to ustwaiałem i dawałem 1ms i to nic nie daje bo ten program kreci sie w petli i za szybko sprawdza czy nastapiła zmiana kierunku liczenia i podczas tego testu sie myli. właśnie pisze to na INT ale coś mi nie idzie to rozpoznawanie kierunku. co do tamtego to używam Debounce że by liczac elementy zliczył tylko 1 element a nie 5 chyba ze jest...
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>...
Szanowny Panie Bo Mój timer1 jest juz zajety bo zlicza mi impulsy slimaka podajnika. Takie cusie robi się na przerwaniach zewnętrznych (INT0, INT1 dotyczy Megi8) 1. Mega 8 posiada trzy Timery, więc można wykorzystać 0, lub 2. 2. Trzaba wystrzegać się Debounce i Wait, Waitms 3. formatuje i pozycjonuje prawidlowo w zakresie -99,9C do 999,9C DS nigdy nie...
debounce debounce debounce przerwa przerwanie debounce
pilot zmiennym kodem fluke opinie piekarnik gazowy amica
tronje zasilacz polaczenie paneli
Migający czerwony kluczyk w pralce Samsung Eco Bubble po zakończeniu prania Wpływ niskiego poziomu wody w karterze 1HC 102 na zatrzymanie silnika