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ń :)
Do odczytu stanu portu służy rejestr PIN. Czyli masz źle zrealizowane warunki w funkcji przerwania.
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
Moze da bascom'owa funkcja uzywa timera
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.
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...
Tu mam jeszcze pytanie - czy mogę wykorzystać timer, do odpytania co kilka sekund o czas z rtc, co kilkadziesiąt ms o stany przycisków, co kilka sekund o temperatury? Użyj techniki opisanej [url=http://stsystem.elektroda.eu/progra... Co prawda kody są w C, ale z opisu bez problemu...
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...
Atmega2560 posiada 256kB pamięci. Załóżmy, że program zajmie 25k, zostaje jeszcze 225kB. Zatem, Twoich "plików" wejdzie 225 / 0,72 = 312 plików po 720 bajtów. Dostęp do danych przez funkcję lookup https://avrhelp.mcselec.com/index.html?l...
Nie wiem konkretnie o co Ci chodzi, ale pewnie rozwiązaniem było by zastosowanie odbioru w przerwaniu co w bascomie jest niezwykle łatwe za pomocą BYTEMATCH. Mam wersje 1.11.9.0 i wspomnianego BYTEMATCH nie ma. Od ktorej wersji bascoma jest w/w funkcja? Zawsze byłem za tym, by najmniej korzystac z gotowych funkcji, a korzystac bezposrednio z rejestrów...
Rzuciłem okiem w HELPa i funkcja "inputbin" czeka na znak, program dalej się nie wykonuje. Może lepiej użyć przerwań wykonujących się, gdy w buforze UART jest znak ?
w przerwaniu nigdy nie wykonuje się funkcji wait itp. :!:
A niby czemu ma program skakać do procedury obsługi przerwania od przepełnienia? Przecież on się nie przepełnia, tylko po doliczeniu do wartości OCR lub ICR , natychmiast się zeruję ( przy okazji może ,ale nie musi zmieniać stan pinu OC). Musisz uruchomić przerwanie od tego właśnie porównania - czyli od Compare, tak jak wspomniał kolega wyżej. Tylko...
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...
Czy to jest przerwanie czy odwołanie się do podprogramu? Jeśli przerwanie- to jakie zdarzenie je wywołuje? Po co w przerwaniu- jeśli jest to przerwanie- blokujesz przerwanie od przepełnienia Timera? Przecież i tak jest zablokowane. Funkcja jest zdeklarowana?
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
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...
D la AVR - ów sa dostępne komendy getRC5 i sendRC5. W czasie działania funkcji używany jest licznik TIMER0 i związane z nim przerwanie. Polecam lekture helpa dla bascom basic avr. Help jest dostepny na forum i na stronie www.edw.com.pl Nie wiem czy są takie układy, ale zawsze można coś wykombinować podłączając MAX232 i jakiś procek który zajął by się...
...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...
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
To przerzuć się na C. Tam z każdej funkcji możesz wyskoczyć instrukcją return , a że ISRy to też funkcje, to zero problemu...
Programy zazwyczaj składają się z: - konfiguracji portów i sprzętu - deklaracji zmiennych - funkcji i obsługi przerwań - programu głównego wraz z pętlą główną (W Bascomie funkcje i przerwania pisze się za programem głównym) Przepisanie dwóch programów jednego po drugim do niczego dobrego nie doprowadzi. Zwłaszcza jeśli żadnego z nich nie rozumiesz....
można można... tylko z rozwagą:> I chyba nie polecam tego koledze na chwilę obecną:> (Ale jakby co wystarczy włączyć ponownie przerwania globalne...).
Teraz spłodziłem coś na chacie w bascomie ;-) Może w końcu ta koncepcja ruszy.... uwzględnia drgania styków, działa na innej zasadzie... powinna byc odporna na wszelkiego rodzaju czasy między puszczeniami wciśnięciami itp... w przerwaniu co 10ms sprawdzamy stan przycisku zadziałanie przycisku następuje najwcześniej po 10 jego sprawdzeniach (po 100ms)...
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.
Akurat takich mam dostatek, jednak nie bardzo rozumiem, jak wykożystac sprzętową obsługę w bascomie W helpie jest opisana funkcja ENCODER(), zatem może warto najpierw te parę zdań przeczytać? W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem Nie zapominajmy o drganiu styków. Jeszcze nie spotkałem enkodera mechanicznego,...
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 tak z ciekawości zapytam jak długi zadeklarowałeś ten string LINIA ??? skoro jak rozumiem obsługujesz zapewne SMSy. To chyba długość co najmniej 160 hmmm ??... U mnie , zmienna Line ma rozmiar 30B , ponieważ pobieram do niej tylko ... jakby tu powiedzieć ... mnemoniki komend AT i ich parametry , a SMS-a dekoduje "w locie" , w czasie przerwań od...
przerwanie funkcji xxx i natychmiastowe przejście do funkcji bbb. Jak sam piszesz przerwac mozesz tylko przerwaniem.
Zgodnie z obietnicą wstawię kod programu w języku Bascom. Wiem że jest w nim wiele błędów i moich złych nawyków choćby brak przerwań, funkcji, itp.
Witam czas późnienia wprowadzany przez instrukcje "wait" w Bascom-ie zależy ściśle od częstotliwości rezonatora kwarcowego. Jeśli chcesz dokładnie odmierzyć upływ czasu i wykonać jakąś instrukcję to proponuję zrobić to w funkcji przerwania dla Timer-a Pozdrawiam
Jeśli wywołanie nie działa to znaczy że masz coś w kodzie nie tak. Z tego co dobrze pamiętam to jak wywołujesz funkcję to chyba najlepiej z parametrem. Sprawdź jak masz przerwania.
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...
Masz rację te procki nie posiadają różnych poziomów przerwań, jak to było w '51, ponieważ posiada on we swoich funkcjach wspomagania sprzętowe, czego '51 nie miała za wiele, dlatego myslę że w tych prockach zrezygnowali z tej funkcji układu przerwań.
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...
kbw - nie bądź ryzykantem i zbuduj prototyp. Układ jest na tyle banalny że zrobisz go na jakiejkolwiek płytce uniwersalnej. Wyjdą ci wszystkie bzdety źle wpływające na działanie. Zawsze lepiej jest odkłócić przycisk kondensatorem niż bawić się w dziwne rozwiązania programowe. Tzn, programowo i tak musisz zrobić debounce ale "sprzętowo" odkłócony przycisk...
EEEEEEEj kolego - teraz to żeś zamieszał ;) .... sorki że się uśmiecham ale to nie z ironii tylko z pomysłowości ;) A co ma piernik do wiatraka czyli co ma jakieś INT2 do UART1 ???? no jak można tak odczytywać znaczenie opisu różnych funkcji nóg procesora To tylko oznacza, że ten pin może pełnić rolę albo zwykłego pinu I/O albo rolę RxD1 (czyli wejście...
blokuje się bo funkcja spiin jest chyba blokująca Nie chyba a na pewno. Że też na to nie wpadłem :-( W C nie byłoby problemu sprawdzić jak działa taki "spiin", w Bascim, cóż :-( W HELP niewiele napisali ale po analizie przykładów można wywnioskować, że jest blokująca. Czeka na zadaną liczbę znaków i zapisuje do tablicy. Program będzie wisiał dopóki...
W celu eliminacji drgań styków należy użyć przerwania licznika, by odczytywać stan przycisku tylko raz na około 10 ms . Nie używamy funkcji Debounce i delay_ms ! Czy przycisk został naciśnięty sprawdzamy w zmiennej globalnej dostępnej w programie głównym.
Witam, daj sobie spokój z takim dziwnym skracaniem kodu bo zwykle w takich przypadkach wyłożysz się na plecy i długo będziesz szukał błędu. Po pierwsze - tym GoSub-em chcesz skakać do procedury obsługi przerwania, która wprawdzie w Bascomie kończy się dla programisty podobnie jak np zakończenie podprogramu bo rozkazem "Return" - ale to nie to samo w...
Kolego Balu , Nie neguje rozwiązania krańcówek na przerwaniach ale co przemawia za tym by właśnie zrobić to na krańcówkach a nie zostawić tak jak jest? Program przecież zajmuje się tyko obsługą bramy, nie ma innych funkcji. Pewnie ilu użytkowników tego forum , tyle było by rozwiązań, mnie interesuje Twoje, dlaczego tak? Pozdrawiam Malcik
Ileż się naszukałem w User Manualu co odpowiada za globalne włączenie przerwań w LPC2478. I okazało się że chyba nic. Po prostu to wymysł Keila ta funkcja. W User Manualu tego nie znajdziesz, tak samo jak szczegółów dotyczących przerwań, instrukcji assemblera itp. Dlaczego? Dlatego, że to są rzeczy specyficzne dla RDZENIA tego mikrokontrolera - rdznia...
Bascom nie wykorzysuje przerwań do realizacji funkcji Print i Input. Ale problem będzie bo już samo włączenie UARTa w procesorach AVR włącza pin TXD do wysyłania danych i nie można stanu tego pinu zmieniac programowo. Nawet jeżeli nic sie nie wysyła. Odczywywać się nie da tym bardziej. Dodano po 1 I to niezależnie od tego czy wykożystasz BASCOma, AVR...
Tak samo jak wiedziałem jaka jest funkcja przerwań :P Już się zapoznaję z tematem. Ustawienia portu poprawione.
Wystarczy sprawdzić czy funkcja odbierająca kod rc5 wykorzystuje to przerwanie. z listingu wynika, że nie. Jednak odbieranie kodów najczęściej realizuje się w przerwaniu.
Najważniejsze zadania "czasu rzeczywistego" można wykonywać w obsłudze przerwania timera. Usługi można wpisać w podprogramy (z jez C: funkcje) i w pętli głównej wybierac które mają byc wykonywane. Komunikacje z uzytkownikiem mozna na ogół wpisać w pętli głównej, gdyz ona zwykle jest potrzebna do podania danych przed wykonianiem zadania, lub po czyli...
Nigdy nie korzystałem z Getkbd, bo nie miałem takiej potrzeby, ale nie sądzę aby nie można było skorzystać z tej instrukcji w przerwaniu. W końcu nie są tu angażowane żadne timery, ani zaplanowane opóźnienia - po prostu zapis do portów i odczyt.
po pierwsze - z wideo to chyba tylko pilot bedzie potrzebny. Zrob tak - kup sobie scalony odbiornik podczerwieni TFMS na 36kHz pod wyjscie podlacz jakis uklad RC zeby usrednic impulsy i to pod przerzutnik typu D. do wyjscia przerzutnika podlacz tranzystor i przekaznik, lub triak sterowany optotriakiem MOC 3041. Inne rozwiazanie to zaprogramowac procesor...
Możesz sobie podłączyć przycisk pod zewnętrzne przerwanie i w programie przerwania na początku zrobić Disable INT0 , wtedy drgania stuku będą chyba wyeliminowane.
procedura main w C - to taka jakby główna pętla programu - z tym, że normalnie musi być w niej return 0; w warunkach o jakich pisałem wcześniej. Ta konstrukcja pełni wtedy hmmm podobną rolę jak byś w bascomie napisał główną pętlę: ' inicjalizacja portów ' inicjalizacja rejestrów ' odpalenie przerwań itp do loop Procedura main - nigdy nie jest powtarzana...
Po pierwsze :) , tak jak kolega już mówił: "obsługa wyświetlaczy powinna być zrobiona w przerwaniach". Po drugie, jak na mój gust ;) funkcja Writeeeprom w Bascomie jest lekko skopana. Funkcja zbyt wcześnie wyłącza przerwania np. przy takim kodzie: [syntax=basic4gl]Writeeeprom A , 10 Writeeeprom B , 11[/syntax] Pierwszy zapis do eepromu wygląda tak:...
OK, już działa i zmienia czestotliwość. Pozostaje 1 pytanie. Jak ustawie przerwanie co 32kHz to układ wystawia przerwanie dla Atmega. Problem w tym ze wglada tak jakby ta czynność tak obciażała Atmega16, że nie ma on już czasu na normalne obsługiwanie programu. Dzięki w/w funkcji chciałbym uzyskać taki efekt gdzie będe mógł zliczać czas 100ms.
a czy w bascomie korzystasz z funkcji wait...[ms lub s]?? czy realizujesz to na przerwaniach a może na pętlach?? mi twoja dokladność w zupełności by wystarczyła.
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ę...
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.
NP: IF A and B and C then coś tam się dzieje end if A B C to klawisze ( piny porty zmienne ) Pozdro! I to powinno dziać się w obsłudze przerwania, jeżeli ma to się rzeczywiście natychmiast stać. Klawiaturę podłącz tak, aby po wciśnięciu dowolnego klawisza generowała określony stan, linię z tym stanem podłącz do pinu zewnętrznego przerwania w kontrolerze,...
Czy Asm to kolejny język? (Pytanie poza tematem) ASM - to pierwszy i podstawowy język niskiego rzędu kolego, wszystkie inne języki jak C czy Bascom - to języki wyższego rzędu a ich kod źródłowy jest ostatecznie zawsze kompilowany do asemblera ;) odnośnie Bascoma i Rc5 - to coś przesadzasz chyba, że nieczego nie znalazłeś w necie. Na samej elektrodzie...
Jeśli chciałbyś w C, to w temacie obok masz sterowaniem przyciskiem na Timerze w przerwaniu. http://www.elektroda.pl/rtvforum/viewtop...
Aha zapomniałem napisać,funkcja encoder jest w przerwaniu bo gdyby byla w pętli , za wolno by sie wykonywała ze względu na odpowiedni czas odświeżania dla lcd...
Ja miewałem takie problemy i zawsze problem wynikał z mojej winy. Ja dysponuję debugerem więc ze zlokalizowaniem przyczyny nie miałem większego problemu. Przyczyn może być dużo, niezainicjowane wskaźniki, niewłaściwe indeksy, rzutowania, braki sufiksów na stałych, niewłaściwe wektory przerwań itp itd. Kod który przedstawiłeś nie jest cały to tylko funkcja...
Cześć, z reguły tak to się robi, że podłączasz odbiornik podczerwieni pod przerwanie. Jeżeli program byś pisał w bascomie to prawdopodobnie musi być podłączone pod PIND.2 Jeżeli obsługę RC5 będziesz robił sam to możesz podłączyć pod dowolne przerwanie. Ogólnie zasilanie takiego odbiornika podłącza się przez filtr RC np 100 ohm szeregowo i 10u elektrolit...
Tak znalazłem chwilę, na naszego zwierzaka. Masz takie coś na wyświetlaczu? I czy dzieje się coś z godzinami? http://obrazki.elektroda.net/36_11962767... Przyczyna są chyba przerwania, albo sama funkcja. Jeszcze nad ty myślę. Poszperałem trochę na temat instrukcji GetRC5(), i jest ona czuła na zegar CPU., Więc może być, że coś jest źle ustawione...
A jak to zrobić w bascom? To zazwyczaj robi się w ustawieniach fusebitów: -bit (6) szósty w Fuse Byte High ma byc (1) czyli nie zaprogramowany. A jeżeli chcesz to robic w "Run-time", to w Bascom wygląda to tak: [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 8000000 ' tu twoje ustawienie taktowania $initmicro 'tu twoja konfiguracja '................
...Albo wyrzuciś print albo przerwanie od serial... Albo ... troszkę pokombinować :D Wystarczy że się wie jak działa proc i Bascom ;) W zasadzie wszystko opisał szymtro , więc skupię się na programiku $large $crystal = 11059200 '$regfile = "420.dat" 'DS89c420 $baud = 19200 On Serial Seriall ' odebrany znak Dim Uli As Byte ' odebrano znak...
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....
Płytka jest ok, bo działa na niej inna atmega8515 i wszystkie jej funkcje działają zupełnie normalnie. Bez timera działa. Zrobiłem obsługę pcf8583 i śmiga normalnie. Na 3 8515 jest to samo...
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()...
Mamy pomysły. Użyjesz sprzętu który ma oba interface sprzętowe. Zdeklarujesz sobie bufory do wysyłania/odbierania jako bajtowe o odpowiedniej pojemności. Do tego liczniki danych w buforze. Program ma działać samoczynnie - ma odebrać dane do bufora po rs i wysłać dane samoczynnie z bufora po i2c po wyzwoleniu oczywiście. I2C zaraz po pierwszym przerwaniu...
A nie możesz po prostu robić obliczeń w funkcji obsługi timera 1, zapisywać to do globalnych zmiennych i następnie w głównym programie odczytywać te zmienne jeśli zamierzasz wyświetlić te wartości? Główny ekran to pewnie jakaś pętelka, która odczytuje pewne wartości, jak np. timer 0, temperatura, itp., następnie przelicza wszystko, potem wyświetla i...
Mimitron widzę, że nawet nie sprawdziłeś co robi config clock w bascomie, na wyświetlaczu nie będziesz miał cały czas jednej godziny bo bascom tym poleceniem ustawia timer2 do pracy anachronicznej, ustawia odpowiedni preskaler, konfiguruje przerwanie od przepełnienia i tworzy funkcje obsługi przerwania w której automatyczne zwiększa te zmienne. Wystarczyło...
Nie możesz "przekierować" pinu. Przypisanie przerwania zewnętrznego jest hardwareowe. Generalnie wszystko zależeć będzie od tego jak masz skonstruowaną główną funkcję. Jeżeli stosujesz w niej co rusz jakieś opóźnienia to będzie lipa, ale jeżeli cała główna funkcja wykonuje się szybko, bez zbędnych opóźnień to wtedy bez problemu w głównej pętli analizujesz...
Funkcja Getrc5 działa z przerwaniem INT0 lub INT2. Z INT1 nie można jej skonfigurować. Ustaw w programie Timer0 i podłącz odbiornik na Pind.2 (dla ATtiny2313).
flagę zgłasza przerwanie, tak jak to pokazałem w pierwszym kodzie, i niestety musisz rozważyć, czy na prawdę te instrukcje muszą zostać natychmiastowo przerwane, czy pętla po prostu nie może dojść do końca i dopiero wtedy skok. Zwykle przecież pętle wykonują się dość szybko, a zawsze można co jakiś czas dodać łopatologicznie if funkcja <> 1 then...
Ano w tym ze to Bascom i nie masz pewnosci co ile zajmuje cykli. Do funkcji zegarka najlepiej wykorzystac tryb CTC timera. Wtedy masz pewnosc ze przerwania beda w rownych odstepach. Pozdrawiam Dexter
Ostatnio też napisałem program do obsługi 2 7segmentowcyh wyświetlaczy i stos się rozwalił :P (w przerwaniu program przechodził do funkcji) W jaki sposób potrafisz poznać, że taki kod może być niebezpieczny dla stosu?
Ad1. Proponuje użyć funkcji locate y, x. Jeśli nie pomaga to za pomocą timera i przerwania wyczyść co jakiś czas lcd.
Przerwania wewnetrzne wykorzystuje, aby skakac do podprogramow gosub. W petli kolejno co 4ms(odczyt, obliczenie obr. i wyswietlenie na lcd), 1s(odczyt temp i wyswietlenie na lcd). Może wystarczy po prostu skrócić czas obsługi przerwania? Zamiast robić "wszystko" w przerwaniu - ustawiasz jedynie flagę. Dzięki temu przerwanie trwa maksymalnie krótko...
Jak Ci podam gotowca to się nic nie nauczysz :( dlatego podpowiem tylko (a może aż?), że musisz zrezygnować z polecenia wait, i zacząć używać przerwania od Tajmerka :) Szczegóły w helpie :) Zmień temat bo inaczej Moderator się zdenerwuje :)
Excray a co Masz na myśli pisząc "w funkcji wpisać"? Trochę nie rozumie tego co Napisałeś. Pisze program w Bascomie.
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).
nie możesz dać kilka razy pętli DO LOOP. Bo w każdym podprogramie dałeś Do Loop i program cały czas działa w pętli podprogramu. Dodano po 1 możesz dać przerwanie od przycisku i wtedy daj w programie obsługi przerwania wybór sekwencjii świecenia
Wykorzystuję Bascom wiec niestety nie sprawdzę tych funkcji. Jaki problem przepisać na Basic? Nie jest to większym problemem, ale wolałbym nie wykorzystywać dodatkowego przerwania. Dlaczego nie chcesz wykorzystać dodatkowego przerwania? Co stoi na przeszkodzie?
Może jakaś myśl Ci podpowie (mi pomogła myśl o bardzo precyzyjnym zbudowaniu funkcji interrupt) http://www.elektroda.pl/rtvforum/topic20... Sorry ale basic jest mi bardzo daleki.
Wywal opcję Sub z funkcji Debounce , a potem zastanów się , dlaczego po takim zabiegu , program działa prawidłowo (nie "wiesza się") ;) Piotrek
Dzięki, ale ja naprawdę odwiedziłem już dużo stron i forów poświęconych właśnie temu tematowi, stronę widziałem już wcześniej i nie wiem jak mogłaby mi pomóc skoro nie mogę wystartować z prostym tematem odczytu bitów wysłanych do mikrokontrolera. Nie wiem czy mam to zrobić w pętli na przerwaniu czy jest jakaś funkcja podobna np. do getrc5, no nie wiem,...
Witam ! Oto fragment pliku pomocy Bascom AVR w języku polskim. Przeznaczenie: Konfiguruje działanie funkcji GETATKBD() oraz określa końcówki portów do których podłączono klawiaturę komputera PC AT. Składnia: CONFIG KEYBOARD = PINx.y , DATA = PINx.y , KEYDATA = tabela_kodów gdzie: KEYBOARDKońcówka portu do której dołączony będzie sygnał CLOCK klawiatury....
Ogólnie chyba dobrze, ale to Waitms w przerwaniu wygląda na mój gust brzydko :) Zamień treść Twojego podprogramu obsługi przerwania na moją i ustaw timer0 prescale na 64 a bedziesz miał ten sam efekt, i kod wynikowy bedzie krótszy.
Jeśli chcesz mieć pomiary synchronizowane zegarem możesz to zrobić jeszcze inaczej. W przerwaniu zegara wyzwalasz pomiar po czym wracasz do programu głównego nie czekając na wynik (masz wtedy więcej czasu na inne zabawy). W kolejnym przerwaniu pobierasz wynik z poprzedniego pomiaru i znowu wyzwalasz przetwornik. Jeśli nie ma stosownych funkcji w BASCOmie,...
Oczywiście, że mają wyzwalanie zboczem. Opadającym, narastającym i dowolnym. Tylko nie pamiętam czy Bascom pozwala przez swoje funkcje skonfigurować wyzwalanie zboczem. Ale wystarczy odwołać się bezpośrednio do rejestru MCUCR.
Witam tak jak doradził jeden z kolegów dałem przerwanie i cały program chodzi bez zmiany funkcji do odbioru z UART.Temat zamykam.
Moze tu nastapil konflikt w tym ze funkcja uzywa przerwania tego samego co ty chcesz obsluzyc (INT0) W Bascomie nigdy nic nie wiadomo :-) w hlp'ie od bascoma pisze ze funkcja RC5 uzywa timera 0 aby uzywal ona innego timera nalezy wpisac CONFIG RC5 = PinD.2 ,TIMER=2 ale ne znam bascoma zandadto patrz pod w hlp'ie pod "CONFIG RC5" 1.11.6.9 - versiona
Użyć przerwania. A dokładnie config serialin z funkcją Bytematch. Ewentualnie po każdym odebranym znaku zerowym Chr(0) dać Clear Serialin Wtedy bufor będzie zawsze ustawiony na początek.
To zależy co robisz w przerwaniach. Wysyłanie znaku z klawiatury zajmuje ok. 4ms. W przerwaniach obsługuję odbiór i nadawanie znaków przez uart i odczyt z ADC- i nic się jakoś nie psuje. Być może- jeszcze. Ale co ile Twój Timer0 generuje przerwanie- nie wiadomo- bo nie podałeś częstotliwości. I ile czasu zajmuje obsługa przerwania- też nie wiadomo....
OPIS FUNKCJI LOAD Action Load specified TIMER with a reload value. . . . It will do the calculation. (256-value) So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. TIMER1 is a 16 bit counter so it will be loaded with the value of 65536-value. Czyli u ciebie ładuje 65536 - 65436 = 100 Przepełnienie właśnie...
No trochę bardziej niż trochę :D Bo przerzuciłem prawie wszystko do przerwania. A co do odtwarzania nieznanych piosenek to jest to jak najbardziej możliwe. Wystarczy że będziesz wyszukiwał pliki na karcie. Na pewno jest jakaś funkcja do tego.
Witam, Włóż to w procedure obsługi przerwania od licznika, w srodku moze byc jeszcze jakas dodatkowa zmienna aby zwiekszyc zakres opóźnienia. W tym przypadku opóżnienie bedzie wynosiło czas pomiędzy przerwaniami razy dodatkowa zmienna. BASCOM to nie mój język, ale jak będzie CI bardzo zależało to postaram się napisać procedurke. Pozdrawiam. PS funkcja...
Zamierzam w swoim projekcie wykorzystać funkcję "config KBD" gdyż będę potrzebował użycia dużej liczby przycisków do obsługi at32. Proszę o podpowiedź czy praca takiej funkcji, a szczególnie "debounce" i "delay" w niej zawarte nie zatrzymają timerów pracujących cały czas w przerwaniu. Z góry dziękuję za pomoc.
Zacznij od tego aby na przerwaniach od timera, np 1ms liczyć czas przez jaki przycisk jest naciśnięty, niech będzie to zmienna "czasGora". Jeśli zwolniony zerujesz czas. Gdy jest naciśnięty przez 2000ms, ustawiasz flagę "rozjasnianie". W przerwaniu gdy flaga ta jest ustawiona zwiększasz wypełnienie PWM do MAX. Pierwsza część zadania zrealizowana. Następnie...
A mógłbyś kolego napisać jak realizujesz regulację u2008 za pomocą procka ? Co do waszych powyższych rozważań należy pamiętać o działaniu w bascomie funkcji Load TimerX - jest to wartość jaka pozosała do wywołania przerwania czyli dla timera1 np Load timer1 200 oznacza że timer zostanie załadowany wartością 65535 - 200 = 65335 i po 200 mamy przewanie....
funkcja funkcja bascom bascom przycisk przerwaniu bascom timer przerwaniu
sonel pomiar uziemienia czujniki renault scenic schemat wzmacniacz stk4241v
Wymiana sprzęgła WOM w Massey Ferguson 6180 Instrukcja obsługi zmywarki Mastercook ZBI-445 IT