Eeeej panowie, nie trzeba wchodzić tylnymi drzwiami, nie trzeba stosować żadnych sztuczek i nie trzeba koniecznie tworzyć przerwanie, które jakoś tam "na siłę przerwie input". To przerwanie już istnieje, (jest wykonywane gdy na port obsługujący RC5 zaczynają napływać dane) więc nie jest tworzone na siłę. Oczywiście można by program napisać inaczej,...
Gdy procesor jest w trakcie wykonywania procedury przerwania, następne przerwanie nie będzie przyjęte , gdyż procesor (nie kompilator!) zeruję flagę globalnego zezwolenia na przerwania. Tak samo flaga bieżącego przerwania (tego, którego procedura obsługi jest wykonywana) zostaje automatycznie wyzerowana. Po zakończeniu przerwania flaga globalnego zezwolenia...
Witam. Mam może dość banalny problem, ale nie mogę znaleźć na niego odpowiedzi. Miesiąc temu rozpocząłem swoją zabawę z programowaniem w języku BACSOM w programie BASCOM AVR. Jednak zabawę musiałem przerwać gdyż padł mi system w komputerze, nowy system a więc wszystkie pliki poszły w zapomnienie a min. pliki z programu BASCOM AVR. Na Atmedze8 mam napisany...
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.
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.
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=...
Musisz ustawiać znacznik, albo lepiej- odblokować przerwanie :-)
W zasadzie co ten program robi? Bascom jest wolny- ale procesor wykonuje instrukcje co 0.125us przy tym zegarze. Załóżmy 1000 cykli w pętli- zajmie mu 125us policzenie stanów 0 na wejściu i co dalej? Od wykrycia 0 powinien zblokować na jakiś czas zmianę stanu, odliczyć czas w ms a nie w us i zmienić stan wyjścia. Timer i ewentualnie przerwanie.
Razem z procedurą odbioru uruchamiasz timer ustawiony na okres na np 2-3 czas transmisji. Jeśli odebrałeś prawidłowe dane zatrzymujesz timer w innym przypadku timer zgłosi przerwanie i masz informację o błędzie.
Wywal opóźnienie z przerwania. Po za tym wygaszaj kolumny za każdym razem jak wchodzisz w przerwanie.
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
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.
Mam nadzieję że inkrementujesz sobie jakąś zmienną która informuje o ilości włączeń wentylatora a potem ją resetujesz. Przerwanie od timera zakłóca ci odczyt z DS-a musisz sobie dodać flagę którą będziesz ustawiał lub resetował i będzie cię informować że właśnie zakończyło się przerwanie i masz jeszcze trochę czasu do następnego. W tym momencie musisz...
Witajcie, Zacząłem pisać ostatnio program w bascom, jednak nie działał, okazało się że część kodu odpowiedzialna za przejście do podprogramu nie działa, długo kombinowałem, wklejałem części kodu znalezionych w internecie, ale wciąż nie działa. Kod: [syntax=basic4gl] $regfile = "m8adef.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize =...
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.
Cześć. Napotkałem ostatnio na pewien problem, mianowicie w momencie gdy wywołuję przerwanie w swoim układzie, to po jego obsłudze główny blok programu nie jest kontynuowany, tylko wszystko zaczyna się od początku (albo resetuje procek). W załączniku schemat urządzenia. Załącznik usunąłem. http://obrazki.elektroda.net/63_12624652... Przerwanie...
A pod Bascom'em tak: Set Gifr.intf0 Oczywiście trzeba wstawić tą linijkę przed 'Enable Int0'
Wyobraź sobie, że przerwanie występuje co 500ms a do procka podłączona jest dioda. Co pół sekundy dioda zapala się i gaśnie. Okres przebiegu to będzie czas świecenia i wygaszenia diody czyli jedna sekunda. Jeśli przerwanie było by generowane co sekundę okres wynosił by wtedy dwie sekundy.
Po co ten rezystor. Nastepnie jak nie chcesz czekac zanim dojdzie do ifa wykorzystaj przerwanie. Jak masz duzo przyciskow, to podlacz do wszystkich switchy diody do ktoregos przerwania
Mam sobie programik w ktorym co 400us wywolywane jest przerwanie. Obsluga przewania jest króciutka. W ukłądzie dołączony jest też LCD i 4 diody do portu. Co może być przyczyną że na portach LCD i diod pojawiają się dziwne stany w różnych momentach obsługi przerwania? Do tej pory nie używałem tego kontrolera i nie wiem o co może tu chodzić. Całkowicie...
Jestem początkujący. Dopiero uczę się programowania. Miał być to mój pierwszy samodzielny program. Podczas kompilacji występują 3 błędy: error : 7 error: 350 error: 127 wszystkie w line:0 Używam Bascom AVR w wersji 1.11.9.8 demo Poniżej zamieszczam moje wypociny. Niestety w pliku pomocy jest tylko opisany Error:7 http://obrazki.elektroda.net/42_12667718...
Taki fragment schematu: http://obrazki.elektroda.net/27_12637303... Koncepcja jest taka: mega8 pracuje i w momencie gdy zaniknie zasilanie, to dostanie sygnał (opadające zbocze) na INT1 i w przerwaniu zapisze kilka bajtów do eeprom (bo ma jeszcze zasilanie z kondensatora za diodą). Kod do tego: dim e_impulsy as eram word dim impulsy as word...
Witam, proszę o pomoc w następującym problemie. Uproszczony przeklejony program w bascom działa w ten sposób że po przesłaniu określonych liter przez rs zapala RGB ledy w odopowiedni sposób. Przerwanie działa dobrze. Natomiast chodzi o procedure "zmieniaj" która to wywołana w przerwaniu działa, ale przerwanie nie powoduje wyjścia z niej. Musi wykonać...
Witam Pytanie moje brzmi , jak w bascomie zrobić , by procesor po odebraniu bajtu przez port szeregowy natychmiast odczytał , co to za bajt i od niego uwarunkował dalsze działenia. Dodam że procesor musi cały czas zajmowac się czymś innym. Wiem ze trzeba jakoś zapiąć do tego przerwanie od odbioru portu szeregowego , ale nie wiem jak to w bascomie zrobic....
Witam, Ostatnio zabrałem się za zamek szyfrowy, ale jako że moja wiedza o programowaniu jest znikoma, postanowiłem zrobić klawiaturę, w której każdy switch jest podpięty do osobnego portu (pomyślałem- będzie łatwiej) . Moje rozumowanie zaprowadziło mnie troszkę w bagno, ponieważ na necie jest pełno tematów zamków szyfrowych, ale nie z moim rodzajem...
Witam! Mam dosyć poważny problem z BASCOMEM. Otóż po zmianie fuse bitów na zewnętzny kwarc 8-12Mhz mega prawdopodobnie się blokuje. Programator nie widzi procka, ani nic nie mogę zrobić z nim. W tej chwili używam USBasp, ale na STK200 to samo się dzieje...
Po zmianie uP z M8 na Atmega168 mam problem z watchdog'iem. po resecie watchdoga uklad wisi... nawet zewnetrzny reset nie pomaga.. co ciekawe uklad mozna skasowac, zaprogramowac innym flashem i zweryfikowac.. Pomaga tylko odlaczenie zasilania - uklad wstaje normalnie. $crystal = 7372800 $regfile = "m168def.dat" Config Watchdog = 1024 Start...
Potrzebuje pin nr 1 w atmega8 jako wejście. Programuje w Bascomie programatorem równoległym, jednak nie mogę ustawić reset jako we/wy. Jaka jest składnia rstdisbl - nie działa. w ustawieniach nie ma fusbitów. Proszę o pomoc.
Witam. mam taki wielki problem z bascomem v.1.11.7.4 mianowicie nie dzialaja tam niektóre funkcje. miedzy innymi wait i waitms na ktorych program sie zawiesza co jeszcze nie jest takie straszne, najgorsze jest to ze po skoku do podprogramu (gosub) i powrocie z niego instrukcja return program nie skacze do nastepnej instrukcji a sie resetuje i wszystko...
Mam kłopot z obsługą przerwania INT0 w ATmega32. Chciałem, żeby były generowane zboczem opadającym. Na nogę ITN0 wchodzi sygnał prostokątny 1Hz z wypełnieniem 50%. Jest rezystor podciągający do +5V. Kod jak niżej. Powinno generować sygnały na beeperzerz podłaczonym do portu D ale nic się nie dzieje. Bascom odmawia skompilowania linijki zawierającej...
Stworzyłem kod który powinien wyświetlać czas trwania stanu niskiego na lcd. Na wyświetlaczu pojawia się 0.0 ms oraz na przemian 1 lub 2 takt(czyli ile zliczył timer). Proszę o naprowadzenie na właściwy kierunek osiągnięcia zamierzonego celu. kod: [syntax=basic4gl]$regfile = "M8def.dat" $crystal = 4000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4...
Mam problem z włanczaniem i wyłanczaniem przerwań w ATmega 8535. potrzebuje odczytywać dane z RS(5 bajtów )i meć włonczony zegar RTC, któty by rejestrował czas pojawienia się w buforze znaku. Bascomowa instrukcja inkey() użyta przeze mnie powoduje ze zegar stoi w miejscu. Jak napisać procedure przerwania ??????? Pomuzcie adelmus12
Witam Program ma za zadanie otrzymania 6bajtów przez RS232 i operacje na nich Problem w tym że po odebraniu transmisji program staje i trzeba resetować procka Pomocy! Siedzę przy przy tym już kilka godzin i nic $baud = 2400 $regfile = "m32def.dat" $crystal = 16000000 Dim Bufor As String * 6 Do Enable Interrupts On Urxc Odebrano Enable Urxc...
Zmień doświadczalnie wartość wpisywaną do timera. Zobacz czy poprawnie wyświetla ci to co chcesz. Ważne jest także żeby przerwanie nie było za długie bo wtedy może grozić to resetem uc.
Po wykryciu naciśnięcia klawisza musisz ustawić poziom świecenia i przerwać pętlę for next, bo wykonuje ci się jej resztka i zmniejsza jasność świecenia. Co do W1, nie wiem czy to jest komplet źródeł, ale jeśli używasz Bascomowe procedury obsługi W1, to musisz mieć zablokowane przerwania. Albo nie używasz przerwań wcale w programie, a jak nie to musisz...
Czy da się generować przerwania od timer2 przy każdym przepełnieniu w trybie CTC? Próbuję generować częstotliwość w zależności od ustawienia potencjometru, ale timer generuje przerwanie tylko raz, cały program poniżej: OCR2 zostaje wpisana tylko pierwsza odczytana wartość zaraz po starcie programu, dalej już nie generuje przerwań. Po wrzuceniu " OCR2...
Pokaż schemat to raz. Dwa: co to jest? Set Pinb.5 Set Pinb.6 Set Pinb.7 Tak po za tym chyba brakuje ci wartości początkowej timera0... Nie obraź się ale przy tym oscylatorze i preskalerze 64 otrzymasz przerwanie co najwyżej co 2ms... Na koniec zapamiętaj że program zawsze umieszcza się w znacznikach "code".
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Do atmegi8mki Ci może nie wejść obsługa FATu. Poszukaj na elektrodzie FAT SD Atmega i coś znajdziesz gotowego. - Napewno nie Bascom :D Potem jakieś przerwanie i mierzyć czas i robić systematyczne opróżnianie buffora na drabinke R2R albo DAC.
A gdzie masz polecenie Start Timer0?
Przykładów w necie jest od groma. Z częstotliwością co najmniej 50Hz musisz przełączać wyświetlacz i wartość podawana na niego. Najlepiej wykorzystać do tego przerwanie timera.
Nie musisz czekać. Musisz zacząć trochę inaczej myśleć niż "linijka po linijce"... Dokładnie i nie jest to wcale takie proste :cry: Inaczej będzie to wyglądać dla prostego 'termometru', a zdecydowanie inaczej jeśli 'w tle' pracuje kilka przerwań, które rozwalą komunikację na 1wire na amen. Zerknij co kiedyś wykoncypowałem :D , żeby przerwanie obsługujące...
No to masz odpowiedz. Wyświetlanie zajmuje za dużo czasu i przerwanie się nie wyrabia.
Dzieki, takiej odpowiedzi potrzebowałem, wykorzystam przerwanie. :) Pozdrawiam...
Co do nadawania RC5 to ten rozrzut czasowy nie jest aż taki, żeby wyjść poza zakres tolerancji raczej, a z przysiadaniem napięcia to niech autor pokaże schemat - nie wiadomo czy i jaki wzmacniacz siedzi między procesorem i diodą IR. Niestety moim zdaniem program jest zły, bo w przerwaniu (z tego co kiedyś ostro testowałem) nie ma sensu wyłączać samego...
Witam ! Obliczenia źle oraz pewnie źle ustawione fusebity (pewnie default - 1Mhz internal rc). Instrukcja Load jako parametr ma po ilu impulsach ma wystąpić przerwanie, więc powinno być 625, ale że pojedyńcza połówka przebiegu sieci trwa nie 20ms a tylko 10ms więc powinno być 312,5 :D. Więc lepiej chyba prescale = 64 i load timer1, 1250. Pozdrawiam...
Przychodzi Tobie prostokąt o wypełnieniu ok. 1-2ms co kilkadziesiąt ms. Musisz podłączyć ten sygnał pod przerwanie w atmega i timerem mierzyć czas pomiędzy zmianą sygnału z "0" na "1" a zmianą z "1" na "0". Z tej informacji generujesz odpowiednie PWM. PS. Ze względu na to, że nowsze atmegi mają więcej wyjść PWM polecam np. atmega88 zamiast atmega8.
Czy wszystko będzie ok. trudno wyczuć. Zależy jaki zastosowałeś układ wykrywania przejścia przez zero. Jeżeli stan niski utrzymuje się przez większą część przebiegu i tylko w okolicach zera jest wysoki to dopóki jest stan niski to jest zgłaszane przerwanie. Jeżeli dodać do tego że przerwanie int0 ma najwyższy priorytet poza reset to przerwanie od timera...
jak chcesz takie duze czestotliwości mieżyć to musisz użyć timera żeby liczył zewnętrzne impulsy, wtedy drógim timerem wyzwalasz przerwanie co określony czas (im dłuższy tym lepszy bo pomiar dokładniejszy) liczysz ile było ilmpusów z zewnątrz w okreslonym czasie. wydaje mi się że tą metodą dało by sie mieżyć nawet do 100Mhz ale jest jedno zalożenie...
Dziwne jest to że w starszej wersji ten kod działa, a raczej nie powinien :). W helpie pisze że funkcja GetRC5 wykorzystuje timer0 i przerwanie od tego timera. Umieszczenie tej funkcji w przerwaniu INT0 wydaje się być błędne. Przerwanie od timera się nie wykona, dopóki nie zakończy się obsługa przerwanie INT0.
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...
Odpowiem za autora: Wysłanie czegokolwiek przez Uart na pierwszym uC powoduje przerwanie od Uart na drugim uC. Ot tyle.
"Timer" odnosi się do konfiguracji pracy licznika T/C, natomiast INT0 to przerwanie zewnetrzne ! Radzę poczytać HELP'a.
Hej, Jeśli chcesz płynnie regulować współczynnik wypełnienia to musisz wybrać jeden z modów PWM i wtedy będziesz skazany na jedną z kilku częstotliwości wynikających z zegara systemowego i tego jak ustawisz prescaler, Jeśli chcesz płynnie regulować częstotliwość to wybierasz mod CTC(clear timer on compare) ale będziesz miał wtedy stałe wypełnienie,...
Dlaczego chcesz odczytywać czas w przerwaniu? Przerwanie powinno być jak najkrótsze. Odczyt danych z pcf-a zrób w pętli głównej a przerwanie wykorzystaj tylko do migania kropką.
Tyle że kolega chciał w Bascomie :). Polecam help do bascoma. Konfigurujesz timer, uruchamiasz go i gdy zliczy pewną ilość impulsów wywołuje przerwanie.
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...
Start timer1 jest zapomniałem o tym w poście pierwszym dopisać. Tylko dlaczego ten sam kod ale przerwanie wywołane na nodze Portb.0 działa?
Stosy to dla mnie czarna magia, wiem tylko, że każdy przeskok wymaga zapisania adresu zwrotnego, ale nic poza tym :oops: No przy takim podprogramie to 1 megabajtowy stos to za mało :D, to się chyba nazywa rekurencja: [syntax=basic4gl]Petlapomiarowa: If Impulsy < 15 Then 'Jesli nie ruszono, wyswietlaj dalej napiecie Gosub Pomiaradc If Konwersja >...
0vf0 jest to przerwanie od licznika Timer0 po jego przepełnieniu- można napisać Timer0.
Zmień: Gosub = Sectic Na: call = Sectic a także zadeklaruj sobie zmienną "flaga" jako bit i resetuj ją na końcu podprogramu "Sectic". Następnie przed odczytem z przetwornika umieść: Set Flaga : While Flaga = 1 : Wend . Próbuj doświadczalnie umieszczać ten kod tam gdzie masz odczyt z przetwornika. Dzięki temu kod umieszczony poniżej zacznie się...
OPIS FUNKCJI LOAD Action Load specified TIMER with a reload value. . . . It will do the calculation. (256-value) So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. TIMER1 is a 16 bit counter so it will be loaded with the value of 65536-value. Czyli u ciebie ładuje 65536 - 65436 = 100 Przepełnienie właśnie...
Co jest nie tak ? Delikatnie mówiąc wszystko. 1 Timer nie wiem co liczy, cały jest źle napisany i nie powinien działać, bo np: przerwanie od timera powinno być zadeklarowane przed pętlą główną i nie w warunku. Zmienna Reload nie jest zerowana i zwiększa się do maximum typu Word Zmienna M (w zamierzeniu chyba od minut) też się zwiększa do 255 Zmienna...
No to przed diodą, dlatego podłącza się to nie tam gdzie masz cap, a tam, gdzie masz napięcie które "zaniknie" po odłączeniu zasilania... Innnymi słowy: mostek-> | -> dioda-> cap-> układ [tutaj pomiar] I podłączasz to nie na ADC tylko na int... masz w tym momencie sprzętowe przerwanie po zaniku zasilania;)
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,...
Można użyć komparator i jego przerwanie. Na jedno wejście dać nap referencyjne 200 mV.
przerwać atmega8 bascom atmega8 przerwać bascom atmega8 bascom przerwać sekunda
elektroniczny zapłon motocykl chopper regulator praca palnik
epson xp245 przekaźnik kierunkowskazów
Żarówki LED Osram H4: Światła mijania i drogowe świecą jednocześnie Problemy z kotłem Beretta AT 25C: diagnostyka i rozwiązania