1. Można wykorzystać przerwanie sprzętowe. 2. Umieścić pętlę w pętli głównej, która sprawdza tylko jeden klawisz w zależności od flagi, którą ustawisz on/off , jeśli on pętla wykonuje się jeden raz a tym samym wykonuje się pętla główna, jeśli off pętla wykonuje się dopóki nie naciśniesz klawisza i ustawisz flagę na on
Witam Jak wielu spotkałem się z problemem problemem kłopotliwej obsługi pilota z RC5. Po poszperaniu w necie wpadłem na http://www.elektroda.pl/rtvforum/topic20... ten temat. Jak się okazało wszystko na tym programie pracowało, ale nie zawsze. Kłopotem było napisanie programu "pod pilota". Oczywiście pochwała dla Sabotaz'a który problem "ruszył"...
łatwiej się już chyba nie da. Sorki, ale ja bym raczej powiedział, że: "JUŻ GORZEJ SIĘ NIE DA :(" Co to za rozwiązanie gdzie w środku siedzi jeszcze obrzydliwy Wait !!! brrr ale żeby nie być gołosłownym, który tylko krytykuje.... Ok, panowie - widzę, że wasze zmagania spełzają na niczym, pokażę wam więc jak się powinno podchodzić do programowania....
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...
Symulator Lasera http://images49.fotosik.pl/261/c05af04e8... Fot.0 Jedno ze zdjęć prototypu symulatora lasera Jest to opis kilku symulatorów zaprojektowanych i działających przeze mnie . Zarówno tych najprostszych opartych na popularnym tajmerze 555 , jak również do konstrukcji profesjonalnych opartych na mikrokontrolerach jednoukładowych...
Żeby zrobić za pomocą Timera - to nie możesz używać trybu PowerDown tylko Sleep - żeby właśnie Timery mogły działać to po pierwsze. W taki trybie jednak będziesz miał nieco większy pobór prądu niż w pełnym PowerDown. Więc wszystko zależy na ile ma wystarczać bateria o ile jest to coś zasilane z baterii. Bez PowerDown'a na pewno będzie to sporo krótszy...
W chwili gdy obsługuje 1-Wire, Bascom ZAWSZE nawet na czas generowania resetu, co trawa ok 500us, później presence, co daje razem ok 800us, zawiesza przerwania. To samo w czasie transmisji danych, transmisja bajtu to ponad 500us zawieszone przerwania. W tym czasie nie wykona się przerwanie od timera, od i cała tajemnica. Ale zabobony. Każdy może otworzyć...
jesli masz przerwania i przy przytrzymaniu przycicku program cały czas zlicza to masz prawdopodobnie przerwanie ustawione "poziomem" zmien odpowiedni bit w rejestrach specjalnych, tak aby przerwanie było ustawine zboczem. pozatym, przydał by sie jakis obwodzik RC na tym właczniku, ewentualnie "szmit", ale najlepiej zrobić to programowo
Port a nie ma przerwań, ale jeśli to ma być obsługo przycisku można wykorzystać przerwanie timera co np 50ms. przy 2 wykryciu stanu niskiego wykonujesz odpowiednie działanie. przy 2 bo dzięki temu od razu wyeliminujesz drgania styków.
Wszystko jest ok, domyślam się przyczyny niedziałania: - przerwanie jest jako low level - dopóki wciskasz przycisk to przerwanie ciągle się wykonuje, po jego puszczeniu główny program może się nie wykonać Zrób tak: - w twoim ostatnim programie w przerwaniu wpisz: Disable Int0 - pozornie bez sensu ale zauważ że po wyjściu z powerdown będzie się wykonywało...
To w takim razie może uruchamiać mój pomysł przerwaniem? Wtedy te przerwania timera, co kilka ms, byłyby wykonywane tylko podczas naciśnięcia przycisku? 1. Przerwanie zewnętrzne uruchamia timera (co kilka ms), samo blokuje siebie. 2. W przerwaniu timera robimy to co wyżej, dodatkowo jeśli wykryjemy puszczenie przycisku (tylko dopiero jak już mamy stan...
Cześć przyjaciele, używam tłumacza google. Przepraszam za zły język polski. Mam nadzieję że rozumiesz. Widziałem, że wiele osób ma tu wiedzę na temat Wiśniowskiego Tora. W temacie ktoś napisał ten film : https://www.youtube.com/shorts/iHzjvVTQe... To brzęczenie zdarza mi się również, gdy naciskam przycisk. Normalnie przycisk ma robić dokładnie to samo,...
Mam taką dziwną sytuację, mianowicie jak przytrzymam chwilkę lewy przycisk to zostaje tak jakby cały czas trzymany chociaż go puszczam. Utrudnia mi to strasznie pracę, gdyż często coś zaznaczam, zakreślam itd. Napewno nie jest to problem mszy bo każda jaką podłączałem zachowuje się tak samo. Jaki program lub jaka funkcja to powoduje i jak się tego pozbyć?
Witam Do tego celu można dojść za pomocą timra i przerwań. Po prostu w momencie wciśniecia przycisku , puszczasz w ruch timer. Jeśli zliczy powiedzmy sekunde to zapala Ci jedną diode, jeśli doliczy do 5 sekund , to zapalasz inną. Oczywiście musi być to tak zrobione żeby procek nie czakał az naciśniesz przycisk. Po prostu po wykryciu zmiany przycisku...
Procesor nie wstaje po uśpieniu przy Twoim kodzie. Z obsługą uśpienia pomagałeś mi Ty, i wygląda tak: [syntax=vbnet]Pw_off: Do If Switch = 0 Then 'jesli wcisnieto przycisk If Lock = 0 Then 'a zmienna już wyzerowana Lock = 500 'wylaczy po 500ms od puszczenia przycisku Turn_off = 1 'ustaw flage by po puszczeniu przycisku zadziałało End If Else If Lock...
Witam! Mam taki problem, po złożeniu układu wszystko działa poprawnie ale w momencie gdy podłącze przyciski zaczynają "same się przyciskać". Korzystam i z Debuence i z if p1 = 0 then..... Próbowałem zmieniać waitms od 25 do 500 dalej nic. Wygląda to tak jak by przewody "zbierały" coś. Blokujecie to jakoś? Bo już różne rzeczy kombinowałem ale jakoś nic....
Mam pytanie jak w czyms takim ( --> kod ponizej) otrzymac ponowna mozliwsoc urzycia przycisku sw1 ? Gdyz z tego co widze kompilator nie pozwala mi w napisanych przeze mnie petlach urzyc go ponownie i jak np w 2-giej petli daje sw2 to juz wszytko dziala poprawnie...A wiec jak mam go ze tak sie wyraze zresetowac ? - zeby znowu by aktywny (sw1) ? Do If...
Witam, mam problem, kupiłem przełącznik, niby wszystko git, 10 zł prawie na niego jak taki mały, mniejszy nic palec, podłączyłem go dzisiaj i okazało się że układ działa jak przytrzymuje ten przycisk. Jak nazywa się przycisk, którego przycisne to będzie wcisniety i układ działa, a jak odcisne to układ nie działa?
dostalem amplituner elizabeth i przyciski nie trzymaja sie wcisniete jesli ktorys wcisne:/ nie zaskakuja:/ ma ktos pomysl jak to naprawic?
Dzięki zbig_wwl. Pokombinuje z tym stosem. A co do PWM to faktycznie nie używam go bo i po co:) Pilot ma następujące zadanie: Po uruchomieniu włączone zostaje przerwanie int0. Po wciśnięciu przycisku zewnętrznego (dodane obwody eliminujące drgania styków) program wyłącza przerwanie int0, generuje zmienne na podstawie zawartości timera0. Następnie odblokowywane...
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...
xury dla początkującego wait czy waitms to najprostsze rozwiązanie choć już naczytałem się, że nie najlepsze i by tego unikać właśnie poprzez timery w jednym z tematów mirekk36 to nawet zademonstrował na atmega8 oraz ganił za używanie wait oraz waitms Nie poradziłem sobie w przełożeniu kodu z atmegi na attine :( Sprawdzone i działa rewelacyjnie WIELKIE...
Przepraszam, z tym pull-down źle zinterpretowałem. Jeśli chodzi o zewnętrzny filtr to chyba najłatwiej by było wziąć oscyloskop i zobaczyć ile czasu trwają drgania i na tej podstawie dobrać stałą czasową filtra. Co do programowego filtrowania to mogło by się sprawdzić podpięcie przycisku pod przerwanie zewnętrzne wyzwalane zboczem o ile się nie mylę...
Mam mały problem z programem napisanym w bascomie , mianowicie założenia są takie jest to odbiornik pilota IR na atmega 8 chodzi mi o sam algorytm dekodowania sygnału , który ma dekodować wszystkie rodzaje pilotów obojętnie czy są w standardzie RC5 czy SONY na wyświetlaczu LCD mam mieć wyświetlane umownie wartość jedynek i zer i problem polega na tym...
Witam, Zacząłem pisać program na atmege8 w bascomie, do sterowania preampem tda8425 przez enkoder, wyświetlając to wszystko na LCD póki co 8x2. Program jest w fazie powstawania, ale mam kilka pytań co sądzicie o moich rozwiązaniach i czy tak w ogóle może być? Enkoder obsługuję przez INT0 i INT1, zbocze opadające. Jeśli wejdzie w procedurę przerwania...
odbiornik cos odbiera poniewaz po wlaczeniu ukladu na lcd jest 0,0 dopiero po wcisnieciu przycisku na pilocie zmienia sie na 255,127 nic nie odbiera. bo na starcie masz wyszyszczoną pamięc ram i wszystkie komurki mają 0. gdy nadusisz cos na pilocie to to dostajesz przerwanie i pilot prubuje coś odebrac. dostajesz 255 255 ale robisz and 127 i dlatego...
Problem w pewien sposob rozwiazany, moze komus sie przyda Dodano linie: $initmicro ........ _init_micro: Config Watchdog = 1024 Start Watchdog Return W tej postaci watchdog poprawnie resetuje uP: $crystal = 7372800 $regfile = "m168def.dat" $initmicro Config Aci = Off Config Lcd = 40 * 2 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3...
1) PinB.5 poprzez rezystor 10K podłączasz do VCC. Do PinB.5 podłączasz też kondensator 100nF do GND. 2) PortB.0 INT0 podłącz przez opornik 200 omów do przycisku (druga nóżka przycisku do GND) to będzie twój przycisk do zmiany efektów 3) Pozostają ci tylko 4 wolne nóżki dla ledów. Możesz dodać ekspander I2C->8 bit PCF8574 i sterować 8 ledami lub zostawić...
fox525 przepraszam bardzo, ale zle przeczytalem. Bylem swiecie przekonany ze nacisniecie ma rozpoczac zliczanie od nowa. Ups. Wielka pmylka. W takim razie w miejscu przerwania powinno byc tylko: P3_2_int: Incr Ilosc_sek Return Co do Load timer to mi sie wydaje ze ma byc 250. Czestotliwosc 12000000Hz dzielona jest sprzetowo na 12 co daje wynik 1000000Hz....
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...
Koledzy, poniżej kod. Zauważyłem poważny problem. Timer1 mi się sypie zanim dojdzie do 0. Tzn, nagle, zanim upłynie zadany czas, uC zwiesi się i przestanie wykonywać pętlę Do ... Loop until. Nie wejdzie w stan Powerdown i nadal będę mógł wywołać przerwanie Int0 - czyli zawiesza się w pętli Do...loop. Zdaje się, że nieszczęsne Wait 1 wewnątrz tej pętli...
Witam Mam program budzika, który jako dodatkową atrakcję miał mieć możliwość mówienie czasu na żądanie i odtwarzanie oprócz buzzera utworu jako alarmu. Atmega steruje przez jedno SPI programowe układem MAX7219, a przez konwerter poziomów i drugie SPI programowe odtwarzaczem WTV020SD. O ile sam WVT020SD + PCF8563 ( wyjście CLK do INT1 ) działają dobrze,...
na wejścia podłączony jest enkoder(pierwszy zrobiłem z myszki komputerowej) w zależności na którym wejsciu pojawi się pierwszy impuls to przerwanie jest obsługiwane jako pierwsze . może cos z tego skorzystasz. obsługa przerwań jest na dole Dodawanie: i Odejmowanie:. Ale Panowie litości w krytyce to jest mój pierwszy program w Bascomie. Tak się złożyło...
Mam sobie niżej pokazany programik w bascomie ale niestety nie wiem jak dopisać obsługę pilota :| Programik jest na 89c4051 ;) $large Config Lcd = 16 * 2 Config Timer1 = Timer , Gate = Internal , Mode = 1 Config Sda = P3.1 Config Scl = P3.0 Dim Licz As Byte Dim I As Byte Dim Nast(5) As Byte Dim St As String * 7 Dim W_reg As Integer Dim Wielk1...
Zaprogramowalem procek. Oto spostrzezenia. Zegar odlicza poprawnie czas, ustawienia godziny dzialaja poprawnie. Wystapil natomiast problem z miganiem kropki oddzielajacej jednostki godizn od dziesiatek minut. Powinna ona zapalac sie na sekunde, a potem gasnac na sekunde. Jednak okazuje sie, ze w trakcie sekundy, w ktorej powinna sie swiecic, ona migocze....
Witam podaję kod, który działa poprawnie, oczywiście należy go dopasować do swoich potrzeb. [syntax=vbnet] 'Sterownik swiatel V2.2 '10-06-2015 'Roman Biadała $regfile = "m128def.dat" $crystal = 11059200 '$lib "fp_trig.lbx" '******** Ustawienia portów ****************************************... '******** Sterowanie 74HC541 - przekaźniki *************************************...
Ten drugi pomysł jest moim zdaniem lepszy. Do tego możesz użyć końcówki przerwania INT - ma konfigurację zbocza, którym jest wyzwalane przerwanie.
1. Nie wykluczyles drgan na przycisku s1 2. Zebys wykonac to co chcesz zrobic bedzie ci potrzebne przerwanie. 3. Dziwie sie, ze sprawnie dziala ci ten kod (chyba, ze specjalnie robisz sprawdzanie przycisku w petli, zeby nie bylo przerwania i wykonal kod do konca, a pozniej sprawdzil czy przycisk jest wcisniety. W tym przypadku przepraszam)
Gdy już usuniesz wewnętrzną pętlę do..loop to zwróć uwagę, że stan przycisku będzie sprawdzany raz na 60s. Możesz zrobić sprawdzanie np. tak (co 1 sek.): dim x as byte ... do 'sprawdź przyciski if x=60 then x=0 toggle ... end if wait1 incr x loop end Albo wykorzystać timer lub przerwanie.
[syntax=vbnet]Automatycznie2: Locate 1 , 1 Lcd " Tryb Automat. " Locate 2 , 1 Lcd "Aktualnie: PR:2" Prog1 = 0 Prog2 = 1 Prog3 = 0 Prog4 = 0 Prog5 = 0 If Cofn = 0 Then Goto Wybor Else Dim Odlicz As Byte Odlicz = 120 Do Wait 1 Decr Odlicz If Cofn = 0 Then Goto Wybor Loop Until Odlicz = 0 Goto Automatycznie3 End If[/syntax] Możesz nawet zwiększyć czułość...
Do atmegi8mki Ci może nie wejść obsługa FATu. Poszukaj na elektrodzie FAT SD Atmega i coś znajdziesz gotowego. - Napewno nie Bascom :D Potem jakieś przerwanie i mierzyć czas i robić systematyczne opróżnianie buffora na drabinke R2R albo DAC.
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Co do bascomowego symulatora to działa on u mnie bardzo wolno, a Hardware simulator wyświetla jakieś bzdury Symulację można przyśpieszyć dodając $sim , ale działa to przez usunięcie opóźnień, więc może zmienić zachowanie. W każdym razie polecam przyjrzeć się co się dzieje w pamięci RAM. [url=https://avrhelp.mcselec.com/index.h...
Musisz ustawiać znacznik, albo lepiej- odblokować przerwanie :-)
Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
Witam sprawdź ten kod co prawda są inne numery portów i inny procek ale jak zmienisz powinno działać. Problem jest jeden w momencie jak naciskasz przycisk i zmieniasz końcówkę na WYJŚCIE to stan tego pinu Musi być (0) Niski , żeby nie zrobić zwarcia. '$sim $regfile = "attiny2313.dat" $crystal = 11059200 $baud = 9600 enable interrupts 'włącz...
A może sprzętowe rozwiązanie ? Zamiast przycisków NO zastosować NC ?
$regfile = "attiny2313.dat" $crystal = 4000000 Config Pind.2 = Input Config Portd.0 = Output Config Portd.1 = Output Config Portd.3 = Output Set Portd.2 Przycisk Alias Pind.2 Dim Sekwencja As Byte Declare Sub Pierwsza Declare Sub Druga Declare Sub Trzecia Enable Interrupts Enable Int0 On Int0 Przycisk_przerwanie Do Loop End Przycisk_przerwanie:...
Do kolegi arktik1 dlaczego kolega namawia do sprawdzania w petli danego pinu skoro luki55 ma w programie sprawdzac tylko ten przycisk to lepiej go dac w przerwanie zewnetrzne a do glownego do__loop wstawic nop. Jesli juz taki "duzy" procesor stosowac to wykorzystac go przynajmniej tyle ile sie da i ile ulatwi zycie. P.s. Attiny13 tez bylby za duzy :D
Radziłbym Ci zobic tak: Cały PWM zrób na przerwaniu od jakiegoś Timera; nie uzywaj zmiennych typu single, jeżeli częstotliwośc przerwań bedzie odpowiednio szybka wystarczy zmienna typu byte lub word. Obsługe LCD czy przycisków i innych obliczeń zostaw w pętli główne Przykładowy PWM dla portb.3: Gdzie a to jakas amienna a do b podajesz wartosc PWM (0-255)......
Sprawdziłem ten kod przed chwilą i jeśli na PD6 jest przycisk.. to jego kolejne naciskanie włącza lub wyłacza naprzemiennie diode LED na pinie PORTD.7 100% tested [syntax=vbnet]$regfile = "m644pdef.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 Pcmsk3 = &B01000000 Enable Pcint3 : On Pcint3 Pcint3_isr Config Portd.6 = Input : Set...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Prawie wszystko jest nie tak - oczekiwanie w przerwaniu, brak eliminacji drgań. To nie tak się robi - potrzebujesz przerwania timera zgłaszanego ze stałą częstotliwością, np. 100 Hz, i w nim robisz wszystko - sprawdzasz stan przycisku i odmierzasz czasy impulsów.
elektryk: chyba nie masz "dejavu", no chyba ze ja tez mam :) polecam uzywac przycisku "szukaj"
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....
Możesz sobie podłączyć przycisk pod zewnętrzne przerwanie i w programie przerwania na początku zrobić Disable INT0 , wtedy drgania stuku będą chyba wyeliminowane.
przerwanie bascom przycisku przerwanie przycisku bascom przycisku
ricoh reset bębna wymiana grzałki połączenie silnik skrzynia
Schemat instalacji elektrycznej Iveco Daily II Mercedes A Klasa W168 CDI 170 2001 automat – lokalizacja silnika krokowego, klapa gasząca, HVAC