Jakiego typu jest absolutnie absurdalny i perwersyjnie wypaczony pomysł, aby mając OSa robić takie delay'e w wątkach ??? Również o podobną perwersję zakrawa wykonywanie przerwania timera co mikrosekundę tylko po to, zeby zmniejszać tam jakąś zmienną. Wez timer, skonfiguruj go jako one-shot, skonfiguruj mu takt na 1us, do ARR wpisz chciany czas w us,...
Proszę zapoznać się np. z tym tematem : [url=http://www.elektroda.pl/rtvforum/vi... Dokładny timer, mikrosekundy.
Jednak zrób to z timerami. Twój procesor wykonuje jedną instrukcjŁ an ogół w jedną mikrosekundę. Pętla, w której odliczasz jednomikrosekundowe opóźnienia samy wykonuje się kilka mikrosekund - tak zrobione opóźnienia są trudne do określenia, w każdym razie niewiele mają wspólnego z tym, co chcesz uzyskać. Do sterowania serwem (zwłaszcza płynnego) potrzebujesz...
Hej Niewiem czy windzie jest dostepny timer o precyzji mikrosekund. Ale znalazlem taki timer, moze sie przyda: ZEN TIMER v2.2: The Zen Timer is a high precision (microsecond accuracy) timing library for 16 bit real mode, 16 bit protected mode and 32 bit protected mode programs. Supports Borland C++, Watcom C++, Visual C++, Symantec C++, Metaware C++...
Zapytaj bota Bardzo proszę. Inicjalizacja timera : Funkcja timerBegin(frequency) tworzy i uruchamia timer z określoną częstotliwością. W tym przypadku ustawiamy częstotliwość na 500 Hz, co odpowiada okresowi 2 ms. 2. Przypisanie funkcji obsługi przerwania : Za pomocą timerAttachInterrupt(timer, &onTimer) przypisujemy funkcję onTimer jako obsługę...
Chciałbym zmierzyć jak długo wykonuje się przerwanie od DMA po zakończeniu transmisji z I2S. Myślałem nad uruchomieniem jakiegoś timera, który będzie zliczał mikrosekundy, ale kiedy wykonuje się jedno przerwanie z najwyższym priorytetem to inne są hamowane. Dobrze kombinujesz! Ale trochę przekombinowujesz :). Nie potrzebujesz żadnych dodatkowych przerwań...
11.0592 / 12= 0.9216 tyle trwa okres zegara w mikrosekundach . Poniewaz F=50 hz okres 20ms / 2= 10ms =10000 mikrosekund 10000 / 0.9216 = 10851- tyle taktow musi policzyc licznik timera, przerwanie wystapi gdy licznik doliczy do 65535 +1, poniewaz liczy od 0 do 65535 ,trzeba mu wpisac wartosc poczatkowa. zeby odliczył owe 10851 taktow , czyli 65536-10851...
Tojmak987123 pomyliłeś pojęcia: Szerokości wypełnienia nie mierzy się w Hz tylko w procentach lub jednostkach czasu (np. mikrosekundach). Twój program wywołuje przerwanie Timera0 co (256-194)*64 cykli zegara, Timer1 jest ustawiany 5 razy rzadziej czyli co 19840 cykli zegara tylko tyle możesz nim odmierzyć (a nawet trochę mniej ze względu na czas ustawiania)....
Najprościej można tak: 1. Ustaw przerwanie zewnętrzne na pinie ECHO wyzwalane na obydwa zbocza. 2. Gdy przychodzi przerwanie odpalasz timer pracujący z rozdzielczością powiedzmy 1us. 3. Gdy przychodzi kolejne przerwanie (od opadającego) to wyłączasz timer i sprawdzasz w rejestrze timera ile mikrosekund odliczył. 4. Wynik w us podstawiasz do wzoru i...
Zapamiętujesz timestamp ostatnio odebranego znaku (w milisekundach albo w mikrosekundach w zależności od prędkości transmisji). Następnie testujesz ile czasu upłynęło od odebrania ostatniego bajtu (np w przerwaniu od timera). Jeżeli czas od odbioru ostatniego bajtu > 3.5T to uznajesz że odebrałeś poprawną ramkę.
Chciałem zrobić taką uniwersalną funckję, która będzie wstrzymywała program na określoną ilość us z wykorzystaniem timera. Projektując urządzenie wykorzystujesz jego zasoby (wewnętrzne moduły) w taki sposób, by spełniły wymagania jakie stawiasz przed urządzeniem. Tworzenie ogólnych (czytaj: do uniwersalnego zastosowania w różnych projektach) funkcji...
/* Setup SysTick Timer for 1 µsec interrupts */ Następny... Czy naprawdę uważasz, że przerwanie co jedną MIKROsekundę to jest dobry pomysł? Twój program się "zatrzymuje", bo po prostu w kółko wchodzi i wychodzi do przerwania (które zresztą nie jest nikomu do niczego potrzebne, ale...). Jeśli do tego próbujesz pracy krokowej, to już w ogóle Twój...
Też tak mi się wydaje. Sprawdzę po niedzieli czy to problem z delayem od HALa bo z tym programowym problemu raczej nie ma. Stosuję dwie funkcje ponieważ jedna daje opóźnienia w ms - HAL_Delay(), a druga to zrobiona programowo na timerze funkcja delay() która ustawia opóźnienie w mikrosekundach.
A jaka rozdzielczosc pomiaru potrzebujesz ? To chyba zasadnicza kwestia. Czyli na ilu bitach chcesz mierzyc te kilka mikrosekund ? Pozdrawiam, yego
Timer 16-bitowy chodzący w kółko, linie INT0 i INT1 zaprogramowane na przerwania od obu zboczy, obsługa przerwań odczytuje wartość timera i wykonuje stosowne obliczenia. Jeśli procedury obsługi innych przerwań będą poprawnie napisane, nie ma powodu, żeby to nie zadziałało. Powinieneś uzyskać rozdzielczość i dokładność na poziomie kilku mikrosekund.
Co to jest Prescale ? Timery w mikrokontrolerach AVR nie muszą być taktowane zegarem systemowym - często jest on za szybki dla potrzeb projektanta. Inżynierowie z Atmela rozwiązali ten problem, umieszczając dodatkowy (nieco ukryty) licznik zwany prescalerem. Z tego licznika otrzymujemy kilka nowych sygnałów zegarowych, z których skorzystać mogą timery....
Witam! Postaram się wyjaśnić kilka niedomówień. 1.W S7-200 są 4 timery 1ms, 16 – 10ms i 235 -100ms. 2.Z pomiarem czasu z rozdzielczością mikrosekund za pomocą timera nie poradzi sobie większość PLC i to nie tylko małych. Należy pamiętać, że o tym ,czy timer doliczył czas ,czy nie jest sprawdzane tylko raz w jednym obiegu pętli programowej. Inaczej...
Rozumiem, ze zmienne zadeklarowales jako volatile, czy zapomniales o tym?:) Druga sprawa - komplikujesz. Ustaw 16-bitowy timer tak, zeby np. mial impuls co 1us, albo czesciej, w zaleznosci jaka potrzebujesz rozdzielczosc. Impuls, ktorego czas badasz wyzwala przerwanie, odczytujesz zawartosc 16 bitowego timera, czekasz na kolejne przerwanie, ponownie...
Witam, chciałem zrobić sterowanie silnikiem krokowym przy wykorzystaniu Timera. Niestety milisekundy są za długie a potrzebuję uzyskać większe prędkości. Wcześniej zamiast timera miałem delayMicroseconds(); ale z timerem jest łatwiej, tylko nie mogę znaleźć sposobu żeby obliczał w mikrosekundach. Czy jest w tej bibliotece taka opcja? a może są inne...
Nie rozumiem jak i kiedy mam ładować te wartości - prosiłbym o jakiś przykład. Czy mógłbyś to rozpisać (tak jak ja w pierwszym poście), zarówno dla timera jak i rejestru compare? Nie wiem jak z czasami tego ładowania ponieważ generowane impulsy są rzędu mikrosekund. Nie zaburzy mi to zależności czasowych? Czy ktoś z Was robił podobne rzeczy w picbasic,...
sleep() ?? lub element timer zależy co kto woli ;) ---- zrób własną funkcję pętli
Podczas odbioru danych z pinu PD2 ( funkcja zgłoszenie ) występuje błąd tylko wtedy gdy przerwanie z timera 0 jest aktywne. Gdy na czas odbioru danych zablokuję to przerwanie procesor ładnie odbiera wysyłane do niego dane. I moje pytanie brzmi: Co jest nie tak z przerwaniem? Konkretnie to, co wskazał albertb: ... jeśli masz włączone przerwanie to jego...
Istnieje coś takiego jak HPT (High Performance Timer), pozwalające odmierzać czasy na poziomie mikrosekund i faktycznie było już omawiane na tym forum. Rozdzielczość czasu mocno zależy od sprzetu. Trzeba mieć to na uwadze, pisząc program.
Zamiast tak kombinować to nie prościej wziąć XMEGA32, która nie jest droższa, a może nawet tańsza i ma 32-bitowe RTC, które rozwiązuje problem sprzętowo. A jeśli to nie wystarczy to sobie przez event system można kolejny timer podłączyć i mieć 48, 64 czy ile tam potrzeba bitów.
z tego co wiem to delay to komenda to odliczania czasu w mikrosekundach, a do dokładnego odliczania czasu należy używać funkcji Timer.
Takie rzeczy to tylko sprzętowo na timerze w trybie PWM. Twoje założenie o tym, że pętla wykona się w 1..2 us jest niezbyt realistyczne - przyjmując w uproszczeniu, że ATmega wykonuje jedną 8-bitową operację na cykl, Twoja pętla wymaga przynajmniej kilkudziesięciu takich operacji, więc jej czas wykonania wyniesie min. kilkanaście us. A poza tym - nie...
Przecież timer i preskaler są 16-bitowe TIM2 i TIM5 mają liczniki (CNT) 32-bitowe. Aby nie zakładać specjalnie nowego tematu to spytam się jeszcze tutaj. Czy powyższa metoda może zostać wykorzystana do odmierzania czasu rzędu 1 mikrosekundy. Wyrzuć przerwanie. Ustaw PSC na 83 i ARR na (unsigned)-1. Z TIM5->CNT będziesz odczytywał us.
Nie wszystkie AVRy mają jednopoziomowy system przerwań. Ale to i tak nic nie zmienia. Jeśli nawet wykorzystamy wielopoziomowy system to mamy wybór między dżumą a tyfusem. Albo wyższy priorytet będzie miał LED i będzie kaszanił transmisję OW, albo wyższy priorytet będzie miał OW, ale będzie kaszanił wyświetlanie LED. Albo zrobimy to jak należy i priorytety...
W pierwszym kodzie pojawia się czas 10us (mikrosekundy), później milisekundy. Rozumiem, że ma być 10ms? Dla 10us można jeszcze zautomatyzować przeładowanie timera np. tak: [syntax=asm51] LED2 BIT P1.2 ORG 0000h LJMP START ORG 000Bh ;TU ZACZYNA SIE OBSLUGA PRZERWANIA T0 CPL LED2 reti ;powrót z obslugi przerwania START: MOV TMOD, #00000010B ;USTAWIENIE...
Witam. Timer mikrokontrolera '51 taktowanego zegarem 11.059200 MHz zliczy w ciągu jednej sekundy 921600 impulsów. Ze względu na wielkość timera (2 bajty) może Kolega zliczać setne części sekundy - ustawić przerwanie co 9216 impulsów. Każde wywołanie przerwania zwiększy zmienną o 1, czyli mamy w niej wynik pomiaru z rozdzielczością 0,01 s. Rozwiązanie...
To przeliczenie które Ci podałem jest do pomiarów bardzo krótkich okresów czasu - rzędu mikrosekund - z wykorzystaniem właściwości ElapsedTicks. Jeżeli mają być milisekundy, wyświetl po prostu ElapsedMilisecond, bez żadnych przeliczeń (patrz: post #2)... Uwzględnij też, że w postaci którą Ci podałem mierzony jest czas wykonania kodu między Start() a...
Przecież Google znajduje: http://delphi.about.com/od/windowsshella... http://stackoverflow.com/questions/14834... P.S. Do czego ci aż taki szybki timer? (Może sprawę da się załatwić w inny sposób?)
Najpierw zastanów się po co chcesz odmierzać pojedyncze mikrosekundy... Moim zdaniem nie ma w ogóle takiej potrzeby. Nastaw timer na taki czas, jakiego naprawdę potrzebujesz. Podtrzymuję zdanie, że taka obsługa LCD (z opóźnieniami na timerze) ma same wady.
Witam, Chciałbym mierzyć czas miedzy dwoma sygnałami gdzie pierwszy sygnał generuje START, a po kilkunastu mikrosekundach taki sam sygnał dochodzi z drugiego źródła i generuje STOP pomiaru. Odstęp między tymi sygnałami wynosiłby od kilku do kilkudziesięciu mikrosekund. Chciałbym do tego wykorzystać funkcje Input Capture Timera 1. Niestety Atmega328...
(at)leonow - tak, prawda, kwestia jest taka że licznik może zgłosi za kolejną sekundę kolejne przerwanie, ale czy ono będzie w równych interwałach tak samo szybko przetwarzane to zupełnie coś innego - bo jeśli co 666 przerwań drugiego timera wydłuży się obsługa przerwania pierwszego o ileś tam mikrosekund to o tyle będzie już gorzej nasz zegarek działał.
Tak. Funkcja micros() zwraca czas w mikrosekundach od uruchomienia. Innym sposobem jest chyba to co napisał R-MIK w pierwszy poście Mogłeś użyć sprzętowego przechwytywania timera do pomiaru czasu.
Co prawda nie do enkodera, a do czujnika HC-SR04, ale reguła ta sama, pomiar szerokości impulsu. Zrobiłem to na systemie zdarzeń. Kod: [syntax=c]// konfiguracja systemu zdarzeń pod czujnik HC-SR04 EVSYS.CH0MUX=EVSYS_CHMUX_PORTD_PIN1_gc; // źródłem eventu pin PD1 PORTD.PIN1CTRL=PORT_ISC_BOTHEDGES_gc; // ustawienie przerwania na oba zbocza TCD0.CTRLB...
Witaj !!! Tak jak napisał kolega LightHouser, nop to rozkaz, który nie robi na prawdę nic ale zajmuje cykl rozkazowy. W standardowym procesorze '51, zastosowano preskaler przez 12. Znaczy to, że częstotliwość taktująca (kwarca) wstępnie jest dzielona przez 12. Jeżeli zastosujesz kwarc np:12MHz to naprawde rdzeń procesora będzie taktowany częstotliwością...
Timery najprościej zsynchronizować taktując je ze wspólnego przebiegu zegarowego, który może być generowany przez 3 timer. W skrócie w jednym procesorze puszczasz timer i wyjście z niego dajesz na pin OCx. Z tego wyjścia doprowadzasz sygnał zegarowy na piny Tx timerów w innych procesorach. Po konfiguracji, jeśli wyzwolisz timer generujący zegar to pozostałe...
hmm... ok, chyba zaskoczyłem .... ze 117 strony dokumentacji ATMega8: Kiedy AS2 jest nie jest ustawiony (0), to Timer/Counter 2 is taktowany z I/O zegara. Kiedy AS2 jest ustawiony (1), to Timer/Counter 2 is taktowany z kwarcu połączonego do pinów TOSC. Tak czy inaczej, chce mieć możliwość precyzyjnego odliczania czasu - pojedyncze mikrosekundy - czyli...
Czy taki scenariusz jest możliwy do wykonania z wykorzystaniem tego mikrokontrolera? To jeszcze napisz o jakich czasach mówimy i jaka ma być precyzja. Bo jeśli mówimy o czasach rzędu mikrosekund i więcej, to każdy MCU z 24 wyjściami się nada. Jeśli mówimy o czasach rzędu ns, to tym bardziej musisz sprecyzować oczekiwania, aby dobrać pod to hardware.
A czy można „migać” jedną diodą i równocześnie robić sekwencje na pozostałych 3 w At13A? Początkujący uczą się na zasadzie zaświeć, zrób opóźnienie, zaświeć następną, prosta metoda ale możesz zrobić tylko jedną rzecz na raz, mimo że mikrokontroler wykonuje miliony instrukcji na sekundę, w zasadzie żadnego użytecznego programu tak nie napiszesz. Trzeba...
Nemo: Przeciez nie ma to znaczenia gdyz przerwanie nastepuje co rowny okreslony czas, tylko ze z opuznieniem a opuznienie zedu mikrosekund nikomu chyba nieprzeszkadza ;) Zgloszenie przerwania --> skok do timer 0,1s Zgloszenie przerwania --> skok do timer 0,1s Zgloszenie przerwania --> skok do timer 0,1s ... Timer: czeka pare cykli wykonuje procedury...
Na Mega328 z KB RAM uruchamianie OS nie bardzo ma sens. Zrób wielowątkowość opierając cały program o maszynę stanów. Zapomnij, że istniej delay. Owszem, krótkich delay (mikrosekundy) w AVR przeważnie nie da się przeskoczyć ale nie zawsze. Na 1-Wire, można obsłużyć USARTem. Nie ma żadnych delay i 1-Wire działa na przerwaniach. Masz więc już pierwszy...
ja mam zewnętrzny ram więc mam pamięci pod dostatkkiem ale nie rozumiem idei Twojej propozycji. pozdrawiam PC Idea polega na licznikach softwarowych obsługiwanych w procedurze przerwania timera. Jeśli programujesz w innym języku niż asm, to nie przejmuj się tym, że napisałem coś o RAM, każda "zmienna" jest przechowywana w RAM, wystarczy ją zadeklarować,...
Raczej tak. Opoznienia z delay.h sa w assemblerze (glownie) wiec wiadomo dokladnie ile taktow sie wywoluja, sa tez sprytnie optymalizowane, tak, zeby odmierzane czasy byly jak najdokladniejsze. Twoje procedury sa o tyle gorsze, ze sa czesciowo w C, wiec opoznienie bedzie zalezec od wersji kompilatora, ustawionej optymalizacji (-O) i humoru kompilatora....
mikro = 0.001 [mili] mikro = 1 / 1000 [mili] czyli jedna milisekunda(ms) ma tysiąc mikrosekund(us). Mam pytanie: czy to działa z metodą wysyłania kwadratowej fali? Bo ja chcę zrobić pilot który będzie wysyłał parę komend, ale nie wiedziałem jak zmodulować sygnał. bardzo bym prosił o potwierdzenie tego sposobu. A co do wysyłania tylko przez określony...
Ale przecież w przerwaniu timera triak w odpowiedniej chwili włączam, więc skoro mam go wcześniej wyłączyć to późniejsze włączanie nie będzie miało sensu, gdyż w kolejnym wywołaniu przerwania timera ten triak zostanie niepotrzebnie wyłączony. Właśnie tak. MOC3023 z Twojego schematu potrzebuje pewnie kilkadziesiąt mikrosekund żeby się włączyć, a wyłączy...
Witaj migot. Już byłem na tej stronce, i jest fajna. Jednak nie opisuje ona sposobu wyliczenia częstotliwości na timerze. Znalazłem fajny program tj. kalkulatorAVR i porównując przykład z innego programu doszedłem jaką podać wartość aby uzyskać przepełnienie co daną ilość mikrosekund. Dzięki za zainteresowanie. Nadmieniam, że kożystam z CodeVisionAVR...
Assembler tu nic nie pomoże. Standardowy timer jest zbyt wolny. Musisz sam oprogramowac zależności czasowe. Poczytaj coś o funkcjach HPT (coś w rodzaju QueryPerformanceCounter i inne). Dzięki nim można osiągnąć rozdzielczości kilkunastu mikrosekund.
Zastanawia mnie ocena tego postu przez innych użytkowników Mnie też zastanawia za co mnie zminusowali... Czyżby, zgodnie z sondażami, większość Polaków miało problem z czytaniem ze zrozumieniem? W sensie czy wykorzystujesz jakieś sprzętowe peryferia typu przerwania zewnętrzne/ timer Dobre pytanie. Niekoniecznie mógł wykorzystać UART, więc chyba kręci...
To jest parametr konfiguracyjny systemu - chyba wciąż 1 milisekunda Chyba masz na myśli max czas wykonywania tasku. Przy przełączaniu tasku przerwania mogą być blokowane ale nie na ms, raczej to będą ns. Na Arduino nie ma systemu, który by blokował przerwania Ale robią to wszelkiej maści i rodzaju biblioteki jak 1-Wire, WS2812. przerwań są po kilka...
Na forum timerów jest zapewne sporo - użyj wyszukiwarki. Podobnie w sieci. Pisząc "odlicznie czasu" masz na myśli zegar czasu rzeczywistego (sek, min, godz), czy jakąś inną jednostkę np. mikrosekundy, itp? WinAVR - jeśli możesz zainstaluj AVR Studio 4 i nie męcz się więcej.
(...) ż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...
Witam! Od niedawna zmagam się z problemem którego nie mogę rozwiązać, dlatego zwracam się do was z prośbą o pomoc.A więc tak: potrzebuję zrobić odmierzanie czasu.Zamysł jest taki: taktuję Timer0 (8 bitowy) zegarem 4Mhz bez preskalera.Licznik przepełnia się po 256 taktach zegara czylo flaga przepełnienia ustawiana jest co 64us.Następnie wywoływane jest...
Witam, Chcę zbudować bardzo prosty zegarek a tak właściwie stoper. Chciałbym żeby mylił się co najwyżej 1min/tydzień. Napisałem program z użyciem timera, ale zegarek po ośmiu godzinach spóźnia 20 sekund. Czy wewnętrzny oscylator działa stabilnie, to znaczy jeżeli ma częstotliwość odbiegającą od 4Mhz to taka będzie czy będzie się wahała i miała różne...
C znam dosc dobrze, studiuje informatyke chciałbym bardziej napisać coś samemu niż korzystac z gotowców, nie wiem jak dokladnie odmierzać czas rzedu mikrosekund na tym polega problem- napisanie funkcji która odczeka potrzebna chwile. Którego timera najlepiej uzyc... PIT, RTT PWM Dodano po 16 do testowania kodu uzywam TV, oscyloskopu i odbiornika TSOP1738
Po pierwsze to najspokojniej w świecie możesz używać dowolnej nośnej z zakresu 24-38kHz na nawet 22-40kHz i to nie wpłynie znacząco. Najlepiej zawsze 36kHz i będzie OK. ptrail - no toć przecież widzisz pan, że ma to być impuls o określonej długości, tyle że to ma być impuls z nośną (pamiętaj o inwersji sygnału) pomiędzy nadajnikiem a wyjściem odbiornika...
A ja proponuję może najpierw się zastanowić nad tym do czego opóźnienia i wtedy dobrać sposób czy na timerze czy bez timera. Tak mi się wydaje, że próby zaprzęgania Timerów do super "idealnego" odmierzania tak gigantycznego czasu jak 1 sekunda to jak strzelanie z armaty do komara (choć może się mylę - ale ciekaw jestem do czego tak na prawdę może być...
Chodzi o to że protokół dmx ma takie ramki jak na obrazku http://obrazki.elektroda.pl/2918076400_1... na razie za pomocą UART zrealizowałem ramkę danego kanału, które to dane wysyłam za pomocą nóżki Tx, ale brakuje mi jeszcze mi początkowej ramki "Mark After Break (MAB)" MAB następuje natychmiast po zakończeniu Break i ma postać impulsu...
Mikrokontrolerem można odmierzać okres - jeśli działa z zegarem 1MHz, to można na nim zrobić generator dający się ustawić na 1000Hz, 999.001Hz, 998.004Hz,... przy mniejszych częstotliwościach odstępy będą coraz mniejsze. Nie da się cyfrowo zrobić równych odstępów, jeśli sygnał ma być równym prostokątem. Można natomiast wykonywać dodawania: np. do zmiennej...
Jeśli chodzi o biblioteki obsługi wyświetlacza, znalazłem taką. Przypomniała mi się jeszcze jedna istotna rzecz: funkcje clear() oraz home() dla LCD są bardzo czasochłonne, zajmuje ponad 2ms, czyli całą wieczność :) W bibliotece, którą wskazałeś ten czas określony jest na min. 2900 mikrosekund. Chodziło mi o to, że samo sprawdzanie tej flagi w prostym...
A czy mogę prosić o przykład funkcji do C (linux) która odmierza dokładnie mikrosekundy? Prosze bardzo : setitimer (musisz dolaczyc naglowek <sys/time.h>).Za pomoca funkcji signal (<signal.h>) ustaw sobie funkcje callback-owa do odpowiedniego sygnalu (patrz ustawienia timera).Szczegoly na stronach man, jednak nie spodziewaj sie cudow.
Wystarczy uruchomić któryś z timerów procka. Może być w tle, wystarczy np. [Start Timer0] wtedy połówki TL0 i TH0 zaczną liczyć. Dane z TH0 i TL0 możesz wykożystać do swoich potrzeb.
Znajomość samego Basica (Bascom) nadaje się tylko do pisania programów mrugających ledami, a i tak jest z tym problem, o czym świadczy ilość pytań na forum. Do pomiarów czasów usekundowych można zastosować timery z zasobów sprzętowych 51. opóźnienie na dole strony jest przycisk <Pisownia>
Dlaczego nie użyjesz wzorca rubidowego? Oczywiście można użyć drogiego i sporego gabarytowo własnego wzorca, ale szukam prostszego rozwiązania. W zasadzie do mojego zastosowania sprawdza się dobre TCXDO czy OCXDO, ale zainspirowały mnie metody automatycznej kalibracji z użyciem modułu GPS - daje dokładny sekundnik, gdy widzi satelity, ale do głowy...
Drugie pytanko jest związane z możliwością wizualizacji w UserForm paska postępu działania makra. Jak wygląda utworzenie takiej wizualizacji dla poniższego kodu? Załączam - jako przykład -prosty pasek postępu działający nie w userForm, ale w arkuszu. Reszta opisu w pliku. Jak to zrobić na formie? Można analogicznie, używając zamiast obiektu Shape kontrolkę...
hmm chodzi o to ze od momentu w ktorym rozpoczynam zliczanie dajmy na to 200us [w asemblerze komenda setb tr0] do momentu w ktorym nastapi skok do obslugi przerwania uplywa wiecej niz 202us. [202 bo juz wliczam tutaj skok do przerwania ktory trwa 2 cykle]. zakladalem tez ze moze tam jeszcze jakas jedna mikro sekunda jest potrzebna do czegos wiec obliczalem...
Hi wszystim!!! Dziala!!Chocby z predkoscia 1Mhz,wiecej nie sprawdzalem. Oto kod: Czas podajemy w mikrosekundach. procedure DELAY(czas:integer); var zm1,zm2 : int64; cykle : int64; begin cykle:=round(czas/1000000*(frequency)); QueryPerformanceCounter(zm1); repeat QueryPerformanceCounter(zm2); until zm2-zm1 > cykle; end; TYlko,ze zuzycie procesora jest...
Witam Jak wielu spotkałem się z problemem problemem kłopotliwej obsługi pilota z RC5. Po poszperaniu w necie wpadłem na http://www.elektroda.pl/rtvforum/topic20... ten temat. Jak się okazało wszystko na tym programie pracowało, ale nie zawsze. Kłopotem było napisanie programu "pod pilota". Oczywiście pochwała dla Sabotaz'a który problem "ruszył"...
Przy taktowaniu procesora 1MHz jedno zliczenie tego licznika trwa 1 mikrosekundę. Sugerujesz, że cały obieg pętli - sprawdzenie warunku i inkrementacja 16-bitowego licznika przez 8-bitowy procesor zajmuje jeden cykl zegara? Do mierzenia czasu służy timer, chyba że jednostką czasu jest "obieg pętli" - wtedy oczywiście powinieneś odpowiednio podpisać...
Po pierwsze to ty jak zwykle w temacie, gdzie chodzi o AVR 8bit zaczynasz opowiadać jak to ty robisz na ARM'ach - a to nie ma nic wspólnego z tematem. Po drugie - panie kolego - może już przestań opowiadać o Delayu 750ms, bo myślałem że co do tego to chyba się rozumiemy - że to jakaś bzdura i tak się nie robi. Ja piszę o pozostałych delayach ale tych...
a takie cos ma sens?;p Takie coś nie ma sensu. Poczytaj moje komentarze w kodzie i coś z tym zrób. Zacznij od sformatowania kodu - etykiety i nazwy od pierwszej kolumny, dyrektywy i instrukcje - zawsze po tabulacji. [syntax=asm]MOV R5,#0 ? pod jakim adresem jest ta instrukcja i kiedy się wykona ?dlaczego definiujesz ręcznie adresy danych zamiast użyć...
1) Procedura obsługi przerwania trwa mikrosekundy ;) Wywoływana jest co 50ms a dopiero 20 wywołań daje jakąś zmianę/ efekt 2) Program działa w pętli nieskończonej. Właściwy kod umieścił byś w pętli While(1) 3) Nie widzę przeszkody ;) 4) Proszę bardzo: http://pl.wikipedia.org/wiki/Inkrementac... http://www.uc51.pl/tag/przerwania/ http://www.ime.uz.zgora.pl/mkoziol/mcs51...
Przerwanie do dosłownie kilka komend. Służy tylko do multipleksowania wyświetlacza. Jeśli się dobrze orientuję, to trwa ono kilka/kilkanaście cykli zegara, czuli kilka mikrosekund. Przy czasie tych opóźnień nie powinno mieć to znaczenia. Zresztą poniżej kod przerwania: ISR(TIMER1_COMPA_vect) //PRZERWANIE, GDY TIMER DOLICZY DO WART. PORZADANEJ...
Niby dlaczego za małe(krótkie) Procedury delay liczą 256*256 cykli co daje trochę ponad 65ms dla zegara 1 MHz. Procedury, które podałem łatwo dostosować do dowolnego zegara. Wystarczy pozmieniać wartości ładowane do odpowiednich rejestrow. W komentarzach podane są cykle zegarowe zajmowane przez określoną instrukcję. Dla 1MHz cykl wykonuje się w czasie...
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
Wczytaj sobie kod do AVR-Studio i uruchom symulację. Będziesz widział, że czas pomiędzy przerwaniami będzie rósł o parę mikrosekund co każde przerwanie. Wszystko przez czas jaki mija od zgłoszenia przerwania, a wykonania instrtrukcji ładującej nową wartość do licznika. Daltego warto zrobić opcję z dodawaniem: TCNT2 |= 0x9C;
Stosuję przekaźnik S14-2C-0505. W dokumentacji widzę dwie wartości - 36 i 47 Ohm. No to najprościej zmierz. Dla 47R i 5V, daje to prąd około 100mA. W sumie dużo. Dla 10V będzie to aż 200mA. Wcześniej pisałeś że 4 takie przekaźniki pociągną 280mA. Więc nie ma co liczyć tego dalej. Trzeba najpierw rozwiać wątpliwości co do poboru prądu. Ja nie mogę znaleść...
Mam problem z napisaniem programu rozpoznającego stany w sieci. Na wejście INT0 procesora podpiąłem sygnał z sieci 1Wire. Chciałbym rozpoznać trzy stany w sieci: - reset (czyli ściągnięcie linii danych do 0 na 480us) - nadanie 0 - (czyli 10us stan niski, 80us stan wysoki) - nadanie 1 - (czyli 80us stan niski, 10us stan wysoki) 0 i 1 następują po sobie,...
Szukałem odpowiedzi na to pytanie, lecz nie znalazłem, wiec postanowiłem rozpocząć nowy temat. Otóż mam problem z liczeniem kanałów DMX, a dokładnie z timerem0 którego używam w tym celu. Mikrokontroler to jak w temacie ATmega8, częstotliwość taktowania 8 MHz, ustawienia sprzętowego UART 250 000 baud. Według specyfikacji DMX najpewniej rozpoznać nowy...
A jakie są założenia? Pisałeś, że pomiar ma być z dokładnością do mikrosekund? Skoro mierzysz czasy rzędu 100ms, to na pewno musi to być wyrażone z dokładnością do 0,001ms? Nie wydaje mi się. A jeśli rzeczywiście tak musi być to zastosuj inną taktykę - licznik timera rozszerzony na dodatkowe bity przez przerwanie obsługi przepełnienia timera, a sygnał...
Nie działa Ci z to z millis bo może źle używasz. Jak masz przez 200ms kręcić kołem to wstawiasz w loop funkcję, która włącza kręcenie kołem i zapisuje czas startu, w kolejnych wywołaniach sprawdza czy już minęło od chwili startu 200ms i ewentualnie wyłącza kręcenie kołem. Jak coś zablokuje loop na np. 20ms to o tyle będzie maksymalny błąd pomiaru, z...
Nie chciał bym za Ciebie pisać tego programu, bo jest to naprawdę proste zadanie i dlatego spróbuj sam napisać go jeszcze raz od początku wg np. takiego algorytmu: Ustaw timer powiedzmy na 10khz aby każde przerwanie wykonywało się co 100 mikrosekund. Możesz też gęściej od tego zależy dokładność - tu 100us czyli 0,1ms Zdefiniuj sobie zmienną licznikową...
Te czasy to chyba chodzi o mikrosekundy a nie milisekundy? Przy odstępach rzędu ms nie byłoby najmniejszego problemu, jako że najdłuższe co może być, czyli reset pulse trwa zaledwie 480 us. Ale ok, napisz coś więcej o tym pomiarze obrotów. Dlaczego wykorzystałeś wejście INT, zamiast wejście taktujące timer? Jeśli zastosowałbyś timer to problem znika,...
Uzyskałem pomiar mikrosekund z zewnętrznego czujnika tak jak na poniższym zdj https://obrazki.elektroda.pl/6205855700_... https://obrazki.elektroda.pl/8707798800_... Wartością wyświetlaną na konsoli jest rejestr CNT Timera2, który inkrementuje się co 1 us. Jednak nie zgadzają mi się obliczenia prędkości zegarów i szyny...
No tak, nie sprecyzowalem. Na razie efekt miał być taki że switch (PD.0) miał włączać timer. Docelowo będą dwa switche, jeden włącza (PD.0) a drugi wyłącza (PD. 1) timer. Przeanalizuj więc ten przykład: [syntax=basic4gl] 'Timer0 measures time interval betwneen two falling edges: 'input#1 - PIND.0, -START Timer0 (S1) 'Input#2 - PIND.1 -STOP Timer0 (S2)...
Na wyjściu TSOP1736 normalnie jest 1. Zaobserwowałem, że podczas trzymania przycisku pilot wysyła najpierw pełny kod, a potem tylko po (chyba) 3 bity oznaczające zapewne powtórzenie. Z kolei inny pilot wysyłał co chwilę to samo. Nie mierzyłem tego dokładnie, ale na pewno były więcej niż 3 transmisje na sekundę. Można więc założyć, że jeśli przycisk...
Nie. Przecież opóźnienia rzędu mikrosekund ci nie przeszkadzają. Nic więc nie stoi na przeszkodzie, żeby wysłać całe polecenie na raz. Opóźnienie potrzebujesz do odczytu skonwertowanych wartości ciśnienia/temperatury. Tu zamiast czekać ustaw flagę w przerwaniu timera, w pętli głównej ją sprawdzaj, jak minął wskazany czas to odczytaj SHT i po problemie....
Podejrzewam, że będzie potrzebna jakieś formowanie impulsu ze zbocza. Albo poszukać innych rozwiązań: 74HC123 (podwójny przerzutnik monostabilny, co pozwala uzyskać dwa różne czasy; jest też podobny układ z serii CMOS 4000) - nadaje się do czasów od mikrosekund do minut, jakkolwiek wymaga układu RC o odpowiedniej stałej czasowej, przy minutach potrzebna...
Celem jest zrobienie funkcji zliczającej czas między przerwaniami generowanymi przez zewnętrzny generator (docelowo będzie to obrotomierz). Generator jest precyzyjny, AD9850. Na wejście zapodaje prostokąt o różnym od 50% stopniu wypełnienia ale to właśnie nie powinno mieć znaczenia. Wyjaśniam. W poniższym kodzie korzystam z funkcji micros która mierzy...
Chyba zlokalizowałem źródło problemu. Niestety nie wiem jak je usunąć. Chodzi o funkcje zwracające czas w mikrosekundach i milisekundach - read_ms() oraz read_us(). Po wysłaniu poprzez USART do PC wartość którą wpisuję jako argument do funkcji kalman_calculate tj. (read_ms()-timer) pokazały mi się na przemian 9882us, 1003us i -455us. Powinno być coś...
Najlepiej podzielić pomiar na 2 zakresy - dla wolniejszych mierzyć okres impulsu, dla szybszych - zliczać impulsy na określony czas. Tu tez możesz mieć kilka bramek, np. 1s, 0.1s itp. Też o tym myślałem, ale to nie rozwiązuje problemu. A nie prościej wykorzystać w tym celu timer w trybie mierzenia szerokości impulsu i nie bawić się w żadne zmiany odświeżania?...
Co do bascoma...jako ze generuje wolny kod to nie możesz wepchnąć rozbudowanej obsługi licznika w przerwanie, bo pogubisz takty albo wykopyrtniesz procesor bo sie stos przepełni(w przypadku gdybys w obsłudze przerwań nie wyłączał przerwań, a w trakcie trwania jego obsługi wystąpiło następne przerwanie i tak w kółko) Musisz wziąć pod uwagę czas reakcji...
Układy proponowane wyżej nie spełniają wymagań - koledzy nie zwrócili uwagi, że tu trzeba regulować 4 czasy. Sposób - układy 74HC/HCT123 http://www.nxp.com/documents/data_sheet/... - 4 przerzutniki łączone szeregowo w pętlę i wyzwalające się po kolei pierwszy -> drugi, drugi->trzeci .... czwarty->pierwszy. Każdy z przerzutników może mieć...
Witam, Mam drobny problem z wyrabianiem się w czasie na Atmedze8 z wewnętrznym zegarem 8MHz (zewnętrzny kwarc niestety nie wchodzi w grę ze względu na ograniczenie miejsca na PCB). Ogółem piszę w C, ale procedury dla których czas wykonania jest ważny napisałem w asmie. Problem jest taki, że nie wiem jak użyć ich jako przerwań, poza rozwiązaniem polegającym...
Niezbyt wiem jak działa platforma, na którą programujesz – ale z czystym sercem mogę ci napisać że oba fragmenty kodu które napisałeś są błędne. W obu fragmentach kodu tworzysz pętlę, która powtarza się bardzo, bardzo wiele razy w krótkim czasie – przez co pochłania całą moc obliczeniową procesora – co zapewne zostaje wykryte i przez...
Jest ktoś zainteresowany rozwiązaniem ekwiwalentnym (na przerwaniu), dla 1wire? :] Biorąc pod uwagę fakt, że jeden bit w 1-wire trwa kilkadziesiąt - kilkaset mikrosekund, oraz to, że można go zrealizować w pełni sprzętowo korzystając z UARTu, taka zabawa IMHO nie ma sensu. Przerwanie z jakąś logiką odpalane co kilkaset cykli nie jest specjalnie kuszące,...
Wydaje mi się, że to ciągle problem z mierzeniem czasu. Tzn. nie wykrywa któregoś ze zbocz i różnica nie jest liczona, jednak nie potrafię tego znaleźć. Dodałem też wyświetlanie na diodach, które są na płycie i też się nic nie dzieje. Obecnie kod wygląda tak: [syntax=cpp] #define__AVR_AT90CAN128__1 #define OSCSPEED 8000000 /* in Hz */ #ifndef F_CPU...
Dobra okazja by to spie.... Jeśli jest to typowa filozofia Arduino, z delayami, odpytywaniem portów w pętli (a nie przerwania), to zabija większą aktywność Jak napisałem - wykorzystuje stack TCP I proste parsowanie stringa. Nie ma w tym magii, proste C portowalne na wiele platform. przyklad kodu parsowania: void parseudp(AsyncUDPPacket packet)...
impuls mikrosekund timer wieża termostat timer
haier inverter zgrzytanie laptopa laminator obroty
usterki kuchenki indukcyjnej usterki kuchenki indukcyjnej
Objawy brudnego intercoolera w VW Passat B5 1.9 TDI AVB Ciśnienie wtrysku Peugeot Partner 1.9 D DW8