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...
Przy zapisie do EEPROMU w Bascomie nie musisz wyłączać przerwań. Funkcja WRITEEEPROM robi to sama, ale READEEPROM już nie wyłącza przerwań :)
Żeby skasować flagę przerwania w rejestrze, musisz zapisać " 1 ". Znajdziesz to w dokumentacji mikrokontrolera. Cytat z polskiego tłumaczenia: Flaga jest zerowana po wykonaniu procedury obsługi przerwania. Lub może zostać wyczyszczona poprzez wpisanie logicznej jedynki do niej.
Witam, koledze pewnie chodzi o polecenie Exit For :) szczegóły w pomocy Bascoma'a. Pozdrawiam, aleexander
Po Config Timer0 wpisz dodatkowo TCCR0 = 4 Config Timer0 = Timer , Prescale = 256 Tccr0 = 4 Tylko musisz coś zrobić z START TIMER0 i STOP TIMER0 bo one przywrócą wartość po CONFIGu i program dalej nie będzie działał. Najprościej będzie usunąć te instrukcje. dodano 20 Sie 2008 08:05 Mail z opisem błędu poszedł już do MCS Electronics. Zbaczymy jaka będzie...
rozne serwa roznie moga dzialac. Nigdzie nie widzialem, zeby ktos okreslil dokladna czestotliwosc z jaka to ma byc robione.. zazwyczaj jest ok. 50Hz. Drobne roznice typu kilka Hz (czyli kilka ms wywolywanie przerwania) nie powinny miec zadnego wplywu na serwo. Problem moze sie zaczac jak bedziesz mial dlugie funkcje wywolywane przerwaniami... ale na...
A czy to też nie działa : Config Watchdog = 16 Start Watchdog Disable Interrupts być może Bascom odblokowuje przerwania w starcie watchdoga?
Hehe... no to następny pomysł - a jak szybko obraca się pętla główna programu? Nie wiem jak masz skonstruowany program, czy w ogóle jest? Dużej precyzji czasów chyba nie potrzeba, nie ma różnicy, moim zdaniem, czy przytrzyma się przycisk 1s czy 1,1s, więc może ten pomysł wsadzić do pętli głównej i bez przerwań. Wtedy w zależności od szybkości pętli...
No, coś mi się wydaje, że jednak może nie do końca rozumiesz właśnie to wszystko i stąd takie podajęcie. Co to w ogóle dla ciebie znaczy, że: Bo niby po czym innym program ma poznać czy odczytane dane pasują w tym określonym miejscu ? .... toż twoja próba obsługi tego przerwania - pokazuje, że w 1000% mógłbyś wykorzystać mechanizm z Bytematch Ustawiłbys...
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...
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. :)
:arrow: zumek Trzeba jeszcze włączyć na nowo przerwania (sei).
Funkcja WAITMS nie jest odporna na przerwania. Jeśli masz jakieś to każde wystąpienie przerwania w trakcie WAITMS rozjedzie go. Niezależnie od stabilności tej funkcji, a nie ma powodu, żeby nie była powtarzalna jeśli nie jest przerywane wykonanie przerwaniami, to i tak lepsza praktyką będzie wykorzystanie timera.
Akurat ważniejszy jest mały spadek napięcia, żeby stan niski pozostawał niskim również za diodą. Zrobiłem szkic pokazujący o co chodzi w tym różniczkowaniu i ANDowaniu: http://obrazki.elektroda.pl/7732349900_1... Przy zwykłym różniczkowaniu widać, że brakuje szpilki wskazującej początek impulsu pierwszego kanału. Można ją odtworzyć...
Widzę że muszę trochę sprostować. 1. Nawet kosmicznie często wywoływane przerwanie zdąży się wykonać choć by nie wiem jak długo ono trwało, bo przerwania po wejściu w obsługę jakiegoś przerwania są blokowane i odblokowywane są dopiero po zakończeniu się obsługi tego przerwania. Więc twierdzenie że przerwanie nie zdąży się wykonać w ciągu 128us bo samo...
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).
Tak po krótce przeanalizowałem wątek TIMER2 tego nowego programu. Po prześledzeniu kilku instrukcji i "śladów skoków" mogę stwierdzić, że nie jest dziwne, że gdy aktywny jest TIMER2 i jego przerwania to wszystko siada. Pojawia się przerwanie TIMER2, program wskakuje do jego obsługi a tam napotyka: GOSUB w inne miejsce, gdzie napotyka GOTO w jeszcze...
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
Z tą dowlnością w używaniu rejestrów byłbym bardzo ostrożny. Nieodpowiednia zmiana - program się wysypie. Nie wolno używać w trybie zapisu bez wcześniejszego zapamiętania: Y ( soft stack pointer ), R4:R5 ( frame stack pointer ), R6 ( status register ), R8:R9 ( data pointer ), R23 ( translate register ), R12:R13:R14:R15 ( fp calculator ). W sumie można...
Err = 1 wstawiasz w obsłudze przerwania od Timera. A Err = 0 nigdzie ;)
Profesjonalnie to można programować w każdym języku, tylko trzeba go po prostu znać i umieć stosować w praktyce co najważniejsze. Dla takich początkujących jak ty Bascom powinien być jednym z lepszych języków tym bardziej, że nie rozumiesz jeszcze przerwań. Bascom daje ci gotowe rozwiązania w tym zakresie na maxa - popatrz sobie na Config Serialin ........
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...
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...
Witam Dla celów edukacyjnych w załączniku jest schemat i program do obsługi czterech wyświetlaczy na układzie 74164 W układach bardziej rozbudowanych programowo trzeba wykorzystać Przerwania Piotr
Korzystając z języka wysokiego poziomu, czyli C lub Bascom uzyskasz takie afekty, że zawsze coś się będzie rozjeżdzało. W Bascomie te efekty będzą napewno wieksze niż w C. Musisz dążyć do tego, aby procedury obsługi przerwania były jak najprostsze i najszybsze , oraz dla wszystkich przypadków takie same czasowo. Jeżeli widzisz że któraś opcja jest zawsze...
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...
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...
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.
case to taka imitacja warunków. Toszto wiecej kodu żre, niż byś miał do każdego porownania zastosować if : then Nie rozumiem powiazania przerwania urxc z buforowaniem. Po to się buforuje, zeby nie przerywać
To pewnie wynika z tego że powstało dużo różnych AVR`ów. Jeśli na początku ktoś korzystał tylko z jednego typu to mógł sobie w IDE ustawić konfigurację dla stosów a nawet wyświetlacza LCD czy I2C. Stąd dla wstecznej kompatybilności dalej tak można zrobić. Na przykład ustawienia dla stosów są tutaj tylko moje są już zmienione bo mogę szybko wkleić to...
pewnie piszesz w bascom ,wiec masz kod odbierania danych (całych stringów ) w przerwaniu :) : Config Serialin = Buffered , Size = 20 do If Ischarwaiting() = 1 Then '1 - odebrano znak,0 - pusty bufor Call Read_rs232 End If loop Sub Read_rs232 Dim Bufor As String * 24 Input Bufor Noecho end sub
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ś...
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.
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ę...
Na procu jest uruchomiony miernik częstotliwości (stacjonarny). Wykorzystane są dwa 16bitowe timery, uruchomiona jest komunikacja po rs232, zegar czasu na PCF8583 z podtrzymywaniem bateryjnym. Nie bardzo wiem jak to wszystko przełożyć na BASCOM AVR. Na początek spróbuj uruchomić przerwania oraz timer0 w trybie normalnego licznika - tak aby liczył z...
co ma się niby ustawić Portd.0 czy Portd.5 ? Gdzie jest procedura obsługi przerwania od Timera? Nie wiem czy reset nie działa tylko bitowo w Bascomie, myślę że lepije i bezpieczniej jest zrobić krok=0.
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...
Wszystko juz chodzi. Przyczyną problemów były błędy jakie zawiera sam BASCOM, które zgłoszę do autora........Temat do zamkniecia No zaraz padnę na zawał. Najpierw, że kod super tajny, korporacyjny och i ach , że przerwania w AVRach mieszają na portach. A przecież przerwania to nie "wytwór" Bascoma Wlasnie o to chodzi że ma coś wspolnego z przerwaniem....
1. Nie wykluczyles drgan na przycisku s1 2. Zebys wykonac to co chcesz zrobic bedzie ci potrzebne przerwanie. 3. Dziwie sie, ze sprawnie dziala ci ten kod (chyba, ze specjalnie robisz sprawdzanie przycisku w petli, zeby nie bylo przerwania i wykonal kod do konca, a pozniej sprawdzil czy przycisk jest wcisniety. W tym przypadku przepraszam)
No to kawa na ławę. Instrukcja Getrc5 w czasie działania używa jest licznika TIMER0 i związanego z nim przerwania. Licznik ten jest służy do generacji wymaganych opóźnień podczas próbkowania sygnału. TIMER0 może być dalej używany przez program, lecz należy się liczyć z wynikłymi opóźnieniami, gdy wykonywana będzie funkcja GETRC5(). Jest tylko jeden...
Wydaje mi się że chyba wiem o co ci chodzi z tą pracą w tle Czy miałeś coś takiego na myśli? Tak, o to mi chodzi. Oczywiście musisz zastosować odpowiedni preskaler, żeby timer nie liczył z pełną prędkością (pojedynczych taktów zegara). W razie potrzeby timer może być włączany/wyłączany w procedurze obsługi przerwania.
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
co do bascoma, to może kolega zumek tu zajrzy wtedy napewno coś poradzi ;) a jak nie to znajdź go i zapytaj na PW pozdr Bascom w tym przypadku nie ma nic do rzeczy , a przyczyna jest prozaiczna ;) Procek idzie spać w przerwaniu , a w takim przypadku WSZYSTKIE przerwania są wyłączone :D Już mi pora , przejść w STANDBY ;) Piotrek
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
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...
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
Generalnie to twój problem wynika w dużej mierze z tego, że wywołujesz funkcję z wewnątrz przerwania. To powoduje szczególnie w Bascomie - niestety KOSMICZNE obciążenie w postaci po pierwsze ogromnego i niepotrzebnego zużycia stosu przez co musisz właśnie zacząć się bawić z tymi wszystkimi HWSTACKAMI itp .... zobaczysz jaka bonanza z tym będzie przy...
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.
Napisalem w bascomie program ktory ma mierzyc czas trwania impulsu. Dokladniej jest to pokazane na rysunku w zalaczniku. Ale niestety program niechce dzialac a dokladniej pokazuje mi na lcd caly czas 101 i niewiem co jest grane bo moim zdaniem jezeli zmienia sie czas trwania impulsu to powinna sie zmienic iloscimpulsow zliczonych przez licznik. dodam...
Witam Czy ktoś ma doświadczenie z przerwaniami w bascomie. Napisałem sterownik temp. I cyklicznie za pomocą przerwania wywołuje podprogram który odczytuje temperaturę niestety często zdarzają się kaszaki na LCD poczym reset procesora zazwyczaj w ekranach parametrów po wyłączeniu przerwania wszystko jest ok. Domyślam się że przerwanie zatrzymuje działanie...
Disable INT0 w przerwaniu nic złego nie zrobi. Należy tylko pamiętać aby we właściwym miejscu je włączyć, tutaj ja polecam na końcu przerwania, a nie w głównej pętli programu. Bo nigdy nie wiadomo w którym momencie pętli głównej wejdzie się do przerwania (a może wejść np po komendzie enable int0, potem wychodzi z przerwania z wyłączonym int0 i jest...
Ja już za mało pamiętam Bascoma żeby tu podpowiedzieć. Ale na pewno można na własny sposób oprogramować przerwania - tyle że to będzie niejako wyważanie głową drzwi bo z jednej strony Bascom ma fajnie napisaną sprzętową obsługę RS232 tylko trzeba umiec ją wykorzystać. Ale kurczę zaglądam teraz do HELP'a bascoma a tam jak byk masz napisane: Remarks pin...
przerwania bascom bascom wywołanie przerwania attiny bascom przerwania
odkamienić beretta unknown device drukarka oporność głośnik
zasilacz labolatoryjny zasilacz labolatoryjny
Suszarka Bosch nie działa po zasłonięciu wentylatora Sterowanie długością impulsu napięciem: PWM, NE555, mikrokontrolery