Program wyświetla to co chcesz ale w symulatorze to trwa bardzo bardzo długo. i Teraz ja licznik odlicza 100 impulsów to musisz pozmieniać obliczenia. Podczas symulacji w warunkach wpisz mniejsze wartości to się szybciej doczekasz tego wyświetlenia na lcd albo zwiększ zmienne ręcznie podczas symulacji. sygnał 125khz do generowania PWM 1,25khz. Nie rozumiem?...
Err = 1 wstawiasz w obsłudze przerwania od Timera. A Err = 0 nigdzie ;)
Poza zmianą nazwy portów będziesz musiał odpowiednio skonfigurować obsługę timera bo z pewnością on jest wykorzystany do liczenia czasu i obsługi wyświetlacza led .
Może ten Twój jakiś dziki jest :P więc spróbuj jeszcze przenieść Sub pod pętlę główną jak ja poniżej. U mnie kompilują się wszystkie wersje wiec w załączniku masz skompilowane Hex i Bin do wyboru. Sprawdź też prywatną wiadomość ;) [syntax=vbnet]$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '********* TUTAJ SOBIE...
(at)stozek - normalnie w Bascom nie jest potrzebna komenda Start Timer0 bo jest on uruchamiany od razu podczas konfiguracji. Używa się tej komendy tylko jeśli poprzednio zatrzymałeś Timer poprzez Stop Timer0. Rozumiem, że zatrzymujesz timer. Tak więc zatrzymywanie timera to zabranie mu źródła taktowania. Bascomowe komendy moża wiec rozumieć tak: Start...
Jeszcze raz od nowa. Tym razem postaraj się bardziej. Ustaw wreszcie te przerwania INTx na jakieś zbocze, a nie poziom. Co z tego, że ustawiłeś Timer1 jako licznik jak nie ma to związku z resztą kodu. Timer sobie działa,a ja się pytam - i co z tego ? gdzie obsługa tego timera?
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...
Tyle to wiem :) Chodziło mi raczej o napisanie obsługi timera...
program pisałem z Polską wersją pomocy tam nic o ctc nie pisze ale poczytam. Może Bascom nie obsługuje tego, choć wątpię, bo CTC to "popularny" sposób obsługi timera. Jeśli nawet Bascom nie obsłuży CTC to można to zrobić pisząc bezpośrednio do rejestrów.
Poczytaj o Timerach. Po uruchomieniu timera możesz zająć się czymś innym w programie. Zmianę stanu na wyjściu zrób w obsłudze przerwania od Timera.
I w dodatku Timer sam z siebie nie generuje przerwania. Ustawia flagę. Jak nie zezwolisz na obsługę to przerwania nie będzie.
No i mam problem...zegar ładnie chodził w pająku ale podczas ustawiania czasu zwarłem przez przypadek reset do jakiś...9V a P0.2 do masy...i od tego czasu układ nie startuje...zegar się nie uruchamia, podczas próby odczytu sygnatury jest "Device not known (00,00,00)", nie reaguje na reset... Czy ubiłem procka...? Jest to AT89S52-24PU. Sprawdzone - spalony...
Dokładnie tak jak masz napisane, z tym, że konfigurujesz jeden z timerów do dliczania czasu. Przykładów w Bascomie z obsługą timera znajdziesz bez liku.
Użyj Timer2 dla obsługi RC5 zamiast Timera0 Config Rc5 = Pind.2 , timer = 2 i będzie OKejos ;)
co ma się niby ustawić Portd.0 czy Portd.5 ? Gdzie jest procedura obsługi przerwania od Timera? Nie wiem czy reset nie działa tylko bitowo w Bascomie, myślę że lepije i bezpieczniej jest zrobić krok=0.
No właśnie podejrzewałem , to że użyjesz Wait, który tak jakby "zawiesza" procesor na 25 sekund. Najlepiej by było użycie timera do ustalania czasu, ale wiem, że dla początkującego to za trudne. Podpowiem więc inne rozwiązanie: Daj w pętli głównej wait1. Następnie zwiększaj zmienną i napisz warunek kiedy osiągnie ona 25 (if then endif) oraz kolejny...
A co z powtówną instrukcją LOAD Timer0, 50000 w procedurze obsługi przerwania?
"Programowanie mikrokontrolerów AVR w języku BASCOM" autora Marcina Wiązani. Myślę, że to Ci wystarczy. Pozdrawiam! Patryk
Zmień: dim Objetosc_lcd as string*10- a potem jakie x-sprawdź. Bascom jest wolny i gruby- jak wół. Można na nim w pewnym stopniu polegać Ale opanowanie rasowego konia jakim jest C- jest trudniejsze- ma sam na wiele spraw własne zdanie. Brakuje oscyloskopu. Chyba jest-widać sonde. P.S. W głównej pętli wywołujesz menu w którym "siedzisz" przez waitms...
'do liczby 1536 trzeba by jeszcze coś dolożyć, na wykonanie instrukcji Zasadniczo nie trzeba nic dokładać, bo wartość timera jest inkrementowana sprzętowo od razu (w kolejnym cyklu maszynowym). Czyli już w trakcie obsługi przerwania. Jeżeli obsługa timera zmieści się w 255 cyklach maszynowych, to zmieniany jest tylko młodszy bajt timera - czyli w procedurze...
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ę...
no dobra, a co w BASCOMie '51 :?
Mnie tak dokładniej chodzi o obsługę wartości wziętej z timera i odczytanie.
Jakoś nie widzę żebyś tu korzystał z przerwania od Timera... Bo nie musisz ;p mogłbyś pokazać jakiś przykład obsługi przycisku w przerwaniu timera ? Nawet jakiś URL do innego projektu. Więc chyba oczywistym jest że ten fragment kodu należy umieścić w przerwaniu od Timera.
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...
witam wszystkich mam problem z niedziałającymi przerwaniami napisałem program który dobrze funkcjonował pod wersją bascoma 1.11.7.1 . ściągnołem najnowszą 1.11.8.3 bo w tej poprzedniej nie mogłem wysterować LCD w trybie 8 bitów . okazało się że programy wykorzystujące timery nie działają . co się zmieniło w obsłudze timerów ? może podeśle ktoś działający...
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...
Nie analizując kodu przeszkadzają zapewne wszystkie instrukcje Wait, Waitms itp. Ogólnie zasadą jest, ze w programie nie powinny występować tego typu opóźnienia - stąd obsługę DS'a zrób na przerwaniu timera.
- czy praca równoległych timerów nie będzie jakoś na siebie wpływać (program przerywa pracę na skutek działania timera1 by precyzyjnie wyznaczyć czas, a tu w tym samym momencie dochodzi kolejne przerwanie od innego timera, i co wtedy) Timery działają niezależnie, ponieważ realizowane są sprzętowo. Nie będą na siebie wpływać. Program niestety (w tym...
Coś lukashb Ci się chyba poplątało. Przy takim ustawieniu Timera próbkę pobierasz co 7.936ms. Pobranie 205 próbek trwa 1.626s. Nieważne czy asm czy Bascom- tak ustawiłeś timer. A to że obsługa tego przerwania trwa w Bascomie 50-100ms to trochę trudno uwierzyć. Chyba że jakieś straszne obliczenia w tym przerwaniu robisz.
Spróbuj tak: [syntax=basic4gl]Config Rc5 = Pinf.0 , Timer = 2[/syntax]
Witam wszystkich Czy da się zastosować funkcję timer zamiast kilku waitms dla obsługi 10 x lcd chr? Chodzi mi oto ,żeby nie wpisywać po każdym zdefiniowanym znaku (deflcdchar) waitms.Jeśli tak ,to prosiłbym o jakiś przykład jak to zrobić.W helpie znalazłem to, na temat portów a w sieci sporo ale nie na temat.
64 takty to o połowę krócej. :) W każdym razie, rzeczywiście obsługa tego przerwania w asemblerze powinna się spokojnie zmieścić poniżej 2us. Ewentualnie można jeszcze dodać bramkę AND sterowaną z drugiego timera i załatwić to sprzętowo.
Pomiędzy instrukcje: On Timer2 Multipleks Enable Interrupts wstaw instrukcję Start Timer2. Nie na początku przerwania jak napisał daro:"A na początku obsługi przerwanie tego timera: Start Timer2."
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...
Pozamieniałem Timery i ruszyło. Pozdrawiam
Przeglądając Twój program mam takie małe spostrzeżenie, a mianowicie w pętli głównej masz wywołaną procedurę Gettime - ' Call Gettime' - która działa na I2C. Co się stanie gdy podczas wykonywania procedury Gettime zostanie zgłoszone przerwanie od Timer'a?? Program przerywa wykonywanie procedury Gettime i skacze do obsługi Timera a tam jest wywoływana...
Czyli zwykły prosty miernik częstotliwości z jej porównaniem przy pewnej wartości - bez problemu się to na jednym timerze realizuje... Zobacz tu: [youtube]http://www.youtube.com/watch?v=... Złapałem tym nawet 40tys. obr/min :) Co prawda to przykład na attiny44, bo obsługa wyświetlacza i takie tam duperele zabierają jednak piny i pamięć...
CONFIG RC5 = pin [,TIMER=2]
Zapisujesz stan portu do zmiennej byte i jeśli to 4 bity to uzyskujesz liczbę od zera do 15, później rozkaz case i po kolei dla każdej kombinacji. Moze mało stylowe, ale skuteczne. Wykorzystałem to do obsługi timera i sczytywał z dip-switchy .
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
Daj swoje źródło programu, bo nie wiem jak zrobiłeś to menu. ... Jeżeli masz wolny jakiś Timer to możesz go uruchomić podczas wejścia do menu i przy wykryciu naciśnięcia przycisku go zerować a jak nie to zrobić jakiś programowy Timer. W procedurze obsługi przerwania od Timera zrobić skok w odpowiednie miejsce.
Mój problem polega na tym, że w specyfikacji tego układu znalazłem informacje na temat 4 kanałów pwm, a bascom z tego co wiem umożliwia obsługę dwóch (na timerze 1.). Jak zaprząc do pracy pozostałe dwa kanały :?:
POWERSAVE (ATMEGA88) This mode is identical to Power-down, with one exception: If Timer/Counter2 is enabled, it will keep running during sleep. The device can wake up from either Timer Overflow or Output Compare event from Timer/Counter2 if the corresponding Timer/Counter2 interrupt enable bits are set in TIMSK2, and the Global Interrupt Enable bit...
Więc funkcja debounce i timera do odmierzania czasu wykorzystaj.
A jesteś świadomy tego, że jest tu przerwanie timera wywoływane co 4ms? A jest to coś podobnego do tego o czym pisałem wyżej, ale nie używa przerwań zewnętrznych a ciągle sprawdza w przerwaniach timera.
Podejrzyj w asseblerze ile rozkazów wykonuje BASCOM pomiędzy wejściem do procedury obsługi przerwania a wykonaniem polecenia zatrzymania Timera. Tam może być cała wiązanka zrzucania rejestrów na stos przed rozpoczęciem właściwej obsługi przerwania i to daje te 8µs opóźnienia, które timer uwidacznia w swojej zawartości. Sama obsługa sprzętowa przerwania...
Kuniarz , Jeszcze tylko spytam - czemu w obsłudze przerwania włączasz przerwanie timera i zaraz potem znów je wyłączasz? Nie lepiej wyłączyć na samym początku i włączyć na samym końcu?
A w asemblerze to już w ogóle bajka - od jakiegoś czasu myślę o obsłudze LCD na przerwaniach timera... ;) Light'I
asembler lub bascom(z tym ze bascom dla 8xxx51) ewentulanie c
Z tym zawsze zdążysz. próbuję zrozumieć intencję użycia Timer4. Napisz może po co ci ten Timer i jaki tryb ma być działania? PWM? CTC? Timer? Jaką funkcję ma realizować?
(at)poorchava - a co polecasz 13latkowi, który zaczyna eksperymentować z uC? BASCOM w tym momencie daje najwięcej oczekując najmniej. Oczekując najmniej od programisty oczywiście. Od MCU wymaga całkiem sporo, jako (moim zdaniem) dość ciężki do zoptymalizowania przez kompilator język. Niemniej można zrobić łatwo i przyjemnie dużo rzeczy bez potrzeby...
Akurat ważniejszy jest mały spadek napięcia, żeby stan niski pozostawał niskim również za diodą. Zrobiłem szkic pokazujący o co chodzi w tym różniczkowaniu i ANDowaniu: http://obrazki.elektroda.pl/7732349900_1... Przy zwykłym różniczkowaniu widać, że brakuje szpilki wskazującej początek impulsu pierwszego kanału. Można ją odtworzyć...
Tak to jest jak się korzysta z BASCOMA i jego gotowych procedur, które co robią to nawet najstarsi górale nie wiedzą. Ale to taka mała dygresja. Ja myślę że krzaczki na LCD są spowodowane używaniem przez Bascoma tych samych rejestrów do obsługi PWM timera i LCD. Nie wiem tylko czy można w Bascom coś z tym zrobić. Może jakieś włączenie odkładania na...
Niedokładnie przeczytałeś. W zakładce nawigator: Config Timer- uwaga! po ustawieniu prascale licznik natychmiast zaczyna zliczanie. Można użyć start Timerx i stop Timerx Np. Config timerx, prescale 'timer zaczyna liczyć stop Timerx 'timer stoi- ale już coś zliczył Timerx=y 'timer ma wartość początkową =y - np.0 Start timerx ' Timerx zaczyna liczyć od...
Timer skonfigurowany jako Counter liczy impulsy z zewnątrz, a nie mierzy czasu.
Oj kolego jak Ty chcesz mierzyć coś używając Waitms w programie ?. W obsłudze przerwania od cewki startuj timer, a w drugim przerwaniu go zatrzymuj.
No to użyj obsługę przerwania od niego (Timer/Counter1 Compare Match A) i ustawiaj wyjście programowo. Light'I
Czy kod jest prawidłowy chodzi mi o obsługę impulsatora, bo coś mi nie pasuje zwłaszcza o obsługę przerwania Encoder_isr:. Sam piszę program do sterownika i chciałem skorzystać z impulsatora właśnie w Bascom.
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...
... choć nie wiem jaka jest różnica między programowy pwm a "sprzętowym" pwm. Taka jak obsługa oddziału banku przez jedną osobę (kierownika) w stosunku do obsługi przez kierownika i kilku pracowników. W pierwszym przypadku może się uda, ale na wiele więcej kierownik czasu mieć nie będzie lub nawet nie wyrobi się z pracą. W drugim przypadku na pewno...
Na przyklad generowac Interrupt Config ACI = On|Off, Compare = On|Off, Trigger = Rising|Falling|Toggle Enable Interrupts Enable IntACI On Int ACI akcja Do Loop akcja: ................ ' tu wpisz twoj program, obsluga timera lub/oraz kontrola ............... ' odpowiedniego wyjscia Return
Lecz zrobiłem sobie testy: Że na wyświetlaczu wyświetlam wartość B, i jak się okazało, jeśli zamienię Config Timer0 = Timer , Prescale = 1 na Config Timer0 = Timer , Prescale = 8 to wartość B zmienia się szybciej! Dlaczego tak się dzieje? Może dlatego że jest jest prescale =1 to przerwanie jest wykonywane co 32us czyli w czasie tego waitams 20 trafia...
Nie bardzo mam teraz ochotę zgłębiać kod ponownie, ale pamiętam że w Twojej wersji Timer odmierzał czas 20s i kiedy nadszedł czas to w przerwaniu mierzył temperaturę Dallasem DS18B20 i w dodatku pisał od razu po wyświetlaczu :D Dlatego jedną ze zmian było to, że Timer tylko ustawia flagę by dokonać pomiaru i go wyświetlić. Tak więc dopóki nie jesteś...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
zumek -> dzięki za info... czyli rozumiem, że OCR1B wraz z OCR1A mogą być przydatne ale w trybach PWM gdzie dzięki nim zdaje się regulujemy stopnie wypełnienia na obydwu wyjściach ale przy tej samej częstotliwości, dobrze teraz myślę??? .... tylko muszę z kolei posiedzieć i poczytać n/t trybów PWM żeby już do końca dokładnie zrozumieć Timery (jeśli...
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...
Czyli nic nie zrozumiałeś z linkowanego programu. A szkoda... Zasada działania (podobnie jak dla wielu innych programów), to wykonywanie krytycznych sekcji w przerwaniach. Pętla główna może być zupełnie pusta. W programie głównym: 1. Zdefiniuj sobie 8 zmiennych (Parametr_x), które będą odpowiadały wartościom włączenia każdego z kanałów. Np. 100,47,198......
Drugi timer? Czy on służy do obsługi OCR2? Jak go ustawić?
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...
netsecurite.pl - czytaj uważnie . Nie napisałem , że nie korzystam z timer'ów , ale jaki jest sans obsługi przerwania przez 2 sekundy (WAIT 2) gdy timer wywołuje przerwanie co np. 2milisekundy ?
To proste, wykorzystaj timer. Ustaw tak jeden z timerów aby generował przerwanie np. co 1s a w obsłudze przerwania tego timera zmieniaj stan diody na przeciwny. I ot to cała filozofia.
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.
PRZEPRASZAM!!! POPEŁNIŁEM BŁĄD!!! Ponieważ nie programowałem nigdy uP 89c52 pod bascome'm, a plik 89c52.dat napisałem "na szybko" na potrzeby użytkownika caro, przerabiając wcześniej wykorzystywany przeze mnie 89c51.dat, dodałem do niego informacje o rejestrach TL2 oraz TH2, a zapomniałem dopisać informację o rejestrach T2CON oraz RACAP2H i RACAP2L,...
łatwiej się już chyba nie da. Sorki, ale ja bym raczej powiedział, że: "JUŻ GORZEJ SIĘ NIE DA :(" Co to za rozwiązanie gdzie w środku siedzi jeszcze obrzydliwy Wait !!! brrr ale żeby nie być gołosłownym, który tylko krytykuje.... Ok, panowie - widzę, że wasze zmagania spełzają na niczym, pokażę wam więc jak się powinno podchodzić do programowania....
Koledzy wspominali o uzyciu timera do tego, ale nie bardzo wiem, jak się do tego zabrać. Bardzo proszę o jakiekolwiek wskazówki. Generalnie co każde przerwanie timera jakaś zmienna jest takim wyznacznikiem upływu czasu.
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to...
No właśnie- przerwanie od Timera co 16.384 ms a w przerwaniu tylko inkrementacja jakiejś zmiennej. No ale to Bascom- odkładanie na stos i zdejmowanie zajmie jeszcze kilkadziesiąt instrukcji po 0.0625us przy zegarze 16MHz. Ale nawet wtedy to będzie poniżej 6us. Wystarczy aby obsługa przerwania INT0 była krótsza od 16ms. Zwłaszcza że przerwanie zewnętrzne...
Na bascomie się nie znam ale w którym miejscu masz obsługę wektora przerwań od timera ?
zaaplikowałem twój kod ale jest 0 na wyświetlaczu piszesz że nie robiłbyś tego ne przerwaniu, proponujesz przenieść to do petli głównej, a reszte programu przerobić? bo nim jeszcze jest obsługa przycisków, RC5 etc. która własnie znajduje się w pętli głownej
A jaką instrukcją, bądź kawałkiem kodu mógłbym zastąpić tą instrukcję ( encoder ), czy mógł by mi ktoś napisać, opisać taki kawałek programu, wiem, że jakoś się go robiło na instrukcji "If...Then", a nawet spotkałem się na obsłudze encodera, na Timerach... Mógł by mi ktoś pomóc....
O taką odpowiedź własnie mi chodziło. Rodzi sie kolejne pytanie: Skoro timer0 mam już zajęty generowaniem impulsu służącego do naliczania sekund... Mam zaprząc do obsługi wyświetlacza kolejne przerwanie, czy wpakować przełączanie anod, i szukanie odpowiedniej wartości dla portu, na których wiszą katody w tym samym miejscu, co inkrementacja zmiennej...
W helpie bascoma nie znalazłem konkretnej odpowiedzi na moje pytanie. Odnośnie wait pisze tam tylko "Instrukcja wstrzymuje działanie programu na podaną ilość sekund. Odmierzany czas jest wartością przybliżoną, więc nie należy stosować tej instrukcji do dokładnego odmierzania czasu. Używanie przerwań, może znacznie wydłużyć działanie instrukcji ."Osobiście...
Może odpal jakiś Timer żeby generował przerwanie bardzo często. Powiedzmy co 10us. I w przerwaniu sprawdzaj czy pin ma stan 0 czy 1. Jak 1 to inkrementujesz jakaś zmienną. Jak zmieni się na 0 to zwracasz wynik i zerujesz tą zmienną. Oczywiście w tym samym przerwaniu sprawdzaj tak samo drugi pin. Niestety wymaga to kodu obsługi przerwania w assemblerze...
Ponadto etykiety podprogramów obsługi przerwań powinny być poniżej instrukcji "End" A sama instrukcja "End" powinna być tuż za pętlą główną.
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...
Hm, spróbuj zmienić enable timer na start timer. Ewentualnie spróbuj wpisać odpowiednią wartość bezpośrednio do rejestru - bascom ma problemy z obsługą pwm w niektórych procesorach (prawdę mówiąć jest tylko kilka, w których PWM działa wszędzie gdzie powinno i jak powinno). A znaczniki code to [code ] i [/code ] :)
Jeszcze jedno. Ten program większość czasu spędza na wyświetlaniu. Wydłuż czas odświeżania wyświetlacza poprzez usunięcie Load Timer0 , 150 i zmianę w Configu timera0 - Config Timer0 = Timer , Prescale = 64. Spróbuj zmniejszyć czasy w transmisji do SAA i raczej wyłącz wyświetlacz na czas transmisji do SAA - zatrzymaj timer i wygaś wyświetlacz. Pamiętaj...
Jeśli myślicie Panowie , że zmienna "flaga" jest ustawiana na 1 po 800us od momentu załadowanie Timera wartością 64736 , to mylicie się o nie mniej niż 128 us , bo tyle zabiera prockowi obsługa przerwania. Piotrek PS Jest oczywiście na to rada , ale trzeba pokazać więcej kodu ,bo z tego co jest w 1-szym poście , to można ze 100% pewnością wywróżyć zwis(czytaj:RESET)...
Stare przysłowie pszczół: żadnego oczekiwania w procedurze przerwania. Ty co (chyba) 2.4 s każesz w obsłudze przerwania czekać (chyba) ponad 10 sekund. Jak to ma działać?
to skąd wiedzą ile czasu minęło, przecież komunikacja osbywa się według określonego schematy czasowego. Kiedy mam procedurę odczytu w programie głównym to wszystko jest ok, kiedy tylko przeniosę rozkaz 1wread() do procedury obsługi przerwania timera2 program się sypie.
hmmm no ja to robiłem wtedy w Bascomie mniej więcej tak: ustawiałem sobie tak któryś Timer, żeby przerwanie wykonywało się powiedzmy 64 albo 128 czy ze 200 razy w ciągu czasu trwania jednej połówki czyli w trakcie ok 10ms tak? Gdy pojawiło się przerwanie INTx to odpalałem ten Timer, który zaczynał tykać i wykonywać przerwanie tyle razy ile ustalonych...
Wydaje mi się że chyba wiem o co ci chodzi z tą pracą w tle Czy miałeś coś takiego na myśli? Tak, o to mi chodzi. Oczywiście musisz zastosować odpowiedni preskaler, żeby timer nie liczył z pełną prędkością (pojedynczych taktów zegara). W razie potrzeby timer może być włączany/wyłączany w procedurze obsługi przerwania.
tematów o tym było multum. Best pratice to wykorzystanie przerwania od timera i cyklicznie wykonywanie kroków w tym przerwaniu: - zgaszenie aktualnej "wspólnej" anody/katody - ustawienie wartości znaku na pinach dla poszczególnych segmentów - zapalenie następnej "wspólnej" anody/katody Nie ma co za dużo dywagować, tylko brać się do roboty. Nie ma tu...
Bardzo dobrym rozwiązaniem będzie jeśli kod do obsługi wyświetlacza umieścisz w przerwaniu od jakiegoś timera do { . tu w pętli głównej obsługa magistrali 1wire . } loop czas: { . tu obsługa przerwania licznika . } masz uniezależnienie od instrukcji wait mozesz naprzykład ustalić częstotliwość przerwań licznika co 1ms
(at)emarcus: O ile się nie mylę, przy prescalerze 64 i cżestotliwości 8MHz timer0 będzie miał skok co 8us, czyli licznik bedzie przepełniał się co 2,048ms, więc do poprawnego odliczenia 1s w obsłudze timera należy załadowywać do niego Timer0 = 6, i dodać licznik, który 500 razy zliczy przepełnienia. A co do tych parametrów, to zawsze wstawiałem domyślne...
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...
Jdno pytanie czy ponizsza konfiguracja bedzie prawidłowa : Chodzi o to aby licznik zliczał impulsy wewnętrzne z kwarcu przez czas jaki na int0 bedzie stan wysoki. w momencie pojawiania sie zbocza opadającego aby program przchodził do obsługi przerwania : Fragmenty w bascom : config timer0 = timer , gate = external , mode =1 set Tcon.0 - reakcja na zbocze...
McRancor ma racje. Najzwyklejsze ATmegi maja duuzy potencjal tylko kwestia umiejetnosci programowania i logicznego myslenia. W Bascomie tez da sie napisac dosc rozbudowane pogramy, moze nie takie jak w C, ale mimo wszystko. Po to ktos wymyslil timery , przerwania i sprzetowe wspomagacze:) by z nich korzystac.
A start timer to nie jest konieczne do uruchomienia licznika?? Zamiast tego Do 'pętla temonstracyjna zmieniająca położenie serw Wait 4 Pozycja1 = 600 Pozycja2 = 600 Wait 4 Pozycja1 = 115 Pozycja2 = 115 Loop End zrobiłbym raczej coś takiego Do 'pętla temonstracyjna zmieniająca położenie serw Wait 4 timer0 = 250 enable timer0 Pozycja1 = 600 timer1 = 250...
obsługa timera obsługa przerwania timera konfiguracja timera bascom
schemat lodówka samsung mycie denaturat jakie frezy
programator czasowy programator czasowy
Szarpanie silnika w BMW E87 - przyczyny i diagnostyka Mini wieża wyłącza się po 20 minutach - przyczyny