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.
Wait nie stopuje programu. To nie całkiem prawda. Wait zatrzymuje główny program. Nie dotyczy to przerwań, które jak sama nazwa wskazuje przerywają działanie programu głównego, a więc i waita. Tak więc waity nie przeszkadzają przerwaniom, ale przerwania wydłużają czas waita. Przykład: Przerwanie o częstotliwości 400Hz w ciągu 100ms wykona się 40 razy....
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ę...
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...
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...
Przepraszam ale w pierwszej wypowiedzi popełniłem błąd logiczny - oba przerwania powinny być ustawione na te same zbocze a nie różne. Dlaczego, bo tak jak napisałem wcześniej nie będzie można określić kierunku zmian, zawsze bedzie ta sama kolejność wywoływania przerwań. Obojętnie czy kręcimy w lewo czy w prawo. np. ChA narastanie 0->1 a ChB opadanie...
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
' 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...
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,...
1. uC to 89C4051 Faktycznie to troszkę zmienia. Ale malutka '51 atmela ma sprzętowy uart i chociaż to warto było by wykorzystać. Co do reszty sprzętu to użyj jak najwięcej hardware jak się da (encoder na przerwaniu). O rs sprzętowym pod bascomem już tutaj parę razy pisaliśmy - ostatni raz chyba wakacje zeszłego roku. Co do reszty to też da się zrobić...
Po pierwsze to do wklejania kodów programów jest specjalny przycisk Code , wtedy wszystko jest ładnie czytelnie. Jeśli dioda świeci po podłączeniu to musisz dać rezystor aby ja wygasić. Chociaż nie powinno się tak dziać. Możesz dać schemat ? zaprogramowałeś już ten układ ?
(at)stozek - normalnie w Bascom nie jest potrzebna komenda Start Timer0 bo jest on uruchamiany od razu podczas konfiguracji. Używa się tej komendy tylko jeśli poprzednio zatrzymałeś Timer poprzez Stop Timer0. Rozumiem, że zatrzymujesz timer. Tak więc zatrzymywanie timera to zabranie mu źródła taktowania. Bascomowe komendy moża wiec rozumieć tak: Start...
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...
Witam! Mam następujący problem: Kiedy włączam obsługę przerwania z portu szeregowego, procesor strasznie zwalnia, nie wyrabiam się w czasie z programem... Program jest w Bascomie, kontroler to Atmega32. Wszystko zwalnia tragicznie, nawet jeśli w podprogramie przerwania napiszę od razu powrót: Serial_int: Return Sprawdziłem też: Serial_int: Toggle PORTB.3...
Witam!! Ustawiłem sobie powyższym poleceniem wyjścia kilku serw, teraz chciałbm aby w programie móc wyłączyć generowanie impulsów dla jednego z serw, poleceniem disable timer0 przestaje generowac impulsy dla wszystkich a zmiana portu z wyjściowego na wejściowy nic nie daje... Jest jakaś możliwość?? Ponadto, jakie są najdłuższe interwały przerwania wyzwalanego...
Witam Mam takie pytanie.. Czy Bascom potrafi symulować przerwania od Tmerów?? Chodzi mi o to ze gdy napiszę taki program : Config Lcd = 20 * 2 Config Timer0 = Timer , Prescale = 64 Enable Interrupts Enable Timer0 Start Timer0 On Timer0 Etyk Do Loop Etyk: 'tu program obsługi przerwania return To sam nie wchodzi do obsługi przerwania. Zrobi to jedynie...
Koledzy znając życie to pewnie problem wynika z mojej niewiedzy. Mam podprogram Który ma mi zliczyć czasu załączenia pompy. W tym celu wykorzystałem sobie przerwanie które generuje mi przepełnienie co 500ms. W warunku Flagi 500ms jest zmienna (kala(n))która jest zwiększana co 500ms jeśli pompa jest załączona. Załączam sobie pompę np na 3,5s czyli zmienna...
Witam Jak wyeliminować opóźnienia w instrukcji wait przy używaniu przerwań do obsługi serwa? Przy tym programie czas oczekiwania się niemal podwaja: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Pind.1 = Output Config Servos = 1 , Servo1 = Portd.1 , Servo2 = Portc.0 , Reload = 10 Dim I As Byte Enable Interrupts Do I = 70 Servo(1)...
Witam. Mam problem z odpowiednim programem dla uc (bascom) który odczyta mi np 7 kliknięć, przerwań? (dzwonków). Jak wyglądał by taki program, i jakie komendy użyć. Kwestia podłączenia nie wymaga omawiania - powiedzmy 6 stanów niskich (0) i siedem wysokich (1) ---> stan wysoki na jakąś nóżkę. Przerwań w helpie bascoma nie mogę znaleźć :( Pozdrawiam.
Bascom nie jest taki głupi i nie pozwoli skompilować jeśli Relative Call or Jump jest zbyt daleki. Wywali błąd. Przykładem jest biblioteka hexval.lib autorstwa MWS. Nie jest to biblioteka MCS i użyto w niej RJMP i RCALL. Jest pomocna bo sprawdza czy wartości HEXstringów zawierają tylko dozwolone znaki A-F 0-9, jednak dla większych programów np. z obsługą...
Właściwie to jak wrócić z procedury obsługi przerwania w jedno konkretne miejsce programu? [syntax=vb] Config Int0 = Falling On Int0 Przerwanie Enable Int0 Enable Interrupts Start_programu: [...] Punkt_powrotu_z_przerwania: [...] Petla_glowna: [...masa różnych instrukcji i skoków do podprogramów....] Goto Petla_glowna End Przerwanie: [...] Goto Punkt_powrotu_z_przerwania...
(at)ziguś Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd.. wypróbuję rano bo całą noc muszę siedzieć w pracy
A jesteś świadomy tego, że jest tu przerwanie timera wywoływane co 4ms? A jest to coś podobnego do tego o czym pisałem wyżej, ale nie używa przerwań zewnętrznych a ciągle sprawdza w przerwaniach timera.
Spotkałem się właśnie z dziwnym problemem. Mam napisany program na AVR 8535 który zajmuje prawie cały flash. Program działal poprawnie dopóki nie dołożyłem procedur obsługi szeregowego wyświetlacza VFD. Po dołożeniu obsługi wyżej wymienionego program działał poprawnie ale sam VFD nie chociaż procedury jego sterowania są poprawne. Program korzysta z...
Witam. W pewnym sofcie dla Atmega16 wykorzystałem już: - Timer1 (16 bit) do odliczania 0,0001s odcinków czasu - Timer2 (8 bit) jest wykorzystywany przez odbiornik podczerwieni (instrukcja getrc5) Timer 0 niby jest wolny, ale nie wiem / nie jestem pewien czy nie jest on wykorzystywany przez jakieś używane przeze mnie instrukcje (np. print dla sprzętowego...
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...
Obsługa LCD trwa długo , w tym czasie prawdopodobnie często Bascom blokuje przerwania . i dlatego są błedy. I jeszcze jedno - liczysz przerwania co 2ms a ile trwa proces wyświetlania na LCD? Możliwe że czasem nie zliczysz wszystkiego w ten sposób co piszesz. Spróbuj albo wywalić obsługę LCD i zrób wyświetlanie np na diodzie (jak jest równa iluś tam...
cały kod aktualnie wygląda tak. Docelowo w pętli głównej będą inne rzeczy jeszcze. . Może moja metoda jest zła, próbowałem z trybie CTC ale wtedy właśnie nie mam płynnej f wyj tylko właśnie skokowo w związku z rozdzielczością i preskalerem. Stosując prescaler = 1, oraz timer0 preload = 96 zakładasz że przrwania wywołane przez Ovf0 wystąpią co 160 cykli...
Już kiedyś pisałem o błędach bascoma w obsłudze przerwań (raz wywołane jest potem cyklicznie generowane pomimo, że czynnik wywołujący przerwanie już zanikł, bo bascom zapomina przy kompilacji kodu o fladze w rejestrze przerwań). Ale tu Bascom nie ma nic do rzeczy, flaga wystąpienia przerwania jest kasowana automatycznie przez procesor gdy włączona...
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ń.
Ok kumam :). Dzięki. Mam jeszcze jedno pytanie a co będzie gdy dane z Uarta bedą nadchodzić w chwili gdy będzie obsługiwane inne przerwanie. Z tego co pamiętam to w AVRach nie można ustawić priorytetów przerwań tak jak w '51.
Pisałeś: "Jest to zdaje się tryb CTC, ale gdzieś wyczytałem, że w Bascomie nie da się ustawić tryby CTC za pomocą wbudowanych "słów" typu config.." Z tego "zdaje się" trudno wywnioskować, że tak ma być. Teraz już wiem. W Bascomie można bez wielkiego problemu konfigurowac Timery przez wpisy do rejestrów. Zaraz sprawdzę co wpisać aby otrzymać tryb CTC....
Keramstwo, coś nie gra w Twojej wypowiedzi. Wynika z tego, że dzięki umieszczeniu obsługi DS w przerwaniu uniknąłeś opóźniającego wpływu na bieg programu. Wybacz, ale to absurd. Obsługa DS tyle samo trwa w przerwaniu co poza nim, a na czas przerwania zatrzymywany jest normalny bieg programu. Dlatego np. program realizujący emisję dźwięku poprzez ciągłe...
Tak nie mogę, gdyż, tak naprawdę (nie napisałem) obsługa impulsatora zaszyta jest w procedurze a procedura używana w kilku miejscach programu, gdyż za pomocą impulsatora zmieniam ponad 20 parametrów. Chyba jednak użyję przerwania Int0, które to będę blokował w obsłudze przerwania Serial (jest ważniejsze). Ciekaw jestem tylko czy przerwanie od Seriala,...
...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
Zapewne da się to zrobić inaczej. Da się tak jak w C przy czym w Bascomie wystarcza tylko poprawne wykorzystanie przerwań i obsługa "manualna" kilku rejestrów co akurat dla większości bascomowców jest problematyczne, bo język sam z siebie przyzwyczaja do rozwiązań podanych na tacy. A skoro już trzeba robić coś ręcznie, żonglować bitami w rejestrach,...
To strasznie musiał spaprać oprogramowanie. Po pierwsze - zastosowanie zabawki pt. BASCOM w kodzie krytycznym czasowo, po drugie - źle napisana obsługa przerwania zapalającego i gaszącego diody. Nie miałem problemu z przejściami na diodzie RGB sterowanej z ATtiny13, przy 256 poziomach na 150 Hz, czyli częstotliwości przerwań 38400 Hz przy zegarze 9.6...
Rozwiązuj problem modułowo,trzeba napisać najpierw najważniejsza cześć czyli obsługa przerwania zewnętrznego.Pin INT0 należy ściągnąć rezystorem stosownie do ustawionego trybu ,jeśli ma wykrywać zbocze opadające to rezystorem do zasilania,jeśli narastające to rezystorem do masy.Wewnętrzny pullup różnie się zachowuje w tej sytuacji. Robi się to tak:...
Możesz zrobić to na dwa sposoby. 1. Wykorzystać przerwania. 2. Wykorzystać główną pętlę programu. W 1 przypadku ustawiasz któryś z timerów na powiedzmy 100 000 przerwań na sekundę. Za każda obsługa przerwania zwiększasz wartość zmiennej (licznik) o jeden i porównujesz z ustawioną wartością PWM (jakaś zmienna). Kiedy ustawiona zmienna jest mniejsza od...
Podałem wyraźnie, że oprogramowanie napisałem w WinAVR ;) Nie uznaję czegoś takiego jak bascom (wystarczyło mi raz w życiu się na nim przejechać...). Przedstawię "odchudzone" kody źródłowe - aby były całkowicie funkcjonalne należy troszkę dopisać. Ogólna idea jest przedstawiona. Sam main w programie jest niewielki. Dla przykładu pokażę jak zrealizowałem...
W konfiguratorze LCD ten pin nie występuje w ogóle, więc w sumie nie wiem jak zadeklarowac, że go sie w ogóle używa.... config lcdpin Z częstotliwością nic nie grzebie, więc jest fabryczna, w kodzie mam polecenie " $crystal = 8000000 " . Oscylator rzeczywiście ma 8MHz, ale fabrycznie jest włączony dzielnik... Pomigaj diodą. Zrób prostą pętlę - zmień...
Witam ewentualnych czytelników tego tematu. Zamykam temat, jako że problem rozwiązałem. Obsługa timerów została poprawnie zrealizowana po skompilowaniu projektu w Bascomie dla procesora Atmega48, Jedynie przy obsłudze przerwań pojawił się problem. W moim programie była konieczność "ręcznego" kasowania flagi przerwania INT1 za pomocą instrukcji: SET...
T1_HEQU0DCh T1_LEQU000h INIT:MOVSP,#STACK-1 ; zaladowanie wskaznika stosu MEM:MOVR0,#127 MEM1:MOV(at)R0,#0 DJNZR0,MEM1 MOVIE,#0 ; wylacz uklad przerwan MOVIE,#10001010B ; wlacz uklad przerwan i przerwanie T0 i T1 MOVTMOD,#00010001B ; T0 w trybie 1, T1 w trybie 1 MOVTH0,#T0_H ; zaladowanie wartosci MOVTL0,#T0_L ; pocz dla licznika MOVTH1,#T1_H MOVTL1,#T1_L...
.... dodaję że problemy mam z tym że jeśli umieszczę moje wypociny w przerwaniach to podczas wysyłania danych z modułu A instrukcją Print to układ lubi mi się zawiesić , lub mam problemy z odebraniem kompletnych danych. W tem przykładzie jaki podałem ostatnio wszystko chodzi idealnie poza tym że mam zaśmieconą i opóźnioną przez to pętlę główną. Posłuchaj...
janbernat --> tak na pierwszy rzut oka to w tym rozwiązaniu do obsługi klawiatury nie ma jednak żadnego mechanizmu eliminacji drgań styków i stąd może być to wrażenie, że niepewnie się przełącza itp moim zdaniem. Zobacz, naciskamy klawisz - rozpoczynają się drgania (zawsze występują prawda?) u ciebie od razu na pierwszy sygnał drgania styku reaguje...
Dołożyłem obsługę przerwań wewnętrznego timera , i tutaj pojawił się problem. Czujniki zaczęły się "dławić" czasami (przez sekundę ) wskazywały mi temperaturę nierealną ( 400 st C) a czasami układ nie wykrywał czujnika Wszystkie te złe rzeczy dzieją się raz na kilkanaście sekund, jednak wystarczy to, żeby zafałszować inne zmienne (np temperaturę maksymalną)...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
A start timer to nie jest konieczne do uruchomienia licznika?? Zamiast tego Do 'pętla temonstracyjna zmieniająca położenie serw Wait 4 Pozycja1 = 600 Pozycja2 = 600 Wait 4 Pozycja1 = 115 Pozycja2 = 115 Loop End zrobiłbym raczej coś takiego Do 'pętla temonstracyjna zmieniająca położenie serw Wait 4 timer0 = 250 enable timer0 Pozycja1 = 600 timer1 = 250...
Co innego gdyby to rozbić na małe fragmenty sekwencyjnie wywoływane, pomiędzy którymi znajdzie się miejsce na realizację innych zadań. Tyle, że to już wywraca do góry nogami całą filozofię programowania sekwencyjnego. To już zahacza o wielowątkowość. Ze swojej strony - np. taki FreeRTOS jest fajną zabawką, ale niestety czasem narzut (zużycia RAM, nie...
FastAVR jest mocno związany z asemblerem i daje bardzo efektywny kod wynikowy - Bascom się chowa przy nim. Ale tak jak w asemblerze trzeba pamiętać o deklaracji i inicjacji każdej zmiennej. Pierwsze 3 linie definiują typ proca, głębokośc stosu, prędkość zegara - ważne dla symulatora. Definiuję przerwanie od Timera0 i ustalam tryb pracy Timera0 Definiję...
Większość tego typu tematów na tym i innych forach wynika z ignorancji . Ignorancja po angielsku i po polsku znaczy to samo tyle że u nas jest mylnie interpretowana. Ignorancja to po prostu niewiedza i nieznajomość tematu. W instrukcji pisze wyraźnie, że kiedy konfigurujesz Timer to jest on startowany automatycznie. W kodzie w dowolnym miejscu piszesz...
na każdym który napiszę jest tak samo, w nowym temacie powyżej podałem ustawienia fuse bitów, zaraz wkleję kawałek na którym teraz się bawię Dodano po 4 to kod na którym teraz się bawie '***************************************... '-------------------- konfiguracje ----------------------------------------... $regfile...
Pisze właśnie program obsługujący matrycę LED 126 na 15 mam sobie prototypowy programik który wygląda tak : Config Timer0 = Timer , Prescale = 8 On Timer0 Tim0 Load Timer0 , 200 Enable Timer0 Enable interrupts Do For Da = 0 To 240 Dat(da) = 128 Next Da Loop End Tim0: Nr2 = Nr2 + 1 Nr3 = Nr2 + 15 Nr4 = Nr3 + 15 Nr5 = Nr4 + 15 Nr6 = Nr5 + 15 Nr7 = Nr6...
Witam! Płytki i schematu nie trzeba już sprawdzać - wykonane, połączone i działa. Kwestia nierozwiązana to program w Bascomie. Poprzedni kod trochę zmodyfikowałem, ale nic to nie dało. Sama obsługa przerwania Timera0 jest zła, bo wywalając całą resztę i zostawiając: [syntax=basic4gl]$regfile = "m8adef.dat" $crystal = 8000000 Config Pinb.1 = Output Config...
Szukam od kilku tygodni jakiejś ciekawej książki o programowaniu mikroprocesorów AVR w języku C w okolicznych bibliotekach i księgarniach oraz w internecie. Jednak znajduję wszystko albo na assemblera albo na bascoma. Assembler jest dla mnie zbyt żmudny natomiast bascom niesatysfakcjonujący dlatego wybór padł na C. Niestety niewiele istnieje polskich...
na wejścia podłączony jest enkoder(pierwszy zrobiłem z myszki komputerowej) w zależności na którym wejsciu pojawi się pierwszy impuls to przerwanie jest obsługiwane jako pierwsze . może cos z tego skorzystasz. obsługa przerwań jest na dole Dodawanie: i Odejmowanie:. Ale Panowie litości w krytyce to jest mój pierwszy program w Bascomie. Tak się złożyło...
Witam Stopniowo rozbudowując o kolejne konfiguracje układ chciałbym mieć możliwość ustawiania parametrów zegara przez pilota ( w sumie to bardziej wygodne i nie zabiera wyprowadzeń uC ). Mam program z menu działającym na przyciskach, zastosowałem flagi, gdyż sprawdzanie tylu wersji warunków niepotrzebnie zagmatwałoby kod. Zostawiłem obsługę przez przyciski...
stm32 obsługa przerwań obsługa przerwań arduino atmega obsługa przerwań
sensory płyta piekarnika amica wyświetlacz kyocera licznik wydrukowanych stron
regulacja beretta kompakt satel perfecta
Jak prawidłowo połączyć kominek wentylacyjny z kominem? Skoda Octavia 2 1.6 MPI 2004 - Gaśnięcie silnika i kontrolka trakcji