Hmmm, szczerze mówiąc nie bardzo mi się chce analizować program bo troszkę go zamieszałeś i właściwie to już nie bardzo wiem jakie zrobiłeś założenia działania tego progsa. W każdym razie widzę tu badanie krótki/długi przycisk i pomieszanie bezpośredniego czytania pinu z Debounce... jak dla mnie trochę to demotywujące. Rzuć jeszcze raz okiem na moje...
Jeśli wyeliminujesz drgania przycisku, to najprościej to zrealizować podając wyjście przycisku na wejście zegarowe jednego timera (bedzie on zliczał ilość wciśnięć), a drugi timer wykorzystać do odmierzania czasów 1s - dokładnie co 1 s należy kasować licznik pierwszego timera. Ot i wszystko.
No właśnie podejrzewałem , to że użyjesz Wait, który tak jakby "zawiesza" procesor na 25 sekund. Najlepiej by było użycie timera do ustalania czasu, ale wiem, że dla początkującego to za trudne. Podpowiem więc inne rozwiązanie: Daj w pętli głównej wait1. Następnie zwiększaj zmienną i napisz warunek kiedy osiągnie ona 25 (if then endif) oraz kolejny...
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...
Problem powoduje używanie waitms. Podczas wykonywania waitms procesor pracuje tak jakby w pętli do..loop i nie reaguje na nic. W zasadzie nie powinna być używana. Rodzi więcej problemow, a wcale nic nie ułatwia. Zastosuj timer do sterowania diodą zamiast waitms.
No i mam problem...zegar ładnie chodził w pająku ale podczas ustawiania czasu zwarłem przez przypadek reset do jakiś...9V a P0.2 do masy...i od tego czasu układ nie startuje...zegar się nie uruchamia, podczas próby odczytu sygnatury jest "Device not known (00,00,00)", nie reaguje na reset... Czy ubiłem procka...? Jest to AT89S52-24PU. Sprawdzone - spalony...
a nie lepie użyć do tego celu timera?
Podłącz przycisk do nóżki INT, skonfiguruj jako wejście z podciągnięciem, ustaw int jako low level, procesor ustaw w powerdown. W przerwaniu tylko sprawdzaj czy przycisk wciśnięty dłużej niż 3s czy krócej (wtedy znów powerdown). I nie trzeba tu bitwaitów. Nawet timera do sprawdzenia 3s (robisz do-loop while i w tej pętli co np 100ms inkrementujesz jakąś...
oczywiście po to są timery
Jakoś nie widzę żebyś tu korzystał z przerwania od Timera... Bo nie musisz ;p mogłbyś pokazać jakiś przykład obsługi przycisku w przerwaniu timera ? Nawet jakiś URL do innego projektu. Więc chyba oczywistym jest że ten fragment kodu należy umieścić w przerwaniu od Timera.
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...
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
Jak już pisałem, dawno nic nie robiłem w bascomie, ale poniżej daję ogólny zarys opóźnienia dla przycisku przy użyciu licznika Config Timer0 = Timer , Prescale = 1024 Enable Interrupts On Timer0 , Czas Dim Flaga As Bit Main: Do If Pinx.x = 0 and Flaga = 0 Then Load Timer0 , 25 '0,0256s. dla 1MHz Enable Timer0 End If If Flaga = 1 Then Reset Flaga...
Zacznij od przerwania timera - w nim sprawdzaj stan przycisku, odliczaj czas, włączaj i wyłączaj odbiornik.
Hmm. Nie wiem jak. Bascoma uczę się od dopiero 2 dni. Może kolega podać jakiś przykład? 1. Do rozpoznania naciśniętego przycisku zastosuj "DEBOUNCE" 2. Do pomiaru czasu w multiplexing zastosuj dowolnyTimer (może byc timer1, skoro już zacząłes go używac). Dla ławości rachunków zastosuj podstawowy czas pomiaru 4 mSec. Co 4 mS zrobisz multiplexing cyfr...
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ę...
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.
Ż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...
tak, teraz te 2 przypisania odnoszą się do Timera 1 i wyprowadzeń oc1a i oc1b, więc poprawnie zakładając, że konfiguracja uwzględnia tryb 10-bit, czyli: Config Timer1 = Pwm , Pwm = 10, Compare A Pwm = Clear Up, Compare B Pwm = Clear Up, Prescale = 1
Więc funkcja debounce i timera do odmierzania czasu wykorzystaj.
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.
(A). Czy w Compare0a = 186 mogę wstawić liczbę w zakresie 0-255? (B). by uzyskać interwał =~100ms to 9 600 000Hz/ 1024 /37,5 (połówek pewnie nie można używać wiec zaokrąglę do 38 to będzie 247Hz (C). natomiast dla interwału 50ms to 9 600 000Hz/ 1024 /75 to będzie 125Hz czy dobrze to rozumiem? Nie dobrze , .. (at)A. -formalne/teoretycznie możesz w Compare0a...
Zastawia mnie po co ciągle robisz warunek w warunku jak np. tu If Pinb.4 = 0 Then Waitms 1 Incr Setki If Setki = 10 Then Setki = 0 Incr Tys If Tys = 7 Then Tys = 0 End If End If End If Jak już mówiłem wcześniej, jeżeli zaprzęgnąłeś timer to wykorzystaj go do odliczania sekundy wtedy pętla główna zostaje do twojej dyspozycji i bez problemu tam umieścisz...
A gdybym tak zrobił te piknięcia i przerwy między nimi za pomocą tych zwykłych waitmsów, tak aby było mega prosto a stan przycisków odczytywał po prostu w przerwaniu od timer-a czy dało by radę takie rozwiązanie?
Zacznij od timera - przerwanie z częstotliwścią np. 100 Hz, w nim testowanie przycisków i sterowanie diodami.
ok, tylko najpierw uporam się z przyciskami i nastawami :P Dodano po 28 $regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output 'podłaczony wyświetlacz 'Config Pinb.0 = Output ' anoda 1 źle! nazwa pin służy do odczytu wartości 'Config Pinb.1 = Output 'anoda 2 źle! aby ustawić należy się posłużyć nazwą Portb.x 'Config Pinb.2 = Input...
Program będzie źle działał. Gdy przycisk będzie przyciśnięty dłużej niż 200 ms. Taki scenariusz: 1. Włączamy zasilanie. 2. Przyciskamy przycisk i trzymamy go. 3. Wyświetli się SUPER 4. A za około 200 ms EXTRA. 5. I trzymając dalej przycisk, będzie nadpisywany tekst EXTRA. 6. Po puszczeniu przycisku program nadal będzie w podprogramie "Dalej"
Wielkie dzięki ;) Rezystor całkowicie rozwiązał problem. Moze i rozwiazal jeden z problemow i to nie calkowicie. Popatrz na swoj kod: Licz: Incr Przerw0 If Przerw0 = 3125 Then Incr Setne Czy na pewno beda to setne sekundy? Druga sprawa to jest bledem umieszczenie startu STOPERA w "Do ... loop, uzaleznione od stanu pinu. Od momentu nacisniecia przycisku...
' Trzy przyciski kolejno .... (TSA ;) ' wersja bez przerwań i Timera czas_a as integer ' zmienna czasowa A czas_b as integer czas_c as integer we_a alias pinx.1 ' wejście A we_b alias pinx.2 we_c alias pinx.3 wy_a alias Py.1 ' wyjście A wy_b alias Py.2 wy_c alias Py.3 stan_a as bit ' stan układu monostabilnego A: 0 - czeka, 1- liczy stan_b...
1) Portc.1 to jest wejście czy wyjście? Zdecyduj się w programie. 2) Gdzie w programie jest drugi pin wejściowy? 3) To co próbujesz zrobić z timerem nigdy nie zadziała prawidłowo. Nigdy IFem nie trafisz na odpowiednią wartośc timera
ł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....
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)......
Deklarujesz zmienną do liczenia czasu po wciśnięciu przycisku. Gdy puścisz przycisk, określona wartość wykonuje GOSUB do wykonania zadania(LCD czy sterowanie portami) i zeruje zmienną. Kolejne naciśnięcie przycisku zaczyna liczenie od początku i czeka na puszczenie przycisku. Możesz też wykorzystać TIMER do liczenia czasu.
Tlumaczylem, ze restart bedzie tylko raz mozliwy, w petli programu. Nie napisales jasno, ze ma byc w kazdej chwili. Moze jutro ci wlepie kawalek kodu. ________________________________________... CONFIG INTx = LOW LEVEL On Intx Przerwanie Enable Interrupts do loop:end Przerwanie: disable intx '.... tu reset '.... enable intx Return...
Spróbuj: $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 24 Config Portd = Output Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output Config Pinb.3 = Output ' ustawiam porty do saa1057 Dat Alias Portd.3 'SPRAWDŹ CZY DOBRZE ZDEFINIOWAŁEM Ena Alias Portd.2 Clk Alias Portd.1 'przyciski Ddrc =...
obsługa przycisku: If s1 = 0 Then Waitms 50 Incr A Bitwait s1 , Set End If Poza tym należy uczyć case i jakiegoś timera- ze względu na dużą ilość Wait-ów
Jeśli chcesz to zrobić, tak jak mówisz, to musisz czas odliczać za pomocą Timera, ponieważ "Wait" blokuje Ci procesor.
Zacznij (jak w 99% projektów) od przerwania timera. W nim sprawdzaj stan przycisków i wykonuj prawie wszystkie pozostałe czynności.
Użyj przerwania timera do migania diodą, a najlepiej do wszystkiego (czyli również do sprawdzania stanu przycisków).
Masz błąd w samej koncepcji. Przyciski obsługuj w przerwaniu timera, a LCD w pętli głównej. Nie możesz czekać na LCD w przerwaniu, a testowanie przycisków bez bazy czasu to nieporozumienie.
Po pierwsze pozbądź się waitów, po drugie przerwania. Podam hasła do opracowania: Timery - odmierzanie czasu, przerwania, timing zdarzeń Przyciski - podciąganie, odczyt z rejestru PINn
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...
Mam mały problem - nie potrafię przenieśc kodu z bascoma do avr c (eclipse). Tzn, wiem ze nie przeniosą go 1:1 chodzi mi raczej o ogólne zasady, szkielet: chodzi o zapis do pamięci eeprom stanu licznika - licznik sie zmienia przy pomocy przycisków góra/dół - przy wyłaczeniu zasilania oczywiście jego zawartośc jest kasowana. Oczywiście zapis przy każdej...
Czyli nic nie zrozumiałeś z linkowanego programu. A szkoda... Zasada działania (podobnie jak dla wielu innych programów), to wykonywanie krytycznych sekcji w przerwaniach. Pętla główna może być zupełnie pusta. W programie głównym: 1. Zdefiniuj sobie 8 zmiennych (Parametr_x), które będą odpowiadały wartościom włączenia każdego z kanałów. Np. 100,47,198......
Witam zastosowanie timera w konfiguracji licznika w takim wypadku się nie sprawdzi. Naciśnięcie i puszczenie niesie za sobą efekt uboczny czyli drgania styków. Przez to twój licznik przy jednym naciśnięciu przycisku zalicza kilka impulsów. Taka konfiguracja timera jest przystosowana do stabilnych (czyt. nie drgających sygnałów) . Zamiast zaprzęgać do...
No to extra. Widać już, że można zatrzymać Timer i go uruchomić. Teraz sprawdź warunek if. Wyrzuć kod w waitami jednosekundowymi i wróć do kodu z If. Tak jak pisałem poprzednio prawdopodobnie nie jest rozpoznawany w instrukcji If warunek ..And TCCR1B=&B00000000. Potrzebna jest zmienna w tym miejscu. Ale po kolei. najpierw sprawdź sam przycisk czy działa....
Próbuję właśnie na timerze i fladze, ale nie działa tak jak chciałem. Powinno być tak, że po naciśnięciu dowolngo przycisku rusza timer i ustawia flagę B na 1. Jeżeli w czasie odliczania nacisnę drugi przycisk, to następuje start. I tak jest. Problem w tym, że gdy trzymam wciśnięty jeden przycisk i poczekam na skończenie odliczania ( B ustawia się na...
Na procu jest uruchomiony miernik częstotliwości (stacjonarny). Wykorzystane są dwa 16bitowe timery, uruchomiona jest komunikacja po rs232, zegar czasu na PCF8583 z podtrzymywaniem bateryjnym. Nie bardzo wiem jak to wszystko przełożyć na BASCOM AVR. Na początek spróbuj uruchomić przerwania oraz timer0 w trybie normalnego licznika - tak aby liczył z...
Zamieściłem praktycznie cały program, wycięte jest menu ale ono nic nie zmienia. TIMER2 jest wykomentowany żeby uruchomić program na płytce. Co do instrukcji GOTO niestety nie umiem inaczej zapętlić danego podprogramu w celu oczekiwania np na naciśnięcie przycisku. Marek
po pierwsze dodaj podciąganie do linii przycisków po drugie poczytaj nieco o timerach to wyeliminujesz wait'y i program będzie działał jak chcesz ;-)
Mówisz masz na timerze. $regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 8 $framesize = 16 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Enable Timer1 Start Timer1 On Timer1 Odmierz_czas Const T = 6942 Config Portb.1 = Output : Portb.1 = 1 : Led Alias Portb.1 Config Portb.2 = Input : Portb.2 = 1 :...
Znajomy kod :) Ad.1 Zrób po prostu podprogram, do którego się wskoczy po wciśnięciu przycisku gdzie wszystkie porty ustawiane są przez SET a gaszone przez RESET. To czy ma zgasić czy zapalić ustal w dodatkowej zmiennej bitowej "togglowanej" wspomnianym przyciskiem. Ad.2 Oczywiście - timer programowy... Ad.3 A czy przypadkiem w oryginalnym programie...
Kolego, bez timera się nie obędzie. Musisz nauczyć się ich używać zamiast poleceń typu Wait.
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...
1. jaki język programowania? 2. ja bym to zrobił tak: a) Timer ustawiasz, żeby łatwo zliczał impulsy do odmierzenia czasu 2s. b) pierwsze naciśnięcie przycisku (po eliminacji drgań styków) wubudza timer c) każde kolejne naciśnięcie przycisku przed upływem 2s zwiększa zmienną, jeśli dojdzie do 2 to wtedy ją zerujesz, zatrzymujesz timer i włączasz tą...
jak włączam płytkę to kombinacje od razu się uruchamiają Na to pomoże taka zmiana: Dim Flaga As Byte Flaga=0 Do If PinA.0=0 Then Flaga=1 If PinA.1=0 Then Flaga=2 If Flaga=1 Then Gosub Sciezka If Flaga=2 Then Gosub Odliczanka Loop Próbowałem return ale to nie pomaga. Returny są konieczne, nie zauważyłem poprzednio że ich nie ma. układ nie reaguje wtedy...
wejście jest sterowane minusem. Po napisaniu coś takiego, układ działa ale po za tym że nie czeka 1 s i nie przechodzi do Pwm1b = 100. Z pewnością przechodzi do Pwm1a = 100, (dlaczego Pwm1b ?) tylko ty mu nie dajesz szansy (czasu) abyś to mógł zobaczyć. Poza tym, nie masz kontroli nad czasem ponad 1 sec. pętla dalej jest przewijana w nieskoczoność....
Teraz spłodziłem coś na chacie w bascomie ;-) Może w końcu ta koncepcja ruszy.... uwzględnia drgania styków, działa na innej zasadzie... powinna byc odporna na wszelkiego rodzaju czasy między puszczeniami wciśnięciami itp... w przerwaniu co 10ms sprawdzamy stan przycisku zadziałanie przycisku następuje najwcześniej po 10 jego sprawdzeniach (po 100ms)...
przeanalizuj sobie dobrze ten kdzik poniżej bo on jest dobrze napisany - naprawdę ;) ja wprawdzie kiedyś przy okazju swojej wytrawiarki też zrobiłem sterowanie w Bascomie 2 odbiorników przy 75 krokach ale dałoby radę więcej kroków i jeszcze kilka odbiorników. Z tym, że już nie pamiętam dokładnie zagadnienia więc trudno mi się teraz znowu w to wgryzać....
. Według mnie przerywanie co 100ms jest używane przez program w pętli głównej programu, ponieważ co 100ms odwołuje się do 3 pod programów. Owszem, są te odwołania ale brak jest do nich odpowiednich subrutyn, które nie koniecznie muszą być poprawne. Wygląda że to nie jest pełny program... Jeżeli robisz odświerzanie LCD co 100 msec, to nie zdążysz odczytać...
Jeśli chciałbyś w C, to w temacie obok masz sterowaniem przyciskiem na Timerze w przerwaniu. http://www.elektroda.pl/rtvforum/viewtop...
Mimo że port ma 7 wyprowadzeń to zawsze ustawiaj 8 bitów, bo to wciąż port 8-bitowy tylko że z obciętymi nóżkami. Regulację szybkości robi sie łatwo. Dodajesz jakąś zmienną np LICZ i teraz co każde wejście do przerwania timera to zwiększasz tą zmienną o 1. Teraz porównujesz ją z drugą zmienną np SZYBKOSC. Jeśli LICZ > SZYBKOSC to wykonujesz zawartość...
Na pewno do samego generowania dźwięku musisz użyć timera, żeby czas był porządnie odliczany, na waitach się tego zrobić nie da. Poza tym dźwięk będzie oczywiście podle mizerny, ale zrobić się to da. Dobierz porządany zakres częstotliwości i policz które timery wykorzystasz, jaki prescaler i kwarc
Dziękuję za szybką odpowiedź jednak program do obsługi jednego przycisku działa dobrze, bardziej chodzi mi o rozróżnianie który spośród ośmiu przycisków został naciśnięty krótko ponieważ w mojej wersji programu tylko ta funkcja nie działa, a zapisana jest pod etykietą "Krotkie:". W jaki sposób mogę to napisać aby zadziałało? O timerach wiem, pomijam...
Tak co jeden cykl. Prescale jest 64 wiec nie tu chyba problem. Nic sie nie dzieje na wyswietlaczu a w symulatorze tez nie pokazuje zmian zmiennych. To nie jest jeden cykl, ani też 64 jakby wynikało z podziału prescalera. Wszystko można odczytac w symulatorze, tylko musisz potrafic posługiwac się jego ustawieniami i funkcjami. Poniżej masz przykład...
Program działa jak poprzedni, nie reaguje na SW, LED świeci. Sprawdziłem czy w Arduino uno coś nie rozłączyłem, wgrałem program reagujący na przycisk i przycisk działa. Przepraszam za nieporozumienia z poprzednimi próbami rozwiązania problemu. Przeanalizujmy jeszcze raz sytuację, mając na uwadze, że przycisk i LED są prawidłowo podłączone oraz fakt,...
zaaplikowałem twój kod ale jest 0 na wyświetlaczu piszesz że nie robiłbyś tego ne przerwaniu, proponujesz przenieść to do petli głównej, a reszte programu przerobić? bo nim jeszcze jest obsługa przycisków, RC5 etc. która własnie znajduje się w pętli głownej
Jako że jestem wrogiem Bascom'a - daję algorytm w "C". [syntax=c]int counter=0; int state=1 //domyslnie startujemy stan 1 int opoznienie=500; while(1) { if state=1 { //wyswietl dane 1 } else { //wyswietl dane 2 counter++; if (counter > opoznienie) { state=1; counter=0; } } if (wcisniety_przycisk_B) { state=2 counter=0; } }[/syntax] Oczywiście to nie...
Po co stosować tu przerwanie? Kardynalny błąd to stosowanie polceceń opóźnień w przerwaniach. W tym programie problem tkwi w: If Przycisk = 0 Then Waitms 100 If Przycisk = 0 Then Incr Sekwencja If Sekwencja = 0 Then Incr Sekwencja If Sekwencja = 4 Then Sekwencja = 1 End If End If End If End If Popraw na: If Przycisk = 0 Then Waitms 100 If Przycisk =...
Hehe... no to następny pomysł - a jak szybko obraca się pętla główna programu? Nie wiem jak masz skonstruowany program, czy w ogóle jest? Dużej precyzji czasów chyba nie potrzeba, nie ma różnicy, moim zdaniem, czy przytrzyma się przycisk 1s czy 1,1s, więc może ten pomysł wsadzić do pętli głównej i bez przerwań. Wtedy w zależności od szybkości pętli...
Takie programy to się całe pisze w przerwaniu bez zbędnych kombinacji. Przy okazji można dodać funkcję płynnego przechodzenia pomiędzy jasnościami PWM żeby to jakiś bajer miało. Przycisk sprawdza się dwuetapowo, że został wciśnięty i że został puszczony. ale nie można tego robić za szybko bo zakłócenia wchodzą. Efekty świetlne trzymaj w DATA, tak łatwiej...
Poczytaj tematy i uzyj szukaj. Attiny2313 nie posiada adc wiec potencjometrem nie dasz rady tego sterowac. Domyslam sie ze robisz do w bascomie. Tu masz kawalek kodu jak konfigurowac timery zebys mial 4 pwm. '******* procek ******* $regfile = "attiny2313.dat" $crystal = 8000000 $hwstack = 30 $swstack = 30 $framesize = 30 '****** dioda R/G...
Jest to timer mojego projektu na procesorze AT90S2313. Służy do odliczania po 1 sekundzie od ustawionego czasu do zera. Po skończeniu odliczania włącza się przekaźnik. Wyjęcie zwory nad przyciskiem startu powoduje że nie można zatrzymać odliczania. Projekt wykonany w Eagle. Źródło programu w Bascomie
W stanie rozwartych przycisków układ nie posiada połączenia z masą czyli prąd nie popłynie przez kontroler czyli kontroler nie działa. Przy wciśniętym przycisku diody również skutecznie zapobiegną umownemu przepływowi prądu w kierunku masy czyli kontroler również nie działa. Zaiste skąd taki pomysł, że to zadziała? Może lepszym rozwiązaniem byłoby normalne...
Nie chce mi się zagłębiać dalej w pisanie. Tych trybów możesz sobie dopisać ile chcesz. I jak Przewijajac menu naciśniesz Set to zmień tryb na, na przykład, "Ustawiam_temp" i w tym trybie znów przyciski Plus i Minus bedą działać dla zmiennej ustawianej. Potem naciskasz ESC i wracasz do trybu jakiego chcesz.. to proste i pewne. [syntax=basic4gl]$regfile...
Sprawdziłem właśnie powyższy program i działa na zasadzie zapalenia diody przy włączeniu i gdy nacisnę i trzymam switch PD.0 zwarty do masy to dioda gaśnie, zapala ponownie się po puszczeniu switcha. Podłącz diodę w odwrotnej polaryzacji, będziesz miał odwrotny skutek... Zdaje się że o to ci chodzi. Robisz próby statyczne z przyciskiem, to tak mniej...
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)=...
Każdy kiedyś patrzył na przykłady a nie od razu główkował. Proszę. Baw się dobrze. Przetestowany ;) [syntax=vbnet]'#########################... '# Program włącza jeden z trzech przekaźników w zależności # '# od tego ile razy lub jak długo naciesnieto przycisk # '# Jeden krótki Przekaznik1 na czas 1s # '# Dwa krótkie Przekaznik2...
Witam, jestem w trakcie wykonywania projektu na podstawie: http://extremeelectronics.co.in/avr-proj... W tym projekcie jest podany kod źródłowy, ale ja piszę własny od podstaw w BASCOM. Doszedłem do timera i trochę stanąłem w miejscu. Musze ustawić jakoś Timer, tak żeby aktywował on się po przyciśnięciu...
Pytana do układu: 1. P1 i P2 podciągnięte do plusa za pomocą rezystorów? Bo w programie nie masz "włączonego" wewnętrznego podciągnięcia? Jeden z twoich problemów to: Po naciśnięciu guzika zmniejszającego wartość spada ale dzieje się to bardzo powoli tak jak by układ się przycinał na czas odczytu temp. nie dziw się ponieważ w funkcji Odczyt_t podczas...
Można zrobić to poprzez użycie zmiennej, której wartość zmienia się przy każdym uruchomieniu a następnie jest zapisywana w eepromie. Dzięki temu każde uruchomienie dawałoby inną sekwencję liczb generowanych funkcją random. Inną metodą jest wykorzystanie timera. Przykładowo, jako __rseed wpisujemy wartość, którą timer ma w momencie naciśnięcia przycisku....
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...
A nie możesz wykorzystać przerwania od zbocza np INT0? Jak pojawi się dodatnie zbocze to robisz krótki sygnał i program pracuje dalej. Dopiero jak ktoś puści przycisk i znów naciśnie pojawi się znów zbocze narastające które może wywołać przerwanie. Ideałem byłoby abyś po pojawieniu się przerwania od narastającego zbocza, włączał Buzzer potem uruchamiał...
"zajęte" timery. zawsze możesz dopisać tak jak pisałem z dźwiękiem. w przerwaniu timera pomniejszasz zmienną o 1 oraz gdy jest równa 0 wyłączasz podświetlanie. w obsłudze klawiatury dodajesz zapalenie podświetlenia (pewnie ustawienie jakiejś nużki w odpowiedni stan) oraz ustawienie tej zmiennej na odpowiednią wartość (trzeba wyliczyć z prędkości z jaką...
Jeżeli sprawdzasz przycisk podłączony do masy, to czemu przerwanie Timer ma być wyzwalane zboczem rosnącym ? Config Timer0 = Counter , Edge = Rising
Najprostszym rozwiązaniem wydaje mi się wygenerowanie sygnału wspólnego (tutaj mającego 3 stany: oba_puszczone, mieszany, oba_nacisniete) oraz operowanie na jednej pomocniczej zmiennej "gotowosc" - cykl zacznie się tylko wtedy, kiedy sygnał wspólny jest w stanie oba_nacisniete a układ jest gotowy - wtedy nastąpi rozpoczęcie procesu oraz skasowanie gotowości....
W INT0 - STARTUJ dodałbym DISABLE INT0, a dopiero potem w INT1 komendę ENABLE INT0 Drgania styku "startującego" spowodują ci wielokrotne wywołania INT0 i zerowania timera i fałszowanie czasu. Drgania przycisku stopującego nie wpływają na pomiar i można je zignorować.
Bardzo dziękuję za tą podpowiedź. Obecnie podkształcę się o tym trybie i postaram dokończyć program. Jednak po tym co wyczytałem wykorzystałem generator wewnętrzny na 8MHz '$crystal = 8000000 Ale tu pojawia się małe pytanie, czy lepiej dać generator wewnętrzny czy może kwarc zewnętrzny Wprawdzie za dużo nie udało mi się znaleźć pod BASCOM-a, a pod C,...
problem z przyciskiem mogl bys rozwiazac za pomoca timera (ktory by liczyl dokladnie czas) lub przerwania int0/1. Nie chce mi sie dokladnie tlumaczyc jak to dziala, ale napewno duzo info znajdziesz w necie
Klawiature musisz potraktować jak jeden zwykły przycisk. Tyle że zwykły przycisk ma stan wysoki jeśli nienaciśnięty a ten przycisk zwraca 16 jeśli nienaciśnięty. Napisałem na szybko dwa przykłady. Jeden działa bezposrednio na wartosciach a drugi na stringu [syntax=vbnet] Dim Key As Byte Key_val As Byte , Lock As Byte , Licznik As Byte Dim Val_str As...
Daj swoje źródło programu, bo nie wiem jak zrobiłeś to menu. ... Jeżeli masz wolny jakiś Timer to możesz go uruchomić podczas wejścia do menu i przy wykryciu naciśnięcia przycisku go zerować a jak nie to zrobić jakiś programowy Timer. W procedurze obsługi przerwania od Timera zrobić skok w odpowiednie miejsce.
Ok. Rozumiem, że dla kogoś co się na tym zna to wszystko jasne. Dla mnie nie, jako iż jestem poczatkującym nie mam pojęcia na ten temat. I taka odpowiedź niestety nic mi nie mówi. Bycie początkującym nie zwalnia z własnego poszukiwania rozwiązania. Na tacy to tutaj raczej nic nie dostaniesz. Jeśli nie masz pojęcia, o czym BlueDraco napisał, to zacznij...
Witam wszystkich, od razu powiem że przekopałem forum i nie znalazłem podobnych tematów. Mam zamiar zrobić przekaźnik czasowy na attiny2313 lub atmega8, bo to akurat mam pod ręką. Działać ma on na zasadzie takiej, że po naciśnięciu przycisku wentylator ma załączać się raz na godzinę na ok 2-3 min. Po naciśnięciu drugiego przycisku, wentylator powinien...
Znajomość samego Basica (Bascom) nadaje się tylko do pisania programów mrugających ledami, a i tak jest z tym problem, o czym świadczy ilość pytań na forum. Do pomiarów czasów usekundowych można zastosować timery z zasobów sprzętowych 51. opóźnienie na dole strony jest przycisk <Pisownia>
Proszę napisać czy chodzi o klawiaturę matrycową czy klawiaturę z kompa. Jeśli matrycowa to należy zacząć od nauki obsługo tej klawiatury. Jeśli z kompa, od nauki uartu. Wykrywać czas przyciśnięcie przycisku można na timerze. Choć jeśli to znak z kompa to sprawa będzie wyglądać trochę inaczej bo trzeba by zliczyć ilość znaków na jednostkę czasu czy...
Pomysł z czasowym przełączaniem też ciekawy, zrobiłem to przez użycie Wait ( na początek ustawiłem na 8 sekund ), ale efekt jest podobny jak opisywałem to na początku, czyli wskazanie Temp1 jest uzyskane w momencie przełączenia i na zmianę tego wskazania trzeba trzeba czekać aż do następnego przełączenia z Temp2 na Temp1. Zastanawiałem się, czy użycie...
Nio zobaczymy. Doszlismy wkoncu do wniosku ze zliczanie bedzie poprzez port uC a wyswietlanie w przerwaniu timera zeby nie migotaly wyswietlacze. Przy zliczaniu przez timer zlicza on wszystkie drgania przycisku czy przekaznika a RC sie nie sprawdzi bo musi to byc bardzo uniwersalny licznik.
Kolego, zacznij pisać programy poprawnie, bo na głupie odczytanie przycisku zużywasz pełną moc procesora, o poborze prądu nie wspominając. Wykorzystaj Timery, przerwania zewnętrzne i usypianie procesora, i pochwal się jak program działa. Wszyscy skorzystają, Ty najbardziej.
dobra to juz w miare rozumiem tylko jeszcze 2 pytania: te diody maja mrugac? i czy musi to byc idealnie taki czas jak podajesz czy ok. ? (bo jak idealnie to musisz to zrobic na timerze. Jest to duzo roboty wtedy tobie nie pomoge bo mi sie nie chce, jak ma byc to okolo to mozesz zrobic na waitach)
timer przycisk przycisk bascom bascom timer generator
układ centralnego ogrzewania otwarty dobór rezystor dioda marshall footswitch
Jak zdjąć obudowę Philips MCD 908 - krok po kroku Jak włączyć piec akumulacyjny Dimplex Alby, aby dawał ciepło?