czy też muszę użyć trzech liczników? Procesor mam na płytce typu STM32F100RB. Nasuwa mi się pytanie czy w ogóle potrzebujesz to zrobić na timerach. A nie po prostu użyć przerwań od zboczy na pinach (EXTI). Typowo czas martwy G-M podawany jest rzędu 100µs, czyli nawet jak na wolny F100 jest to mnóstwo czasu i nie ma ryzyka zgubienia impulsów. Co...
napisz program dla poprzeniego ukladu powodujący wyświetalnie się na konsoli cyfry odpowiadającemu liczbie kliknięć guzika, to znaczy kliknięcie raz spowoduje wyświetlenie się cyfry 1, ponownie wciśnięcie wyświetli cyfrę 2, itd. Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Płytka Arduino: Duemilanove. - Poprzedni...
Panowie, na szybko zapytałme chatGPT, o kod do obslugi enkodera i zapalenie diody na 1 sekunde ale żeby nie gubic liczenia impulsow. Czy taki kod jest prawidlowy: // Deklaracje zmiennych volatile int impulsy = 0; // Licznik impulsów const int enkoderPinA = 2; // Pin A enkodera podłączony do pinu 2 na Arduino Nano const int enkoderPinB = 3; // Pin B...
Czy masz jakiś problem w kodzie aby zliczać krótsze odcinki czasu i po odczekaniu odpowiedniej liczby (tych mniejszych czasów ?!) podjąć jakąś akcję? Jaka dokładność pomiaru czasu jest Ci potrzebna? Bo jeśli powyżej kilkudziesięciu cykli uC to można to zrobić bez angażowania przerwań (jeśli masz już do czegoś zajęte). Np. poprzez zliczanie (i kasowanie)...
zmieniłem kod programu: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "hd44780.h" #include "stdlib.h" char Buffer[20]; int TCNT0_WART=0; volatile unsigned long imp_curr=0; volatile unsigned long imp_prev=0; uint32_t displ=0; int main(void) { //TCCR0 |=(1<<CS00)|(1<<CS01)|(1<...
Problem pochodzi od niemożliwości dokładnego zapisu ułamków nie będących potęgami liczby 2 (właściwie 1/2^x) np. dokładnie daje się zapisać liczbę 0.5; 0.25; 0.125 ... (oraz ich sumę). Problem może być rozwiązany przez dodanie pomocniczej (kosztem zwiększenia czasu wykonywania kodu) zmiennej o typie float lub double (lub const float/double), do której...
Mam taki pytanie... Jak można zliczyć liczbę naciśnięć przycisku? Chodzi mi o to ze w moim programie gdy nacisnę 1 raz przycisk zatrzymuje mi się odliczanie czasu (program stopera)... A nie wiem jak zrobić by za 2 przyciśnięciem uruchomic dalsze odliczanie....
Przepraszam za dłuższą nieobecność. Nie mając nic nowego (i mądrego) nie pisałem. Ale w międzyczasie polutowałem zestaw startowy, a ostatnio napisałem inny program, który umożliwia (w zamyśle) liczenie dokładniej częstotliwości dla "paczki" impulsów, tym razem około 500 Hz. Wiem, że to dosyć skomplikowany tok myślenia, pewnie można to zrobić prościej,...
Witam Mam problem ze złym zliczaniem impulsów podawanych z impulsatora. Zbudowałem impulsator z wykorzystaniem silnika krokowego wg tego projektu: http://www.elektroda.pl/rtvforum/topic18... Ogólna praca tego układu polega na wystawianiu stanu niskiego po wykryciu "kroku" silnika na pewien czas na jednym z dwóch wyjść (obroty lewe lub prawe)....
Witam mój program powinien działać tak, że najpierw oczekuje na impuls przy zboczu opadającym na Int0. Gdy go wykryje to wtedy uruchamia przerwanie zewnętrzne Int1 i zaczyna zliczać na nim impulsy. Problem polega na tym, że jeśli jeszcze nie zostało załączone przerwanie Int1, a pojawi się ileś razy niski poziom na tej nodze, to zmienna licznikowa ad_count...
Witam. Robię miernik częstotliwości na ATmega8 z wyświetlaniem na LCD HD44780 w trybie 4-bit (mam zrobiony prototyp). Opanowałem już wyświetlanie (z obsługą BF), ale teraz przystawiło mnie z pomiarem liczby impulsów zliczanych na wejściu T1 mikrokontrolera. Wynik co prawda jest wyświetlany, lecz jest on niestabilny w taki sposób, że skaczą 2 ostatnie...
Witam. Chciałem zrobić sterownik wzmacniacza audio na bazie kitu AVT2829. Szczególnie zależy mi na uczeniu się dowolnego pilota. Zrobiłem płytkę przystosowałem do niej program, użyłem większego procesora (atmega8) no i program działa ale strasznie ułomnie. Procedura zapamiętania kodów z pilota przebiega jak należy ale już samo działanie jest strasznie...
Zrobiłem sobie zegarek na PCF8583..... i sa nastepujace problemy....nie chce zapamientac ustawionej godziny ani daty....timer zapamientuje prawidlowo....wiec nie wiem o co biega...no i jest jeszcze jeden problem....mianowicie...na wyswietlaczu czasami pojawiaja sie kszaki...zamiast godziny..jak to zlikwidowac???? O to program Config Lcd = 16 * 2 Config...
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ć...
1. Nie używaj przypisań typu Rejestr=liczba. Używaj przesunięć bitowych i nazw bitów w rejestrach. 2. Ponadto co napisał (at)dondu - pamiętaj, że zliczając impulsy ze sporymi częstotliwościami musisz wziąć pod uwagę ilość instrukcji maszynowych, które procesor wykona od momentu zgłoszenia przerwania do zaprzestania zliczania impulsów/zapisania wyników.
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
Nie masz nigdzie obsługi przerwania: TIMER1_OVF_vect ......... INT0_vect liczba-- ...... W TIMER1_OVF_vect możesz choćby ustawić flagę. P.S. Drgania kontaktronu wygaszają się w czasie 100us. Przynajmniej tego który sprawdzam właśnie.
Proponuje oddzielić zliczanie czasu od wyświetlania, będzie czytelniej i dokładniej. Program główny niech zajmie się wyświetlaniem, a przerwanie tylko naliczaniem czasu. Następnie zmniejszyć ilość przerwań, poprzez ustawienie prescalera w rej. option, wpisując do niego 1 zmniejszasz liczbę przerwań dwukrotnie, przy 2 czterokrotnie, 3-ośmiokrotnie 4-szesnastokrotnie,...
1. Do wyznaczenia co ile następuje przepełnienie timera potrzeba znać taktowanie procesora. Dla kwarcu 12MHz timer zwiększany jest o 1 co 1us (= 12/12MHz). 2. Timer to licznik, który zlicza w górę. Wpisując liczbę do rejestrów tego licznika zlicza on od tej wpisanej wartości, czyli szybciej doliczy do maksymalnej wartości (65535) i "przekręci się" co...
272 to taka nieciekawa wartość do mnożenia. Ja zrobiłem tak: Przerwania z TIM0 i TIM1 TIM0 zlicza impulsy z wejścia zliczającego, i gdy się przepełni jest króciutkie przerwanie inkrementujące parę 3 rejestrów. TIM1 zgłasza przerwanie równiutko co pół sekundy. Na samym początku obsługi przerwania jest odczytywana wartość impulsów z TIM0, i jest on resetowany....
4. Podłączenie sygnału z wyjścia PWM do ADC1 aby ponownie spróbkować sygnał PWM A po co? Po to aby odczytać ile kroków wykonał silnik. Sygnał PWM niski wysoki niski to jeden krok na wejście STEP. I chce żeby pwm był jakoś ogarniczony. Aby silnik wykonał na przykład 20 kroków - nie więcej. Na ATMega możesz to zrobić tak jak ci napisał kol. piotrva....
jak masz drgania na stykach to nie ma to znaczenia, a jak wyżej pisałem, zamiast je eliminować programowo w przerwaniu lepiej zastosować rozwiązanie sprzętowe, a liczbę przyciśnięć liczyć timerem
mozna to rozwiazac na kilka sposobow... jeden z nich: to zalezy jak odmierzasz sekunde, jesli masz timer ustawiony np na 0,2 sekundy i w przerwaniu timera zliczasz liczbe przerwan, to mozesz skanowanie klawiatury wrzucic w obsługe przerwania, wtedy na kazdym przerwaniu bedzie to odczytywane jako jedno wcisniecie klawisz, wiec jesli masz timer na 0,2...
(at)tobiasz54 - nie zauważyłem, że w końcu dowiedzieliśmy się o jaki sterownik chodzi. W nocie piszą, że STEP ma mieć okres co najmniej 2 us, 1 us stan wysoki, 1us stan niski. Czyli od biedy można to zrobić w przerwaniu, ale równie dobrze (a nawet lepiej) przez PWM. Nie należy mylić czasu trwania impulsu STEP, z liczbą kroków na sekundę - ta będzie...
To proste: Aby odczekać sekundę to przy zegarze 1Mhz musisz odczekać 1 000 000 cykli. Możesz użyć do tego preskalera (1,8,64,256,1024). Jesli chcesz odmierzyć sekundę to musisz użyć preskalera 64 (256 i 1024 nie wchodzi w gre ponieważ jeśli podzielimy 1 000 000 przez te liczby to nie wychodzi liczba całkowita). I tak przy preskalerze 64 timer musi zliczyć...
Dzięki za sugestie. Właśnie najważniejsza rzecz, aby czujnik przestał dalej zliczać, w momencie wykrycia na fotokomórce, a procesor przetwarzał ta liczbę. Więc w przerwaniu mogę tylko pozostawić czujnik
Naucz się przerwań. Wykorzystaj Timer0 do generowania przerwania co np. 1s- jeśli ten czas Ci wystarczy. Czyli ustaw Timer0 jako timer. Ustaw Timer1 jako counter i zliczaj impulsy co 1s. W przerwaniu co 1s od Timer0 niech Timer1 zaczyna zliczać impulsy. I co 1s wyświetl liczbę impulsów i wyzeruj Timer1. I od początku. Całą koncepcję powinieneś zmienić.
Czego oczekuje NAZE Ci niestety nie powiem. Poszukaj informacji w manualu. Po wyłączeniu nadajnika dioda przy attiny powinna zgasnąć, bo brak PWM to brak PCINT, a tam jest załączana. Możesz dopisać symulację dodatkowych kanałów i sprawdzić, czy coś to pomoże. Dodaj sobie np. drugi output compare do tego licznika, który już masz. Jak zliczysz 6 wyłączeń...
Po pierwsze w tym twoim kodzie brakuje miejsca w którum ustawiasz starszy bit i młodszy bit przerwania i oczywiście początkowego stanu liczniki(od jakiej liczby na zliczaś, zlicza od 0 do 255- sutomatycznia ale możesz ustawić że ma zliczaś od 200 do 255) i wtedy przerwanie będzie wygenerowana albo co 255 us albo co 155us
Piszę w C program do atmegi. Zliczam przerwaniami liczbę wciśnięć przycisku, a następnie wyświetlam zawartość licznika na diodach led, ale chcę aby ta kolejność była odwrotna. Poniżej zamieszczam kawałek kodu, którym realizuję zliczanie w zakresie od 0-255. if bit_is_clear(PIND,PD0)//w tym ifie odbywa sie regulacja napiecia wy przetwornika c/a...
A nie pomyślałeś że kwarc to nie ma równo 8MHz tylko ma jakąś odchyłkę. Musisz to uwzględnić i sobie ustawić liczbę zliczanych impulsów. Jak odliczasz 125 to masz 1000 przerwań na sek (teoretycznie). W praktyce będzie to trochę mniej lub więcej. Zależy to jeszcze w jakimś stopniu od temperatury otoczenia.
Sumowanie 21 wartości jest niewygodne, zrób 4, 16, lub inną potęgę liczby dwa. Poza ty masz zsumować np. 16 wyników przetwarzania, czyli tam nie ma być żadne delay, tylko musisz zliczać określoną ilość przerwań ADC. Delay musi być , bo bez tego w ogóle nie działa mi wyświetlanie liczb.
Wiem że licznik działa ponieważ wypróbowałem jego działanie w nieco zmienionych kodach. Licznik nie jest zwiększany w przerwaniu tylko zmienna zliczająca przepełnienia. W przerwaniu nie są wykonywane żadne operacje na wyświetlaczu lcd - lcd_conversion jest funkcją conversji liczby int do tablicy. Próbowałem różnych kodów przykładowych i nic nie działa,...
Okej, wklejam zatem treść polecenia. "Napisać program, który po uruchomieniu konfiguruje licznik WDT w tryb Interrupt and System Reset Mode z czasem przepełnienia 1000 mikrosekund. Wykorzystać jeden z rejestrów ogólnego przeznaczenia do zliczania liczby wystąpień przerwań od WDT. Drugi z rejestrów wykorzystać do odczytania wartości z rejestru MCUSR,...
Potrzebuję odliczać czas z przedziału od 10ms do 99 godz. Zrobiłem to w taki sposób że ustawiony czas zamieniam na ms (liczba 4 bajtowa) i zliczam ilość przerwań od timera ustawonego na przerwanie 1ms. Wszystko fajnie tylko czas mi się rozjeżdza gdyż dokladność kwarcu jest ok 1%. Czy można jakoś zwiększyć stabilność wewnętrznego kwarcu (ATmega8)? Jaki...
W tym przykładzie z event program zajmuje się swoimi sprawami, a w przerwaniu odczytuje znaki przylatujące z UART, jak wykryje znak specjalny NL/CR (wybierz sobie co tam wolisz) to zaczyna zajmować się tekstem, kopiuje sobie na bok, bo dane mogą już lecieć kolejne, decyduje czy to było polecenie nowych obliczeń, czy tekst mający być liczbą i dalej to...
Zobacz ten temat od tego numeru postu http://www.elektroda.pl/rtvforum/viewtop... ..pomógł tam kondensatorek ;) Jednak wykorzystanie INTx do zliczania kiepsko się sprawdza bo Twój mikrokontroler ciągle będzie przerywał pracę i dużo więcej nie zrobi.. Masz w mikrokontrolerze wejścia Timerów które potrafią zliczać takie impulsy...
Witam mam taki problem jak zrobić generator impulsów (LAD) który ma wysyłać te impulsy do sterownika silnika krokowego. Oraz żeby generator ten zliczał dalej w sytuacji przerwania liczenie (tutaj chodzi o przekroczenie barier bezpieczeństwa). Liczba impulsów 130 impulsów o 8 sekund. Jak za to się zabrać . Wiem ze trzeba to zrobić na dwóch timerach chyba...
W necie można odnaleźć kilka bibliotek dla DS1302 i AVR, dla przykładu: https://github.com/naquad/AVR-DS1302 https://gist.github.com/cosard/4135891 http://pandafruits.com/mega_avr/mega_avr... Dzięki za biblioteki ;) ale tak teraz sobie pomyślałem że mi w sumie wcale nie potrzebny ten RTC, tylko wystarczy mi licznik mikroprocesora. Nie zależy mi...
Ad1. Jeśli chodzi o wersję z ATmegą328 i DS3231, czas jest odmierzany wewnątrz procesora i aktualizowany co 30 minut z układu RTC. Ponieważ procesor jest taktowany z wewnętrznego oscylatora RC taka dokładność odmierzania czasu jest dość podła. W związku z tym podczas każdej aktualizacji dokonywana jest kalibracja (dokładnie jest to zmiana zakresu pracy...
Dokładnie tak jak pisze Fredy. Z pewnością po zastosowaniu jego rad twój problem zostanie zlikwidowany. Nie mniej jednak ogólna strategia programowania mikrokontrolerów (mikroprocesorów) mówi, że program obsługi przerwania powinien wykonać się maksymalnie szybko. Jeżeli twój program nie robi wiele więcej Twoje rozwiązanie z poprawkami zaproponowanymi...
(at)kaczakat float nie jest ok I to z zuoelnie innego powodu niz opisales. W float nie da sie reprezentowac kazdej liczby rzeczywistej, w efekcie mamy bledy reprezentacji. W tym przypadku jest klopot, bo the bledy sie akulumuja przy kolejnych przerwaniach. W efekcie wynik moze byc tylko luzno zwiazany z rzeczywistoscia. Dlatego nalezy Po prostu zliczac...
Dzięki kolego Kubbaz za materiały dotyczące przerwań. Chciałem napisać program który by liczył małe częstotliwości (tzn. licznik by zliczał określoną liczbę impulsów, a timer pokazywał by czas w którym licznik zliczył te impulsy), jednak coś mi nie idzie. Jak by miał ktoś jakieś materiały dotyczące liczników i timerów w Atmega8 lub jakiś podobny program...
Po pierwsze jakie F będziesz miał z tego enkodera bo to ci determinuje ile czasu będziesz miał w przerwaniu. Dwa skoro będą ciągle impulsy step dir i z enkodera to jaka jest szansa rozjazdu ich na > niż np 8 czy 16 bit?, przecież zawsze możesz zmniejszyć F od step dir lub najlepiej wysyłać całą liczbę (np po rs-ie) którą ładujesz do licznika który wtedy...
Mogę też robić to samo przy użyciu OE rejestrów, wtedy linijkę mogę PWMować bez przeróbek... chyba. 8,8mA? Na każde wyjście czy sumarycznie? Nie widzę tego w dokumentacji :| Zamierzałem to zasilić 5V albo 10V, jaka wtedy będzie maksymalna obciążalność? 17,5mA na wyjście dla 5V? (P=U*I) Prędkość i obroty będą zliczać niezależne liczniki (dwa przerwania),...
Witam Chciałem podpiąć klawiaturę do mikrokontrolera LPC2148, po wielu nie udanych próbach doszedłem do momentu kiedy linię zegarowa podpinam do przerwania zewnętrznego reagującego na zbocze opadające a następnie zliczyć ich liczbą po wciśnięciu klawisza z podpiętej klawiatury. Zgodnie z przebiegami powinno ich być 11 a mi zlicza tylko jedno i nie wiem...
Jak w czystym C (AVR GCC) wyglądała by funkcja millis() ?, a może pokaż też 2 podejście (listing), gdzie milisekundy to zmienna globalna np millis. Wykorzystaj timer do przerwać dostępny na każdym AVR. W AVR GCC, funkcja podobna do `millis()` z Arduino, która zwraca liczbę milisekund od startu programu, może być zaimplementowana z wykorzystaniem timera...
Aha, nie przyszło by mi do głowy, że bity mogą być o różnej długości, ale teraz taka analiza ułatwia dużo napisanie programu. Po tym starcie każde zbocze opadające załączy wewnętrzny timer i przy kolejnych przerwaniach na zboczu opadającym wartość timera będzie porównywana z jakąś liczbą. Jeżeli jest mniejsza to 0, a jeżeli dłuższa to 1. Oczywiście...
Czy pomógł by mi ktoś napisac program na PC'ta zliczający impulsy wciągu 60, 30 i 15 sekund i przyporządkujący liczbę tych impulsów do odpowiedniej grupy. Na ekranie monitora ma być wyswietlana ta liczba i komunikat czy jest ona za duża/prawidłowa/za mała. O programowaniu nie mam zieonego pojęcia (ani innego kolorowego :D). Pytałem się jednego znajomego...
No Dobra program juz prawie napisałem i głowiłem sie nad wersja ze zmiennym PWM+f... ale z tego co mi odpisałes to wnioskuję ze coś tu mi nie gra... A nie możnaby programowo realizować ten restart co 80ms? Moze napisz dokładniej co to ma być a coś doradzimy :) Pozdro No wlasnie o to chodziło by nie restartorwać tego zewnetrznie bo chyba prosciej zaimplementowac...
hmm... a istnieje jakaś inna możliwość, z LPT będzie problem bo go nie posiadam? Ale dziękuję za linka, ściągłem i też postaram się gdzieś dorwać LPT. Próbowałem wysyłać dane na wyświetlacz LCD ale to dawało mi nie znaczącą liczbę odczytaną jako liczba z liczników w dwóch kolejnych przerwaniach. Ale skąd mam wiedzieć że licznik dobrze zlicza tzn co...
piotrva rozumiem, że mówisz o obsłudze w timerze? Zliczać ilość przerwań, tak samo jak w liczniku powyżej? Jak duża ma być ta liczba, o której mówisz? Cykli timera jest 150 na sekunde. Czas drgania styku(wg. deklaracji producenta) to około 20us. Toż to najgorsza możliwa rzecz - opóźnienie w przerwaniu! To zbrodnia dla programu! Wiem, że tak się nie...
zliczanie ilości przerwań kalkulator przerwań wykonywanie przerwań
zmiana licencja android schemat włącznika halogenów sensory termowizyjne
booster rozruchowy julia stero
Rozrusznik w Stiga Estate 3084 nie kręci - przyczyny i rozwiązania Peugeot 208 - Niedziałające wskazówki zegarów: przyczyny i rozwiązania