To nie są problemy Bascoma, w bascomie można wiele rzeczy szybko zrobić, tylko jak ktoś go nie zna to najłatwiej i naszybciej jest na niego psioczyć i wylewać swe żale. ale ok, skoro ty (o ile dobrze zrozumiałem) w jakimś tam przerwaniu wysyłasz coś poleceniem PRINT przez łącze RS232 a następnie w tym samym przerwaniu czekasz na odbiór przez RS232 (waitkey)...
Witam. Zapis (składnia) Load Timer1 jest zły. Sprawdź w pomocy Bascoma.
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. :)
Witam ATMega8 ma Timer1 16-Bitowy i do odczytu lub wpisu służą dwie dane: "TCNT1L" - odczyt lub zapis "dolnej" 8-Bitowej części i "TCNT1H" - odczyt lub zapis "gónej" 8-Bitowej części n.p. stan licznika "21456" odpowiada : TCNT1H =83 ; TCNT1L=208 bo 21456:256(pojemność TCNT1L=256)=83+208 Aby wszystko było OK to obie wartości (TCNT1H i TCNT1L) muszą być...
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...
Nic nie musisz (jeśli chodzi o Bascom - sam robić w przerwaniu) Bascom ofruje ci za free - pełną sprzętową obsługę RS232. Zapoznaj się tylko z poleceniem Config Serialin oraz z parametrem Bytematch tego polecenia - a wszystko stanie się jasne. Nic nie będziesz musiał sam oprogramowywać w przerwaniu bo to jest bez sensu. po prostu będziesz wysyłał paczki...
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...
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...
... a gdyby tak w programie do zmiennej d podstawić żądaną wartość, a w przerwaniu sprawdzać jednokrotnie czy c=d?
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...
Jeśli procesor ma wbudowane 512 bajtów EEPROM, to ostatni adres to 0x1FF/511. Przyjmijmy że zapisuje liczbę 123 pod adresem 100, jeżeli odczytam dane z adresu 101 to wynikiem będzie 2? Wynikiem będzie to, co wcześniej zapisano pod adresem 101. Jaką max wartość mogę zapisać pod 1 adresem eeprom? Z punktu widzenia 8-bitowej magistrali danych pod jednym...
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...
Rejestr EIFR to rejestr FLAGI przerwania, która jest automatycznie zerowana po zakończeniu przerwania. Badanie jej w przerwaniu musi dac wynik pozytywny. Poza tym masz w tym kodzie błąd: reset eifr.0 if eift.0 = 1 then set led chyba powinno być: if eifr.0 = 1 then set led Napisz jak ustawiasz rejestr EICRA Na końcu przerwania zbadaj If EIMSK.0=1 then...
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...
W przerwaniu Int0 inkrementuj zmienną. Ustaw timer na jakąś jednostkę czasu i w przerwaniu od tego timera obliczaj cześtotliwość i zeruj zmienną
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...
Kolego patrzę na ten kod ze zgrozą, ale załadowałem do swojego Bascoma i trochę więcej zrozumiałem bo mozna sprawdzać referencje i skakać po kodzie. W przerwaniu co osiem taktów (nierealne) timer ma zliczać te twoje "niby" OCR. (Incr Licz_timera1 : If Licz_timera1 >= Ooo Then) Te OCR jest ładowane z tabeli gdzie najmniejsza wartość to 127 a najwieksza...
Może być Timer0 inaczej skonfigórowany np: 8000000/256 = 31250Hz Load Timer0, 250 'zapis w Bascom ' TCNT0 = 6 'doliczy 250 31250/250 = 125Hz = 8ms ' występuje przerwanie Timer0 jest ośmio bitowy, więc może zliczyć od 0 do 255 czyli 256 impulsów. W przerwaniu wpisujesz to co ma być wykonane. 256 - prescaler 250 - dodatkowe zliczanie wyprzedził mnie bart-projects
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...
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...
Zobacz sobie krótki opis [url=http://bart-projects.cba.pl/multipl... Zacznij krok po kroku i w 20 minut opanujesz temat. Co prawda tam akurat nie multipleksuję w przerwaniu chociaż tak to właśnie robię najczęściej. Spowodowane to było tym że akurat musiałem pogodzić multipleksowanie sześciu wyświetlaczy z odczytem 1Wire i czasem "naciągałem"...
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...
Można toggleować ale nie skrócisz cyklu timera do tych 4ms, to musi być wykonane poprzez ocr2a, ewentualnie zerujesz programowo w przerwaniu od ocr2b. To z tym read only musi być błędem, w datasheetach też się takowe zdarzają
Która wersja Bascoma ? Jeśli jedna z nowszych to spróbuj skompilować w wersji 1.11.9.5 lub 1.11.9.8. Bascom od wersji 2.x.x.x nie działają mi za dobrze, a zwłaszcza RC5 i Atmega168.
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ć...
A na jakim to jest procku? ATMEGA czy ATTINY? Dużo zależy od czystości sygnału i jego amplitudy. Zliczanie można zrealizować na przerwaniu INT0 ale wczśniej dobrze aby sygnał przepuścić przez komparator aby ukształtować ładny prostokąc, można też wykorzystać wbudowany w procek komparator analogowy.
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
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
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...
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...
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...
...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...
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...
Witam. W przerwaniu wpisałeś : Timer1 = 131 do zliczenia zostało 65536 - 131 = 65405 Przy wpisaniu do Timer0 tej samej wartości do zliczenia pozostaje : 256 - 131 = 125 impulsów. Myślę, że dobrze zrozumiałem Twój post.
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 dobrze BIGJack , napisz swój programik jak najlepiej potrafisz i pytaj dalej o dręczące Cię wyrywki programiku, pomogę :) Aha co do wejścia czujki, to lepiej napisz to na przerwaniu zewnętrznym INT0 (PIND.2), lub INT1 (PIND.3) Nieee nie musisz robić opóźnień na Timerze, lecz jest to wskazane ze względu na późniejsze przyzwyczajenie, a przede wszystkim...
Na naciśniecie przycisku robisz żeby jakiejś zmiennej przypisał (w momencie jego naciśnięcia) odczytaną wartość z przetwornika a później za każdym razem od aktualnego odczytu odejmujesz wartość tej zmiennej. Poza tym nie ma raczej sensu w przerwaniu od przycisku (czy w jakimkolwiek innym sposobie odczytu stanu przycisku) robić ponownego odczytu przetwornika....
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...
Podłącz przycisk do nóżki INT, skonfiguruj jako wejście z podciągnięciem, ustaw int jako low level, procesor ustaw w powerdown. W przerwaniu tylko sprawdzaj czy przycisk wciśnięty dłużej niż 3s czy krócej (wtedy znów powerdown). I nie trzeba tu bitwaitów. Nawet timera do sprawdzenia 3s (robisz do-loop while i w tej pętli co np 100ms inkrementujesz jakąś...
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...
Pozostaje tylko sprawdzić rozwiązania o których pisałem wcześniej. Wysyłając nawet po 10 zyskasz bardzo wiele na szybkości. Nie napisałeś czy używasz przerwania do odbioru danych. Tak myśle że jak obniżysz trochę prędkość, a zaczniesz przesyłać po kilkadziesiąt bajtów naraz to i tak będzie szybciej niż teraz. Chodzi o to że teraz masz tylko 25% danych...
Witam mam problem z komendą waitms w bascomie to nie z instrukcja masz problem tylko z programem. Instrukcji waitms używa tysiące ludzi i im działa. No problem ciekawy. Zacząłbym od obserwacji przy jakim tym czasie zaczynają sie problemy bo tgo nie napisałeś. Czy jeżeli zmienisz wait 1 na waitms 999to już jest problem?? Wywal ten podprogram Pobr_znaku....
obsługa guzików w przerwaniu to bardzo dobry pomysł. Zastanawiałbym się również czy by jednak nie przenieść wszystkiego na timer0 (ten jest 8 bitowy) ale taki akurat miałęm projekcik. Do wygaszania zer trzeba by dodać 10 cyfrę (która będzie pusta - 255). Są trzy cyfry więc trzeba zacząc sprawdzanie od lewej (czyli w przykładzie od trzeciej) .... if...
Ja bym wyszukiwanie zrobił tak Dim Ids(64) as Byte 'Maksymalna liczba czujników * 8 Dim I as Byte Dim J as Byte Dim L as Byte Dim Count as Byte Dim TempCount as Byte ' Wyszukiwanie Count = 0 TempCount = 1wirecount() If TempCount > 0 Then I = 1 J = I + 7 Ids(1) = 1wsearchfirst() Do If Ids(J) = Crc8(Ids(i),...
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...
Bo kontaktrony w licznikach rowerowych są jakieś szybsze. Robiłem kiedyś eksperymenty z rowerem i faktycznie zwykłe kontaktrony "rurkowe" nie nadążały się przełączać. Pierwszy z brzegu kontaktron KA-02 ze sklepu na literę T przy napięciu 5V i i prądzie 100mA ma częstotliwość przełączania 125Hz. Czas załączania do oporu 1Ohma wynosi ok 2,5 ms Czas odpuszczenia...
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 wstaw w obu przypadkach nawet 16MHz. Baudrate jest zależna w zasadzie od jego dzielnika niż od kwarcu. Nie szalej też z dużą szybkością bo błędy mogą wyskoczyć, zacznij od 4800 bps. Połączenie po UART masz zrobić sprzętowo! Timer niech ci obsługuje multiplexing, główna pętla programu sprawdzanie czy w UART coś przyszło i przepisywanie do tablicy....
Pisze w ASM i bascom mi nie znany. Napisze to w basicu. To twoje jest troche pokrecone. P ;przycisk 1- nacisniety ; 0-puszczony S ;wy portu 1- swieci ; 0-zgaszony C ;zmienna odliczajaca czas - 1bajt ;proc zalaczajaca swiatlo na 30 sek if P=1 then C:=30 endif ;tutaj proc. odliczajaca czas 30 sek ;proc wywolywana w przerwaniu co 1 sek np. od T0 ;wczesniej...
No cóż, Bascom umożliwia wstawki w asemblerze, co może skrócić obsługę przerwania...
Pytana do układu: 1. P1 i P2 podciągnięte do plusa za pomocą rezystorów? Bo w programie nie masz "włączonego" wewnętrznego podciągnięcia? Jeden z twoich problemów to: Po naciśnięciu guzika zmniejszającego wartość spada ale dzieje się to bardzo powoli tak jak by układ się przycinał na czas odczytu temp. nie dziw się ponieważ w funkcji Odczyt_t podczas...
zapytam z czystej ciekawości. Na jakim interfejsie Miałeś podłączony wyświetlacz ? EBI w trybie 3 portowym + zatrzaski dla LSB i MSB. Dzięki temu przez DMA przesyłane były słowa, które nie wymagały modyfikacji. Nie polecam. W tym przypadku założyciel posta otrzyma jedynie przesuwający się punkt, a nie pełny wykres na wyświetlaczu. Mylisz się, a Kolega...
W przerwaniu $regfile = "m8def.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0 Cursor Off Config Int0 = Low Level Config Rc5 = Pind.2 On Int0 Pobr_rc5 Dim Address As Byte Dim Address1 As Byte Dim Command As Byte Dim Command1 As Byte...
Po resecie TCON ma wartość 0x00 czyli sygnał niski generuje przerwanie, a w tym przypadku to powinno być zbocze opadające. Dodaj linię set TCON.0 przy konfiguracji przerwań.
Dosyć odważnie sobie poczynasz na mikrokontrolerze mającym 2kB Flash i 128B SRAM :D ale do odważnych świat należy. Odchudziłem Ci trochę kodzik. Obsługa przerwania timera została stuningowana moim programem NoSave Tool. Teraz mikrokontroler nie odkłada na stos większości rejestrów a tylko te potrzebne - w tym przypadku tylko jeden :D Przekłada się to...
bezwładność serva w porównaniu z szybkością procka jest tak duża, że na pojedyńcze zakłucenie nawet nie zareaguje.
Sprobuj tak: On Timer1 Seb Nosave Pozdro Dexter
A mnie właśnie działa bez problemu z BASCOMEM, mam impulsator od kuchni mikrofalowej i jest OK. Jak chciałem zrobić na przerwaniach to liczył cuda. Więc dałem sobie
przerwanie nie powinno mieć waitms i dlatego nie czyta się DS-a na przerwaniu, często niektórzy piszą waitms 750 bo tak wymaga DS i zdziwienie dlaczego DS wali błędy a BASCOM ma waitms tylko do 255, ale można 3 razy wpisać waitms 255. Nie wiem jak ma AVR ale to inny temat chodziło tylko o to że na przerwaniu nie robi się pętli czasowych.
Witam, Zacząłem pisać program na atmege8 w bascomie, do sterowania preampem tda8425 przez enkoder, wyświetlając to wszystko na LCD póki co 8x2. Program jest w fazie powstawania, ale mam kilka pytań co sądzicie o moich rozwiązaniach i czy tak w ogóle może być? Enkoder obsługuję przez INT0 i INT1, zbocze opadające. Jeśli wejdzie w procedurę przerwania...
Po pierwsze który to Bascom i jakie są wartości $hwstack, $swstack i $framesize w IDE bo stamtąd je bierze jeśli nie umieścisz tego w kodzie. Na przyklad jesli nie użyjesz Nosave to Bascom potrzebuje około 32B na odłożenie rejestrów i wykorzystuje do tego $HWstack. Do tego w przerwaniu masz Lookup() który potrzebuje kolejne cztery bajty. Jak masz za...
http://obrazki.elektroda.pl/7139682100_1... Witajcie Wlasciwie jest to moj pierwszy temat na forum wiec prosze z gory o wyrozumialosc. Przepraszam rowniez, za brak polskich fontow, ale pomimo prob wielu nie ogarniam wiekszosci ogonkow z racji lokalizacji :/ Przyszly swieta, czas urlopu i odpoczynku... Niestety wraz ze swietami przybyla...
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....
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...
(...) ' 5 Data 250 ' 6 Data 131 ' 7 Data 251 ' 8 Data 219 ' 9 Wstępna ocena dostępnych informacji W kodzie widzimy dwa liczniki (Liczba_ok i Liczba_nok) zadeklarowane jako zmienne typu Word, a także tablice na cyfry (Cyfra_ok i Cyfra_nok) jako typ Byte. Z punktu widzenia zakresu wartości samych liczników (od 0 do 999) nie powinno to powodować błędów...
(...) Timer obsłużyć umiem i zgadzam się z twoją sugestią ale jak zrobić aby cały kod umieszczony w pętli odczytu wykonywał się po kolei a nie wszystko co 100us? Gdy umieszczę cały kod w przerwaniu nie osiągnę zamierzonego spowolnionego odczytu MCP w trakcie wykonywania innych rzeczy przez ATMegę... Rozumiem Twój problem. Aby uzyskać ciągłe i kontrolowane...
Lepiej [syntax=vbnet]Print "dobra ramka " ""[/syntax] umieść poza przerwaniem.
To wiemy Ty i ja, oraz inni, ale czy wie o tym tomaszdko ? Ta informacja jest umieszczona w pomocy do programu i łatwo ją znaleźć. Niestety jeżeli nie zna choćby podstaw Asemblera nie będzie wiedział do jakich rejestrów została zapisana zmienna Single. Przykład z modyfikacją zmiennej typu Single w przerwaniu to akurat bardzo zły przykład. I to nie...
Nie wiemy co jest na ENABLE bo ten set portc.3 jest w przerwaniu co 400 us
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ę:...
No wlasnie, tylko czemu zmiana na wyswietlaczu nastepuje co 1 sekunde?. Jak nie ustawiam load timer to czas miedzy zmianami jest ten sam. Rozumiem ze timer1 jest 16bitowy zlicza do 65536. Ile nie ustawie load timer1 = 250 czy 65100 to zmiany nastepuja w podobnych odstepach czasu. A ja potrzebuje uzyskac rowno 100ms na przerwaniu
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...
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...
Pewnie to miał być z założenia jakiś antydrganiowy filtr... zasada jest prosta ŻADNYCH wait w przerwaniach!
Witam Serdecznie :) Jestem początkującym elektronikiem i amatorsko konstruuje co nieco. Jako, że częstym narzędziem elektronika jest lutownica, do obecnej chwili wykorzystywałem starą transformatorów-kę firmy Lutola. Jednak przy większości prac nie spełniała moich oczekiwań między innymi ze względu na brak regulacji temperatury. Jako, że w miarę dobrze...
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...
Próbuję pomóc ale nie dość,że sam Bascom jest nieczytelny (wiadomo kto jest współtwórcą Basica) to nie używasz formatowania co utrudnia analizę kodu. Sformatuj kod, Bascom ma taką opcję. Naucz się komentować kod. Eksperci od Bascom powymierali i pomagaj ci, którzy w Bascom nie są biegli. Możesz napisać, jak się nie znasz to nie pisz ale wtedy nikt Ci...
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...
OK dziękuję wszystkim za pomoc, rozumiem że Timer będzie liczył czas non stop aż nie nadejdzie zbocze narastające i nie dojdzie do komendy stop timer1? Chodzi mi o to że włączam go w przerwaniu a potem się ono kończy i czy timer wtedy nie zakończy zliczania?
W przerwaniu już innego przerwania nie obsłużysz Przerwanie od WDG chyba tak (przyznam, że nie sprawdzałem czy gdy WDG zadziała w IRQ to nie wywoła resetu). Tyle, że nie wiadomo jakiego CPU użył autor. Co do innych przerwań, to może wstawić rozkaz SEI w IRQ, tyle, że czasem, trzeba najpierw skasować flagę przerwania.
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...
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...
A jeśli wolno spytać ,dlaczego chciałeś zrobić to w(na) przerwaniu :?: Pzdr. Piotrek Sz.
Przy odbiorze w przerwaniu timera mamy stałą częstotliwość przerwań, np. 5 kHz. Przy odbiorze z użyciem przerwania od zbocza mamy zmienną, nieokreśloną częstotliwość przerwań - ja oglądałem na oscyloskopie odstępy zboczy rzędu 20..50 us, czyli przy braku transmisji procesor spędza praktycznie cały czas w obsłudze przerwania od śmieci.
No a jak myslisz? W przerwaniu od jakiegoś Timera.
Na razie to tylko pętla testowa: Do Gosub Readtouch 'odczyt panela dotykowego 'Gosub Readir 'odczyt RC5 Gosub Wysw 'Wyświetlanie Gosub Readtime 'odczyt czasu i daty z PCF-a If Ir_flag = 1 Then Locate 15 , 1 Lcd "RC5 rozkaz:" ; Rozkaz Ir_flag = 0 End If Enable Int7 Loop Co do rezystora to rzeczywiście zalecany ale sprawdzałem i z nim także...
Nie analizowałem tego wszystkiego ale czy ten drugi listing to przypadkiem nie jest to coś co się wykonuje w przerwaniu ?? Jeśli tak to przede wszystkim nie może być tam dwóch "return". Bascom zinterpretuje tylko pierwszy ret jako powrót z przerwania i może stąd jest problem...
Przeczytaj: http://avrhelp.mcselec.com/index.html Wykorzystaj opisaną tam zmienną (modyfikacja jej zawartości w przerwaniu) lub ustaw niski czas na starcie, a potem kontroluj czy Input zostało przerwane. Prawdopodobnie przy przerwaniu INPUT ustawiana jest dodatkowo zmienna ERR. Trzeba by zajrzeć w kod "tylnymi drzwiami". Dodano po 27 EDIT: Nie ma tak...
mirekk36- wiem że bascom jest wolny. Ale DS też. Sam reset to jest 2x480us- prawie 1ms. Przesyłanie 64 bitów adresu- 120usx64 =7680us czyli 7.7ms minimum. Pomiędzy tymi komendami można włączać przerwania- ale w trakcie chyba nie. A odczyt można zrobić potem- ale to też ponad 1ms. Tak że nie wiem jak to robisz.
Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd.. To klasyczny przykład jak nie należy obsługiwać przerwań. Ustawianie flagi nie ma żadnego sensu, bo wtedy nie trzeba przerwania. W przerwaniu jak najbardziej można obsługiwać pomiary ADC. Ale...
Sylwekk też dobrze gada. Ale trzeba pamiętać że: 1) zawartość przerwania musi się wykonać szybciej niż odstęp pomiędzy przerwaniami 2) jeśli w przerwaniu robisz Load Timer i zależy ci na jakiejś precyzji odmierzania czasu to ten Load musi być zawsze pierwszą instrukcją w przerwaniu, a nie którąś z kolei.
nie musisz przerwania uzyc mozesz tez w glownej petli sprawdzac stan pinu, ale oczywiscie lepiej zrobic na przerwaniu tak jak poleca zbeegin
Ja też dorzucę swoje trzy grosze: 1. Najbardziej mnie zraziło to obcinanie wyniku z ADC do jednego bajta. Nie obraź się - ale problem w wysyłaniu więcej niż jednego bajtu na raz - to nie powód aby sobie "podcinać gałąź" 2. tak jak już podpowiadano - można uruchomić ADC w tryb free run i wręcz dokonywać odczytów w przerwaniu - bascom to też potrafi....
Obsługa 1wire w przerwaniu to porażka do tego jeszcze waitms. W przerwaniu ustawiaj tylko jakąś flage i na jej podstawie czytaj 1wire w pętli głównej. W trakcie odczytu blokuj przerwania - i tak nie są wtedy potrzebne.
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)...
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? z językami wysokoziomowymi tak może być i często jest. jak się np Java orobiła w jakimś zrywie (w tym alokowała dużo obiektów, po czym...
Wróci do funkcji2, ponieważ przerwanie zawiesza dotychczasowe działania, a po zakończeniu jego obsługi wraca do wykonywania przerwanych operacji.
Witam. Program napisałem w Bascom. Po bliższym poznaniu pisze mi się w nim z łatwością. Wiele rzeczy stało się możliwych po tym jak opanowałem obsługę zachowywania potrzebnych rejestrów przez siebie, a nie pozostawiania tego kompilatorowi. Może kiedyś to poprawią i może przyczyni się do tego narzędzie które stworzyłem na swoje potrzeby NoSave Tool http://obrazki.elektroda.pl/1878183900_1...
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...
Taki wyświetlacz już dawno rozpracowałem na 8515 , wystawiasz na piny odpowiednie stany a na BP przeciwny, w pętli lub przerwaniu zmieniasz stan tych pinów z częstotliwością około 30Hz na przeciwny i po problemie. Albo przy pomocy kilku cd4094.
bascom funkcja przerwaniu bascom timer przerwaniu bascom przycisk przerwaniu
junkers zespół wodny wrp11 c20ne schemat podłączenia elektryczne bojlera
wyłącznik nadprądowy stacja tefal
Makita – rezystancja termistora w akumulatorach LXT, CXT, BL1013, BL1860B, XGT Toyota RAV4 Mk2 1CD-FTV 2.0 D-4D 2005 – remap Stage 1, przyrost mocy, ryzyka, tuning