Problem jest taki. Ustawiam przerwanie dla int0 przy opadającym zboczu. Odblokowuję przerwania. Odblokowuję INT0. Podaję na int0 ciąg impulsów. Obsługa przerwania: Blokuję przerwanie INT0 ------- program obsługi -------- Czekaj aż końcówka INT0 stan wysoki. Odblokuj INT0 Wróć do pętli programu. Problem polega na tym że po obsłudze przerwania jest ona...
A dlaczego klawiszy nie obsługiwać również w przerwaniu co któreś wywołanie ? P.S. Autor tematu ma możliwość samodzielnego zamknięcia.
Coś te flagi przecież ustawiło... Najpierw włączasz obsługę tych przerwań, potem włączasz podciąganie pinu to flaga już ustawiona...a kasowana jest przez AVR sprzętowo kiedy obsługiwane jest przerwanie. Bascom nie musi obsługiwać żadnego kasowania flagi przerwania bo robi to sam procesor tyle, że w przerwaniu (jednym w wyjątków potwierdzających regułę...
Cytuję: "Ustawia się to w zależności od skomplikowania programu. (...)" O co tutaj chodzi i o jakie wartości tutaj chodzi? Dokładnie chodzi o ilość bajtów jaką początkowo zajmie każdy ze stosów. Stos jest elementem rozrastającym i kurczącym się dynamicznie. Może dojść do sytuacji gdzie jeden zajdzie na drugi - stack overleap - i kłopot gotowy. Dlatego...
Reti a kasowanie flagi to dwie różne rzeczy, domyślnie przerwania są załączone, wywołanie przerwania powoduje blokowanie reszty przerwań (żeby nienastępowały w czasie trwania jednego przerwania kolejne przerwanie), reti to powrót z przerwania.. powoduje ponowne załączenie przerwań i powraca do właściwego kodu programu, kasowanie flagi jest poto, że...
Hehe, zapomnisz o Wait tak jak ja zapomniałem :) - już nie pamiętam kiedy go używałem. Powinieneś też wiedzieć, że korzystając z przerwań drastycznie odbija się to na dokładności instrukcji Wait - najczęściej opóźnienie nie ma już nic wspólnego z tym co tam wpisujesz. Oczywiście zależy to od "gęstości" wywoływania przerwania - czym częściej wywołanie...
Myślę że można by użyć przerwania do tego. Np. Sygnał o zmiennym wypełnieniu podać ma na wejscie przerwania INT0 (skonfigurowanego na wywołanie przerwania przy rosnącym zboczu). W obsłudze przerwania należałoby: Włączyć licznik T0 w trybie licznika 16-to bitowego wykonywac pętlę trwającą dopóki INT0 jest wysokie gdy pętla się skończy zatrzymać TIMER0...
dzięki i mam jeszcze jedno pytanko to co napisałeś to jest wywołanie przerwania a czy można tym sposobem wykożystując dowolny pin jako wejście(nie przerwanie) ustawić tak żeby procesor reagował tylko na zmiane stanu z 0 na 1 lub odwrotnie
Mam rozumieć, że układ zliczał prawidłowo, jeśli nie wykorzystywałeś INT0. Jeśli tak, to ja mam taką teorię: enkoder podaję impulsy o częstotliwości 250kHz (impuls co 4us), w czasie 100ms, takich impulsów może przyjść 25000. Z racji że opóźnienie jest programowe, każde wywołanie przerwania INT0, powoduje "wyskok" z procedury waitms (załóżmy że to jest...
Eifr = &B00000011 Set Eifr Sprawdziłeś co robi ten zapis bo coś mi się wydaje że tu masz problem , jak skasować wskaźnik przerwania masz w PDFie atmegi . Wywołanie przerwania powoduje zapis 1 w eifr kasuje się go manualnie zapisując wartość 1 , ale zeruje go też instrukcja powrotu z przerwania "reti" więc jak go ustawiasz manualnie przerwanie ko kasuje...
smalski->O priorytecie przerwań w AVR-ach , można powiedziec tak , że im niższy(mniejszy) adres wektora , tym wyższy priorytet posiada dane przerwanie. To jest zasada stosowana w PC, (np przerwanie 2h ma prorytet wyższy od 3h, ale niższy od 0h... 0h (dzielenie przez zero) ma najwyższy priorytet..).. w AVR wszystkie przerwania mają taki sam priorytet.....
Nie używam i nie znam BASCOMA. Próbuje swoich sił w Arduino IDE (ATMega328(at)16MHz). Po pomocy ze strony przyjaznych niewiedzącym: BlueDraco , nsvinc , tmf mogę stwierdzić że: Ten uC ma na pewno możliwości, aby obsłużyć te przerwania (zakładam ok. 33kHz). Problem nie polega na wywołaniu zaprogramowanego przez Ciebie przerwania (ale to już zauważyłeś),...
Wkońcu to jest Bascom. w bascomie na pożądku dziennym jest mówienie "moduł działa poprawnie gdy inny moduł jest niezaładowany, ponieważ również używa timera i moduły zaczynają interferować niemożna używać ich razem" (zakładając że moduł jest niejawnie dołączany do projektu w bascomie, gdy tylko w kodzie występuje wywołanie funkcji modułu) jeśli program...
Przede wszystkim nie wiecz czy wykrywasz początek bitu startu, jego środek, czy może prawie koniec. Gdybyć wykrywł zbocze z wykorzystaniem przerwania, to dopiero wtedy mozna mówić o synchronizacji. Przecież on b. szybko wykonuje kod, a jedyne co sprawdza to czy zbocze opadło. Nie ma możliwości, żeby udało mu się podczas np. skoku do początku pętli...
Fragment: Incr Licznik If Licznik = P Then Portd.2 = 0 End If If Licznik >= C Then Portd.2 = 1 Licznik = 0 End If wykonuje się w najlepszym przypadku (bez wchodzenia do IFów) 6us. Z wejściem do drugiego IFa 7us. Krótko mówiąc procesor nie ma nawet czasu na wyjście z przerwania a już powinien obsłużyć następne. Czyli na tym kwarcu nie widać szans na...
WItam :) Zwracam sie do szanownych doświadczonych kolegów o podpowiedź. Bawię się ostatnio mikrokontrolerkiem atmega8 w sterowanie servem (hitec hs-55). Program piszę w Bascomie i bardzo chciałbym załapać jak sensownie uzywać timera i przerwan (nie chcę uzywać bascomowskiego config servo). Po pierwsze... Czy na 8 mhz kwarcu mogę sterowanie sensownie...
Po pierwsze, możesz jak najbardziej korzystać z timera (a właściwie to powinieneś, jeżeli chcesz pomniejszyć koszta o zakup zewnętrznego RTC). Po drugie - możesz kalibrować, możesz to robić długo i bezskutecznie. Po drugie i ćwierć - Wewnętrzny oscylator nie za bardzo nadaje się do tego celu. "Nieco" mu się zmienia częstotliwość wraz z temperaturą i...
Zumek zaproponował nam prace timera w trybie CTC (Clear Timer on Compare match) - zerowanie licznika (i wywołanie przerwania OC1A) po wykryciu zgodności rejestru TCNTn z OCRn. Można w ten sposób "skrócić" timer do potrzebnej wielkości. Odpowiada to mniej więcej "skracaniu" zakresu liczenia timera przez wprowadzenie wartości początkowej tyle, że licznik...
jakby kolega na początku napisał o co mu chodzi to było by mniej problemów. Q1. Czy jeśli ATTINY2313 jest traktowany częstotliwością 20 MHz oznacza, że przerwanie timera może być równie często generowane? niestety nie. 20MHz to czestotliwośc taktowania, timerów i rdzenia. samo wywołanie przerwania i potem wyjście z niego to około 15 cykli. jak będziesz...
Tylko nie wywołuj w przerwaniach tak długich bloków instrukcji - lepiej ustaw flagę, która wskaże pętli głównej programu wykonać te instrukcje. Ale co tu możemy mówić, jak widać tylko wycinek programu. Zgadza się, dlatego wklejam nieco więcej Flaga_wybor jest co 10 sekund, Blokada zatrzymuje odczytywanie czujników na czas odbioru DCF77, zwłaszcza DS18B20...
Witam, zwracam się z prośbą o pomoc. Tworzę program sterujący silnikiem DC. Program składa się z menu głównego w którym są 4 podprogramy 3 z nich działają bezbłędnie. Największy kłopot sprawia mi 4 podprogram a zarazem najważniejszy. podprogram startt ma za zadanie odmierzyć zadany przedział czasowy gdy osiągnie wartość 0 wykonać pewną procedurę i zacząć...
Tak jak w tytule, poniżej kawałek kodu. Wygląda to tak że w pętli głównej jest polecenie "Wait" a INT0 ma przerywać tą pętle, i tu jest pytanie czy przerwie "Wait'a" ?? Dim Licznik As Byte Enable Interrupts On Int0 , Przerwanie , Nosave Licznik = 0 Do If Licznik = 1 Then Pind.0 = 0 Pind.1 = 1 Wait 20 Pind.0 = 1 End If If Licznik = 2 Then Pind.0 = 1...
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 Przerabiam kurs Bascom College i mam problem polegający na tym, że układ nie reaguje na przerwania. Wpisałem programik jak w załączniku i zwieram porty p3.2 i p3.3 do masy ale program nie przechodzi do obslługi przerwań. Drugi problem jaki mam w Bascomie to, że nie reaguje podczas symulacji na polecenia Wait i Waitms. Dlaczego?
cos mi chyba ten jezyk nie idzie ale na czyms uczys sie trzeba a kto pyta nie bladzi wiec:) If Portd.6 = 1 Then Wait 5 Set Portd.7 Elseif Portd.6 = 0 Then Wait 5 Reset Portd.7 End If END: Jak zrobic by nie odczekiwal Elseif Portd.6 = 0 Then Wait 5 jesli stan nie byl wczesniej If Portd.6 = 1 Then Wait 5 tylko pomijal to ( czyli jesli bylo 1 a jest...
Witam! Po napisaniu takiego programu: dim a as string * 30 do a = input() id a<>"" then print a end if loop end wysyła mi kontroler wszystko co otrzyma ale gdy cała zmienna się zapełni to więcej nic niewyła i transmisja zatrzymuje się. Jak więc czyści się zmienne typu string?
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 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...
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...
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...
Nie wiem czy to może coś mieć do rzeczy ale konfigurujesz przerwanie na porcie Int0 na falling a potem obsługujesz przerwanie od Int1. Przy resecie jak nic nie ustawiasz to przerwania zewnętrzne są aktywne stanem niskim. Jak nie ustawiasz Int1 na falling a potem pozwalasz na przyjmowanie przerwania z Int1 to możliwe, że wciśnięcie guzika powoduje kilkakrotne...
Witam. Może spróbuj tak po wywołaniu przerwania ( u Ciebie co sekunda) Odczytaj termometr DS. A następnie wydaj rozkaz pomiaru temperatury. W następnym przerwaniu odczytasz go o tak w kółko.
Tu mam jeszcze pytanie - czy mogę wykorzystać timer, do odpytania co kilka sekund o czas z rtc, co kilkadziesiąt ms o stany przycisków, co kilka sekund o temperatury? Użyj techniki opisanej [url=http://stsystem.elektroda.eu/progra... Co prawda kody są w C, ale z opisu bez problemu...
czy można w przerwaniu odwołać się do SUBa ?? bo chciałbym tak zrobić ale mi coś nie działa :(
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...
Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
...Jakie jest zatem rozwiązanie tego problemu (jeśli jest)? Bascomowy UART programowy działa jedynie wtedy , kiedy wywołamy funkcję z nim współpracującą. W pozostałych przypadkach ( kiedy działają funkcje/procedury nie związane z programowym UART-em ) , nadchodzące dane są "niewidoczne" dla procka :( Np. jeśli masz w kodzie Wait 1 , a w czasie działania...
ldi R16,0 Out &H38 , R16 spróbuj to zamienić na : ldi R16,1 Out &H58 , R16 Co do tłumaczeń to jednak w oryginale brzmi to tak: -When an edge or logic change on the INT7:0 pin triggers an interrupt request, INTF7:0 becomes set (one). Co dla mnie w wolnym tłumaczeniu brzmi -Kiedy zbocze lub poziom logiczny na pinie przeniwania 7-0 się zmieni wywoła to...
Przeglądając Twój program mam takie małe spostrzeżenie, a mianowicie w pętli głównej masz wywołaną procedurę Gettime - ' Call Gettime' - która działa na I2C. Co się stanie gdy podczas wykonywania procedury Gettime zostanie zgłoszone przerwanie od Timer'a?? Program przerywa wykonywanie procedury Gettime i skacze do obsługi Timera a tam jest wywoływana...
Program w tej formie jaką zamieściłeś zaraz po zainicjowaniu zmiennych i sprzętu wchodzi w warunek "If Timer1" nawet bez wywołania przerwaniem. Później zdejmie coś ze stosu, albo przeleci się po pustym flash`u i zacznie od początku. Żeby w ogóle to zaczęło coś robić to powinieneś po Start Timer dodać, jakąś pustą nawet, pętlę "Do : Loop" Wtedy w pętli...
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze 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....
He..He.. W książce kilkanaście rozdziałów wcześniej napisali. „W mikrokontrolerach AVR nie jest, zatem możliwe swobodne ustawianie priorytetów źródeł przerwań, tak jak to jest np. w 8051. Czasami może zdarzyć się, że podczas obsługi jednego z przerwań potrzebne będzie obsłużenie innego przerwania.”.. bla..bla..”Wykrycie przez odbiornik...
Ja to widzę tak: - ustawisz ADC w tryb Free Running, czyli będzie na okrągło wykonywał pomiary na jakimś wejściu a ponieważ wejście zostawimy niepodłączone, to jest szansa na losowe bity. - po skończeniu pomiaru ADC wywoła przerwanie które będziemy wykorzystywać do wszystkich Twoich potrzeb nie tylko do generowania losowej liczby. Innymi słowy ADC zastąpi...
Bascom powinien po wywołaniu procedury obsługi przerwania skasować flagę a tego nie robi...i po obsłużeniu przerwania znów jest ono natychmiast wywoływane i program się zapętla. Trzeba ręcznie ustawić flagę w rejestrze GIFR. Wiem, że C jest dużo mniej problematyczny...sam kompilator ma też mnie roboty, bo to język niższego rzędu jak Basic Bascom, ale...
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ę...
Może jakiś wyłącznik krańcowy. Szyba dochodzi do końca w skutek czego zwiera wyłącznik krańcowy co powoduje wywołanie przerwania zewnętrznego na atmedze i ona wyłącza silnik.
Za dużo kodu wewnątrz obsługi przerwań. Spróbuj wyrzucić wszystkie warunki do głównej pętli, w przerwaniach tylko zliczanie wywołań. Ewentualnie na początku obsługi przerwania zatrzymaj obsługę dla uniknięcia wywołania przed zakończeniem bieżącego (ochrona stosu).
Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden...
Dzięki za uwagę. Przyznałem rację poprzednikowi ponieważ wskazał mi przyczynę moich problemów. Natomiast faktycznie częstotliwość wywołania przerwania jest taka jak piszesz. Pozdrawiam i dziękuję!
Nie wiem jak to w bascomie nie wnikałem w kod, ale można to zrobić tak że deklarujesz aktywację przerwania jednym zboczem, a po jego wywołaniu zmieniasz tą konfigurację na drugie zbocze (zmiana w rejestrze MCUCR). Albo wywołanie przerwania ustawiasz na dowolną zmianę sygnału i w jakiejś zmiennej przechowujesz stan wcześniejszy i porównujesz
No tak, ale to się nazywa programowe wywołanie przerwania. A tu w programie nie widziałem nigdzie "Clr Pind.2" po uzbrojeniu przerwań. :) Stąd przypuszczenie o ręcznym "doziemianiu". :)
witam. W internecie jest takich przykładów mnóstwo, wystarczy poszukać, ale napewno skup się na tym, aby kożystać z przerwań wywołanych zliczaniem taktów generatora kwarcowego. pozdrawiam.
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 ;)
obsługa guzików w przerwaniu to bardzo dobry pomysł. Zastanawiałbym się również czy by jednak nie przenieść wszystkiego na timer0 (ten jest 8 bitowy) ale taki akurat miałęm projekcik. Do wygaszania zer trzeba by dodać 10 cyfrę (która będzie pusta - 255). Są trzy cyfry więc trzeba zacząc sprawdzanie od lewej (czyli w przykładzie od trzeciej) .... if...
Do drasmen: jeżeli chcesz aby układ zadziałał musisz przestawić fuse bity na wew. generator np. 8MHz a do pinów gdzie podłączasz kwarc musisz wpiąć kwarc zegarkowy 32.768kHz. Program dla autora tematu: 'Program wykorzystujący przerwanie od timera0(8 bitowego) generowane co 8ms 'jeżeli przerwanie zostanie wywołane 125 razy, otrzymamy 1 sekundę...
Sprawdzałem woltomierzem i zmienia się na pewno, jak spróbowałem na prostszym programie to działało tzn. jednokrotne wejście do podprogramu wywołanego przerwaniem a później blokada przerwań. O jakie bity dokładnie Ci chodzi?
wywołanie przerwania bascom przerwania przerwania bascom
oznaczenie zasila lampa ostatni zapisany wiersz makro dioda pilocie megane
aktualizacja 7018b naprawa erbauer
Vangotech SD612 HexWriter v3.4 software download, safe sources, installer hash, alternatives Toyota Auris 2008 diesel – gdzie znaleźć numer fabryczny lampy, OEM, lokalizacja oznaczenia