:arrow: zumek Trzeba jeszcze włączyć na nowo przerwania (sei).
Najdłużej tam pewnie trwa oczekiwanie na wynik pomiaru ADC który jest dodatkowo podwójny. Bascom robi dwa odczyty jeden za drugim. Można to wyłączyć, ale pomyśl o samym oczekiwaniu na konwersję. Gdyby to było poza przerwaniem to inne przerwanie spokojnie mogłoby to oczekiwanie przerwać tak jak można przerwać każde Waitms. Spróbowałbym w przerwaniu ustawić...
przerwanie funkcji xxx i natychmiastowe przejście do funkcji bbb. Jak sam piszesz przerwac mozesz tylko przerwaniem.
To co piszesz jest słuszne i mądre, widzisz, jest tylko jeden problem - soft jest skomplikowany bardziej niż by się wydawało, atmega8 ma tylko 8kb flash a wszystkie przerwania Atmega8 są zajęte (w tym timer1 do zliczania pojedynczych sekund, int1 i timer2 wykorzystywany przez getrc5). Oczywiście zawsze można skonfigurować bufor wejściowy, np. gdy spodziewamy...
JAk w bascomie 8051 rozwiacac nastepujacy problem.Mam program skladajacy sie tylko z kilku petli.Chce zeby za pomoca przerwania zrealizowac natychmiastowe przerwanie wykonywania petli i przejscie do nastepnej. prosze o pomoc
http://obrazki.elektroda.pl/8305155600_1... Witam! Jest to moja pierwsza konstrukcja na forum, więc może się przedstawię. Mam na imię Sebastian, jestem uczniem 2 klasy LO w Kielcach. Projekt, który dziś prezentuję to minutnik pracujący w dwóch trybach (o tym za chwilę). Powstał z potrzeby odmierzania i sygnalizowania danego czasu na...
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ć...
Niestety często zdarza mi się napisać więcej niż trzeba :) Xury ma rację - zapomniałem o fladze - nawet chyba o dwóch. Chyba pętlę For ... Next muszę przerwać jakimś warunkiem i dodatkowo zapisać aktualną wartość PWM.
[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...
Myślałeś w ogóle jak to zrobić bez tej pętli? Waitms to taka pętla do odliczenia. Jedyny plus jest taki, że Waitms może przerwać każde przerwanie oczywiście przedłużając wykonanie pętli odliczania, ale można to zrobić lepiej.
Kiedy w końcu zrozumiecie, że nie każdy chce zostać programistą i ludzie czasem programują sobie po to by coś zrobić i mieć z tego satysfakcje. Wiem jak oprogramować ADC i to nie tylko w Bascom, ale zauważ że piszemy tu o Bascom. Języku który upraszcza wiele rzeczy dając Ci określoną ilość prostych w użyciu funkcji. Jedną z takich funkcji jest Getadc()...
Masakra, dalej nie działa, no chyba że coś źle zrobiłem. Czy włączenie przerwać jest konieczne dla obu procków? SLAVE: http://obrazki.elektroda.pl/3769296700_1...
Tu się nie martw że ci wyłoży komunikację i2c - to nie jest 1wire. Tu można przerwać cykl zegara na bardzo długo i nic się złego nie stanie - dlatego wolę tmp100 od ds1820. To samo tyczy się komunikacji z lcd - jak wyjdzie dłużej to nic nie będzie - gorzej jak wyjdzie za krótko. Encoder ma dwa sygnały a i b. Jeden dajesz na przerwanie a drugi sygnał...
Witam Mam pewien problem.Potrzebuję podczas odliczania Timera0 wykorzystać przerwanie Int0. Sprawa wygląda tak, rozpoczynam odliczanie timera0 do momentu pojawienia się sygnału narastającego na wejściu Int0 i w tym momencie muszę przerwać Timer0 i odczytać jego wartość. No i właśnie tu pojawia się problem. Zamieszczę moje wypociny: Config Timer0 = Timer...
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...
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...
Jeśli tylko uC ma wbudowany sprzętowy moduł TWI czyli odpowiednik I2C to warto z niego korzystać. Wiele zależy od części kodu których nie zamieściłeś. Sprzetowe TWI jest o tyle lepsze że nie przeszkadzają mu tak bardzo przerwania z innych źródeł. Kiedy korzystasz ze software`owego I2C to niestety, ale chyba każde przerwanie potrafi przerwać te transmisję....
No to jest tak: Program działa dobrze. Jak jest normalnie napisany. Tak że chodzi mi o zupełnie inną modyfikację. Ale wpadłem na pomysł- może głupi- że jak zbadam w pętli głównej że żaden klawisz nie jest naciśnięty to dostanę err=0 i pętla swoje będzie robić. A jak nie- to przejdzie do podprogramu obsługi klawiatury. No i z tym nie daję sobie rady....
W przypadku mikrokontrolerów bez czytania not i tak się nie obejdzie. Debugger właśnie pozwala zajrzeć w to co się dzieje w procku i przejąć nad nim kontrolę. Możesz przerwać wykonywanie programu i sprawdzić co robi procek, możesz zmienić jego stan niezależnie od programu, możesz podglądnąć zmienne, kolejność wywołania funkcji itd. Skoro masz budżet...
Niestety nadal w programie jest błąd. Ta moja wersja z krótszym buforem też się zawiesza. Jak bufor był krótszy i zaczynał się od 0 i szedł do 31 to zawieszanie następowało tak jak normalnie. U mnie po 67 sekundach. Czyli ta BASCOMowa zmienna siedzi gdzieś na początku bufora. Przesunąłem wykorzystywaną cześć bufora do indexów 128…159 i zawieszanie...
... i jest tak samo ;/ Bo nie słuchasz o czym mówię :( Potestuj poniższe - skrobnąłem dla Ciebie ;) : '$map $regfile = "m32def.dat" '$crystal = 11059200 'ATMega32 adres rej SPL+&H20 Const Lowsp = &H5D Dim A As Byte , Lab_adr As Word Dim Alow As Byte At Lab_adr Overlay , Ahi As Byte At Lab_adr + 1 Overlay Dim Tspl As Byte On Int0 Int0_intr...
RS232 jest niestety już używany, jak i również przetwornik ADC, oraz działa Timer -(jest troszkę tego) , dlatego nie moge skorzystać z np. ATMEGA162 który ma 2xRS232, bo nie ma on ADC. Pozatym obwody drukowane już zaprojektowane i zamówione w ilości narazie testowej, ale są. Pozatym użycie dwóch procków raczej odpada, pomęczę sie z tym co mam bo twierdze...
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.
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 )
Wróci do funkcji2, ponieważ przerwanie zawiesza dotychczasowe działania, a po zakończeniu jego obsługi wraca do wykonywania przerwanych operacji.
Niestety, to nie pomogło, usunąłem wszystkie wait'y które tam były i dalej jest to samo. Może macie jakieś inne pomysły? Wszystkich nie usnąłeś - zostało 25ms z debounce. Poza tym konfiguracja przerwania jako Low level powoduje, że jest ono generowane raz za razem dopóki jest stan niski na pinie. Przerwanie nie zdąży się obsłużyć, bo debounce potrzebuje...
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.
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...
http://www.btc.pl/pliki/bas_listingi.zip ->program 8_24.BAS Ja też długo się męczyłem z RC5, ale odpaliłem to i już wiedziałem, gdzie miałem błędy. Spróbuj sobie tak jak w tym przykładzie dołożyć jakąś flagę i ustawiaj ją w procedurze obsługi przerwania RC5, a dopiero w pętli głównej badaj jej stan, bo bezcelowe wydaje się "Enable INT0" w każdym przejściu...
PCF8583 ma na wyjściu INT chyba Open Collector to znaczy że tylko zwiera do masy ... Interesujesz się elektroniką? Chodzi o to że PCF potrafi na tym wyjściu tylko zwierać do masy..ale musi mieć co zwierać.. więc albo musisz dodać tam zewnętrzny rezystor podciągający linię tak by normalnie panowało tam 5V a PCF na moment zewrze linię do masy...albo mozesz...
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...
Dla kwarcu 4MHz jest to prescaler 64 i początkowa wartość licznika: 193 Dla kwarcu 8MHz prescaler to: 64 i początkowa wartość licznika: 131 To pokazuje kalkulator. Chciałoby się zakrzyknąć : a nie mówiłem :-P Aby wpisać do Timer2 początkową wartość, to używamy poleceń: TCNT2=początkowa_wartosc Timer2= początkowa_wartosc Counter2=początkowa_wartosc...
... i tej wersji będę się trzymał wysoki sądzie ;-) I bardzo dobrze :-P Zadeklarowałeś przerwanie od porównania, a włączyłeś od przepełnienia więc Ci nie działa. Włącz właściwe przerwanie i będzie git.
Uruchomić timer w trybie CTC. Tryb CTC Ludzie, dajcie sobie z tym spokój bo nie zgadniecie co autor potrzebuje. 1-szy Kwietnia na moim kalendarzu jest dopiero jutro...... czyżby kalendarz się spóźniał ? - pewnie będe musiał wymienic baterie... Zdaje się, gośc szuka 'agentów' aby ich czymś poważniejszymm zając!!(?) TU założył podobny temat (cross-posting...
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...
Dla pełności tematu. Jak skorzystać z PCINT? Szukałem w manualu i jakieś przykłady w sieci ale nie znalazłem nic czytelnego. Oto przykład dla Attiny13 (jest on w manualu): [code][syntax=basic4gl] $regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 32 $swstack = 24 $framesize = 8 'config pinb.0 = input Config Portb.2 = Output Pcmsk = &B00000001...
Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma dmuchać , jednocześnie mierzy temperaturę i nie działa tak jak powinno : Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas w programie można było ręcznie zmieniać czas...
Ż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...
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=...
Pewnie że nie będzie działać, ustawiłeś Preskaler =256 a więc przy zegarze 16MHz przerwanie od Timer0 będzie pojawiać się z częstotliwością 62500 razy na sekundę. (16000000/256 = 62500). Zalałeś modem zapytaniami o CSQ i biedny nie ma czasu na odpowiedź.
To jest tak: Config Int0 = P3.2 ' Ustawienie przerwania zewnętrznego na pin P3.2 Reset Tcon.0 ' Przerwanie wywoła stan niski Set Tcon.0 ' Przerwanie wywola opadające zbocze (z H do L) To samo z Int1 To tyle pozdrowienia.
Bascom nie da sobie z tym rady, C też nie da rady bez wstawki assemblerowej, W wartym 5zl ARM klasy STM32F030F4P6 masz 5 kanałów DMA którymi ogarnąłbyś problem tak po prostu. A z czego Ty chcesz te DMA wyzwalać? W przerwaniu bez wstawki assemblerowej też sobie z tym nie poradzi. Coś nie chce mi działać, wgrałem z kompilowany hex do procka i restartuje...
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...
Wskazówki : [syntax=basic4gl] Config Serialin = Buffered , Size = 254 , Bytematch = All Enable Serial Enable Interrupts Serial0bytereceived: Return [/syntax]
Musisz wyzrować bity RS1 i RS2 w Control Register (0Eh) ,13 strona DS
Z tego co wiem "PIN Change Interrupt" ma np. Atmega168 i Atmega 328. Atmega 32 - jakoś nie widzę takiej możliwości. Proszę o poprawienie mnie, jeśli się mylę. Oczywiście zawsze można skorzystać z tych specjalnych pinów - INT0, 1 czy 2 lub zasymulować taką kontrolę stanu pinu w zwykłym przerwaniu - np. timera.
Kolega Mad Jaro mierzy czas pomiedzy INT-em i przelicza na obroty. zablokowanie INT spowoduje pływanie obrotów( INT nie liczy impulsow). Kolega xury ma rację odnośnie jednokrotnego użycia szukania czujników. A poza tym zsynchronizuj odczyt 1wire z przerwaniem INT tzn. komunikację z 1wire podziel na max -5 bajtowe odcinki i wykonuj je po przerwaniu INT....
Witam !!! Zainstalowałem specjalnie BASCOM'a i stwierdzam, że trzeba to napisać od nowa. Najlepiej będzie Clk klawiatury wpakować na przerwanie zewnętrzne typu "any change". Kiedy clock wyzwoli przerwanie, sprawdzasz w petli dane i po sprawie. (M.) Witam, masz racje, że trzeba to włożyć do przerwania, ale nie trzeba pisać tego od nowa. Dzisiaj poprawiłem...
przerwanie od portu szeregowego obsługujesz w ten sam sposób jaki i każde inne przerwanie.
Wyrzuć obsługę LCD z przerwania, wyświetlanie wykonuj tylko w pętli głównej. W przerwaniu zmieniaj dane, które mają się wyświetlać i ewentualnie ustawiaj jakąś flagę, która da informację w pętli, że trzeba wyświetlić nowe dane. Przerwania powinny trwać jak najkrócej, wstawianie tam wyświetlania LCD, waitów itp. jest złym pomysłem.
Wystarczy wstawka. Samo przerwanie w asm.
trochę mały ten preskaler.
Mi się wydaje, żeby zrobić to na jednym przerwaniu. Mamy stan 11 Ustawiamy na przerwanie na zboczu opadającym. Kiedy się wykona przerwanie, sprawdzić drugi pin. Jeśli wyjdzie 01 ro znaczy ze obrót był w jedną stronę, jeśli 00 to znaczy, że był w drugą. Teraz trzeba zmienić na przerwanie zboczem narastającym. Jeśli po obrocie mamy 11, to obrót w jedną...
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...
Nie mam ustawiony wewnętrzny 8MHz ale docelowe w projekcie chcę użyć zewnętrznego 11.058MHz. Myślałem że instruknja: CONFIG Clock = Soft, Gosub = Sectic powoduje że obojętnie co jest ustawione to Bascom automatycznie odlicza 1s i po niej skacze do instrukcji Sectic. Dokładnie chodzi mi o przerwanie które będzie wykonane po upływie 1s. Chcę przez to...
Nie rozumiem jak przerwanie od licznik 8 bitowe mialoby przeszkadzac w dzialaniu pozostalych przerwan czy calego programu.. Przerwanie np przy 16Mhz bedzie generowane 62500 /preskaler na sek od licznika 8 bitowego, a zajętość (stan CLI) procesora oceniam na ponizej 1 uS co chyba nie wplynie na pozostale zadania procesora.
przerwanie timera wpływa na polecenia z rodziny Wait - powodują one, w zależności od częstości wydłużenie czasu oczekiwania, dlatego trzeba w takim wypadku odmierzać czas używając timera ;-)
Witam. Ustaw prawidłowy scalak powinno być : $regfile = "m644pdef.Dat"
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.
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.
A pod Bascom'em tak: Set Gifr.intf0 Oczywiście trzeba wstawić tą linijkę przed 'Enable Int0'
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.
MES Mariusz - w żaden sposób nie zagwarantujesz, że firmware się nie uszkodzi. W końcu zawsze można przerwać transmisję lub programowanie w dowolnej chwili, prawda? Jedyne co możesz zrobić to uodpornić się na takie sytuacje. Czyli przed startem firmware startuje bootloader i sprawdza jego integralność. Jeśli ok, to startuje firmware, jeśli nie to robi...
8Mhz /256 daje 31 250. 31250/125 daje 250 (ms) (250 -125ms) * 8 (co ósme przerwanie) = 1s.
Wywal opóźnienie z przerwania. Po za tym wygaszaj kolumny za każdym razem jak wchodzisz w przerwanie.
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)......
Witam.Osobiście nie piszę w bascomie ale przerwanie (przerwania) PCINT wyzwalane są zmianą stanu na pinie a ty natomiast próbujesz konfigurować aby wyzwalane było niskim poziomem.
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...
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...
Tlumaczylem, ze restart bedzie tylko raz mozliwy, w petli programu. Nie napisales jasno, ze ma byc w kazdej chwili. Moze jutro ci wlepie kawalek kodu. ________________________________________... CONFIG INTx = LOW LEVEL On Intx Przerwanie Enable Interrupts do loop:end Przerwanie: disable intx '.... tu reset '.... enable intx Return...
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
Osobiście w przerwanie wrzucam zawsze tylko to co musze. wrzuc dodatkowa zmienna w petli np: obrczas. obrmin = 36 000 000/wynikczas Lcd obrmin pamietaj zeby zmienne nie przekraczaly zakresów.
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...
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.
marcinek.p - to gotowiec dla ciebie, nie mam jak go przetestować ale jestem pewien że zadziała jak trzeba. Masz tu przerwanie, miganie led i zliczanie migniec z incr Mozna to wszystko wkleic do przerwania ale dobra zasada nakazuje w przerwaniach umieszczać jak najmniej kodu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 32 $swstack...
Jeśli nie wykorzystujesz tych samych pinów co kwarc zegarkowy to nic się nie będzie gryzło... O ile dobrze pamiętam wystarczy podpiąć kwarc 32,768kHz bez kondensatorów pod TOSC1 i TOSC2... Raz po uruchomieniu uC odpalasz timer2 w trybie asynchronicznym i tylko włączasz albo wyłączasz przerwanie od przepełnienia... Ustawiasz preskaler tak żeby przepełnienie...
AVR nie traci zawartości pamięci przy resecie. Więc jeżeli program nie będzie jej zerował, rozwiązanie jest pewne. Inna sprawa, że w tym wypadku sugerowałbym, by watchdog nie robił resetu, tylko wywoływał przerwanie. Co to będzie za układ?
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.
Taj jak napisałem wyżej. WAITKEY będzie czekało do czasu, aż coś odbierze. Jeśli w tym czasie wystąpi jakieś przerwanie to się ono wykona i wróci do programu wykonywanego wcześniej, czyli do WAITKEY (chyba, że WAITKEY będzie w jakimś podprogramie przerwania - wtedy kolejne przerwanie się nie wykona (wykona się po skończeniu aktualnego), chyba że na...
Jeżeli będziesz wyłączał przerwania to tak pisał kolega wyżej zakłócisz pracę zegara. W podprogramie który wykonuje się podczas przerwania od timera na końcu zresetuj flagę. Potem w odpowiednich miejscach obsługi DS-a wstawiaj Set Flaga : While Flaga = 1 : Wend w takiej postaci! Wtedy gdy zakończy się przerwanie kod umieszczony poniżej tego...
W tym wypadku powinien być Gosub Obrot Nie, nie powinno być żadnych odwołań do Obrot. Ani Call, ani Gosub, ani Jump. To wektor przerwania, i procesor powinien do niego skakać sam. Trzeba tylko wskazać które przerwanie ma być przypisane do tego wektora, a to robi ta linijka: [syntax=vbnet]On Timer0 Obrot[/syntax]
Program się zawiesi bo na czas zapisu program jest zatrzymywany w pętli oczekującej na zakończenie zapisu (tak robi BASCOM a domyślam się że mówisz o BASCOMowej funkcji zapisującej a nie jakiejś własnej). Kolejne przerwania od Timera będą wywoływane tuż po poprzednim a więc program główny będzie praktycznie stał w miejscu. O zajeżdżaniu pamięci EEPROM...
PCINT to specjalne przerwania aktywowane zmianą stanu pinu. Dodatkowo wszystkie przerwania PCINT w tych procesorach wywołują jedno przerwanie, w którym należy programowo określić, który pin je spowodował ważny jest też rejestr PCMSK, który odpowiada za maskowanie nieużywanych przerwań. Polecam lekturę datasheetów tych procesorów w celu dokładnego poznania...
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...
Kuniarz , Jeszcze tylko spytam - czemu w obsłudze przerwania włączasz przerwanie timera i zaraz potem znów je wyłączasz? Nie lepiej wyłączyć na samym początku i włączyć na samym końcu?
Najpierw dajesz Config INT0=Falling Wprowadzasz zmienną opisującą wybrane zbocze wyzwalające przerwanie (Edge_) i w procedurze obsługi tego przerwania: If Edge_ =0 Then Start Timer1 Config INT0=Rising Else Stop Timer1 Config INT0=Falling End If Niektóre AVR'y umożliwiają konfigurację typu Config INT0= Change Wtedy przerwanie wywoływane będzie po stwierdzeniu...
Ciekawe jest to widać w twoim profilu (Pomógł: 79927) :P ale do rzeczy. Według mnie coś takiego można zrealizować w następujący sposób: - konfigurujesz przerwanie zewnętrzne żeby było wyzwalane przerwanie zboczem opadającym, rosnącym etc. - w tym przerwaniu uruchamiasz timer który zlicza sobie impulsy - jeżeli zliczy określoną ilość impulsów to wykonujesz...
Witam. Procek tak się zachowuje bo nie określiłeś czy przerwanie ma być generowane przez zbocze opadające, rosnące czy przez stan niski na końcówce INT. Domyślnie wyzwalane jest stanem niskim więc wykonuje się raz za razem. Instrukcja Config INTx. Przeznaczenie: Konfiguruje sposób wyzwalania przerwania INTx. Składnia: CONFIG INTx = LOW LEVEL | RISING...
Czy to na pewno cały program? Jeśli tak to na początek dodaj: $regfile = "attiny2313.dat" $crystal = xxxxxxx Dokładnie, dodaj to i jeszcze ustaw w options>compiler>chip . Sporo czasu nad tym raz spędziłem jak zamieniłem megę 16 na 8 i zapomniałem zmienić procka w ustawianiach a nie działało mi właśnie tylko przerwanie.... ;)
Z obu programów wyłuskać deklaracje zmiennych, deklaracje stałych i aliasów, polecenia CONFIG. Połączyć to razem i umieścić na początku programu. Sprawdzić czy nie ma danych w liniach DATA i przenieść je na koniec. Znaleźć wszystkie przerwania i sprawdzić czy nie są ze sobą sprzeczne oraz czy da się je ustawić by miały odpowiednie priorytety (czy jedno...
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ą.
...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
Zastosuj przerwanie od TMR.
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.
Odbieraj znaki w przerwaniu, a obsługę rób w pętli głównej, lub wyłączaj przerwanie po odebraniu pierwszego znaku, a potem załączaj. Możesz też sprawdzać czy nie pojawia się Twoje "jedynie pewne znaki" I po ich odebraniu "odciąć" ciąg. Masz jeszcze Ischarwaiting do zabawy.
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.
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.
Jakie są polecania w bascom do obsługi pcint0 potrzebuje uruchomić to przerwanie w attiny 13. Gdyby ktoś jeszcze wiedział czym sie różni to przerwanie od ont0 to byłbym wdzięczny za podzielenie sie wiedzą.
Sprobuj jeszcze od timera0 obsluge przerwania w petli glownej, a Krotki kod generujacy tego prostokata, mozesz zorbic: -przeliczajac ile z danym kwarcem wynosi okres danej czestotliwosci wpisac do licznika timera1 polowe tej wartosci, aby co pol okresu zmienial stan wyjscia na przeciwnym, przerwanie od Timera1 oczywsice ze wzgledu na prostote zrob w...
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...
przerwać przerwać bascom przerwać bascom bascom przerwać
diagnoza silnik renault wtryskiwacz motronic bascom przerwać przerwać
perpetuum mobile projekt tranzystora
Peugeot Satelis 250 – schemat pinów i opis złącza alarmowego 5P, kolory przewodów, akcesoria Objawy uszkodzenia sterownika LPG: diagnostyka i naprawa