W załączniku przesyłam program (Visual C++/CLI) do pomiaru refleksu. Timer użyłem do generowania sygnału, po którym użytkownik ma nacisnąć przycisk. Czas reakcji mierzony jest za pomocą metody DateTime::Subtract().
Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość.. no nic. Dziękuję za wypowiedzi tak czy inaczej.. Odp. kol. Draco była troche sarkastyczna, bo na tak prostą procedurę nikt, kto ma choć troche rozeznania w tej dziedzinie chyba (!) nie szuka pomocy. Mopzesz to zrobić na kilka sposobów: 1. mierzyc czas metodą...
1. ustawiam zmienną globalną: unsigned integer ms 2. Inkrementuję ją w przerwaniu timera co jedną milisekundę. 3. gdzieś, np w 'main' piszę: W punkcie 1 brakuje mi dodatkowego kwalifikatora. Jak on tam miał (?), v...
Funkcja delay_ms() nie zależy od timera, więc prescaler nie ma dla niej znaczenia.
Metoda jest taka ze w momencie nadejscia przerwania od przycisku odpalasz timer, ktory odmierza kilka milisekund, po czym sprawdza czy przycisk nadal jest wcisniety. Jesli tak, to znaczy ze impuls pochodzi od faktycznego nacisniecia a nie od drgania po nacisnieciu. Dla pewnosci mozna zamiast 2 dokonywac 3 sprawdzen. Czas timera musisz dobrac doswiadczalnie.
Witam Jak masz ustawiony w bloku danych typ danych - powinno być S5TIME, a w wincc typ TIMER wtedy zadawana wartość z panela będzie w milisekundach.
Problem w tym, że wyrzuca mi znowu sekundy, a ja potrzebuje milisekundy. Kto wie jak napisać prosty timer liczący w milisekundach pod VC++ WIN32 Console Application???
Skoro 122 wywołuje zmianę stanu diody co sekundę, to gdy doliczysz do 0.244 to będziesz miał przerwanie co 2ms :D Pojedyncze przerwanie jest wołane co 8 milisekund. Albo zmień preskaler albo użyj innego timera i po ludzki włącz ctc
kolego, powyzsze watki mowia zeby wykorzystac czestotliwice procesora + licznik cykli, wszystko jest w winapi, wiec kontrolowane systemem win a jaki jezyk do tego uzyjesz jest bez znaczenia. jezeli upierasz sie na dos, to wiem ze kiedys mozna bylo wykorzystac timer 8253/8254 piszac procedure w asm, np: procedure Wait; assembler; {----------------------------------...
Dlaczego tak dużo? To będzie czas w sekundach. Żeby wyzwolić timer 555 wystarczą milisekundy a nawet mniej. Ja kiedyś wyzwalałem czasem ok. 450 - 500ns. Ale to był inny układ. Tutaj wyzwalanie jest podczas włączenia zasilania i ten czas będzie dłuższy. Ale nie aż tak. W tych wartościach elementów kryje się pewna pułapka. Jako 1u powinien być kondensator...
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. W teorii tak, ale nie jest to chyba najlepszy pomysł... Wejście i wyjście z przerwania to - z tego co pamiętam - 18 cykli. Do tego sama obsługa przerwania to też kilka instrukcji, powiedzmy więc...
1. To stary wektor przerwań, a nowa funkcja ISR(). Musisz zastosować nowy wektor do tej funkcji. Znajdziesz go w tabelce szukając starego: http://www.nongnu.org/avr-libc/user-manu... 2. Drgania trwają od kilku do kilkudziesięciu milisekund. Możesz na przykład wykorzystać jakiś timer do odliczania tego czasu począwszy od pierwszego...
WGM01, CS02 oraz CS00 nie są dla Timera 1. Więc to co masz, to wcale nie jest tryb CTC. Preskaler akurat wyjątkowo się zgadza. Szacuję, że zamiast 200 milisekund kod w ifie wykonuje się coś pomiędzy 600 a 700 ms.
Jak to Timer nie obsługuje milisekund? W polu invertal ustala się co ile milisekund ma się włączać timer. Może uda się coś poradzić, gdy zamieścisz treść komunikatu. Pozdrawiam.
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...
Witam, można to zrobić np tak: podpinasz kwarc zegarkowy, ustawiasz odpowiednio timer, który zlicza ci sekundy (albo milisekundy, to zależy jak skonfigurujesz timer) i w pętli wyświetlasz to na LCD, proste :D
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ę.
zapoznaj sie z fusebitami. Czy ty chcesz dokladnie odmierzyc 500 milisekund czy okolo? Jak chcesz dokladnie otrzymac to kwarc zew. i timery. A masz zew. ram podlaczony? nie wiem jak chcesz jakas zmienna zdeklarowac poza pamiecia sram chyba ze chodzi ci o pamiec stala eeprom
W NE były nieraz listingi programu ale trzeba by dotrzeć do tego numeru. Z opisu wynika, że po włączeniu zasilania TIMER ustawia zapamiętany czas oraz czeka na wciśnięcie przycisku S1. Jeżeli ustalony czas się skończy wyzwala transoptor Można to wykorzystać do resetu mikrokontrolera poprzez timer = dodatkowy układ scalony, który po czasie X milisekund...
Dobrze kombinujesz. Ja rozwiązałbym to tak, że zapamiętywałbym timestamp (w milisekundach) ostatniego przychodzącego znaku. i jeżeli jest większy niż 4 ms (dla baudrate 9600) to uznajemy że jest koniec ramki. Oczywiście można użyć timera o większej rozdzielczości dla szybszych transmisji. Dla trybu ASCII sprawa jest chyba jasna.
Aby ten program, który napisałem zadziałał, trzeba urchomić dwa Timery. Timer0 do odliczania 100 milisekund a Timer1 do odliczania 1 sekundy. Albo tylko 1 timer cyklicznie co 100 ms i liczymy do 10... ;)
https://allegro.pl/oferta/przekaznik-cza...
Zalozenia ktore podales sa niezbyt precyzyjne. Podejrzewam, ze do sterowania serwomechanizmami sygnaly PWM wcale nie musza na siebie zachodzic a z faktu, ze maksymalne wypelnienie PWM wynosi zaledwie 10% wynika iz moglbys wystawic nawet 10 PWM-ow. Podsumowujac idea jest taka: w pierwszych 2ms (w okresie 20ms) obslugujesz 1-szy PWM (na pozostale PWM-y...
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...
> stoowa Twoje kłopoty powodują 3 ostatnie linijki w pętli while czyli obsługa LCD. W ciele funkcji obsługujących lcd na pewno sa instrukcje blokowania przerwań na czas transmisji danych do lcd. Powoduje to pomijanie wywołań przerwań a co za tym idzie zegarek będzie się spóźniał. Chcemy skrócić czas do następnego przerwania o czas opóźnienia obsługi...
(at)ElektrodaBot Jak w czystym C (AVR GCC) wyglądałaby funkcja millis() ?, a może pokaż też 2 podejścia (listing), gdzie milisekundy to zmienna globalna np. millis. Wykorzystaj timer do przerwania dostępnego na każdym AVR.
Co "toto" jest? ISR_NO_BLOCK(TIMER0_COMP_vect) Wyszukiwarka nie działa? Czemu kolega strzela na ślepo? Ja rozumie "dawno, dawno temu, za siedmioma górami, za siedmioma lasami, gdy nie było Internetu..." Ale teraz? https://www.nongnu.org/avr-libc/user-man... Tak ciężko znaleźć? Przy okazji. Chce kolega koniecznie dziedziczyc...
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...
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...
Skoro piszesz o WM_TIMER, to pewnie chodzi o funkcję SetTimer. Jej pierwszy argument może być zerem gdy nie masz okna, wtedy drugi argument jest ignorowany, a funkcja zwraca identyfikator utworzonego timera, który podajesz do funkcji KillTimer. Gdy już uruchomisz taki timer, będzie on wysyłał komunikat WM_TIMER tylko do kolejki komunikatów aktywnego...
Bierzesz wyjście BCD jako word w step-ie i czytasz je np. jako timer w flex. Dostajesz wynik chyba w milisekundach - ewentualnie skalujesz już w tag ( jeżeli chcesz np sekundy )
W tym trybie timer po prostu zlicza impulsy zegarowe do niego doprowadzone, jeśli przekroczy zakres to zgłasza przerwanie overflow (nadmiaru) i rozpoczyna zliczanie od nowa. Funkcja obsługi tego przerwania zlicza je zwiększając liczniki f - przechowujący czas z rozdzielczością <1ms i m przechowujący liczbę milisekund. W programie należy korzystać...
Co prawda ten przykład co podam poniżej dotyczy liczenia sekundy, ale nic nie stoi na przeszkodzie przerobić kod wg swoich potrzeb. Generalnie przy 8 mhz i preskalerze 256 timer zlicza 31250 na sekundę. Czyli w przyblizeniu 31 na milisekundę. Odejmując jedną próbkę od drugiej otrzymamy czas pomiaru. Polecam zastosować timer w trybie CTC jaki podał mi...
Zncznik zgłoszenia przerwania timera zeruje się na początku obsługi, a nie na końcu i nie używa się do tego operacji &=, a zwykłego podstawienia, o czym już niedawno była dyskusja. A, i chyba jeszcze bit ARPE wypadałoby ustawić, chociaż nie do końca rozumiem, dlaczego ten timer ma się zerować co 2501 milisekund.
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...
Możesz zrobić to np. w taki sposób: wyjście odbiornika podłączyć poprzez opornik 1k do wejścia INT0 w procesorze. Nie podaję która to nóżka bo to zależy od procesora. Wystarczy jakiś ośmionóżkowiec. Skonfigurować przerwanie INT0: "Config Int0 = Rising" i wyznaczyć skok do procedury np. o nazwie "Pomiar": "On Int0 Pomiar". Teraz jak pojawi się wysoki...
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...
Udało się :) .. przynajmniej na razie na to wygląda :] a to jest kod który zadziałał :) : while(1) { while((t = PULPIN & 0x20) == 0) // dopóki jest na wejściu 0 to czekamy {} while((t = PULPIN & 0x20) == 1) // // potem przeczekujemy 1 na wej - czyli zliczamy na opadającym zboczu {}...
Zmienna typu Time to jest DInt w milisekundach. W tej formie, jaką masz na panelu, nie rozbijesz jej na minuty i sekundy. Możesz w Limitach podzielić przez 1000 i otrzymasz czas w sekundach albo rozbić go w sterowniku i wyświetlić osobne pola na panelu. Przykładowe funkcje do zamiany można znaleźć na stronie Siemens'a: //ms na s #timeR := DINT_TO_REAL(#time)...
Rozumiem ze będzie tu potrzebne wykorzystanie millis. Do PWM? Można ale to kiepska metoda. Mała rozdzielczość, kiepska precyzja (duży jitter). W przypadku zawieszenia przerwań (np obsługa 1-Wire przez GPIO), PWM zostaje zatrzymany. Taki PWM to do regulacji kontrastu LCD się nadaje. Praktycznie każdy mikrokontroler ma sprzętowy PWM a AVR każdy (może...
Określ częstotliwość tych impulsów, lub ich szerokość. Jeśli trwają milisekundy, to najlepiej wykorzystać timer w trybie przechwytywania impulsów zewnętrznych - piny ICP i rejestr ICR. Jeśli są krótkie (setki ns lub us) to lepiej tymi impulscami taktować wejście licznikowe timera, a drugi timer wykorzystać do odmierzania odcinka czasu wzorcowego. Ze...
Witam Posiadam sterownik s7-300 oraz panel TP170B 6" Mono. W programie mam użyte kilka timerow. W związku z tym mam 2 pytania: 1) w jaki sposób na panelu móc zmieniać parametry tych timerow (np. czas opóźnienia) 2) jak przeskalowac te dane tak aby np wprowadzenie liczby 20 na timerze ustawilo np 600ms opóźnienia (żeby mnożyło zadaną wartość przez np.30)...
ET można czytać jako podwójne słowo (DWORD milisekundy), a w HMI zrobić skalowanie zmiennej.
Spróbuj poszukać coś o mikrokontrolerach, są tanie i z całkowitą pewnością pierwsze lekcje pomogą Ci zaprogramować wymagane przez Ciebie zadanie. Do tego możesz dołączyć wyświetlacz i klawiaturkę (zależne od zaawansowania programu). Ewentualnie możesz użyć przekaźników czasowych, lecz nie uzyskasz takiej dokładności. Polecam też timer 555. Pozdrawiam
O, zapomniałem się odnieść jeszcze do tego timera, a wypowiedź Arnoliq-a mi przypomniała: Pamiętaj, że timer działa w ten sposób, że za określoną ilość milisekund system operacyjny wysyła do aplikacji komunikat (mechanizmem Widnows Message). Ale aplikacja nie może być zajęta (ściślej: odbierający wątek) niczym, aby mogła zareagować na to zdarzenie....
Masz w sumie do obsłużenia 3 rzeczy - GPIO, timer i najlepiej przerwania. Możesz dołożyć jeszcze drugi timer do obsługi wyś. LED. Trochę zabiersza się od tyłka strony. Najpierw przedstaw schemat (chyba że już masz i jesteś go pewien), zrób urządzenie i później będziemy omawiać program. Ogólnie: Init: - Konfigurujesz timer tak aby dawał przerwanie co...
Jak zwykle Kolega ma rację, wyrzucenie Waitms 750 załatwiło sprawę. Oczywiście wstawienie timera jest chyba najlepszym rozwiązaniem. Tylko coś nie tak mi wychodzi. Dołożyłem Timer co 800 milisekund [syntax=basic4gl] Sub Pomiar: Disable Interrupts If Flaga_delay_ds = 1 Then 1wreset 1wwrite &H55 1wverify Dsid1(1) 1wwrite &HBE I1 = 1wread(2) Flaga_delay_ds...
Kłaniam się automatykom i opisuję problem: Sterownik chcę wykorzystać do wizualizacji procesu naważania surowców używając: --- Siemens S7 1200, 1211DC/DC/DC, ---belki tensometrycznej 3 kg, Mavin NA27, ---przetwornika tensometrycznego A/C, HX711, ---transoptorów do konwersji napięć 24/5 V, HCPL2611(6N137), ---programu do wizualizacji (IGSS lub WinCC)....
A po kilku zamyśleniach urodził się program do pomiaru częstotliwości CPU u PC: (chociaż prawie za każdym razem podaje troszeczkę inne wartości, ale z małym błędem) W tym Basicu też jest zmienna TIMER, zwiększa się co 1ms, ale dopiero teraz zwróciłem uwagę na ten szczegół: PROCEDURE wait(ms) INC ms DO qq = TIMER DO LOOP UNTIL TIMER > qq DEC ms LOOP...
... Proszę o szczegóły. Dlaczego oczywiste jest, że timer że 16-bitowy odliczy 1s? Zakładamy że taktujemy kwarcem 4MHz. Jeden takt to 1/4 000 000=0,25us. 16 bitów to 65536 cykli. 65536cykli*0,25us=16,384ms Proponuję więc zliczyć 100 cykli 10-cio milisekundowych. ilość cykli = 10ms/0,25us=40000 cykli. Wpisujesz więc do timera 40000 i czekasz aż się...
Witam Czy istnieje jakiś sposób na pomiar czasu wykonania kodu w milisekundach. Potrzebuję tego do "zestrojenia" timera. Wykorzystuję w nim funkcję millis(), ale zauważyłem, że w porównaniu z innym czasomierzem występują w nim znaczne opóźnienia. Poniżej fragment kodu czasomierza: s to sekundy, interval ma wartość 1000. Chciałbym za pomocą wartości...
Przeczytałem wątek i nie rozumiem jednego: 1. Timer 2 dyktuje tempo. 2. Timer 1 (obsługiwany całkowicie programowo) decyduje o długości trwania impulsu. Czemu nie zrobisz tak, że w przerwaniu Timera2 ustawiasz Timer 1 i KOŃCZYSZ JEGO OBSŁUGĘ, a resztę (tzn. wyłączenie nóżki) realizujesz przez przerwanie Timera 1? (BTW, moim zdaniem to wszystko da się...
Sęk w tym, że czy po pojawieniu się zniknie po kilkudziesięciu milisekundach czy nie to już mu to wsio rybka. Stąd taki impuls po włączeniu zasilania czujnika jest skutecznym zakłóceniem pracy bo maszynka idzie dalej. Nie wiem czy robisz to na PLC czy uP, ale generalnie pomysł z odczekaniem kilkudziesięciu - kilkuset ms po włączeniu zasilania pomógłby...
Podłączenie jest wzięte z dokumentacji odbiornika: https://obrazki.elektroda.pl/2408779300_... Wejście mikroprocesora może być którekolwiek (np. PC0) Patrzyłem programy na inne rodzaje mikroporcesorów, lecz nie potrafiłem ich przerobić na swój. Głównie dlatego, że niedawno zacząłem się tym zajmować i jeszcze nie do końca rozumiem jak...
Faktycznie aktywnym stanem jest zero i wtedy ten fragment kodu nie powinien dać żadnego rezultatu, ale co dziwne cokolwiek nacisnę i tak się wykona. Znaczy, dlaczego nie. Jak wcisnąłeś przycisk 0, a sprawdzasz 2, to przerwanie sie wygeneruje, ale na dwójce jest stan wysoki, to warunek (pierwszy) zadziała. Jak sprawdzam czy stan jest równy zero to też...
Witam, A może coś takiego: timerExpired_within_ms . Pomaga ona w określaniu czy timer wygasł określony czas temu (przydaje się w przypadku kiedy nie wiemy ile zajmie wykonanie całej pętli, a funkcja timera jest krytyczna czasowo). Wykorzystanie w celach komercyjnych skutkuje postawieniem mi piwa :) Pozdrawiam.
Timer i owszem liczy niezaleznie ale wszystkie operacje przepisania w innych networkach beda juz asynchroniczne. Ocziwiscie jesli wystarcza plus minus kilka milisekund to faktycznie nie ma znaczenia cykl jednostki.
Jeśli chcesz, żeby sekcje działały niezależnie, to musisz skorzystać z jakiegoś timera, nawet nie ma co myśleć o zwykłych delayach. Funkcja millis(); zwraca czas w milisekundach od rozpoczęcia działania mikrokontrolera, myślę, że mogłoby Ci to w tym wypadku bardzo pomóc (możesz np. zapisywać do zmiennych czas ostatniego wywołania i mierzyć np różnicę...
Na podstawie tego jednego "powolnego" nadajnika nie wyciągał bym ogólnych wniosków że u ciebie też potrzeba kilku milisekund, ale trzeba pamiętać, że problem istnieje - pierwszy okres przebiegu wysłanego i odebranego będzie miał bardzo małą amplitudę, dopiero kolejne dadzą się wykryć. Znalazłem interesujący datasheet z oscylogramami echa różnych przetworników:...
Witam! Chciałem wykorzystać timer0 do dokładnego odmierzania czasu, jednak coś powoduje zawieszenie całego programu. Dzieje się tak gdy próbuję odczytać wartość zmiennej w obsłudze przerwania lub w pętli głównej programu. Przerwania od timera są na pewno obsługiwane ponieważ działa zmiana stanu portu w obsłudze przerwania. Kod wygląda następująco: //ZMIENNE...
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...
Witam. Na wstępie powiem że piszę w Builderze 6 na windowsie XP. Potrzebuję wywoływać pewną funkcję z częstotliwością na poziomie 20kHz, czyli co 50us. Jak odmierzać ten czas? Jest w builderze obiekt Timer, i coś takiego byłoby idealne, ale tutaj minimalny interwał to milisekunda. Myślałem o tworzeniu nowego wątku z pętlą, w której by siedziało coś...
Ja też Bascoma nie znam więc Ci wytłumaczę jak ja bym to zrobił, może Ci się przyda. Masz zmienną impuls która jest inkrementowana w przerwaniu od zdarzenia zewnętrznego np zboczem opadającym. Ustawiasz sobie jeden Timer zgłaszający przerwanie (np od przepełnienia) powiedzmy co 1 ms. Deklarujesz zmienną milisekunda którą za każdym razem inkrementujesz...
Witam, próbuje znaleźć dobry sposób na pomiar amplitudy impulsu PWM. Zakres zmian wypełnienia 5 % do 95 %. Czestotliwosc sygnalu sie nie zmienia i wynosi 1 KHz. Mój pomysł polega na tym, że po wychwyceniu zbocza narastajacego odpalam ( w przerwaniu od input capture) timer ktory co 10 us ( 5 % z 1 ms to 50 us) trigeruje pomiar ADC poprzez DMA (czyli...
Oto program który napisałem $regfile = "attiny2313.dat" 'rodzaj mikrokontrolera $crystal = 8000000 '8MHz Dim Pozycja1 As Integer 'zmienna określająca położenie serwa1 Dim Pozycja2 As Integer 'zxmienna określająca położenie serwa2 Dim Czas1 As Integer 'zmienna pomocnicza do odmierzania czasu Dim Czas2 As Integer 'zmienna pomocnicza do odmierzania...
O właśnie teraz pomyślałem o zewnętrznych przerwaniach, że tak można by to zrobić. Natomiast nie rozumiem co rozumiesz przez stwierdzenie, że tryb PWM skraca cykl zliczania do 256 (czy ileś tam)? Specyfikacja procka stwierdza że dla Fast PWM "The minimum resolution allowed is 2-bit (ICR1 or OCR1A set to 0x0003), and the maximum resolution is 16-bit...
Witam serdecznie forumowiczów! Od pewnego czasu dysponuje zestawem uruchomieniowym ZL2MCS51 z mikrokontrolerem AT89C51RD2. Muszę zrobić transmisje za pomocą interfejsu SPI. Mikrokontroler jedynie odbiera dane od przetwornika AC (ADS7886). Ale wydaje mi się, że nie wiem jak fizycznie działa interfejs SPI na mikro... Na przetworniku to prosta sprawa....
Dzięki, trzeba będzie pomyśleć o hardware :) mam tylko jeszcze jedno pytanko. mając ilość cykli zegarowych, jak zamienić je na czas? Bo np. Wynik z czasem otwarcia wtryskiwacza będe miał w cyklach zegara a nie np. w us czy tam ms. Czy może trzeba 1sekunde podzielić na częstotliwość kwarcu i to co wyjdzie pomnożyć przez liczbe cykli i mamy czas w sekundach?...
(at)cinek_14 Jak rozumiem masz gotową płytkę, więc to implikuje jakie masz możliwości rozwiązania problemu. Koledzy upierają się, aby wszystko wrzucić do przerwań, co IMHO nie tylko nie rozwiązuje problemu, ale go całość niepotrzebnie komplikuje. Skoro już masz płytkę, to zrobienie 1-wire na UART raczej nie wchodzi w grę. Zresztą nie jest to potrzebne....
W zasadzie kolega (at)emarcus powiedział już wszystko odnośnie pracy timera. Dodam jeszcze że mógłbyś użyć wyliczonej wartości 125 wykorzystując zamiast Counter0...itd., instrukcję "Load Timer0, 125" - osobiście jej nie lubię i rozwiązanie, które Ci podałem jest dokładniejsze. Z tym Lo1 to jest tak w tym przypadku, że ile wpiszesz tyle milisekund będzie...
Tym razem podam wędkę :P Łatwo wyliczyć dla jakiego rezonatora są te ustawienia mimo iż go nie zapisałeś. Timer0 potrafi liczyć do 255, ale w przerwaniu programista ładuje już timer wartością 5 więc do odliczenia zostaje mu tylko 250... Timer ma włączony preskaler 256 czyli taktów musi być 250x256=64000 Procesory mają podane taktowanie w Hertz`ach czyli...
Powinieneś wiedzieć, że timery w systemach Windows nie działają szybciej niż co około 55ms. Użyj funkcji Sleep, aby uzyskać dokładność co do milisekundy. Jeżeli potrzebujesz jeszcze dokładniej, musisz się przerzucić na linuxa. Musisz to zrobić w osobnym wątku, bo przy funkcji Sleep(x) program zawiesza wykonanie na x milisekund.
Myślę, że sobie poradzę. Do obecnego projektu użyje zaproponowanego przez Ciebie rozsunięcia (jeden timer zlicza co dwie nieparzyste ms drugi tysiące ms, które zawsze są parzyste), jeśli chodzi o budowę normalnego zegarka to już zacząłem szukać materiałów na ten temat (m.in http://mikrokontrolery.blogspot.com/2011... ). EDIT:...
Generalnie port jest zatrzaskiem więc nie ma sensu się martwić czy dana informacja się zmieni czy nie do czasu kolejnego zapisu do portu :) To daje ci sytuację taką korzystną sytuację że nie musisz się martwić o to co rozbi procek w tym czasie. Pytanie jak bardzo zależy ci na dokładności odmierzenia czasu w przypadku zapalania diody na około 1s lub...
Witam zapomniałem jeszcze dodać że jak puszczę przycisk to ma się momentalnie rozłączyć przekaznik Czas reakcji (napięcia na wyjściu) na puszczenie przycisku (naciśniętego wcześniej powyżej 5s) powyższego układu jest rzędu pojedynczych milisekund i praktycznie może być zaniedbywalny w porównaniu z czasem zadziałania (rozłączenia styków) samego przekaźnika....
EDIT. http://www.youtube.com/watch?v=OcLVG1uZb... Po wielu godz. rozwiązałem wszystkie problemy. Poniżej umieszczam program napisany pod ATmege 328P(inaczej niż w temacie), gdyby ktoś budował coś podobnego i temat zamykam. [syntax=cpp] #define F_CPU 16000000uL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include...
Mam pytanie dotyczące języka Visual Basic. Czy istnieje jakiś obiekt, którego mógłbym użyć jak buzzera? Tak by generował jakiś piszczący dźwięk, tyle wystarczy. Kolejna sprawa to timer, chciałbym by odliczał milisekundy, ustawiłem Interval na 1 i wtedy oblicza z dokładnością do 1/100s. Czy da się jakoś polepszyć tę dokładność?
Witam Wiem, że ten problem był już niejednokrotnie poruszany na tym forum, aczkolwiek nigdzie nie znalazłem odpowiedzi na moje pytanie. Otóż mam w programie użyty Timer i utworzoną zmienną Stime w DB. Zadaje tą wartość z panelu HMI w polu I/O field w milisekundach. W jaki sposób można tą wartość przeskalować np. na sekundy, na minuty. Wiem, że można...
W jaki sposób objawia się problem? Tak poza tym, to mam kilka uwag: 1) program nie będzie zbyt dokładnie odmierzał czasu, może gubić całe 100 milisekundowe odcinki czasu, 2) sekundy, minuty, godziny będą trwać o jedną "mniejszą" jednostkę za krótko, tzn. np. minuta będzie trwać 59 sekund zamiast 60 sekund, 3) definicję częstotliwości kwarcu powinno...
Dodano po 19 Na marginesie dodam, że oryginalny synchronizator rejestru, bo chodzi tu o drukarską maszynę offsetową drukującą z roli na rolę a nie arkusze, pochodzący z lat siedemdziesiątych zbudowany był na tzw. ,,Logisterach" fmy AKG, czyli blokach logicznych na tranzystorach bipolarnych, kazda bramka lub przerzutnik osobno i wielkosci paczki papierosów....
Domyślam się, że chodzi o efekt nr 2 z tymi losowymi kolorkami. To chyba jeden z najprostszych efektów :) Co 20ms losowana jest nowa pozycja i nowy kolor. Dla większej ilości led warto przyspieszyć efekt (zmniejszyć wartość "speed"). [syntax=c] //pętla główna . . . if(!tspeed) //timer w przerwaniach z taktowaniem 1ms { tspeed = speed;//Prędkość efektu...
To jest tester wtryskiwaczy a nie sterownik silnika. Dlatego kąt wtrysku, jego początek i koniec nie ma znaczenia większego. Przy takim założeniu można użyć biblioteki TimerOne w celu uzyskania odpowiedniego sygnału PWM. Zgodnie z informacjami podanymi w pierwszym poście, inicjacja timer'a mogłaby wyglądać następująco: [syntax=c]#include <TimerOne.h>...
Problemy z dźwiękiem w emulatorze: Proszę wcisnąć klawisz F1, są tam pola "długość bufora" i "długość elementu". Proszę zwiększyć "długość bufora" z 7000 do na przykład 20000 i sprawdzić, czy dźwięk działa. Może być duże opóźnienie, ale proszę zwracać uwagę, czy kłopoty są podobnie często. Jeżeli nadal są kłopoty, to proszę zwiększyć "długość elementu"...
Jeśli są to zwykłe serwa modelarskie, to musisz wystawiać 6/8 impulsów 1..2ms co kilkanaście..kilkadziesiąt milisekund. Wystarczy do tego jeden timer odliczający cyklicznie czasy kolejnych kanałów. Obsługa przerwania polega na wpisaniu czas impulsu kolejnego kanału, skasowaniu wyjściu poprzedniego i ustawieniu wyjścia następnego kanału. To, że dla 8...
Bo to jest w sumie logiczne. Działanie urządzenia. Jego logiczna funkcjonalność jest zamknięta w ramach tej klasy. Obiekt tej klasy jest głównym obiektem i to jasne że jego konfiguracja i działanie musi się odbywać właśnie w main() A jak taka "giga klasa" ma się do przerwań, które jakby na to nie patrzeć jest nieodzowną częścią świata niskopoziomowego...
Dzięki wielkie, takiego czegoś właśnie potrzebowałem. Dodano po 10 A mam jeszcze jedno pytanie. Mam w programie użyty Timer i chciałbym podawać czas na HMI. Dodałem do DB zmienną czasową i deklaruję ją na panelu w I/O field. Niestety podaje czas w milisekundach. W jaki sposób mogę przeskalować aby móc podawać np. w minutach czy od razu w sekundach?
No a jeśli wykomentujesz funkcje odpowiedzialne za wciśnięcie klawisza 3, to jest ok? Generalnie to właśnie ku zmiennym lokalnym powinieneś iść (oczywiście z pominięciem flag). Czy intencją jest sprawdzanie każdego z punków z różną częstością? Tak, zmienne mogą przybierać zupełnie różne wartości w dosłownie milisekundach. Im szybciej - tym lepiej....
Ciekawy artykuł. Metoda ta nie znajdzie zastosowania w aplikacjach z większymi kondensatorami. Nikt nie będzie dobierał elektrolitów do generatora liczb losowych... Innym o wiele prostszym sposobem jest wykorzystanie RTC - licznik milisekund inkrementowany nawet jeśli układ jest wyłączony. Jeśli mikrokontroler nie posiada RTC może być to zwykły timer...
Witam Tym razem mym problemem jest odpowiednik delay_ms w ASM. Otóż sądzę, że jeśli Timer skonfiguruję na 1 ms, następnie w podprogramie w odpowiedniku pętli While w ASM porównam ilość milisekund, jakie upłynęły ze zmienną Czekaj to otrzymam taki odpowiednik. Czy moja idea jest słuszna ? Pozdrawiam
na formatkę dodajesz sobie ikonkę timer(nazwa tajmer_999). We wlaściwościach enable na false. w programie wstawiasz coś takiego: MSComm1.Output = " x11" tajmer_999.interval=2000 'w milisekundach enable tajmer_999=true do doevents loop until (tajmer_999.enable=false) MSComm1.Output = " y22" ... Private Sub tajmer_999_timer()...
"Nowe" czyli od Xmega i nowsze AVR mają mozliwość priorytetu przerwania. Poprzednie miały ustalony. Nie wiem jaki to AVR, ale jeśli ustawisz Timer i przerwanie od niego to jak będzie w przerwaniu to oczywiście zauważy potem flagę przerwania z USART, ale może być za późno, dlatego jeśli nie trzeba, to się przerwań od wszystkiego nie uruchamia. Rzadko...
Jeżeli nie jest wymagana idealna precyzja w częstotliwości to proponuje dość proste rozwiązanie. Wiadomo, że kontrolka typu timer nie jest wstanie "taktować" zbyt szybko. Ja w wiele razy wykorzystywałem pętle, której prędkość regulowałem testowaniem milisekund liczonych systemowo (w VB zwraca je funkcja Timer, nie mylić z kontrolką). Jestem przekonany,...
Pamiętaj także, że jako argument funkcji _delay_ms(xxx) mozesz podac liczbę milisekund max 255/freq., gdzie freq to częstot. kwarca. W Twoim przypadku jednym wywołaniem tej funkcji możesz opóźnić o max ok. 16ms...
Połykanie półokresów wprowadzi składową stałą. Trzeba sterować poprzez wycinanie okresów. Ponieważ okres przy 50 HZ to 20 milisekund trzeba liczyć okresy ( w bardziej zaawansowanych układach). Myślę, że w mniej skomplikowanych wystarczy zmieniać czas załączenia poprzez odmierzanie Timerem wielokrotności 20 milisekund.
Chciałbym wykonać układ, który sterowałby ilością powietrza przepuszczanego przez elektrozawór. Chcę wykonać trzy warianty czasowe (rzędu milisekund), a co za tym idzie trzy różne dawki powietrza, które można sobie opcjonalnie wybierać. Reakcja elektrozaworu zarówno przy otwarciu jak i zamknięciu musi być niemal natychmiastowa z racji tego że powietrze...
Mikrokontrolery to także jak najmniejsze zużycie prądu. Gdzie tylko to możliwe należy je usypiać. W Twoim przypadku możesz wykorzystać co najwyżej uśpienie 'cpu', ponieważ potrzebujesz działających 'timer'ów( przydatna tabela znajduje się w notach przy 'Power Management and Sleep Modes', np. 'atmega8' str.33) Zalecana przez twórców 'avr-libc' sekwencja...
Super dzieki, faktycznie teraz troszke lepiej :-) Dodano po 5 Udało się pójść o krok dalej. Część programu dotycząca licznika wygląda tak: [syntax=basic4gl] $regfile = "m16def.dat" $lib "I2C.LBX" '$lib "mcsbyte.lbx" $lib "Ds1307clock.lib" $crystal = 4000000 Config Timer2 = Timer , Prescale = 64 On Timer2 Irq100ms 'Load Timer2 Enable Timer2 Dim Licz100ms...
w zasadzie wystarczyła by mi komenda SET z możliwością ustawienia pinu na określony czas. Nie przypominam sobie jednak takowej... ktoś mnie naprowadzi? W momencie ustawienia pinu, wrzucasz też do zmiennej jakąś wartość, proporcjonalną do czasu trwania tegoż ustawienia. Jakiś Timer, na przykład Timer0, generuje cyklicznie przerwania (np. co kilka milisekund)...
Teoretycznie zwiększyć Prescale jednocześnie zmniejszając liczbę wpisywaną do Timera. Ale Prescale to max 1024, więc liczba zejdzie tylko do 8572. A 8572 też nie wejdzie do Timera. Więc może Prescale ustaw na 1024, a do Timera wpisuj 171 (mniej więcej 200 razy mniej) i w przerwaniu inkrementuj jakąś zmienną i jak doliczy do jakiejś wartości to dopiero...
Odpowiedź do pierwszego pytania: Jest taki komponent jak Timer. Znajduje się on na zakładce System. Posiada on funkcje OnTimer która jest wykonywana co pewien czas. Ten czas ustawiasz nadając zmiennej Interval wartość (w milisekundach). A co do trzeciego to jest funkcja Gettimer. Poczytaj w pomocy Delphi o tej funkcji dokładnie. Mam nadzieje że ci pomogłem.
miernik milisekund pomiar milisekund timer wieża
pobiera blokowa moduł inventia autocom adaptacja
sterownik zmywarki bosch wentylator radia android
Unitra Diora DSS 201: Wzmacniacz działa, radio nie Maksymalny prąd bazy tranzystora BD281 - szczegóły i obliczenia