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...
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...
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...
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ć...
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...
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...
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...
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...
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)......
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...
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...
Zawsze jak wchodzisz w przerwanie np.On Timer lub w podprogram sub procesor odkłada zawartość pewnych rejestrów na stos (co zajmuje mu ileś us) a po przerwaniu (lub sub-ie) zdejmuje ze stosu (co znowu zajmuje czas). Rachunkowo wygląda wszystko dobrze w programie-ale tylko gdy procesor chodzi z nieskończoną prędkością. A chodzi ze skończoną. A-w tych...
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...
...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...
Hehe, przeanalizuj dokładnie Twój ostatni programik i odpowiedz sobie jeszcze raz na pytanie jak on właściwie działa :) ...jak ograniczyć ruch diody dosłownie na 4 pinach. Tu mamy przesuwanie 2 diodek - "00010001"... Wkradł mi się mały błędzik :) W swoim programie pobierałem dane z linii Data i były to tylko bity 0...3 dla silnika bipolarnego natomiast...
Kwarc dajesz np. 12 MHz Robisz sobie pętelkę pomiarową wywoływaną z Timera np. co 200 µs sprawdzającą dane wejście pomiarowe. Jeżeli wejście jest =0 to nie zliczasz jeżeli = 1 to zwiększasz zmienną WYNIK o 1 (zmienna 16 bitowa) zakres będzie do jakichś 6.4 sekundy. W pętli sprawdzasz także czy zmienna nie przekroczyła 25000 (5 sekund). Jeżeli...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Z tego co widzę, to nadal masz funkcję miganie wrzuconą do pętli głównej... a ma być w funkcji, która obsługuje przerwanie timera. Druga sprawa - nie znam Bascoma, więc nie wiem na ile radzi on sobie z jednoczasowym dostępem do zmiennej z pętli głównej programu i przerwania. W C programista musi sam o to zadbać stosując volatile i sekcje krytyczne....
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
http://obrazki.elektroda.pl/9838687700_1... Trochę z obawą prezentuję kolejny już na elektrodzie sterownik oświetlenia, no bo ileż tego już tutaj było? A jednak nie znalazłem rozwiązania mnie zadowalającego, dlatego też powstał niżej prezentowany układ, powstał ponieważ klasyczne lampy z czujnikami ruchu mają pewną zasadniczą wadę:...
Dziękuję. Rejestr już jest odczytywany przed zapisem. Każde przerwanie w slave zapisuje coś do SPDR, więc jeśli slave ZDĄŻY obsłużyć przerwanie i wpisać to zawsze jeden bajt jest wpisany. Przed transmisją przy inicjacji nic nie wpisuję do spdr, pierwszy wpis jest w przerwaniu. Wygląda na to, że oba wyrabiają się z wpisywaniem danych do rejestrów bo...
Można włączyć przerwanie od zmiany stanu na PB3 (to chyba PCINT3) i w obsłudze przerwania zrównać jakąś zmienną czekania. Czyli jak czekasz aż coś spadnie do zera to piszesz w przerwaniu "Ta_zmienna = 1" Wtedy po wyjściu z przerwania Decr spowoduje że warunek "If Ta_zmienna = 0 Then" Analogicznie w górę możesz w przerwaniu napisać "Czekaj = 34" A teraz...
A ja tu widzę jeden problem 'odebranie przerwania i przekazanie go dalej 'debounce eliminuje drganie stykow tych 9 przyciskow Przerwanie: Debounce Pind.2 , 0 , Obslugaprzerwania , Sub Return to nie zostanie wykonane Obslugaprzerwania: 'tu sobie robimy to co ma byc w przerwaniu Waitms 100 Return reti zakonczenie przerwania gdy w przerwaniu wykonasz skok...
Dodajmy, że kiedfy pilot nie nadaje, odbiornik odbiera śmieci i wystawia na wyjściu przebieg prostokątny, któego zbocza są dużo gęstsze niż podczas odbioru danych, a każde zbiocze będzie w takim przypadku generowało przerwanie. Dlatrego lepiej jest odbierać w przerwaniu timera, a nie używać przerwań od zboczy. To jest oczywiste, ale.. odbiornik RF...
Witam gdzies wyczytalem ze 54 takty, ale nie jestem pewien tego. znając życie te 54 takty zależą od typu uP i producenta. jeśli potrzebujesz dokładnie 10ms ( " do zegarkowej precyzji " ) to polecam tryb 2 ( 8bit ) ustawiasz przerwanie co 250 taktów ( 250us ) a w przerwaniu liczysz przerwania ( masło maślane ) jeśli wystąpiło ich 40 to właśnie doczekałeś...
Dim Wygenerowano_przerwanie$ As Bit Nie wiem jak wygląda implementacja bitu w Bascomie, ale założę się, że jest wolniejsza niż użycie zwykłego bajtu. Co do sposobu z flagą, to jest on jak najbardziej poprawny. Tworzysz pewnego rodzaju "semafor", który wykorzystujesz w programie głównym. Jednak jeśli wykonanie operacji w pętli głównej przerwania, której...
Włączając przerwanie od Timera który robi PWM (czyli Timer1) i pomiar ADC robiąc w tym przerwaniu (w każdym razie wyzwalając go w tym przerwaniu). PWM trzeba ustawić w tryb Phase Correct. Wtedy pomiar będzie dokładnie w środku przebiegu (w niczym to nie przeszkadza, nie musi być na końcu).
Jakie są założenia co do rozdzielczości oraz stabilności generowanej częstotliwości (jitter) ? Generacje częstotliwości kHz na AVR najlepiej zrobić przez zastosowanie DDS. jeden timer w ctc generuje przerwanie w równych odstępach, resztę załatwia się w przerwaniu (trochę tylko kiepsko bo bascom zmarnotrawi dużo czasu- najlepiej tę część napisać w asm).
Tak tez robilem na wszelki wypadek - nic! Przerwanie nie wypada na czas transmisji 1wire bo jak pisalem wszystko juz dawno sie konczy.. Zrobilem tak ze w gl petli programu (czyli Do..Loop) wstawilem aby czytal DS'a a w przerwaniu reszte - dziala :| w tym przypadku przerwanie moglo by zaklucac transmisje do i z DS'a a tego nie robi... pojecia nie mam...
Witam Niech mi ktoś powie dlaczego nie działa mi impulsator pod prockiem ATmega16. Wyprowadzanie A podłączone mam pod przerwanie procesora a drugie sprawdzam w momencie przerwania. Niby wszystko logiczne: jak na kanale B mam 1 to kręcę w jedną stronę a jak 0 to w drugą. Ale jakoś mi to nie chce działać. Kanały już nawet podciągnąłem do plusa zasilania...
Witam. Nie używaj lookup. Zrób sobie tablicę cyferka[10], nadaj jej wartości na początku programu i będziesz miał port=cyferka[d]. Wszystkie obliczenia rób poza przerwaniem. W przerwaniu tylko wyświetlaj dane na wyświetlaczu. I to tylko jednym naraz. Mój przykładowy programik (zegarek z termometrem do motocykla) A1 A2 A3 A4 to zmienne, które program...
Ja nie znam dokładnie bascoma ale moge dorzucić kilka uwag, i dołaczę się z pytaniem? Czy bascom atomizuje zmienne? Jeśli nie, to w petli głównej masz: I_count = 0 a w przerwaniu: Incr I_count istnieje ryzyko że przerwanie nie nadpisze zmiennej I_count. Generalnie dotyczy to wszystkich zmiennych używanych w przerwaniu. Wyjątkiem jest gdy bascom umieści...
Może sie komuś przyda ... działajacy kod sprawdzałem testowalem niby wszystko działa czestotliwosc PWM = 123 Hz $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output 'Konfiguracja 4 pinów wyjściowych PWM Config Pinb.2 = Output Config Pinb.3 = Output Config Pinb.4 = Output Dim Wyp(4) As Byte 'zmienne wypełnienia Dim Licz...
Owszem w konfiguracji Timera głupi błąd, ale ku mojemu zdziwieniu przerwanie działało. W liczeniu czasu chyba się koledze przecinek przestawił. Przerwanie w teorii kompilatora bascom trwa ok 0,16ms. W praktyce: po dodaniu w przerwaniu " toggle portb.0" częstotliwość generowanego przebiegu prostokątnego to 3,289kHz więc przerwanie wykonuje się z częstotliwością...
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.
A komunikację z wyświetlaczem masz na pewno dobrą? Może zamiast wypisywania "OK" najzwyczajniej każ mu zmienić w przerwaniu jakikolwiek inny pin, żeby zobaczyć, czy je zgłasza. Spróbuj też ustawić przerwanie na stan, a nie na zbocze. A jaki masz procek w ogóle?
Nie jestem pewny czy procesor zdąży wykonać to co masz w tym przerwaniu , zanim przyjdzie następne (mam na myśli wszystko ).Program w przerwaniu ma być krótki , chyba że pierwsza linijka jest taka " Disable timer0 " , ale w twoim programie taka instrukcja raczej odpada. I jeszcze jedno , co się dzieje jeżeli podczas transmisji po i2c lub 1Wire przyjdzie...
Witam... i temat zamykam :-) Zastosowałem jednak obsługę enkodera na przerwaniu Int1. Jedno z wyprowadzeń podpiąłem pod Int1, przerwania ustawiłem na wyzwalane opadającym zboczem a w samym przerwaniu sprawdzam co jest na drugiej "nodze" enkodera i zmniejszam lub zwiększam wybraną daną a którą wiem po indeksie zmienianym w petli głównej do loop. W przerwaniu...
Przy "zabawie" z przerwaniami trzeba pamiętać , by czas obsługi przerwania był krótszy od czasu pomiędzy przerwaniami. Czyli jeżeli ktoś chce w przerwaniu obsługiwać przeliczenie zmiennej zmiennoprzecinkowej , wyświetlacz itp a następne przerwanie przyjdzie np po 100 mikrosek to niech się nie dziwi , że program "wisi". Problem z BASCOM'em jaki miałem...
Nie wiem jak to się robi w Bascomie, ale może odbiornik nie ma czasu żeby "obrobić" odebrany bajt? Pewnie Bascom robi obsługę odbioru na przerwaniu: przychodzi bajt, wywołuje przerwanie procka na nadejście transmisji, i w tym przerwaniu umieszcza wszystkie instrukcje które mu wpisałeś (czy coś w tym stylu :P). Spróbuj, tak z czystej ciekawości, po nadaniu...
Zbocze generuje tranzystor napedzany fototranzystorem. Ten zas wyzwala przerwanie w momencie blysku lampy blyskowej. Wiec opoznienie 50ms jest zabojcze bo synchronizacja bedzie zerowa. Juz wiem co to jest ten Eifr, nie ma jak dokumentacja pdf ;) Swoja droga myslalem ze rejestr przerwan sam sie zeruje. Dodano po 55 Ok westepnie procedurka ze sprawdzaniem...
Witam, dziekuję za odpowiedzi. (at)yokoon Dlaczego load timer miałby być w programie głównym? W głównym być nie może a w przerwaniu jest niezbędny. (at)M. S. Tak, tryb CTC to alternatywne rozwiązanie. Spróbuję czy to coś zmieni. (at)emarcus nie masz co robić? To poczytaj ze zrozumieniem. Tu pytam o możliwość skrócenia pojedynczego cyklu, a w drugim...
Wsadź odczyt pod jakiś label np: odczyt: "wyłącz przerwania" "dokonaj odczytu z ds" "włącz przerwania" return w programie zamiast całej formułki : 1wreset 1wwrite &H55 1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika If Err <> 1 Then 1wwrite &HBE Tp = 1wread(2) Wywołuj tylko label...
Witam Mam problem programuje w Bascom avr procka atmega8 zrobiłem sobie transmisje RS i mam problem ogólnie wszystko pięknie ładnie działa tylko że w momencie jak wystąpi przerwanie po przez funkcje print zostaje wysłany znak ze zmiennej po czym przechodzi do funkcji waitkey() i oczekuje na odebranie znaku no i właśnie ... oczekuje ale nic nie widzi...
Walczyłem z tym problemem bardzo długo, napisałem post tutaj no i proszę - problem rozwiązałem parę godzin później. Otóż procesor nie wskakiwał w przerwania od odbiornika (URXC), nie chodzi na 1MHz tylko na 14754600Hz, BaudRate jest 9600. Okazuje się, że w przerwania w kółko wskakiwał, ale od UDRE! - czyli tak jakby po wysłaniu czegoś (choć niczego...
Moim zdaniem przyczyna leży w obsłudze przerwania. Przerwanie INT0 jest uruchamiane opadającym zboczem (Falling) CHA zmiana sie 1 -> 0. Dodatkowo w przerwaniu są instrukcje sprawdzające czy kanały są w stanie 00. Stan 11 jest pomijany. By móc rejestrować zmiany 0 -> 1 można ustawić przerwanie INT1 na wyzwalanie zboczem narastającym (Rising) i sprawdzać...
Długo by tłumaczyć. Przede wszystkim przerwanie przychodzi po pierwszym znaku, a Inkey odbiera cały ciąg znaków Z tego powodu Inkey nie nadaje się do użycia w przerwaniu. Ty użyłeś go w przerwaniu i tym samym blokujesz przerwania. Bo przerwanie przychodzi po pierwszym odebranym znaku, ale zostaje tam aż nie przyjdą kolejne znaki. Poza tym użyłeś Inkey...
W przerwaniu robisz Enable Interrupts zanim włączysz Timer0, co może powodować problemy. Poza tym procka taktujesz 12MHz. A Timer0 z preskalera 1024. Czyli Timer0 dostaje 11718.75Hz. W przerwaniu zliczasz do 15000. I to Ci daje okres jak mówisz około 4 sekundy. Czyli na sekundę jest 3750 przerwań. Co oznacza że pomiędzy przerwaniami Timer0 zlicza do...
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ć...
Stosuję odczyt DS18B20 w przerwaniu, dlatego, że przerwanie rozkładało mi transmisję 1wire. Przerwanie jest wyzwalane z częstotliwością 100 Hz, przez częstotliwość sieci 220 V i służy do obsługi ściemniacza. Transmisję 1wire umieściłem w tym przerwaniu, żeby uniknąć jej zakłócania właśnie przez to przerwanie. Co przerwanie wykonywana jest kolejna instrukcja...
Cześć sory, że tak późno, ale nie miałem neta bo w router'ku zmieniałem firmware. odnośnie: "musisz zmienić tok rozumowania według mojej wiedzy liczniki działają niezależnie czyli liczą a procesor robi swoje ale przerwanie zmusza procesor do wykonania czynności innych czyli obsługi przerwania czyli obliczenia tej jednej sekundy" Prawie, ale nie do końca....
W pseudokodzie: 1. Ustaw timer na częstotliwość powiedzmy ok. 100 kHz, przypisz do niego przerwanie i aktywuj przerwania 2. Stwórz dla każdego kanału zmienną typu PWM_CHn W przerwaniu od timera 1. Zmienna COUNTER = COUNTER + 1 2. dla każdego kanału 0...n: Jeśli COUNTER < PWM_CHn to zapal diodę, w przeciwnym razie zgaś 3. Ewentualnie jeśli chcesz...
Witam wszystkich. Pisze program do pewnej maszyny gdzie pracują silniki krokowe itp. Ale jest tez pomiar temperatury (termostat) jak zrobic zeby co ok 2s niezaleznie od głównego programu procesor sprawdzal czy wlaczyc czy wylaczyc grzalke. Slyszalem o przerwaniu z przepelnienia licznika ale nigdy tego nie praktykowalem. Procek to ATMEGA 128 a kompilator...
Przepraszam za dłuższą nieobecność. Nie mając nic nowego (i mądrego) nie pisałem. Ale w międzyczasie polutowałem zestaw startowy, a ostatnio napisałem inny program, który umożliwia (w zamyśle) liczenie dokładniej częstotliwości dla "paczki" impulsów, tym razem około 500 Hz. Wiem, że to dosyć skomplikowany tok myślenia, pewnie można to zrobić prościej,...
to rozwiązanie z czasami, rozumiem. U mnie raczej żadne przerwanie nie wcinało się podczas 1wread, ponieważ korzystam tylko z przerwania t2 generowanego raz na sekundę i na początku przerwania wykonuję 1wread potem zapuszczam kolejną konwersję i wracam w kolejnym przerwaniu po sekundzie.
800 instrukcji procesora to Bascom potrafi skonsumować na jakieś dwie linie kodu źródłowego :) - zwłaszcza przy operacji sumowania łańcuchów - podejrzewam, że szybkie to nie jest. W tym konkretnym przypadku można byłoby spróbować czytać znaki z UARTa w przerwaniu timera, bo wiadomo, że w jednym okresie timera nie ma szans na odebranie dwóch bajtów....
Witam Wyłączenie przerwania nie wchodzi w grę mam tam reset watchdog-a Resetowanw watchdoga w przerwaniu , to ... oględnie mówiąc głupota. . Myślę że pozostaje mi rozwiązanie 2 ale czy Kolega zgada się z moja teorią o przerywaniu transmisji danych do LCD? Rozwiązanie nr. 2 jest dobre , ale pod warunkiem , że będziesz używał LCD WYŁĄCZNIE w przerwaniu....
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...
No właśnie jakiś podstaw tutaj nie rozumiem, stąd błędne działanie całości... Bodajże w tym temacie pojawił się programik "kalk" by Artur Starz, w programiku tym ustawiam, że taktowanie 16 MHz, timer 1, preskaler 64. Po obliczeniu otrzymuję, że timer zwiększy się co 4 us, a przerwanie wykona się co 0,262144 s -> czyli x1000, otrzymujemy 262,11 ms ....
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,...
Tego się tak nie robi. Uruchom przerwanie timera. Zapisz wartości strowania portów dla kolejnych kroków w tablicy stałych. W przerwaniu timera testuj przycisk, a co pewną liczbę przerwań wyrzucaj na porty kolejną wartość z tablicy.Przy takim podejściu cały kod zmieści się w kilkunastu liniach, może dwudziestu paru, a jego długość nie będzie zależała...
Pewnie, że wywala błąd, bo w C etykiety są ważne tylko wewnątrz funkcji. Tzn. nie można skoczyć z jednej funkcji do drugiej - to nie BASCOM ;) Przemyśl jeszcze raz algorytm. Zasadą jest, że przerwanie nie przenosi głownego sterowania w inne miejsce, a zwykle tylko ustawia flagi sprawdzane w pętli głównej (w uproszczeniu).
ustawiasz licznik tak by generował przerwanie co 50ms w tym przerwaniu sprawdzasz swoje sygnały (przyjmijmy ze wyzwalanie jest zerem) w przerwaniu sprawdzasz czy sygnał jest = 0 jeśli tak ustawiasz sobie jakaś zmienna bitową flagę (znak ze sygnał jest). w następnym przerwaniu (flaga ustawiona) sprawdzasz znów sygnał jeśli jest 0 np włącz silnik. dodatkowym...
Witam Chciałem do kuchni wstawić czujnik PIR, ale z dodatkową zaletą, czyli stopniowym zwiększaniem i zmniejszaniem PWM, dodatkowo jeśli podczas zmniejszania PWM nadejdzie przerwanie INT1 od czujnika PIR, to program ma przestać zmniejszać, tylko zacząć zwiększać i to nie od zera, ale od wartości na której "zastało" go przerwanie INT1 od PIR. W sumie...
...Co bym nie robił... wynik zawsze jest ten sam... Nic dziwnego, bo Bascom ignoruje polecenie Load Timer2 = 178 Zmień na Load Timer2 , 178 'lub Timer2= 256 - 178 i sprawdź :-P No faktyczne "przecinek" pomógł... Ale... No właśnie Ale. Działa ale przy przerwaniu 10ms x 100 zliczeń... Przy 1ms x 1000 zliczeń działa dalej nie tak (dioda miga co około...
JacekCz Dzięki ale tam piszą o skomplikowanych rzeczach... A tu prościej już sie nie da: w przerwaniu tylko ładuję timer, zmieniam stan portu i nic więcej... Wygląda na to że ktoś mi tu skraca timer bez mojej zgody? Dodano po 5 (at)niveasoft sparwdzam Twój kod, ale Compare_a i Compare_b są niezrozumiałe dla kompilatora... Dodano po 7 (at)niveasoft...
Jest jeszcze przerwanie PCINT wyzwalane dowolnym zboczem. Wejść PCINT jest zdecydowanie dużo, zatem można reagować nie tylko na dwa przerwania INT0/1. Fakt, nie wszystkie AVRy to mają. Co do programowej obsługi to trzeba skanować klawiaturę w krótkich odstępach czasu i porównywać stan bieżący z poprzednim odczytem. Niestety czas musi być dość krótki...
A po co ci T0 do wysyłania danych ? Po włączeniu zasilania wysyłasz konfigurację i do puki nic nie zmieniasz to program leci w pętli głównej. I2C zrób sobie w jakimś podprogramie i już . Przykładowo zmieniasz siłę głosu ,to przychodzi przerwanie na INT0 , w przerwaniu na początku robisz Disable INT0 , sprawdzasz pin , zmniejszasz lub zwiększasz zmienną,...
Ja trochę nie rozumiem: po co Ci i przerwanie i timer? 1. Chcesz liczyć timerem to na P3.4 podajesz liczone impulsy, a timer konfigurujesz jako counter i podajesz które zbocze impulsów ma zwiększać stan licznika. 2. Chcesz liczyć przerwaniem to impulsy podajesz na P3.2 i znowu: podajesz które zbocze ma wyzwalać przerwanie. W przerwaniu zwiększasz dowolną...
Tak jak radzi cyberdar zastosuj przerwanie generowane od timer1,przy kwarcu 4Mhz jak dasz prescale 256 i załadujesz wartość początkową do zliczenia 15625 do tajmera1 uzyskasz przerwanie co 1s a w przerwaniu możesz już z tym robić co chcesz np.zwiększać jakąś zmienną co 1s. Tak jak kol.wyżej napisał robienie tego w petli programu mija się z celem.
Antystatyk - co oznacza że nie działa? Skąd wiesz że nie działa? Testujesz to na procesorze czy w symulatorze bascoma? 1) wywal "Enable Timer2" ponieważ już w TIMSK aktywowałeś przerwanie 2) wstawiasz w przerwanie komendę PRINT (robisz sobie jaja) i twierdzisz że nie działa. A wiesz ile czasu zajmuje wykonanie się tego? 3) jeśli mimo wszystko testujesz...
bascom afe... To zależy jak dokładnie chcesz to mieć, najdokładniej to robisz: - Konfigurujesz timer na precaler 8; - ustawiasz compare match na 100 - ustawiasz tryb Interroput on compare match - włączasz przerwanie od compare match W ten sposób przerwanie od comare match generowane jest co 800 cykli zegara. Czyli dokładnie z freq 10kHZ. W tym przerwaniu...
michalko12: akurat poparte doświadzczeniem. Miałeś złe założenia przed przystąpieniem do tworzenia programu. Tak jak napisałem wcześniej, przerwanie powinno wykonywać się tyle ile powinno, a nie dowolny okres. Nie ma znaczenia gdzie wykona się zadanie, czy w przerwaniu czy w pętli głównej. Ma się wykonać tak, żeby cały program spełniał swoje zadanie....
Witaj. Pod ręką miałem ATtiny26 i płytkę ZL4AVR, więc na szybko "popełniłem" programik, który spełnia Twoje założenia. Zmieniłem częstotliwość impulsów (około 2Hz), abym mógł sobie wizualnie sprawdzić prawidłowość działania programu. Programik w poniższej postaci generuje 8 impulsów, potem ma 2 okresy przerwy itd. Dioda LED podłączona do B0 miga w takt...
Witam. Piszę sobie sterownik temperatury w Bascom '51 i mam problem z przerwaniem. Otóż serce układu to AT89C52 do niego jest podłączony RTC DS1678. Ustawiłem RTC, aby na wyjściu INT generował co sekundę impuls. Podaję ten impuls na wejście INT0 procesora. W obsłudze przerwań dałem ustawienie zmiennej Bit na 1, na podstawie jego inicjuję w pętli głównej...
Witam jestem tu nowy aczkolwiek zaawansowany w bascomie AVR Musisz ustawić prescaler i wpisać wartość counter0 lub timer0 żeby przerwanie przychodziło co określony czas. Osobiście się z ty nie zgadzam bo jeśli INT0 to nie timer tylko podanie standardowo zera na jedno z wejść w 8515 jest to PD2 lub INT1 PD3. Ja osobiście dałbym waita pod koniec przerwania...
Witajcie Napotkałem następujący problem - Mam układ komunikujący się szeregowo z procesorem w sposób następujący: 1. Układ wywołuje przerwanie 2. Odbieram dane statusu od układu 3. Wychodzę z przerwania i to działa. Problem zaczyna się jeżeli odebrane dane statusu wymuszają w procesorze kolejne operacje z użyciem układu. Ponieważ idzie to tak: 1.Układ...
niechce mi sie czytac calego zrodelka ale moze sprobuj przerwanie na timerze w obsludze porzerwania licznik, bo zliczeniu do ilus wystapien przerwan.. w avr zreszta sa odpowiednie preskaley do tych celow. po ktoryms przerwaniu uruchom procedure zamykania bramy czy co tam chcesz
Prywit! Mam problem z obsługą przerwania zewnętrznego. Do pinu INT0 podłączyłem włącznik zwierający do masy. Jak widać w programie podciągnąłem końcówkę do plusa. Do pinów C.1; C.2; C.3 podłączyłem diody LED do zobrazowania problemu. Napisałem taki oto krótki program i jestem zdziwiony działaniem. Po uruchomieniu programu dioda podłączona do pinu C.1...
Macie panowie racje. Generalnie to dawno temu zaczlem przygode z bascomem wtedy na 89C4051 ale poleglem i dalem sobie spokoj na wiele lat. Teraz wrocilem do tematu. Zaczalem od prostackich programow gdzie np delay 1sekunda sluzyl mi do mrugania ledami itd. Wstawialem takich delai wiele i mi diodki mrugaly jak cos tam mialem zglosic. Ale zaczalem sie...
Ten timer 0 jest raczej nie potrzebny. Za bardzo komplikujesz sprawę. Zrób tak: $crystal = 12000000 Config Timer1 = Timer Gate = Internal Mode = 2 Config Timer0 = Tiemr Gate = Internal Mode = 2 Enable Timer1 Enable Timer0 Enable Interrupts Dim P1 As Byte Dim P2 As Byte pwm: // to sie robi jak przerwanie z timera przychodzi inc P1 // inkrementacja...
Witam!! Troche nie wiem co sie dzieje. Wykorzystuje przerwanie od timer1.W procedurze obslugi przerwania umiescilem odwolanie do innej procedury lacznie z parametrami.Wyglada to tak: Config Timer1 = Timer , Prescale = 256 Dim X As Byte Dim Y As Byte X = 0 Y = 255 Cls Declare Sub Wyslij(x As Byte , Y As Byte) Enable Interrupts Enable Timer1 On...
Czy nie lepiej wykonać obsługę sekwencji w procedurze obsługi przerwania timer'a ? Co należałoby zrobić ?: - zdefiniować przerwanie np co 50 ms - dodać programowy dzielnik /100 w przerwaniu (5s) - wykonać tablicę sekwencji w pamięci programu - każde przepełnienie dzielnika powoduje odczyt danej z tablicy (w zależności od numeru sekwencji i numeru kroku)...
AT90S8535 posiada trzy liczniki: 0, 1 i 2. Licznik 1 posiada dwa niezależne wyjścia PWM: OC1A i OC1B. Natomiast licznik 2 ma jedno wyjście PWM: OC2. Tak więc masz do dyspozycji trzy wbudowane, niezależne mechanizmy PWM. Ale Ty potrzebujesz cztery. Można by wykorzystać do tego celu licznik 0, robiąc na nim PWM "na piechotę". Ładować do niego różnicę...
No własnie troszkę tego nie rozumiem. Eelementy które są wyświetlane na wyświetlaczu że tak powiem na stałe nie migotają. Pozostałe są aktualizowane w przerwaniu co sekundę. Żadnych waitów nie ma, a mega taktowana jest oscylatorem 8MHz - chyba na prawdę trzebaby mieć talent, by skopać w takich warunkach wyświetlanie na LCD, a póki co mikrokontroler...
Najlepiej to napisać sobie w bascomie ale z użyciem sprzętu - czyli przerwania tu gdzie się tylko da. Rozumiem że masz tylko odbierać dane po rs z ustalona prędkością i jakoś je zapisywać. Fajnie było by gdyby te dane były jednobajtowe - szybciej się wtedy reaguje i są pojedyncze, szybkie warunki. Kwarc daj max jaki wyjdzie z wyliczeń (najchętniej bardzo...
Przepraszam, z tym pull-down źle zinterpretowałem. Jeśli chodzi o zewnętrzny filtr to chyba najłatwiej by było wziąć oscyloskop i zobaczyć ile czasu trwają drgania i na tej podstawie dobrać stałą czasową filtra. Co do programowego filtrowania to mogło by się sprawdzić podpięcie przycisku pod przerwanie zewnętrzne wyzwalane zboczem o ile się nie mylę...
FastAVR jest mocno związany z asemblerem i daje bardzo efektywny kod wynikowy - Bascom się chowa przy nim. Ale tak jak w asemblerze trzeba pamiętać o deklaracji i inicjacji każdej zmiennej. Pierwsze 3 linie definiują typ proca, głębokośc stosu, prędkość zegara - ważne dla symulatora. Definiuję przerwanie od Timera0 i ustalam tryb pracy Timera0 Definiję...
Witam potrzebuje zrobic program ktory bedzie w odpowiednich odstepach czasu wywolywal przerwanie i w tym przerwaniu bede sobie mogl wykonywac dalsze funkcje problem w tym ze nie dizala mi taki najbardziej podstawowy program Symuluje to w proteusie i nie chce zapalac pinub.1 chodzi mi o taki test powinna sie pojawic 1 na pb.1 przy wywolaniu przerwania...
Podczas moim przygod z bascom nie musialem dawac zadnych kondensatorow bo Debounce na drodze programowej usuwalo drgania. Teraz chce zrobic to samo. Zrobilem tak ze odczekalem 50 ms, i sprawdzilem czy przycisk jest nadal wcisniety, jednak czasem jak nacisne, przytrzymam i puszcze to dioda tez zmienia stan, mimo ze nie powinna ( przerwanie jest tylko...
Program który przedstawiłeś nijak się ma do tego co chcesz osiągnąć. Nie wiadomo co to za zmienna Time1 i po co jest porównywana z jakimiś dziwnymi wartościami. Zacznij może tak. Prescaler=64 to za mało żeby odmierzyć dwie sekundy - musi być co najmniej 256. Skoro impulsy przychodzą na PD.3 to aż się prosi żeby wykorzystać przerwanie Int1. W przerwaniu...
Mundi - dobrze radzisz ale Antystatyk zrobił kompletny syf w przerwaniu i źle steruje wyświetlaczami. Twoja porada tu nie ma szans na prawidłowe zadziałanie. Antystatyk - Jak już widzisz, napisałeś to źle. Zobacz że wcześniej wspominałem o efekcie rozmazania na wyświetlaczach i napisałem w jakiej kolejności je sterować (bo już wielu początkujących na...
Witam Żeby uzyskać 1 sekundę albo skonfiguruj sobie timer albo wykorzystaj fakt, że układ ma dodatkowe wyprowadzenia do podpięcia dodatkowego kwarca a np. Bascom w prosty sposób pozwala Ci zrobić zegar. Skonfigurowanie zegar umożliwia skonstruowanie podprogramu (musi nazywać się sectic, więcej o tym w pliku pomocy), do którego procesor będzie wchodził...
Witajcie Jestem na etapie programowania układu zasilacza laboratoryjnego z ograniczeniem prądowym. mikrokontroler atmega16 Mój algorytm jest taki: Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej) W przerwaniu: - sczytane wartości napięć i prądów i porównanie ich z wartościami zadanymi -jeśli prąd...
Szkoda że na '51, bo na AVR było by łatwiej. Można to zrobić tak: Procki '51 mają wejścia zewnętrznego przerwania wyzwalanego stanem niskim, lub zboczem opadającym. Ciebie interesuje to drugie (bo zboczemn narastającym się nie da jak w AVR). Nie wiem jak wygląda konfiguracja przerwań w BASCOMie, zobacz w dokumentacji, ale podejrzewam że coś w rodzaju:...
Doszedłem do kilku wniosków. Ale nie będę się rozpisywał bo już mi się spać chce. No więc przerwanie nie zakłóca odbierania danych. Przerwanie może sobie chodzić ale jeżeli odczyt i wystawianie próbek na PWM1A będzie w pętli w programie głównym to nic się nie będzie zawieszało. Więcej. Przerwanie może wystawiać jakieś próbki na przykład na PWM1B i także...
Witam wszystkch. Mam wątpliwości co do odmierzania czasu w Bascom za pomocą Timerów. Sprawa dotyczy procków 51. Proszę o poprawienie mnie jeśli się myle. 1. Timer zlicza w górę od wpisanej wartości do 65535(16bit), Tryb 1. Zadaną wartość ładujemy komendą load timerx, yyyyy 2. Tak więc aby odliczyć 1 sekundę należy np.: 20 razy odliczyć po 50ms więc...
- hunterhaus - czy możesz napisać na ile moja wypowiedź jest dla ciebie zrozumiała :?: dla mnie tak :) a tak w ogóle to huntrehouse ale luz :) teraz kolega rakuś widzi że nie tylko ja miałem problemy ze zrozumieniem problemu czyli napiszmy to jasno, ukontroler dostaje z PC wektor o jaki musi przesunąć frez, czyli x, y, z, no i jakaś informacja o czasie...
Wyłączenie adc pomogło ograniczyć prąd w trybie powerdown, ale: Procesor nie wstaje po podpięciu zasilania. Jeśli włączam zegarek przyciskiem i wyłączam, ADC pracuje. Jednak jeśli wyłączy się po określonej sekundzie, to po włączeniu go przyciskiem ADC nie pracuje. Nie mam do tego g.... już siły. [syntax=vbnet]If Lock > 0 Then 'jesli w przerwaniu ustawiono...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
stm32 przerwanie przerwaniu przerwaniu bascom przerwanie bascom
cienie ekran laptop zmiana czasu letni zimowy pozystor sprawdzić
manta projektor manta projektorp
Kompatybilność piły spalinowej Oleo-Mac 937 z innymi modelami Czy można zamienić rezystor 820Ω 1W na 2W?