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ąś...
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...
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...
Zmienia postać rzeczy a więc... musisz wykorzystać źródło zewnetrznego pzrerwania czyli INT. Podlacz przycisk do INT0 i wtedy wpisz: .... Config INT0 = Low level On INT0 przycisk ......... ..... przycisk: .... .... .... return Teraz wpisz tylko co ma się wykonywać w przerwaniu które wywoła nacisniecia przyckisku ;)
Zacznij od tego aby na przerwaniach od timera, np 1ms liczyć czas przez jaki przycisk jest naciśnięty, niech będzie to zmienna "czasGora". Jeśli zwolniony zerujesz czas. Gdy jest naciśnięty przez 2000ms, ustawiasz flagę "rozjasnianie". W przerwaniu gdy flaga ta jest ustawiona zwiększasz wypełnienie PWM do MAX. Pierwsza część zadania zrealizowana. Następnie...
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ł...
Nie będę sie rozpisywał: Dim T1 As Single , T2 As Integer ... T1 = -123.50 T2 = T1 'bez części ułamkowej T2 = Round(T1) 'zaokrągli zgodnie z prawami arytmetyki ... Pozdrawiam Piotrek
Witam Panowie Dzięki za zainteresowanie i poświęcenie czasu . Panowie macie rację że nie znam ASM i na razie nie chce , co nie znaczy że z czasem tak ale na tą chwile tylko bascom. Interesuje mnie zasada i działanie FLAGI (praktyczna na jakiś przykładach w bascom) . Kolega ASMnauka_ fajnie dał wykład z "ogórkami" i dzięki za to. Napisałem prosty programik...
Zupełnie inaczej. Obsługa przerwania, która tylko ustawia znaczniki, zupełnie nie ma sensu. W przerwaniu timera zgłaszanym np. 50 (20..100) razy na sekundę, czy poprzednio przycisk był zwolniony, a teraz jest wciśnięty. Jeśli tak - ustaw znacznik do ew. wykorzystania w ew. pętli zdarzeń (to dość nieszczęśliwe rozwiązanie, ale w Bascom i u początkujących...
kbw - nie bądź ryzykantem i zbuduj prototyp. Układ jest na tyle banalny że zrobisz go na jakiejkolwiek płytce uniwersalnej. Wyjdą ci wszystkie bzdety źle wpływające na działanie. Zawsze lepiej jest odkłócić przycisk kondensatorem niż bawić się w dziwne rozwiązania programowe. Tzn, programowo i tak musisz zrobić debounce ale "sprzętowo" odkłócony przycisk...
pixel7 ale bzdura. Jak chcesz zareagować natychmiast to właśnie w przerwaniu a tam ustawiasz czy zbocze wyzwalające ma być narastające czy opadające. No i jak to ma być przycisk to trzeba koniecznie odfiltrować drganie 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...
Napisałem się, napisałem... a tu wylogowało i przepadło a wstecz w przeglądarce nie przywróciło :( ale postaram się odtworzyć. W wyżej zaproponowanym sposobie musisz mieć przycisk podpięty pod zewnętrzne przerwanie. Ja zrobiłbym to inaczej. Obsługę przycisku zrobiłbym w przerwaniu timera. Przerwanie wywoływał co kilka milisekund. W przerwaniu najpierw...
Wyłączenie adc pomogło ograniczyć prąd w trybie powerdown, ale: Procesor nie wstaje po podpięciu zasilania. Jeśli włączam zegarek przyciskiem i wyłączam, ADC pracuje. Jednak jeśli wyłączy się po określonej sekundzie, to po włączeniu go przyciskiem ADC nie pracuje. Nie mam do tego g.... już siły. [syntax=vbnet]If Lock > 0 Then 'jesli w przerwaniu ustawiono...
Teraz nie rozumie juz nic. Z tego co bascom robi w powerdown.Wygląda jakby tylko włączał zezwolenie na tryby uśpienia. Czy ja coś źle odczytuje? Czy kolega Zumek mógłby napisać w ASM przejście do ST-BY dla tego Attiny? Bo według mnie było by to tak: $asm !IN R24,mcucr !ORI R24,0x20 !Out mcucr , R24 !IN R24,mcucr !ORI R24,0x50 !Out mcucr , R24 SLEEP...
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...
[syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat" 'informuje kompilator o pliku $crystal = 8000000 'informuje kompilator o częstotliwości oscylatora Reset Portb.1 'Sterowanie podświetleniem: Reset - włączone Set - wyłączone Config Porta.7 = Input 'port wejściowy PRZYCISK Config Portb.1...
Prywit! Mam problem z obsługą przerwania zewnętrznego. Do pinu INT0 podłączyłem włącznik zwierający do masy. Jak widać w programie podciągnąłem końcówkę do plusa. Do pinów C.1; C.2; C.3 podłączyłem diody LED do zobrazowania problemu. Napisałem taki oto krótki program i jestem zdziwiony działaniem. Po uruchomieniu programu dioda podłączona do pinu C.1...
OK, problem rozwiązałem, problem polegał na tym, że pilot ma przyciski "CD", "FM", "MW" i "AUX". Naciskając przypadkowo przycisk "FM" zmieniłem nadawane adresy i komendy, żeby wszystko wróciło do normy musiałem nacisnąć przycisk "CD". Jak widać więcej osób zgodziło się, że nie zrozumiało postu, więc przepraszam za nieścisły język. Program do testowania:...
Fakt, ze jest milion różnych sposobów na zrobienie tego. Ok spróbuję tym sposobem co mi podsunąłeś. W sumie nawet lepiej tak. Dzięki. Dodano po 5 Ok, coś tam skleciłem, jest to niepełny program, bo nie ma w nim np. ustawień dla Mute i trybu, oraz nie pokazuje na LCD wartości, ale to później. Póki co mam dziwny problem z wyświetlaniem, ale o tym za chwile....
Bascom - wersja 1.11.95 Kod, no jest tego sporo: - zegar PCF8563 - Zapis na SD - dwa czujniki DHT11 - odczyt z PCF8574AP ( klawiatura ) - RC5 - ma być DS18B20 - ma być DCF77, ale nie doszedłem do tego momentu ( tzn testowałem na innym procesorze i działało ) Działa - zegar PCF8563 - dwa czujniki DHT11 - odczyt z PCF8574AP w przerwaniu ( klawiatura )...
Witam Mam płytkę Loggera GPS + SD + PCF8563. Jeśli chodzi o GPS i zapis na SD wszytko jest OK. Problemem jest ( i to pierwszy raz się z czymś takim stykam ) odczyt danych z z układu PCF8563. Otóż dla pewnych wartości sekund, odczytana wartość czasu - godziny jest większa o 40 ( czterdzieści ). Czyli jeśli czas jest 22:40:02 to jest wyświetlany poprawnie,...
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...
Moim zdaniem jakoś dziwnie masz te przerwania sterowane. Po co w przerwaniu masz Enable Interrupts - włączasz raz na początku i nie wyłączasz. Disable Int0 w pętli głównej też raczej nie jest dobrym pomysłem. Przed Enable Int0 proponuję dopisać zerowanie flagi przerwania, a na końcu (pętli) idle - dzięki temu po przerwaniu pętla zacznie "iść" od początku.
Weź sobie załaduj do jakiegoś podprogramu fragment w którym sprawdzane są przyciski, jednocześnie w tym podprogramie odliczaj opóźnienie. (np zrób pętle która będzie miała waitms 1 - ilość wykonań pętli ilość opóźnienia ale równocześnie sprawdzany port przycisku) Zamiast rozkaz waitms wywołuj ten podprogram. To tak najprościej i bez przerwań.
Ż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...
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
Podejrzewam, że te Waitms w obsłudze przycisków blokują wyświetlanie. Spróbuj je do testu usunąć. Oczywiście przyciski nie będą wtedy działać poprawnie, ale sprawdzisz wyświetlanie. Obsługa wyświetlania powinna być przeniesiona do obsługi przerwania, ale to już większa przeróbka programu. To przygasanie tak bardzo przeszkadza?
ustawiasz licznik tak by generował przerwanie co 50ms w tym przerwaniu sprawdzasz swoje sygnały (przyjmijmy ze wyzwalanie jest zerem) w przerwaniu sprawdzasz czy sygnał jest = 0 jeśli tak ustawiasz sobie jakaś zmienna bitową flagę (znak ze sygnał jest). w następnym przerwaniu (flaga ustawiona) sprawdzasz znów sygnał jeśli jest 0 np włącz silnik. dodatkowym...
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.
Ponoć powinno dawać się rezystory ale ich nie używam w przypadku przycisków i jeszcze ani jeden avr się nie uszkodził.
Rozwiązaniem jest obsługa przycisku na przerwaniu bądź to INT bądź PCINT
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.
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
Chyba dokładniej się nie da skomentować ;) Powinno być już wszystko jasne... [syntax=basic4gl]Do ' pętla główna jakiegoś programu ' ' ' tu jest badany przycisk If P = 0 Then 'czy wciśnięty przycisk (P to pin procesora od guzika) If Lk = 0 Then 'czy licznik programowy doliczył już do zera Lk = 50 'jeśli tak to ustaw znowu na 50ms ' (można też nieco mniej,...
Na naciśniecie przycisku robisz żeby jakiejś zmiennej przypisał (w momencie jego naciśnięcia) odczytaną wartość z przetwornika a później za każdym razem od aktualnego odczytu odejmujesz wartość tej zmiennej. Poza tym nie ma raczej sensu w przerwaniu od przycisku (czy w jakimkolwiek innym sposobie odczytu stanu przycisku) robić ponownego odczytu przetwornika....
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)......
Ja bym sugerował podpiąć przycisk pod przerwanie zewnętrzne. Jeden timer byłby puszczany i zatrzymywany w przerwaniu do pomiaru czasu, a drugi do multipleksowania wyświetlania.
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.
No w tym pierwszym programie to działa, ale przy pojawieniu się przerwania. Chciałbym jednak żeby działał niezależnie od przerwania (patrz drugi kod), jednak on nie działa ;/ Wynik zeruje się po kilku przerwaniach (niezależnie od przycisku zerowania).
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...
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.
[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...
Cóż, nie jest to znana mi metoda obsługi enkodera, ale chyba ciekawsza... Natomiast nie widzę tu operacji na przerwaniach.... To prawdopodobnie powoduje błędy, chyba, że się mylę. Ale enkodery to zawsze zagadka dla mnie były więc wiele nie pomogę.. Pozdrawiam.
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....
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 =...
Nigdy nie korzystałem z Getkbd, bo nie miałem takiej potrzeby, ale nie sądzę aby nie można było skorzystać z tej instrukcji w przerwaniu. W końcu nie są tu angażowane żadne timery, ani zaplanowane opóźnienia - po prostu zapis do portów i odczyt.
Przycisk na przerwaniu... świetny pomysł... prosisz się o kłopoty.
$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:...
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
Zapoznaj się obowiązkowo z konfiguracją timerów! Jeśli Ci potrzeba większych przedziałów niż pozwala na to standardowa konfiguracja timerów użyj dodatkowej zmiennej licznikowej w tym przerwaniu, która zwielokrotni wynik...
...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...
Ustawiaj sobie flagę po naciśnięciu przycisku (np. w przerwaniu najlepiej) czy pętla ma się wykonywać, a w ciele pętli najpierw sprawdzaj tą flagę i albo wykonuj dalsze instrukcje albo wyskakuj z pętli poleceniem Exit For.
Albo poczytaj o obsłudze przerwań
Int0 ma najwyższy więc trop z priorytetem nie był dobry. Na próbę ustaw sztywno czas i wywal wszystkie wait. Może na czas oczekiwania w wait nie działają przerwania? I sprawdź czy wyzwala z przycisku.
Ja bym spróbował podpiąć przyciski pod przerwania int0 i int1 i reagować tylko na zbocze falling. Wciśniecie i trzymanie jednego przycisku nic wtedy nie da. Ustawić flagi i zerować je po wykonanej operacji.
Zrób sprawdzanie godziny na jakimś przerwaniu z timera. Uważam że niepotrzebnie robi się to cały czas w głównej pętli. Ustaw timer żeby sprawdzał czas co 0,5 sek i to na pewno wystarczy. A w pętli głównej zrób tylko obsługę menu czy co tam jeszcze będziesz robił.
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......
Rozumiem że w przerwaniu od timera ustawiam jakaś flagę i na jej podstawie robię odpowiednie operacje czy w przerwaniu można od razu inkrementować zmienną L_d?
...a to to naprawdę dużo wniosło do tematu dla Twojej wiadomości czytałem manuala od bascoma ale skoro tu pisze to znaczy że skończyły mi się pomysły i nie mam pojęcia co zrobić. Nie twierdzę , że nie czytałeś manuala od Bascoma , ale twierdzę , że nie czytałeś manuala od ATMega16.Gdybyś go czytał , to nie popełniłbyś błędu , który popełniłeś i nie...
Wrzuć wszystko do programu głównego tzn. przyciski ( ustawianie czasu załączania/wyłączania pompy), sprawdzanie Adc (poziom wody) przeliczanie wartości dla wyświetlacza , a samo wyświetlanie w podprogramie odświezanym co jedną sekundę za pomocą Timer0 . Timer0 dalej dla wyznaczania 1 sekundy. Buzer zrealizuj za pomocą zwykłej zmiennej licznikowej zwiększanej...
Pisze w ASM i bascom mi nie znany. Napisze to w basicu. To twoje jest troche pokrecone. P ;przycisk 1- nacisniety ; 0-puszczony S ;wy portu 1- swieci ; 0-zgaszony C ;zmienna odliczajaca czas - 1bajt ;proc zalaczajaca swiatlo na 30 sek if P=1 then C:=30 endif ;tutaj proc. odliczajaca czas 30 sek ;proc wywolywana w przerwaniu co 1 sek np. od T0 ;wczesniej...
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.
a ja bym to zrobił na przerwaniu. podpinasz wszystkie przyciski przez diody do jednego z wyprowadzeń (int0) i po problemie ;-)
Przy "zabawie" z przerwaniami trzeba pamiętać , by czas obsługi przerwania był krótszy od czasu pomiędzy przerwaniami. Czyli jeżeli ktoś chce w przerwaniu obsługiwać przeliczenie zmiennej zmiennoprzecinkowej , wyświetlacz itp a następne przerwanie przyjdzie np po 100 mikrosek to niech się nie dziwi , że program "wisi". Problem z BASCOM'em jaki miałem...
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 -...
A czemu nie wykorzystasz jednak przerwań?przerwania to duże udogodnienie w uC
No na modyfikację nie mam czasu. Zwłaszcza, że już dawno nic nie pisałem. W dodatku ja nie używam wait (i Tobie też odradzam) co wymaga trochę innego podejścia do pisania programu. Mogę jedynie podpowiedzieć, że najlepiej było by skorzystać z przerwań INT0 i INT1 podłączonych pod przyciski. Wtedy przerwanie aktualnego zadania było by możliwe natychmiast....
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
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...
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?
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ć?...
To łatwo obliczyć, jeżeli dasz timer 0 bez preskalera, to przerwanie masz co 256 taktów zegara. 10Mhz/256=39kHz To dzielimy/(ilość bitów)np 8 =>39kHz/256=150Hz Trochę mało.... Oczywiście w przerwaniu możesz wrzucić nową wartośc do timera0, aby przyśpieszyć, ale ... cały czas musisz zdążyć wszystko podczas przerwania. Bez symulatora się nie obejdzie....
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?
Mam takie pytanie do mądrzejszych od siebie, czy jest możliwe żeby wysterować tym mikrokontrolerem 5 do 6 silników prądu stałego? Oczywiście, że możesz obsłużyć 5, a nawet 6 silników. Tylko jest jeden problem. Będziesz musiał je sterować programowym PWM'em, a nie sprzętowym. Do tego celu wystarczy np. przerwanie, z któregoś licznika. Oczywiście możesz...
elektryk: chyba nie masz "dejavu", no chyba ze ja tez mam :) polecam uzywac przycisku "szukaj"
Zacznij od przerwania timera - w nim sprawdzaj stan przycisku, odliczaj czas, włączaj i wyłączaj odbiornik.
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ść...
Jeżeli końcówka ma robić jako wejście, używasz słowa pinx.y . Dotyczy to także polecenia alias - które jest tylko informacją dla kompilatora, żeby wstawić w miejscu gdzie występuje przypisane przez nas słowo - oryginalną nazwę portu / pinu. Tak więc powinno być wl1 alias pinc.0 wl2 alias pinc.1 Poza tym polecam stosować może trochę mylącą na początku...
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ę...
Użyj przerwania timera do migania diodą, a najlepiej do wszystkiego (czyli również do sprawdzania stanu przycisków).
Że tak się zapytam, a gdzie oszczędzanie energii ??? Czy może zrobiłeś przyciski sterujące razem z podawaniem masy na uC ?
Witam. W jaki sposób mogę zrealizować włączanie i wyłączanie układu na mikroprocku ATTINY2313 tzn. przejście układu w tryb POWER DOWN ??? Dokładniej chodzi o to, że po naciśnięciu przycisku podłączonego do np. wyprowadzenia INT0 układ przechodzi w stan PD. Po następnym naciśnięciu tego samego przycisku mikroprocesor wraca do normalnej pracy. Czy ktoś...
Układ PCF8574AP mam już na stałe podpięty - nie mogę zmienić adresu - program wyszukujący urządzenia I2C wskazał adres 118 i 119 ( zgodnie zresztą z obliczonym przeze mnie ). Odczyt z PCF8574AP mam w przerwaniu INT1 Kod ( a raczej jego część dotyczącą PCF8574AP ) umieszczę wieczorem, jak wrócę z pracy. Czy Kolega w jakiś sposób inicjuje PC8574 ? Tzn....
Jeśli chciałbyś w C, to w temacie obok masz sterowaniem przyciskiem na Timerze w przerwaniu. http://www.elektroda.pl/rtvforum/viewtop...
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...
"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ą...
Do sterowania użyjmy portu B. Przycisk do zmiany efektów to pin D.2, będzie działać na przerwaniu. Potencjometr to pin C.0, przetwornik. No to prawie że gotowiec: $regfile = "m8def.dat" $crystal = 8000000 Config Portb = Output 'Wszystkie linie portu D jako wyjściowe Dim Opoznienie As Word 'opóźnienie między przełączeniami, liczba do 65535...
Ja swój impulsator kupiłem na Allegro za 8 zł. Niestety w tym momencie ich nie widzę... Był to ALPS z przyciskiem w osi, 5 pinów. Ooo! Znalazłem go w jakimś sklepie: http://www.bajansklep.com.pl/sklep/209
Gdybym opisał program wszystko stałoby się oczywiste :D Użycie IF ELSE bez END IF zawsze warte jest omówienia bo potem nikt nie może się doliczyć END IF :D Chodzi o to że jeśli tylko jedna instrukcja jest od jakiegoś warunku zależna to można ją zapisać w jednej linii. Jeśli z powodu jakiegoś warunku musza juz być zmienione dwie zmienne lub wykonać się...
R_gora alias PinX.x `wejscie przycisku góra 0 = naciśnięty R_dol alias PinX.x `wejscie przycisku dół 0 = naciśnięty R_stop alias PinX.x `wejscie przycisku stop 0 = naciśnięty Kran_gora alias pinX.x `wejscie krańcówki góra Kran_dol alias pinX.x `wejscie krańcówki dół Roleta alias PortX.x `wyjście Start / Stop 1=Start 0=Stop Kierunek alias portX.x `wyjście...
Piloty Sharp'a nie są w RC5. Musisz napisać własną procedurkę w asemblerze - najlepiej na przerwaniu. Nie będzie to proste, Sharp ma swoje rozwiązania i to niezbyt kompatybilne z innymi na rynku. Pozdrawiam.
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...
Dr.Vee : Staram się jak mogę, ale mam problem ze zrozumieniem przedstawionego przez Ciebie automatu: - interpretując w_1 oraz w_2 jako aktualny stan, to po przejściu ready->wait może nastąpić bezpośrednie przejście wait->off - interpretując w_1 oraz w_2 jako zdarzenie, ciężko jest interpretować /w_2 AND /w_1, gdyż musiały by one wystąpić równocześnie....
Opcji jest mnóstwo, chociażby przyciski podłączyć do INTx. Ale ja bym to zrobił tak: Skok co 1s. do przerwania timera1, a w nim najpierw odczyt z DS-a, a po odczycie daje mu konwersje. Koniec przerwania. Pętla Do-Loop gdzie obsługuje przyciski, wyświetlacz itp. End
W skrócie... przeznaczasz jedną zmienną na tzw. licznik wyjścia. Ustawiasz w niej wartość (czas do odliczenia - zależny od ustawienia przerwań) zawsze po wejściu do menu (i/lub wciśnięciu dowolnego przycisku). W przerwaniu ta zmienna jest cyklicznie zmniejszana do zera. I teraz w swoim menu w miejscu gdzie badasz warunek wyjścia z menu (czyli pewnie...
Obsługa przycisku w przerwaniu jest niezbyt wskazana. Owszem przycisk uruchomi przerwanie ale do tego należy również doliczyć drgania styków. Jak wiadomo opóźnienia w przerwaniu to niepożądane zjawisko. Dobrym sposobem jest dodanie kondensatora który będzie się ładował i rozładowywał tym samym eliminując drgania styków.
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...
Musiałbyś to zrobić na przerwaniach aby podczas działania PR1 lub PR2 wyłapać wciśnięcie S1. Wg mnie to najbardziej optymalne rozwiązanie.
tez bym byl zainteresowany tym kodem, jak mozesz to zapodaj na forum. Ja bym podlaczyl przyciski do przerwania, by sie procek budzil gdy ktorys z nich zostanie wcisniety
przycisk przerwaniu przerwaniu bascom bascom funkcja przerwaniu
zmywarka buczy electrolux świeca żarowy oleju regulacja prądu spawania bocznikiem
navitel bateria philips upgrade loader
Jak naprawić zwarcie w kinie domowym? Słabe i żółte światła w Nissan Note po wymianie żarówek