:arrow: zumek Trzeba jeszcze włączyć na nowo przerwania (sei).
Wróci do funkcji2, ponieważ przerwanie zawiesza dotychczasowe działania, a po zakończeniu jego obsługi wraca do wykonywania przerwanych operacji.
Przy zapisie do EEPROMU w Bascomie nie musisz wyłączać przerwań. Funkcja WRITEEEPROM robi to sama, ale READEEPROM już nie wyłącza przerwań :)
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 )
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.
Chodzi o dowolne przerwanie. Ale najlepiej oczywiście wykorzystać przerwanie od jakiegoś Timera.
Do odczytu stanu portu służy rejestr PIN. Czyli masz źle zrealizowane warunki w funkcji przerwania.
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.
Nie wiem jaki jest twój kod w bascomie ale timer i uart to są sprzętowe zasoby specjalnie wydzielone do swoich celów więc nie powinny się zakłócać. Pytanie co masz w przerwaniu timera?
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...
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...
Emarcus on liczy przepełnienia timera, który generuje przerwania, co 4ms i coś tam robi w przerwaniu. Ostatnia linijka postu, który cytujesz.
Do pracy Uartu nie są potrzebne przerwania. Ale ty masz tu buforowanie, które wymaga przerwań. Jak niby bascom ma wyłapywać znaki w tle bez przerwań? Jak masz jakis pomysł to daj znać - chętnie go kupię.
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.
W przerwniu i programie głównym używasz zmiennych zadeklarowanych jako word. Myślę, ze tu leży pies pogrzebany. W C wystarczy użyc volatile i atomic_block. W Bascim? Był taki na Elektrodzie (niveasoft) co wiedział w jaki tajemniczy sposób Bascom zarządza takimi zmiennymi. Myślę, że nie masz wyjścia, tylko przed odczytej w programie głównym zmiennej...
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
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.
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.
Nie nie zawiera . W pierwszej kolejności musisz zezwolić na przerwania , a dopiero potem konkretne przerwanie
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...
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.
Przerwanie wyzwalasz poziomem czy zboczem? Kolejna sprawa. Gdzieś czytałem, że AVR po wyjściu z przerwania wykonuje JEDNĄ INSTRUKCJĘ i przechodzi znów do obsługi przerwania (jeśli jest nowe). Jeśli chcesz blokować wskoczenie do nowego przerwania , to musisz w OBSŁUDZE POPRZEDNIEGO PRZERWANIA na samym końcu sprawdzać bit zgłoszenia ponownego przerwania....
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...
Wstaw cały kod, bo po tym fragmencie nic się nie da powiedzieć.
Tak przerwania mogą zakłócać. Na czas wysyłania komend 1w wyłączaj przerwania jeśli możesz.
przerwanie od portu szeregowego obsługujesz w ten sam sposób jaki i każde inne przerwanie.
Wklep na początku przerwania : Enable Interrupts Wywnioskowałem to z pomocy bascoma (polecenie on Interrupt)
I w dodatku Timer sam z siebie nie generuje przerwania. Ustawia flagę. Jak nie zezwolisz na obsługę to przerwania nie będzie.
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...
przerwanie funkcji xxx i natychmiastowe przejście do funkcji bbb. Jak sam piszesz przerwac mozesz tylko przerwaniem.
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.
...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
To może zamiast wyłaczać przerwanie od timer1 trzebaby pomysleć od odblokowaniu niektórych przerwań w przerwaniu.
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.
... 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.
Czas niski wywołujący przerwanie to 400-450ns potem następuje zmiana w wszystkich pinów , następne przerwanie po ok 4us
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...
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...
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...
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....
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...
Ja myślę, że za dużo nawalone jest w przerwaniu. Ja bym to napisał tak, że w przerwaniu ustawiałbym tylko flagę, a odczyt robiłbym w pętli głównej i to nie wszystkich czujników na raz tylko jeden na przerwanie, a potem następny itd.
Zastosuj przerwanie od TMR.
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...
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
Ż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...
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ć...
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...
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...
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...
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...
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. :)
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
Pokaż chociaż kawałek kodu to zobaczymy jak to zrobiłeś. Do przemyślenia podam kilka przybliżonych wartości. Odczyt 9 bajtów z DS18B20 (razem z CRC) trwa ~7ms Odczyt tylko dwóch bajtów ~3ms Multipleksowanie 4 LED7Segment to najcześciej 200Hz czyli co 5ms Obsługa wyświetlaczy w przerwaniu trwa ~ 5 us przy 8MHz Napisz przerwanie optymalniej a Dallas nawet...
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ę ;)
W przerwaniu Int0 inkrementuj zmienną. Ustaw timer na jakąś jednostkę czasu i w przerwaniu od tego timera obliczaj cześtotliwość i zeruj zmienną
Wywal opóźnienie z przerwania. Po za tym wygaszaj kolumny za każdym razem jak wchodzisz w przerwanie.
Witam. W petli glownej programu musisz sobie napiac jakas procedurke wyboru podprogramow. Np mozesz uzyc do tego 3 przyciskow - jeden do zwiekszana zmiennej np wybor , drugi do jej zmniejszania atrzeci przycisk do potwierdzenia "enter" . Nie pamietam juz dokaldnie skladni w Bascomie ale moze to byc np tak: DDRB=&b11111000 // - piny 0 1 i 2 portu...
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.
Czy mógłbyś podrzucić resztę kodu? Brakuje mi tu przerwania...
No wlasnie zauwazylem, pozostaje kwestia jak popranie obsluzyc te przerwania
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.
Instrukcja WAIT Przeznaczenie: Przerywa działanie programu na określony czas. Składnia: WAIT il_sekund Opis: Instrukcja wstrzymuje działanie programu na podaną ilość sekund. Odmierzany czas jest wartością przybliżoną, więc nie należy stosować tej instrukcji do dokładnego odmierzania czasu. Używanie przerwań, może znacznie wydłużyć działanie instrukcji....
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ź.
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.
Czy jeżeli w Bascomi-e, w przerwaniu, ............ ......... czy zapis będzie trwał, a procesor w tym czasię będzie już wykonywał inne rozkazy? Zapisywana jest zmienna bajtowa. Wpis wartości zmiennej do EEPROM nie odbywa sie samoczynnie, jak powiedzmy przesączanie wody przez lejek(!). Tego wpisu dokonuje processor; nie ma tam pośrednika (chyba jedynie...
Witam... Ja bym nie bawil sie w komparator i ... tylko wzioł cfrowy termometr 1-wire np DS1822, DS1821(swoją drogą da sie go zaprogramować jako termostat) no ale można zrobić to w rózny sposób, wracam do tematu postu... Przerwanie od komparatora w BASCOM Config Aci = On , Compare = Off , Trigger = Toggle On Aci Przerw Enable Interrupts Enable Aci coś...
Problemem jest to: [syntax=vbnet]Call Obrot[/syntax] Skoro "Obrot" to wektor przerwania, to nie należy do niego skakać. Procesor sam będzie do niego skakał. Nie należy też tego deklarować jako podprogram (Sub). Albo coś ma być podprogramem, albo wektorem przerwania.
Bascom moze tego nie obslugiwac. I ile recznie mozna wpisac do rejestru wlaczenie tego przerwania, to podanie wektora przerwania pewnie bedzie juz problemem - moze edycja pliku z danymi o ukontrolerze. Przerwania zmiany stanu na PCINT przypisane sa do portów, i dodatkowo mozna zdefiniowac które piny maja byc monitorowane (nie musza byc wszystkie).
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...
Timer w przerwaniu obsługuje wyświetlacz LED i inkrementuje zmienną byte, która w pętli głównej w instrukcji Case wybiera konkretne funkcjonalne fragmenty programu do wykonania, których wykonanie czasowo mieści się pomiędzy przerwaniami od timera. W przerwaniu od timera ustawia się także flaga przerwania, która uruchamia za pomocą If Then instrukcję...
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...
do mierzenia okresu sygnału najlepiej wykorzystać licznik i przerwanie zewnętrzne. Sygnał pomiarowy wzmocnić tak aby uzyskać przebieg prostokątny o stromym nachylaniu zboczy. Następnie podać sygnał na wejście przerwania zewnętrznego (np. detekcja zbocza 1->0). W przerwaniu włączyć licznik, wyjść z przerwania i oczekiwać na następne przerwanie w którym...
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...
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.
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...
Ale która konkretnie, czy Enable interrupts, czy Enable Timer0, czy oba na raz? Moim zdaniem to kolejny bug bascoma, znów może jakieś pokręcone rejestry, itp. Dokładnie problemu zidentyfikować nie mogę, bo takich procesorków nie mam, ani czasu tez zabardzo na takie badania. Jedyne co mogę doradzić to: a) zrobienie własnoręcznie przejściówki m8515/m32...
Procedura Getrc5 wykorzystuje Timer0. Użyj innego.
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...
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 >...
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
Witam. Dzięki temu $regfile = "M8DEF.dat" kompilator wie z jakim procesorem ma do czynienia. Jeżeli tego nie miałeś w pierwotnym programie, to kompilator brał tę informację z ustawienia w Opcjach. A pewnie był tam wpisany procesor, który nie miał timera nr 2. To samo z przerwaniami - wektor przerwań od timera nr 0 jest różny dla różnych typów procesorów...
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.
No cóż, Hex widzę ma ponad 2 kB, więc to może być źródło Twoich problemów, gdyż darmowa wersja ma ograniczenie do 2 kB. Możesz albo odchudzić kod, albo zainwestować w pełną wersję, lub ewentualnie skorzystać z pomocy kogoś, kto ma taką wersję i pomoże zapisać chip. Ewentualnie napisz na priv, to coś wymyślimy.
Moim zdaniem jakoś dziwnie masz te przerwania sterowane. Po co w przerwaniu masz Enable Interrupts - włączasz raz na początku i nie wyłączasz. Disable Int0 w pętli głównej też raczej nie jest dobrym pomysłem. Przed Enable Int0 proponuję dopisać zerowanie flagi przerwania, a na końcu (pętli) idle - dzięki temu po przerwaniu pętla zacznie "iść" od początku.
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 chcesz się nauczyć czy potrzebujesz program. Na początek te uwagi: 1. Nie wiem co tam robi dyrektywa $eeprom. Jest niepotrzebna w tym kodzie 2. Zmienna Ds jest zwiększana w przerwaniu niezależnie od tego czy jesteś w Menu czy nie. Tak więc po powrocie z Menu już na pewno nie zdążysz załapać się na warunek If Ds = 2 i wyzerować jej wartość....
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.
Wskazówki : [syntax=basic4gl] Config Serialin = Buffered , Size = 254 , Bytematch = All Enable Serial Enable Interrupts Serial0bytereceived: Return [/syntax]
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=...
Wybudzaj przerwaniem watchdoga nie resetem. Ja bym to zrobił tak (w C, w bascomie pewnie też tak się da): W głównej pętli: - konfiguracja watchdoga z przerwaniem na jak najdłuższy czas- - wejście w power down - pętla nieskończona z ciągłym przechodzeniem do idle. W przerwaniu watchdoga: - wyzerowanie watchdoga - inkrementacja zmiennej odliczającej od...
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...
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...
Prescaler musi być co najmniej 8.
Po uruchomieniu zasilania najpierw odczekaj chwilkę, później skasuj flagę przerwania INT1 i dopiero zezwój na obsługę przerwania INT1.
bezwładność serva w porównaniu z szybkością procka jest tak duża, że na pojedyńcze zakłucenie nawet nie zareaguje.
programu to ja ci już nie przeanalizuję teraz bo padnięty jestem ..... .... ale to że wgrywasz bootloaderem i że atmega była programowana wiele razy - nie ma tu najmniejszego znaczenia Dodano po 22 ok - po pierwsze nie stosujesz wcięć w kodzie a jak stosujesz to totalnie bez ładu - przez co nawet tobie trudno później dostrzec jakieś błędy (a szczególnie...
Musisz zaznaczyć cały tekst który chcesz pokazać jako kod, a następnie zaznaczyć napis Code $regfile = "attiny2313.dat" $crystal = 8000000 'kwarc 1MHz $prog &HFC , &HE4 , &H9F , &H00 ' generated. Take care that the chip supports all fuse bytes. Config Timer1 = Timer , Prescale = 64 'timer1 jako licznik 15536 Config Int0 = Rising 'detetor zera...
A jak ustawić ten licznik żeby generował takie przerwania ??
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. ...
bascom przerwać przerwać przerwać bascom bascom przerwać
instrukcja serwisowa ariston komunikaty avast nokia trybie offline
telewizor samsung restartuje telewizor samsung restartuje
Toshiba 55-inch TV Vestel 17IPS72 USB Firmware Flashing – Model Codes, Safe Procedure, Common Bricking cos(π/4) exact value, decimal, and use in QPSK, FPGA, DSP, IEEE 754, IEC 60559, 5G NR, ML