Ż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...
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
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.
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ń.
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.
elektryk: chyba nie masz "dejavu", no chyba ze ja tez mam :) polecam uzywac przycisku "szukaj"
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?
Ponoć powinno dawać się rezystory ale ich nie używam w przypadku przycisków i jeszcze ani jeden avr się nie uszkodził.
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)
A może sprzętowe rozwiązanie ? Zamiast przycisków NO zastosować NC ?
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.
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.
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).
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.
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.
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...
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ę...
Rozwiązaniem jest obsługa przycisku na przerwaniu bądź to INT bądź PCINT
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.
Musisz ustawiać znacznik, albo lepiej- odblokować przerwanie :-)
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...
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.
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...
Witam, w związku z tym, że nie udaje mi się pogodzić zewnętrznych przerwań z obsługą 1-wire (zatrzymywanie przerwań na czas obsługi 1-wire co zakłóca mi odczyt z zewnętrznych przerwań) mam pytanie do bardziej doświadczonych: Czy możliwym jest wgranie "dwóch" programów do jednego uC, żeby działało to mniej więcej tak: 1-szy program tylko z obsługą 1-wire...
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.
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.
Albo poczytaj o obsłudze przerwań
Disable INT0 w przerwaniu nic złego nie zrobi. Należy tylko pamiętać aby we właściwym miejscu je włączyć, tutaj ja polecam na końcu przerwania, a nie w głównej pętli programu. Bo nigdy nie wiadomo w którym momencie pętli głównej wejdzie się do przerwania (a może wejść np po komendzie enable int0, potem wychodzi z przerwania z wyłączonym int0 i jest...
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ąś...
Uuuupsss a jak to się stało, że tego nie zauważyłem ?????? Trzeba ubierać okulary. :D Ale to i tak delikatne tłumaczenie, ja znam wersję z fu...... zamiast F :)
Wlaśnie przestudiowałem przerwania INT0 i INT1 no i wychodzi na to, że raczej nie da się tak zrobić jak chciałem. Ponieważ moje pod programy są w pętli, a przerwanie czeka na zakończenie podprogramu...
Witam, Jak ustawić w bascomie wejście dla przycisku podłączonego do masy. Dokładniej chcę podłączyć przełączniki krańcowe do końcówek obsługujących przerwania. chciałbym aby przełączniki zwierały właśnie do masy. Czy muszę jakoś to ustawić oprócz deklaracji przerwań i akcji?
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.
Witam i jak zwykle proszę o pomoc. Otóż piszę program do sterownika wytrawiarki, zrobiłem Menu (hehe, 50% flasha), i potrzebuję zrobić termostat z czujnikiem temperatury, a wybrałem sobie DS1820, bo łatwodostępny i pospolity. Problem mam taki, że w programie głównym wyświetlam tą temperaturę, (przechodzę do podprogramu), a czas odczytu wynosi 750ms,...
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....
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
A ustawienie stosu to gdzie ? Kodu w obrazkach się nie wstawia, tylko w tagach code] ] Kod w ogóle to masakra, użyj preprocesora... Co to za "delaje" w przerwaniu ? Obsługa przycisków przez przerwanie to mi bascomem zalatuje...
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.
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...
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)......
$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:...
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....
Program jest banalny. Warunkiem prawidłowej realizacji zadania jest użycie timerów (najlepiej i najwygodniej programowych). Wiąże się to z poznaniem przerwań, które po prostu musisz poznać wcześniej czy później. Podejrzewam że nikt tu za Ciebie programu nie napisze, ale jak już coś stworzysz to pomożemy iść dalej :) Aha, na "Wait" nic tu nie zrobisz....
...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...
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
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......
A czemu nie wykorzystasz jednak przerwań?przerwania to duże udogodnienie w uC
Rezystora nie ma na schemacie ale fizycznie go wlutowalem i dalej nic. Najczesciej wyzwalaja sie przyciski klawiatury lub zewnetrzne przerwanie. W programie wlaczone pull-up.
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...
Te 6 przycisków połącz z jednej strony do 6 pinów a z drugiej wszystko do INT0 lub INT1. Przed położeniem procka spać pin przerwania ustaw jako wejście i podciągnij, pozostałe 6 pinów jako wyjścia w stanie niskim. Naciśnięcie któregokolwiek przycisku spowoduje wybudzenie procka (wybudzaj stanem niskim lub zboczem opadającym) a po wybudzeniu OD RAZU...
1 Nadal źle napisane Load Timer. 2 Brak inkrementacji zmiennej Sekunda. 3 Sprawdzanie warunków powinno być w pętli lub (gorsze rozwiązanie) w przerwaniu.
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?
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 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
[syntax=vbnet] ...... Do Debounce S1 , 0 , Pr1 ,Sub Loop End ' koniec pętli Pr1: Waitms 100 Serwo(1) =150 Waitms 150 Serwo(2)=250 Waitms 200 Serwo(2)=50 Waitms 250 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Return [/syntax] Przy takim kodzie serwa działają jak bym chciał tylko procesor wykonuje...
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...
Nie wiem czy odbierasz tam jakieś komendy. Wywal te Wait`y. Tutaj po zmianie stanu do zmiennej Blokada zostanie wpisana wartość do odliczenia w dół. Jeśli nastąpi następne przerwanie to w zależności od tego czy minął już czas blokady, to albo zostanie przedłużony jej czas bo ktoś trzyma przycisk dłużej albo.. :D [syntax=basic4gl]Dim Blokada As Word...
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...
1. Jak masz podłączony przycisk? Powineien być tak żeby zwierał pin procesora do masy. 2. if portd.0 = 0 then !!! 3. taki program Ci bedzie dziwnie dzialal bo jest cos takiego jak drgania stykow. Jezeli odczyt trafi akurat na moment ze styk sobie odskoczy to choc ty myslisz ze g wcisnales to nic sie nie zrobi. Wniosek: trzeba wytlumic rgania stykow....
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...
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 ;)
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...
A jeszcze 2 pytanka, czy przerwanie musi być co 1ms co się stanie jak będzie rzadziej i jak dorobić to rozpoznawanie krótkiego i długiego wciśnięcia?
a ja bym to zrobił na przerwaniu. podpinasz wszystkie przyciski przez diody do jednego z wyprowadzeń (int0) i po problemie ;-)
Tak jak sam napisales jest to przerwanie programu obojetnie w ktorym momencie, to do tego sluzy takie cos jak "przerwanie" int0/1 Uzyj wyszukiwarki i helpa do bascom, a o wszystkim sie dowiesz.
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...
W bascomie tez mozna to poustawiac bez ASM. Bascom pozwala na operowanie na rejestrach, wiec mozna robic przypisania typu MCUCR = &b10101011 MCUCR.1 = 1 itp.
gdyby zatrudnić przerwanie do sprawdzania stanu przycisku to odpadłby problem sprawdzania przycisku w każdym obrocie pętli :-)
postaram sie przyspieszyc proces, bo interesuje mnie rezulat (moim zdaniem bascom ma lekkie problemy z przerwaniami) Set Portd.2 Set Portd.3
Że tak się zapytam, a gdzie oszczędzanie energii ??? Czy może zrobiłeś przyciski sterujące razem z podawaniem masy na uC ?
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)...
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?
Zacznij (jak w 99% projektów) od przerwania timera. W nim sprawdzaj stan przycisków i wykonuj prawie wszystkie pozostałe czynności.
Zacznij od timera - przerwanie z częstotliwścią np. 100 Hz, w nim testowanie przycisków i sterowanie diodami.
Użyj przerwania timera do migania diodą, a najlepiej do wszystkiego (czyli również do sprawdzania stanu przycisków).
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...
Wszytsko wrzuce w poniedziałek po południu bo nie mam dostępu teraz do niego. Ogólnie przerwanie działa ale też nie do końca, bo jak jedno się wykona i stoi na wait'cie w pętli głównej to już na kolejne, nie reaguje Obsługa przycisku w przerwaniu jest niezbyt wskazana. Owszem przycisk uruchomi przerwanie ale do tego należy również doliczyć drgania styków....
Jeżeli sprawdzasz przycisk podłączony do masy, to czemu przerwanie Timer ma być wyzwalane zboczem rosnącym ? Config Timer0 = Counter , Edge = Rising
Spróbowałem wszystkiego, zamknąłem warunki i zaczął mi zwracać błędy przy kompilacji. Chodzi oto, że program się kompiluje, ale jest problem z zładowaniem go do procesora, Pisząc Bascom Demo miałem na myśli Bascom AVR DEMO. Jak już pisałem to wszystko przez ten Timer0, a konkretnie On Timer0 Co4ms, gdy wykasuje tą linijkę z włączeniem tajmera to program...
Można spróbować z jednym timerem. Ale wtedy było by więcej zmian w programie. Dlatego, że co każde przerwanie (co 100ms) wykonywała by się obsługa przycisku a co 10 przerwań także obsługa odczytania alarmów. Czyli istniejące teraz dwa podprogramy trzeba by było połączyć w jedną obsługę przerwania od timera0 lub timera1. Jeśli zaś program ma nie korzystać...
Bascomem juz całe wieki się nie bawiłem, ale wydaje mi się, że najprostsze rozwiązanie to: 1. Zadeklarować jakąś zmienną typu bit 2. Po wciśnięciu przycisku należy: -sprawdzić stan tej zmiennej -wyświetlić odpowiedni napis na wyświetlaczu (np TAK dla wartości zmiennej = 1 lub NIE dla wartości zmiennej równej 0) -zmienić wartość zmiennej na przeciwny...
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
Warto by było tą konfigurację rozwinąć o jeszcze jedną linię (odświeżaną za każdym razem po wywołaniu przerwania): [syntax=basic4gl] Timer0= x 'lub Timer0=Timer0 + x 'opcja dokładniejsza [/syntax] gdzie x=256-licznik, "licznik" dobierasz w zależności od tego jak gęsto ma być wywoływane przerwanie. Przykładowo dla zegara 8Mhz i Prescale =64, aby uzyskać...
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...
Ten pomysł z takim wykorzytaniem diod wydaje mi się bardzo mało szczęśliwy - tym bardziej, że nie będziesz miał na procku 0V tylko tyle co na spadku napięcia na diodzie a w tym momencie na wejście portu będzie podawane dla procka niższe napięcie niż jego GND ... Diody to można byłoby próbować zastosować do wybudzania procka ze stanu uśpienia którymś...
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
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...
Czegoś tu chyba nie rozumiem. Obliczyć (określić) czas potrzebny na przerwanie? Czyli czas wykonania przerwania? Każdy czas nawet pojedynczego cyklu w [ms] można określić za pomocą symulatora działania programu zawartego w kompilatorze Bascom. Uruchamiamy program ale krok po kroku (każdy rozkaz na kliknięcie mychy), zadajemy (wymuszamy) przerwanie przyciskiem...
Jeśli chciałbyś w C, to w temacie obok masz sterowaniem przyciskiem na Timerze w przerwaniu. http://www.elektroda.pl/rtvforum/viewtop...
No to sprawdzenie stanu przycisku wstaw do przerwania. Ale trzeba by jeszcze zapewnić atomowość operacjom na porcie D w programie głównym jeżeli go tam do czegoś używasz.
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ść...
tak, tylko ze ja nigdy sie nie bawilem przerwaniami i przydalby mi sie jakis przykaldowy kod programu lub cos podobnego...
1.Możesz powiedzieć CO chciałeś uzyskać jako wynik działania INT0? Jak napisał Logan-to jest przerwanie zewnętrzne-od zewnętrznego przycisku np. 2.Czy kompilowałeś ten program w miarę pisania czy napisałeś cały i dopiero potem skompilowałeś?
Czy mierzysz stan nóżki wyjściowej w czasie wciskania przycisku?:> A co do przerwań... jak czegoś takiego nie potrafisz napisać, odpuść Sobie przerwania póki co.
Co to jest L i jakiego jest typu bo w kodzie nie jest to zdefiniowane. Na mojej skromnej stronie 100% i sprawdzony wielokrotnie kod do usypiania procesora i wybudzania jednym przyciskiem. [url=http://bart-projects.cba.pl/rozne.h...
...Co ta funkcja robi ? Jeśli tego nie wiesz , to znaczy że nie wiesz , jak działa Twój mikrokontroler :( Ciekawi mnie czy wlozenie if'ow w przerwanie nie spowoduje duzych opozniena czasowe. Pomyśleć napewno nie zdążysz :D Bo juz o tych waitms 50 wogole nie ma mowy. Tak :?: To napisz , co generuje zbocze na Pind.2.Jeśli to nie jest przycisk , to faktycznie...
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.
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...
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ć?...
bascom przerwać przycisk przycisk przerwać bascom bascom przerwać przerwać
zrobić słuchawka bezprzewodowy schemat zasilacz antenowy kontrolka swiec mercedes sprinter
philips senseo sterownik ładowarki akumulatora
Kondensatory o większej pojemności w rejestratorze Hikvision Brak świateł w skuterze Piaggio Sfera 50 - diagnostyka