Na pewno czujnik Halla prościej. Ale nie to, że kontaktronu nie da się użyć, zwłaszcza przy dużych kołach. Zakładając koło 26" i Vmax=55km/h daje nam to ok. 8 obr/s czyli 125ms. Drgania kontaktronu raczej nie trwają 100ms, czyli niewielki zapas jest, wystarczy odpowiednio podejść. Po wykryciu zwarcia kontaktronu trzeba odczekać ok 80-100ms i upewnić...
czy jesteś w stanie zmodyfikować kod by nowa liczba kliknięć zastępowała poprzednią zamiast wyświetlania się liczb w ciągu? Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Płytka Arduino: Duemilanove. - Poprzedni układ: - Zewnętrzna dioda LED podłączona do pinu PWM (np. pin 9 ). - Przycisk podłączony do pinu cyfrowego...
Po pierwsze pochwal się jakimś listingiem z tego co napisałeś i nie działa , gdzieś mi się już przewinął przed oczami taki projekt na elektrodzie i jak pamiętam autor również próbował wymusić napisanie programu . Między szukaniem pomocy a wyręczaniem się innymi jest cienka granica . Tym bardziej zastanawia mnie to ,że cały układ można przetestować na...
Witam wszystkich, proszę o pomoc w rozwiązaniu problemu w kodzie w języku C ale ze wstawką asemblerową. Poniżej zamieszczam kod. [syntax=c]/* * main.c * * Created: 2/14/2022 1:11:10 PM * Author: Maciej */ #include <xc.h> #include <avr/wdt.h> #include <avr/interrupt.h> #include <util/delay.h> #define WDT_ENABLE ISR(WDT_vect)//przerwanie...
Witam Robię na arduino prosty tester uSwicha który, wyzwala cewkę która, załącza i wyłancza przełącznik. W programie wykonuje sprawdzanie czy ilość powtórzeń zgadza się z odczytaną ilością z przełącznika. Mój problem polega na tym, że błędnie odczytuje mi ilości zmian stanów. W programie wykorzystuje przerwanie aby wykryć zmianę zbocza, gdy wykonałem...
Witam szanownych kolegów. Piszę z prośbą o pomoc w następującym problemie. Sprawa dotyczy mikrokontrolera Atmega32, konkretnie zewnętrznych przerwań INT0 i INT1. Wspomniany mikrokontroler steruje pracą większego urządzenia pomiarowego, którego jednym z zadań jest zliczanie impulsów pochodzących z zewnętrznego urządzenia. Impulsy są zbliżone do prostokątnych...
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....
Jako że prosty przykład, wiele tu informacji nie trzeba wiedzieć. Jedynie przerwaniu od INT0, oraz ustawienie timerta0 w tryb CTC (do stworzenia timera programowego). Reszta to tylko pętla główna w której jest sprawdzany warunek co około jedną sekundę zgodnie z założeniem:[syntax=c]#include <avr/io.h> #include <avr/interrupt.h> // Atmega16...
[syntax=c]#include <avr/io.h> // Biblioteka wejść/wyjść #include <avr/interrupt.h> // Biblioteka przerwań #include <rc5.h> // Biblioteka ustawień RC5 #include <avr/eeprom.h> // Biblioteka pamięci EEPROM ////////////////////////////////////////... // // // PROGRAM DEKODOWANIA SYGNAŁU RC5 dla AVR // // ATtiny2313 // // //...
Czysto hobbystycznie zeszłej nocy postanowiłem się zająć tym tematem. 3. Tu trzeba użyć timera jako podstawy czasu do sprawdzania cyklicznie poziom sygnału, kodowanie jest w czasie, początek sygnału jest synchronizacją. Bity mają dokładnie ustaloną długość, więc można byłoby timer ustawić na czas trwania bitu i sprawdzać w poszczególnych odcinkach czasu....
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Mozna to zrealizować na dwa sposoby: 1. Za pomocą przerwania zewnętrznego INTx zliczać ilość impulsów. Podobny temat już jest: 2 Zliczać impulsy na wejściu ICR Podobny temat masz poniżej: http://www.elektroda.pl/rtvforum/topic18...
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.
Zegar komputera typu PC jest taktowany przerwaniem zegarowym. Aby uzyskać dokładniejszy pomiar czasu należy przejąć przerwanie zegarowe, oraz zwiększyć częstotliwość jego generowania. Jeżeli przerwanie zegarowe będzie sprawdzało stan portu równoległego, to zliczając ilość przerwań pomiędzy kolejnymi impulsami z czujnika można będzie dość dokładnie określić...
Zawsze zastanawiało mnie jak to działa, że tarcza wie którą cyfrę wybraliśmy. Wyjaśni to ktoś? Zliczasz po prostu ilość przerwań.
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...
Kawałek kodu, który powinien Ci pomóc z odmierzaniem czasu: Odmierz_1s: Load Timer1 = 12500 Incr Licz_10ms If Licz_10ms = 10 Then Licz_10ms = 0 End If Return Zlicz: Incr Czestotliwosc Return Odmierza 1s, a potem zlicza ilość przerwań na timer0. Przerób na swój kwarc.
Co myślicie o tym, aby zbudować miernik częstotliwości na mikrokontrolerze w ten sposób: skorzystać z przerwania INT0 lub INT1 i zliczać ilość przerwań w ciągu sekundy i dane przesyłać za pomocą UART do kompa. Jaką dokładność bym uzyskał i jaką maksymalną częstotliwość takiego pomoaru przy kwarcu 16MHz (mam na myśli uC Mega8535). Proszę o Wasze opinie...
tzn że kod który podałem wyżej jest zły? do puki nie używam transmisji rs232 wszystko śmiga jak ta lala. Włączam timer gdy przepełni się on 1600 razy mam 1 sekundę, w przerwaniach zewnętrznych zliczam ilość przerwań oraz czas między nimi. Mam problem jedynie podczas transmisji. Jest jeszcze jedne problem mianowicie Jeżeli w main wpisze coś takiego while(1)...
Ciekawe jest to widać w twoim profilu (Pomógł: 79927) :P ale do rzeczy. Według mnie coś takiego można zrealizować w następujący sposób: - konfigurujesz przerwanie zewnętrzne żeby było wyzwalane przerwanie zboczem opadającym, rosnącym etc. - w tym przerwaniu uruchamiasz timer który zlicza sobie impulsy - jeżeli zliczy określoną ilość impulsów to wykonujesz...
Sprawa z odmierzaniem czasu jest teoretycznie prosta ale trzeba brać pod uwagę kilka spraw. PO pierwsze musisz sobie wybrać jakiś timer i zliczać jego przepełnienia w przerwaniu. Musisz to robić w przerwaniu żeby odmierzany czas był zawsze taki sam. Zliczasz ilość tych przerwań do obliczonej wartości w zależności od częstotliwości zegara i dzielnika...
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.
Licząc, że jeden impuls trwa dokładnie 1 us i przy timerze zliczającym do 10 (startuje od 246 - Timer0) to po przekręceniu się timera uzyskujemy czas 10us. Przy długości impulsów w podanym zakresie timer powinien się przekręcić od 100 do 200 razy. Niestety program zlicza mi od 12 do 24 przekręceń tylko. Gdzie robię błąd ??? Nieprawidłowe obliczenia...
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...
Musisz przemyśleć algorytm działania programu. Po pierwsze te mrugające diody zrób na przerwaniach z jakiegoś timera. Ustaw przerwanie tak żeby występowało kilka razy na sekundę i zliczaj ilość przerwań do 2 sekund i raz zapalaj raz gaś to bardzo proste do zrobienia. Co do pozostałych to attiny ma 4 kanały PWM a z tego co zrozumiałem to wystarczą ci...
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...
Witam! Wydaje mi się że prowadzącemu chodzi o zbudowanie jakiegos prostego enkodera (np. co obrót będzie podawał sygnał 0 na INT0 lub INT1, lub wykorzystać transoptor i jakąś zębatkę do przerywania diody nadawczej - to chyba najprostsze jakie mi przychodzą). Potem piszesz program zliczający impulsy w przerwaniu (INT0,INT1) i w tym samym czasie puszczasz...
Po co podajesz PWM na wejście sterownika silnika - na jego wejściu powinien być przebieg, którego ilość zboczy (opadających lub narastających w zależności od sterownika) odpowiada ilości kroków do wykonania w zadanym innymi wejściami kierunku. Zatem nie generuj tych przebiegów za pomocą PWM, ale za pomocą timera. Częstotliwość przerwań będzie wtedy...
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,...
witam wszystkich. pracuję nad zegarem, który napędzany jest licznikiem z autoprzeładowaniem dającym przerwania co 250us. na wejściu INT0 mam dostępny wzorcowy sygnał 1PPS. sygnał ten chcę wykorzystać do określania przez zegar swojego błędu i dokonywania korekty wartości którą przeładowywany jest licznik. zastanawiam się jak zabrać się za temat. mam...
Jeśli nie licznik użyłbym przerwań. Jednak licznik jest to tego najlepszy. Można nawet hardwarowy zliczać ilość impulsów w odpowiednim okresie. Albo n liczników które zatrzymasz w momencie przerwania. Zliczanie zwykłymi wejsciami może doprowadzić do utraty impulsów.
Witam . Zadanie jest trywialne . Potrzebujesz 3 zmiennych i dwóch przerwań zewnętrznych plus przerwanie do wyświetlacza. Po starcie procka ustawiasz wartość jednej z zmiennych która będzie równa ilości przerwań wyświetlacza w czasie 10 sekund . Podczas aktywacji przerwania od T1 aktywujesz przerwania od INT0 i INT1 . INT0 zwiększa jedną zmienną a INT1...
No właśnie, Możesz skopiować funkcje którą podałem ci w poprzednim wątku, ta z przerwania odczytująca stan przycisków. Dodatkowo uzbroić ją jak wyżej (at)excray napisał w odmierzanie czasu naciśnięcia. Wówczas odpowiednio ustawiasz kod klawiatury. Algorytm mniej więcej... Zaznaczam w funkcji który guzik nacisnieto, w kolejnych przerwaniach zliczamy...
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...
Ogromne dzięki za zaangażowanie! Jeżeli chodzi o schemat, to nie ma nic szczególnego. Wyświetlacz na I2C (A4, A5), DHT-11 podłączony do D2 + zasilania i masy. Do D3 kontaktron i opornik 1k. Druga nóżka opornika do GND (żeby wejście nie łapało zakłóceń), druga nóżka kontaktronu do D12, na który podaję stan wysoki i tym samym "zasilam go". Kontaktron...
Witam. Potrzebuje w przerwaniu zmienić wartość zmiennej, które zlicza ilość przepełnień licznika. Zmienna będzie używana w przerwaniu. Czy mogę zmienić wartość zmiennej w pętli programu głównego, czy muszę to wykonać bezpośrednio w przerwaniu. Czy jeśli będę zmieniał wartość zmiennej w pętli programu głównego to czy na ten czas muszę wyłączyć obsługę...
CPI r24, 4BRSH wylacz_usypianie...wylacz_usypianie:CLI.... Kod: avrasm ] CPI r24, 4BRSH wylacz_usypianie...wylacz_usypianie:CLI.... Powiem szczerze, że nie bardzo rozumiem. Obecny kod wygląda w ten sposób: [syntax=c]/* * main.c * * Created: 2/14/2022 1:11:10 PM * Author: Maciej */ #include <xc.h> #include <avr/wdt.h> #include <avr/interrupt.h>...
tak zgoda ale chcę liczyć ilość bajtów danej transmisji. Ramki mają od 2 do 6 bajtów. Poprzednio projekt ten zrealizowałem na Atmedze, W przerwaniach od SPI zliczałem ilość bajtów natomiast przerwanie od zmiany stanu linii SS zerowało licznik bajtów.
Po nazwie i użyciu domyślam się że to jakieś liczniki (np. ile razy funkcja była wywływana) ale jak z tych zmiennych się korzysta? Dobrze ci się zdaje. To liczniki wywołań danego przerwania. Te funkcje obsługi przerwania nie są statyczne, nic nie zwracają. Czy te cytowane zmienne to są zmienne globalne i można się do nich odność w całym projekcie?...
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...
Wszystkie, czyli 3. Kłopot stanowi jednak fakt, że Timer0 i Timer2 są 8 bitowe zatem w razie dłuższych czasów trzeba je "wydłużać" programowo zliczając odpowiednią ilość generowanych przez nie przerwań. 60s bezpośrednio się nimi nie odliczy tak jak 16 bitowym Timerem1.
A dlaczego nie zastosować sposobu arturt134? Odmierzasz 15 sekund i sprawdzasz ile jest impulsów (wywołanych przerwaniem). Problem ich dużej ilości rozwiążesz jeśli w przerwaniu ilość impulsów będzie zliczane w paru bajtach zamiast w jednym; np. od 0 do 100 w bajcie A po dodaniu impulsu sprawdzasz czy jest sto jeśli jest to A=0 a inkrementujesz bajt...
No to chyba teraz zrozumiałem to o co pytałem. W programie musi być procedura obsługi przerwania TIMER1_OVF_vect czyli przerwanie od przepełnienia. Jeżeli TIMER1 osiągnie wartość 65535 to wtedy jest wywoływane to przerwanie w którym jest inkrementowana zmienna zliczająca przerwania. I mając wartość ICR1 i ilość przepełnień TIMERA1 łatwo już policzyć...
Czytam i sam się pogubiłem hehe . Czy tu chodzi o względne przesunięcie (tmf) czy bezwzględne (satanistik). Parę miesięcy temu robiłem sterowanie PID dla servo Xmega w bascom . [youtube]https://www.youtube.com/watch?v... Nie obyło się bez problemu , który polegał na zliczaniu bezwzględnym więcej niż 65535 impulsów . Mój wpis z innego...
Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
Musisz "zmierzyć" 3 impulsy. Nigdy nie wiesz w którym miejscu będzie wałek podczas włączenia urządzenia. Po 3 impulsie będziesz wiedział w którą stronę się kręci. Co do pomiaru prędkości ja wykorzystał bym timer. Timer ustawić tak aby zerował się np co 1sekundę. Czujnik A podpiąć pod przerwanie i w nim zliczać ilość impulsów. W przerwaniu timera sprawdzasz...
Po upływie 655.35ms następuje przepełnienie licznika, w takiej sytuacji trzeba utworzyć zmienną która będzie zliczać ilość przepełnień. Czyli.......... W takiej sytuacji (.."time out"; => Err=1) - trzeba przyjąc że instrukcja została zakończona i processor już nie powróci do jej kontynuacji, a raczej przystąpi do kolejnej instrukcji przewidzianej programem....
mam procesor mega8 na 4MHz do tego 3 wyswietlacze multipleksowane na przerwaniu timer0 (okolo 66Hz na jeden wyswietlacz) i niestety sa bledy w transmisji z dsa i to srednio co 10 odczytow Bez CRC uklad wariuje Dla unikniecia nieszczesnego polecenia wait 1 zliczam w przerwaniu ilosc przerwan i co 200 ustawiam pomocniczy bit ktory powoduje w petli glownej...
problem w tym że masz po sobie 2 pętle for rozjaśniające ledy w głównej pętli programu. Najpierw wykonuje się pierwsza potem druga. Druga rzecz to stosowanie jako opóźnienia funkcji waitms która zatrzymuje prace mikrokontrolera. Proponuje użyć timera który będzie generował przerwanie po przepełnieniu licznika np co 20ms. Potem jeżeli drzwi sa otwarte...
Rozumiem, że nie chodzi o zliczanie impulsów w danej jednostce czasu tylko ogólnie ilość aż do wykasowania przez obsługującego lub aż do przepełnienia zmiennej. Jest to bardzo proste przy wykorzystaniu przerwania INTx Po porostu w obsłudze przerwania dodajesz 1 do zmiennej która przechowuje ilość tych impulsów.
Problem może nie rozwiązany całkowicie, ale sprowadzony do akceptowalnego poziomu. Dodałem pomiędzy GND a wyjście cyfrowe czujnika kondensatory ceramiczne o łącznej pojemności ok 200nF. Wcześniej wspominałem, że zliczając impulsy z wyjścia cyfrowego z INT0 miałem zawsze dwa razy więcej na liczniku. Teraz zawsze jest tyle samo, przy dość szybkiej zmianie...
zliczanie ilości zliczanie liczby przerwań zliczanie ilości znaków
zmywarka wymiana grzałki whirlpool wymiana zawieszenie górnego głośne wiatraki
regulator obrót komutatorowy radio rockford fosgate
Lewy klawisz myszy nie działa - zamienniki mouclass.sys i mouhid.sys Piszczenie przetwornicy w wieży audio mimo prawidłowych napięć