...Dlatego myślałem że mam gdzieś błąd w programie. pozdrawiam Nie zdawaj się nigdy na symulator Bascoma , bo on często fiksuje :) Steruj silnikiem w przerwaniu Timer0 , a problemy z szarpaniem znikną. Również przerwanie Timer2 , jest zbyt częste i zabiera procowi gro czasu. Piotrek
Trzeba zrobić detekcję zbocza np. poprzez użycie dodatkowej zmiennej- flagi Zmienna ta ustawiana byłaby np. na 1 po wysłaniu SMS-a, a wejście do podprogramu wysyłającego SMS pod warunkiem, że ta zmienna = 0 If Pir_1 = 0 And Mw_1 = 0 And Flaga = 0 Then ....... (program wysyłający SMS) Flaga = 1 En If Gdzieś w głównym programie If Pir_1 = 1 And Mw_1 =...
Obstawiam, że się BASCOM nie wyrabia z obsługa przerwań co 13us. Ale na BASCOM-mie się nie znam. 4.3ms daje przerwanie co ca. 16us, co by się zgadzało z obserwowaną czestotliwością ok. 30kHz.
I w dodatku Timer sam z siebie nie generuje przerwania. Ustawia flagę. Jak nie zezwolisz na obsługę to przerwania nie będzie.
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
A po co tak teoretyzować - wystarczy zajrzeć do PDF'a scalonego odbiornika TFMS czy TSOP żeby zobaczyć jak należy postąpić nie tylko z linią sygnału wyjściowego ale też jak podać zasilanie. Ludziom nie chce się tam zajrzeć a potem zdziwienie, że nawet jak działa - to jednak jakieś błędy się wkradają, czasem jakieś zakłócenia itp (jak tam już zajrzysz...
Nie masz za dużo w funkcji obsługi przerwania. Dużo Waitms i jeszcze obsługa LCD. Może przerwania tak szybko nadchodzą, że nie zdąża czasu na wyjście z niego. Funkcja przerwania powinna być krótka
Err = 1 wstawiasz w obsłudze przerwania od Timera. A Err = 0 nigdzie ;)
Ustalasz długość odbieranych danych np. 2 bajty, wstawiasz licznik odliczający do 2 :) i łapiesz jeden bajt, potem drugi, Kasujesz licznik i od nowa :) wysyłasz następne 2 bajty itd. ...
Masz w programie procedury obsługi przerwań ?
Wróci do funkcji2, ponieważ przerwanie zawiesza dotychczasowe działania, a po zakończeniu jego obsługi wraca do wykonywania przerwanych operacji.
No cóż, Bascom umożliwia wstawki w asemblerze, co może skrócić obsługę przerwania...
Będziesz mniej razy wyskakiwał z podprogramu do obsługi przerwania.
Przerwanie jest zgłaszane, gdy zostanie odebrany bajt. Wywal przynajmniej jedno z porównań z 13. Przecież jeśli jest równe 13 to nei ma sensu sprawdzać, czy jest różne od 13. Stare przysłowie pszczół, które cytuję to co 3 dni: żadnego oczekiwania w obsłudze przerwania. Wyrzuć Waitms 100 z obsługi przerwania! Nie możesz również nic nadawać w obsłudze...
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...
Poczytaj o przerwaniach wywoływanych od bufora UART ;-) Wówczas, gdy na buforze pojawi się znak, program skoczy do procedury obsługi przerwania, a tam możesz już robić co chcesz. Polecam zmianę jakieś flagi widocznej w pętli głównej, żebyś nie robił skoków z obsługi przerwań.
Instrukcja Wait nie stopuje procesora. Procesor odlicza czas poprzez zmianę wartości rejestrów a więc działa. A skoro działa to powinien także odczytać informację, że nastąpiła sygnalizacja od przepełnienia Timera. Spróbuj zastosować tą instrukcję. Tylko nie wywołuj jej w obsłudze przerwania a w pętli głównej. Bo gdybyś wywołał jej obsługę w przerwaniu...
Witam Dla celów edukacyjnych w załączniku jest schemat i program do obsługi czterech wyświetlaczy na układzie 74164 W układach bardziej rozbudowanych programowo trzeba wykorzystać Przerwania Piotr
Po uruchomieniu zasilania najpierw odczekaj chwilkę, później skasuj flagę przerwania INT1 i dopiero zezwój na obsługę przerwania INT1.
Tylko ze skokami uważaj, bo zapchasz stos i wszystko stanie. Lepiej wprowadz jakąś zmienną logiczną i wykonywać skok względem tej zmiennej w programie a nie w obsłudze przerwania, a w obsłudze przerwania zmieniać tylko wartość tej zmiennej. Pozdrawiam, Konrad.
A jeśli chodzi o AVR to: ON źródło_przerwania nazwa_podprogramu [ NOSAVE ] gdzie: źródło_przerwania - symboliczna nazwa źródła przerwania, nazwa_podprogramu - etykieta określająca gdzie znajduje się podprogram obsługi przerwania. jako żródło przerwania można: URXCprzerwanie układu sprzętowego UART – odebranie znaku UTXCprzerwanie układu sprzętowego...
wpisać w odpowiednim miejscu A w które miejsce programu nastąpi powrót z podprogramu obsługi przerwania? Ok. Trzeba by zmienić rejestr w programie obsługi przerwania.
Gdzies juz chyba widziałem, jak napisałeś coś w stylu, że "ogólnie wiadomym jest, że bascomowe SPISLAVE nie konfiguruje tak jak potrzeba" . Ja o tym czytałem pierwszy raz... Mogę wiedzieć której wersji Bascom używasz jeśli nie najnowszej 2085? W SPI najważniejsze jest to, że to master taktuje slave`a. Dlatego nie bez powodu w komendzie konfiguracyjnej...
Raczej nie. Bardziej obstawiałbym bebechy Bascom-a związane z obsługa przerwania. Ale tu Zumek jest ekspertem... ;)
1. Wyłączyć przerwanie na czas wyświetlania. 2. Jeśli całość nie jest skomplikowana i krytyczna czasowo wyświetlać w podprogramie obsługi przerwania.
no to nic, zastosuję dodatkowy mikrokontroler do obsługi serwa
witam. Napisałem o to taki program: [syntax=basic4gl]On Int0 Przerwanie Nosave Enable Int0 Config Int0 = Change Enable Interrupts Config Portd.7 = Output Dim A As Byte Cls Do Locate 1 , 1 Lcd ; A; Loop End Przerwanie: A = A + 1 Toggle Portd.7 Return [/syntax] pin pd.2 mikroklocka podłączony jest do przerwania int PCF8583 lub pod zwykły przycisk zwierany...
Nie rozumiem o co chodzi z tą stałą zależną od Xtal kwarc jest 14,7456MHz czemu taki ?? Bo to wielokrotność 11,592MHz co pozwala na wyciśniecie z procka 115200 baud przy zerowym błędzie transmisji i nieco większej wydajności. (Całość ma się komunikować z PC po RS232) Skąd wątpliwości co do organizacji tablicy ?? Poglądowe schematy są tutaj: http://www.elektroda.pl/rtvforum/topic25...
Niedokładnie przeczytałeś. W zakładce nawigator: Config Timer- uwaga! po ustawieniu prascale licznik natychmiast zaczyna zliczanie. Można użyć start Timerx i stop Timerx Np. Config timerx, prescale 'timer zaczyna liczyć stop Timerx 'timer stoi- ale już coś zliczył Timerx=y 'timer ma wartość początkową =y - np.0 Start timerx ' Timerx zaczyna liczyć od...
Z tego fragmentu nie wiadomo czy używasz przerwań. Może wywołujesz jakieś przerwanie i jego obsługa zajmuje tyle czasu , że przychodzi następne przerwanie i program się pętli ( jedyne co robi to obsługuje przerwanie )
Przerwanie przerwie wykonanie instrukcji Wait. Po wykonaniu podprogramu obsługi przerwania uC dokończy wykonanie instrukcji Wait. Wniosek - instrukcja Wait nie wstrzymuje działania uC.
Cześć, Zwróciły moją uwagę 3 rzeczy: 1. Program w Bascom musi mieć część główną- musi ona być zakończona instrukcją "END" a u ciebie jej nie ma. Nie za bardzo wiem jak kompilator przetłumaczy taki program, ale na pewno nie tak jak chciałby programista. 2. Cytuję fragment procedury i od razu podkreślę to o co mi chodzi Do Debounce P3.2 , 0 , Poczekaj...
To pewnie wynika z tego że powstało dużo różnych AVR`ów. Jeśli na początku ktoś korzystał tylko z jednego typu to mógł sobie w IDE ustawić konfigurację dla stosów a nawet wyświetlacza LCD czy I2C. Stąd dla wstecznej kompatybilności dalej tak można zrobić. Na przykład ustawienia dla stosów są tutaj tylko moje są już zmienione bo mogę szybko wkleić to...
Żeby skasować flagę przerwania w rejestrze, musisz zapisać " 1 ". Znajdziesz to w dokumentacji mikrokontrolera. Cytat z polskiego tłumaczenia: Flaga jest zerowana po wykonaniu procedury obsługi przerwania. Lub może zostać wyczyszczona poprzez wpisanie logicznej jedynki do niej.
Dzięki wielkie za pomoc, pomogło wyrzucenie tego z obsługi przerwań
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......
To jak najlepiej to napisać aby nie wstrzymywać programu a jednocześnie nie zgubić żadnych danych z MIDI - w Bascomie. robiw
Chodzi mi o to że w bascomie żeby przerwania działały musisz włączyć globalną obsługę przerwań, i dopiero konkretne przerwanie. Do tego widzę że nie ma jak się wykonać podprogram "readir" bo masz wyłączoną globalną obsługę przerwań. Proponuję : [syntax=basic4gl] Config Rc5 = Pine.4 On Int4 Readir Config Int4 = Low Level Enable Interrupts Enable Int4...
No to mamy winowajcę. Robienie czegokolwiek długotrwałego w przerwaniu to chory pomysł, ale problem polega na tym, że procedury obsługi LCD nie blokują przerwań na czas wykonywania operacji na LCD - dołóż blokowanie i odblokowanie przerwań na prymitywach LCD i zadziała (jako proteza). żeby zadziałało dobrze - przenieś obsługę 1Wire do pętli głównej.
Umieść odbiór danych w obsłudze przerwania od URXC.
Można dać zewnętrzny dzielnik sygnału do silnika krokowego na jakiejś małej zewnętrznej płytce. I wtedy dać sygnał z Timer0 do silnika a Timer1 wykorzystać do generowania 1s. Ale wydaje mi się że jednak można to zrobić na samym procesorze- wszystko zależy od czasu obsługi przerwań.
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?
Nic nie musisz (jeśli chodzi o Bascom - sam robić w przerwaniu) Bascom ofruje ci za free - pełną sprzętową obsługę RS232. Zapoznaj się tylko z poleceniem Config Serialin oraz z parametrem Bytematch tego polecenia - a wszystko stanie się jasne. Nic nie będziesz musiał sam oprogramowywać w przerwaniu bo to jest bez sensu. po prostu będziesz wysyłał paczki...
Zadeklarowałeś "Zmianna" a przypisujesz "Zmienna". :) Edit: Wyjście z procedury obsługi przerwania wykonuje się za pomocą Return a nie Goto Glowny ! Resztę błędów znajdziesz sam. :)
Na razie przestanę śledzić temat bo maili dużo :D Sprawa się rozjaśniła trochę. Compare pewnie używasz dlatego że chcesz mieć też sygnał przerwania i w nim ustawiasz jakieś flagi albo timery programowe. Spróbuj działać na zmiennej W w pętli głównej, a wartość przypisać w obsłudze przerwania.
To po to masz to przerwanie a w nim zmienną aby własnie nie czekać na konwersje temperatury. Rób po swojemu bo nie kumasz tego co ja do ciebie mówie a najlepiej umiesc wszystko w przerwaniu to nie bedzie sz potrzebował programu głownego - czysty zysk.;-)
Moim zdaniem koncepcja powinna być taka: 1. Obsługa przetwornika analog-cyfra. Na początek dobrze żebyś umiał dobrze zmierzyć liczbę impulsów. Nie wiem dokładnie jaka jest specyfika Twojego sygnału, jaką amplitudę mają owe szumy, skąd się biorą i czy nie warto by ich po prostu potraktować filtrem dolnoprzepustowym, a jeśli mają odpowiednio niską amplitudę...
Obsługa 1Wire w BASCOMie nie jest obsługiwana w przerwaniach. Możesz spróbować czegoś takiego: cli 1wreset 1wwrite &H55 sei cli 1wwrite B2 sei cli 1wwrite &H44 sei Chodzi oczywiście o porozdzielanie wszystkich instrukcji 1Wire sekwencjami sei,cli.
Wydaję mi się że jest to możliwe ale procedura umieszczona w podprogramie powinna być bardzo krótka. Pewniejszym sposobem jest stosowanie flagi w przerwaniu a w pętli głównej przetwarzanie jej.
Witam, zanim zabierzesz się za pisanie własnej obsługi przerwań do RS232 w Bascomie, to może najpierw spróbuj zrobić to w oparciu o dobrodziejstwa jakie daje ci Bascom. nie znasz poleceń INPUT , INKEY czy PRINT ???? do tego jeszcze może Config Serialin bo w powyższym kodzie odstawiasz niezły "miszmasz" i nie ma co się dziwić, że ci nie działa. Oczywiście...
Zmień: dim Objetosc_lcd as string*10- a potem jakie x-sprawdź. Bascom jest wolny i gruby- jak wół. Można na nim w pewnym stopniu polegać Ale opanowanie rasowego konia jakim jest C- jest trudniejsze- ma sam na wiele spraw własne zdanie. Brakuje oscyloskopu. Chyba jest-widać sonde. P.S. W głównej pętli wywołujesz menu w którym "siedzisz" przez waitms...
Albo poczytaj o obsłudze przerwań
co ma się niby ustawić Portd.0 czy Portd.5 ? Gdzie jest procedura obsługi przerwania od Timera? Nie wiem czy reset nie działa tylko bitowo w Bascomie, myślę że lepije i bezpieczniej jest zrobić krok=0.
Witam, Magistrala 1-wire posiada dość mocne restrykcje czasowe co do trwania poszczególnych stanów na DQ. Przerwanie Timera, a wiec wykonanie podprogramu związanego z obsługa przerwania, powodowało zmianę długości tych czasów, gdyż są one generowane softwaerowo przez Bascom. Czasem może się zdarzyć że kolizja i tak wystąpi pomimo że teraz wszystko jest...
Nie myślałeś na obsługą klawisza w przerwaniu od INT? Trzeba byłoby jedynie wytłaczać je podczas komunikacji 1-wire żeby się nie rozjechał.
A co z powtówną instrukcją LOAD Timer0, 50000 w procedurze obsługi przerwania?
Przemyśleć inne rozwiązanie, sam prosisz się o błędy.....
Return w przerwaniu nic w takim przypadku nie da to zwykły skok na początek epilogu obsługi przerwania, co można zastąpić zwykłym ifem.
Wydaje mi się, że podczas wykonywania komend obsługujących LCD (Locate, Lcd) dzieje się jedna z dwóch rzeczy: a) przerwania zewnętrzne są wyłączane (nie są obsługiwane przerwania, które są zagnieżdżone jedne w drugich), ...............) Tak ma być czy robię coś źle? Jakieś pomysły o co może chodzić i jak podejść do problemu? Pokaż gdzie i jak masz...
Jaki będziesz miał wyświetlacz? Alfanumeryczny że string będzie ok? Czy może LED lub LCD segmentowy? Żeby zmieniać wartość enkoderem trzeba go obsłużyć... Enkoder ma przycisk? Zatem weź zmienną Word w której będziesz zmieniał nastawy np. [syntax=vbnet]dim wartosc as word dim index_wartosc as byte if index_wartosc =1 then wartosc=wartosc + 1 end if if...
A nie możesz po prostu robić obliczeń w funkcji obsługi timera 1, zapisywać to do globalnych zmiennych i następnie w głównym programie odczytywać te zmienne jeśli zamierzasz wyświetlić te wartości? Główny ekran to pewnie jakaś pętelka, która odczytuje pewne wartości, jak np. timer 0, temperatura, itp., następnie przelicza wszystko, potem wyświetla i...
A nie lepiej zrobić tak, że uC nie jest zasilany do momentu naciśnięcia przycisku ? Rozumiem, że chodzi o oszczędność energii, więc po co w ogóle zasilać uC kiedy nie potrzebuje on pracować stale ? Zrób tak, że w momencie naciśnięcia przycisku procesor dostaje GND i równocześnie na pin od odpowiedniego kodu RC5. Po wysłaniu kodu puszczasz przycisk,...
Słuchaj możliwe błędy w przerwaniu: 1) nie ustawione jako wejście 2) złe wyzwalanie (w to wlicza się brak podciągania) 3) brak włączonej obsługi przerwań 4) jeszcze raz złe wyzwalanie! 5) źle zrobiony hardware! 6) Nie krzycz na ludzi mających większe pojęcie niż Ty i wytykających Ci oczywiste oczywistości gdzyż jak już to zadziała, będziesz marudził...
przycisk do minusa, if portd.0 = 0 juz jest przerwanie wychodzi co 0,08 sek (mniej wiecej) wogole nie reaguje na przycisniecie... jest tez cos takiego jak programowa eliminacja drgan stykow, rzeczywiscie moze zbyt czesto sprawdza, ale to zmienie, narazie wogole nie chce ruszyc...
Nie jestem pewien, ale wybudzanie da się chyba tylko stanem nie zboczem... doczytaj w dokumetacji:> Przed uśpieniem(procek wykonuje kod) , INT0 może być ustawione na falling , ale przed wykonaniem instrukcji SLEEP , należy zmienić sposób wyzwalania na LOW LEVEL i ... włączyć przerwania , jeśli usypiamy proca w przerwaniu. Poza tym , bit ISC01 może...
Przerwanie PCINT wystepuje na skutek zmiany. Nie ma mozliwości zrobić aby było np tylko na jedno zbocze. Musisz w procedurze obsługi przerwania sprawdzić, jakie to było zbocze.
W podprogramie obsługi przerwania Timer4 brak ci instrukcji end if.
Dobra nie ma się, co nad tym rozczulać. :crazyeyes: Marnujemy na to czas, jak jest burak w książce to se możemy szukać błędu. W oryginalnej pomocy BASCOM też nic nie pisze na temat obsługi RC5 na przerwaniach. Spróbuje coś napisać na tym działającym kodzie. Masz w domu tę pamięć EEPROM 24C16. Jak tak to daj znać, i zaprogramuj w niej jakiś tekst, ale...
czyli mam coś takiego [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 1000000 Config Lcdpin=Pin,Rs=Portc.0,E=Portc.1,Db4=Port... Config Lcd = 20 * 4 Cursor Off Cls Config Kbd = Portd , Debounce = 20 , Delay = 100 Dim Key_char As Byte Dim Key_str As String * 1 Dim Result As String * 20 Result = "" Do Key_char =...
Poczytaj o Timerach. Po uruchomieniu timera możesz zająć się czymś innym w programie. Zmianę stanu na wyjściu zrób w obsłudze przerwania od Timera.
Próbowałeś "ręcznie" napisać obsługę tych przerwań? Czasami trzeba troszkę wyręczyć bascoma. Odpowiedni wpis w rejestrach PCICR i PCMSK0 powinien załatwić sprawę ;)
Wywal z przerwania obsługę LCD i waitms. Z tego powodu może gubić przerwania i cały pomiar czasu jest do d.. Obsługa przerwania ma trwać jak najkrócej a pozostałe dodatki robić w pętli głównej. Impulsy masz co 20ms a obsługa przerwania trwa min 100ms więc to nie ma prawa działać
Przy odbiorze w przerwaniu timera mamy stałą częstotliwość przerwań, np. 5 kHz. Przy odbiorze z użyciem przerwania od zbocza mamy zmienną, nieokreśloną częstotliwość przerwań - ja oglądałem na oscyloskopie odstępy zboczy rzędu 20..50 us, czyli przy braku transmisji procesor spędza praktycznie cały czas w obsłudze przerwania od śmieci.
Obsługa przerwania na pewno nie zmieści się w czterech cyklach.
Nie taka konstrukcja jest jest niepoprawna. Obsługa przerwania musi być zakończona instrukcją Return. Zamiast Goto ustaw flagę i sprawdzaj jej stan w pętli głównej. Jeśli warunek się spełni to wtedy skocz do podprogramu.
Możliwości jest wiele i w zasadzie rozwiązanie zależy od autora. Układ z bramkami i tranzystorami spełnia dwa zadania pozwala na zasilanie częsci analogowej z 12V i akceptuje na wejściach linii parametrycznych takie napięcie( Ważne w przypadku zwarcia do +12V , czyli napięcia zasilania czujników PIR) . Tranzystory stanowią dopasowanie logiki CMOS 12V...
Przecież ATmega może działać na 8 MHz na wewnętrznym oscylatorze. Jeśli nie zdążysz z obsługą przerwania, po prostu "zgubisz" przerwanie. W trybie PWM przy 8 MHz nie będziesz miał z tym problemu.
Można wykorzystać przerwanie zewnętrzne. Jutro przerobię program dla zakresu 87,50-108,5 oraz dorobię obsługę przerwania. Teraz jestem już trochę śpiący ;)
W trybie 1 jest 16-bitowy, liczy od zadanej mu wartości do 65536, następuje przerwanie od przepełnienia licznika, coś wtedy może zrobić w obsłudze tego przerwania i ponownie zaczyna zliczać od zadanej mu wartości lub od zera jak mu nie zadasz.
W rejetrze GIFR pojawia się flaga żądania obsługi przerwania INTF0. I czeka. Gdy w rejestrze GICR pojawi się ponownie flaga INT0 (czyli w Bascomie enable INT0) przerwanie jest obsłużone i flaga INTF0 jest wtedy kasowana. Flaga INTF0 może byś skasowana ręcznie.
Procesor ten wspiera takiej możliwości sprzętowo (inne np intel x86 albo Motorola CPU32, posiadają tzw wektoryzowalny system obsługi przerwań i jest taka możliwość). Pozostaje rozwiązanie programowe, niestety ono nieco spowalnia działanie programu.
Konfiguracja dobra. Brakuje jeszcze: pętli głównej, obsługi przerwania i globalnego włączenia przerwań. Load Timer ma inną składnię.
Witam. Według helpa rzeczywiście te instrukcje powinny być tożsame. Niemniej jednak instrukcji Load Timer0 używasz podczas obsługi przerwania. Generalnie obsługa przerwania powinna być jak najprostsza i najkrótsza. Jeden z kolegów kiedyś napisał, że pisze w Bascomie, ale obsługę przerwań wyłącznie w asemblerze. Odchudź maksymalnie obsługę przerwania...
To przez przerwania ! BASCOM 8051 i AVR po obsłużeniu przerwania wyłącza (nie wiedzieć czemu) ogólne zezwolenie na przerwania jeśli procedura obsługi jest w środku listingu. Ja mam swój osobisty sposób na tego typu przypadki a mianowicie, umieszczam procedurę obsługi przerwania na samym końcu programu i to pomaga...
Cześć, z reguły tak to się robi, że podłączasz odbiornik podczerwieni pod przerwanie. Jeżeli program byś pisał w bascomie to prawdopodobnie musi być podłączone pod PIND.2 Jeżeli obsługę RC5 będziesz robił sam to możesz podłączyć pod dowolne przerwanie. Ogólnie zasilanie takiego odbiornika podłącza się przez filtr RC np 100 ohm szeregowo i 10u elektrolit...
Akurat ważniejszy jest mały spadek napięcia, żeby stan niski pozostawał niskim również za diodą. Zrobiłem szkic pokazujący o co chodzi w tym różniczkowaniu i ANDowaniu: http://obrazki.elektroda.pl/7732349900_1... Przy zwykłym różniczkowaniu widać, że brakuje szpilki wskazującej początek impulsu pierwszego kanału. Można ją odtworzyć...
Zakładam że w tym twoim bascomie idea obsługi przerwania jest taka jak w c albo asm bo inaczej przecież być nie może. Przerwanie ma się wykonać jak tylko najszybciej jest to możliwe. W związku z tym żadne tam wyświelanie znaków na LCD nie wchodzi w rachubę a tym bardziej transmisja po I2C. Przerwanie ma ustawić co najwyżej flagę którą z kolei głowny...
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...
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
Jakiś bałagan podajesz. 1. Nie podałeś wersji z debounce- która chodziła przy wolnych obrotach. 2. W programie który wkleiłeś nie ma żadnego odniesienia do Licz: Czy to jest podprogram czy obługa przerwania? 3. Po co w tym Licz wyłączasz prerwanie? Jak to jest obsługa przerwania- to i tak inne przerwania są wyłączone.
Użyj trybu Fast PWM - masz wtedy możliwość regulacji okresu. Obawiam się jednak, że w Bascomie tak się tego nie da zrobić, z powodu fatalnej jakości generowanego kodu - raczej nie wyrobisz się z obsługą przerwań tak często zgłaszanych.
No tak - połączenie Low level i waitms 100 w obsłudze przerwania. Nie mam więcej pytań.
Witam, daj sobie spokój z takim dziwnym skracaniem kodu bo zwykle w takich przypadkach wyłożysz się na plecy i długo będziesz szukał błędu. Po pierwsze - tym GoSub-em chcesz skakać do procedury obsługi przerwania, która wprawdzie w Bascomie kończy się dla programisty podobnie jak np zakończenie podprogramu bo rozkazem "Return" - ale to nie to samo w...
Tu pytam o możliwość skrócenia pojedynczego cyklu, a w drugim wątku pytam o potknięcia sygnału co N cykli, które nie mają nic wspólnego ze skracaniem cyklu. To był taki oryginalny tytuł, lecz w trakcie dyskusji otrzymałeś odpowiedź i przepis na rozwiązanie i tego problemu też, - co sam stwierdzasz: Ciekawe i skuteczne rozwiązanie na skrócenie cyklu...
A... przypomniałem sobie, że jak robiłem obsługę wyświetlacza T6963 to też wyłączałem przerwania na czas obsługi wyświetlacza i sprawa się uspokoiła.
Procesor ATmega od biedy "ma możliwość" obsługi przerwań zgłaszanych z częstotliwością 33 kHz, ale pod warunkiem, że jest programowany w C lub asemblerze, a nie w Arduino ani Bascomie. Obsługa takiego przerwania w C musi być b. uważnie napisana - kilkanaście linii kodu, bez wywołań procedur, mnożeń ani dzieleń.
Nie znam Bascom więc odpowem - zaglądnij do instrukcji mikrokontrolera. Znajdziesz tam informacje, że należy: - ustawić pin jako wejście - ustawić odpowiednio bity ISCxx - włączyć pull-up (jeśli nic innego nie wymusza stanu wysokiego) bo z power down wybudza się tylko poziomem niskim, - włączyć przerwania globalne oraz INTx, - no i oczywiście musi być...
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.
polecenie serwo w bascomie działa tragicznie. proponuję stworzyć na jakimś przerwaniu własną obsługę i będziesz zadowolony
Widzę że muszę trochę sprostować. 1. Nawet kosmicznie często wywoływane przerwanie zdąży się wykonać choć by nie wiem jak długo ono trwało, bo przerwania po wejściu w obsługę jakiegoś przerwania są blokowane i odblokowywane są dopiero po zakończeniu się obsługi tego przerwania. Więc twierdzenie że przerwanie nie zdąży się wykonać w ciągu 128us bo samo...
stm32 obsługa przerwań obsługa przerwań arduino atmega obsługa przerwań
świateł focus bezpiecznik klatka schodowy inspekcja samochodzie
polonez abimex parkside robot koszący
Dlaczego katoda jonizuje gaz w rurze wyładowczej? Migające diody i sygnał dźwiękowy po wyłączeniu silnika