To po prostu fototranzystor odbiorczy+dodatkowy, i sygnał z takiego "odbiornika" (np. post #29) wrzucasz na Timer skonfigurowany podobnie jak miernik częstotliwości. Ciebie interesuje jedynie, czy jest odbierany sygnał czy nie, czyli z odpowiednim bramkowaniem, jeśli nastąpi przepełnienie Timera to sygnał jest odbierany, jeśli nie nastąpiło to brak...
Z obecnym kodem dioda miga bardzo szybko. Nie mam pojęcia co robię źle, męczę się z tym od dłuższego czasu. Zamiast korzystać z dodatkowych narzędzi, które też trzeba rozumieć lepiej zajrzeć do noty układu, w której jest wyjaśnione jak to policzyć. Problem w tym, że przy taktowaniu 8 MHz, nawet jeśli użyjesz preskalera 1024, to ciągle w ciągu 1 s masz...
procesor pracuje z czestotliwościa 10Mhz czyli jeden okres trwa 1/10Mhz = 0,1us domyślam się ze jest on ustawiony z preskalerem równym 1 przepełnienie timera i wywołanie przerwania następuje gdy timer osiagnie 2^16=65536 czyli w tym przypadki 65536 - 64566 = 970 cykli 970 cykli * 0,1uS = 97us cała filozofia czas ten zalezy od czestotliwośći kwarcu,...
Witam. Ja detekcję robiłem prościej - sieć przez rezystor 47k / 3W podaję na mostek prostowniczy a wyjście mostka na diodę CNY17. Tranzystor transoptora podłączałem kolektorem do wejścia INT1 atmegi, a emiter do masy. Rezystor podciągający kolektor do +5V miał wartość 4,7k lecz uważam że równie dobrze można było go nie stosować. W programie korzystałem...
Wygląda, że masz podobny problem jaki ja miałem niedawno na procesorze STM32F030R8... Sytuacja u mnie wyglądała tak: Taktowanie APB 48MHz, TIM1->PSC = 480. Co daje takt 10uS. Timer konfigurowany "po rejestrach". Zliczam impulsy timerem i czekam aż się timer przepełni: TIM1->ARR = 150 (zgłoszenie przepełnienia co 150*10uS=1.5mS) Okazuje się, że timer...
Program z założenia jest dosyć prosty: jak sygnał na wejściu zmieni się z niskiego na wysoki to startujesz Timer0, a zatrzymujesz po zmianie sygnału na niski. Porównujesz "zawartość" Timera0 z wartościami zadanymi (obliczonymi) i odpowiednio ustawiasz dwa wyjścia, po jednym na przekaźnik. Zerujesz Timer i czekasz na kolejny impuls. I to w sumie tyle....
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...
Software PWM możesz zrobić na dowolnym pinie wyjściowym cyfrowym. Użyłbym timera 8-bitowego. Należy wtedy włączyć i obsłużyć dwa przerwania: 1. przepełnienie (przy przejściu licznika z wartości 255 na 0) - ustaw wtedy stan wysoki na wymarzonym pinie 2. przekroczenie wartości - ustaw wtedy stan niski na wymarzonym pinie Przykładowy kod: https://www.elektroda.pl/rtvforum/viewto...
Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
Klasa TwoWire (której obiektem jest Wire) też używa przerwań. Po wejściu do ISR przerwania są blokowane. Jeżeli chcesz, aby dane ISR nie blokowało innych przerwań można użyć ISR_NOBLOCK:[syntax=c]ISR(TIMER2_OVF_vec... ISR_NOBLOCK) { ... }[/syntax]Byłbym jednak z tym bardzo ostrożny, ponieważ może przydarzyć się przepełnienie stosu. https://www.nongnu.org/avr-libc/user-man...
I dobrze. Aby zmieniać wypełnienie musisz uciec się do pomocy przerwania ( to wada ,ale za to 1 timerem możesz mieć 4 zupełnie niezależne PWM). A działać może to mniej więcej tak (przykładowo): Timer0 ustawiasz na najmniejszy oczekiwany okres (rozdzielczość). Ustawiasz stan początkowy i jego przełączenie w EMR. MR ustawiasz na oczekiwaną długość stanu...
Chyba trochę uprościłeś. No dobra - warunek jest taki, że pomiędzy kolejnymi odczytami nie może upłynąć więcej niż max jeden pełny okres timera, może być max jedno przepełnienie (; Z testowaniem flagi przepełnienia można by niby wykombinować więcej, ale tu pojawiają się bardzo nieprzyjemne sytuacje brzegowe: - jeśli odczytujesz najpierw CNT a potem...
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
Usiadłem przy Atmedze328P i uruchomiłem SPWM dla Twojego przykładu. Zdefiniowałem następujące wyjścia sygnałów: - PD0 - sterowanie lewym dolnym MOSFETem mostka H - PD1 - sterowanie prawym dolnym MOSFETem mostka H - PD5 - sterowanie lewym górnym MOSFETem mostka H - PD6 - sterowanie prawym górnym MOSFETem mostka H Wyjścia PD5 i PD6 są niezmienialne, ze...
Za pomocą bitów CSn2 CSn1 CSn0 możesz ustalić podział częstotliwości kwarcu przez 1,8,64,256,1024. Aby uzyskać dokłądnie sekundę musisz ustawić podział na 8 lub 64. Wtedy do timera musisz wpisać odpowiednio 65536-62500 lub 65536-15625 (do rejestrów TCNTnH starsze 8 bitów i TCNTnL młodsze osiem bitów). Przepełnienie jest sygnalizowane flagą ToVn którą...
A moje pytanie, czy przy takim algorytmie, pomimo tego że nie wykorzystuje przerwań a na pinie mam częstotliwość którą chciałem procesor będzie miał jeszcze "czas" na po prostu realizację programu ? Czy tak skonfigurowany timer wykorzystuje procesor ? Widzę że timery to twoja słaba strona, więc napiszę ci troche ... Wszystkie timery w AVR mają możliwośc...
\ 1. Rozumiem, że ustawienie odpowiedniej częstotliwości da mi czas, który jest mi potrzebny? Tak, program z tego postu demonstruje rejestry i bity których odpowiednie ustawienie spowoduje daną częstotliwość przerwać timerów, a w konsekwencji odpowiednią częstotliwość wysyłania tekstu / migania diodą, jednak obecny ustawiony czas jest przykładowy, nawet...
Nie chce mi się tego testować, ale powinno działać.. // prędkość zegara w hercach #define F_CPU 16000000UL #include <avr/io.h> #include <avr/interrupt.h> typedef unsigned char u8; u8 led_ZmianDoKonca; SIGNAL(SIG_OUTPUT_COMPARE1A) { // czy trzeba dokonać aktualizacji stanu wyjść diod? if(led_ZmianDoKonca != 0) {...
To już zalezy czy zezwalacz na zagnieżdżanie przerwań. W momencie wejścia do procedury obsługi przerwania, global interrupt enable (czy jak się to nazywa w twoim przypadku) jest wyłączany. Oczywiście, w pierwszej linii obsługi przerwania możesz je odblokować, i wtedy koljne przerwanie może przerwać wykonywanie aktualnego. Niektóre kontrolery mają też...
Czyli nic nie zrozumiałeś z linkowanego programu. A szkoda... Zasada działania (podobnie jak dla wielu innych programów), to wykonywanie krytycznych sekcji w przerwaniach. Pętla główna może być zupełnie pusta. W programie głównym: 1. Zdefiniuj sobie 8 zmiennych (Parametr_x), które będą odpowiadały wartościom włączenia każdego z kanałów. Np. 100,47,198......
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....
http://obrazki.elektroda.pl/5431448900_1... 74HC74 bramkuje sygnał wejściowy tak aby jego impulsy nie były krótsze niż impulsy taktowania licznika 74HC590(już samo to wyfiltrowuje część krótkich szpilek) - blokuje to możliwość wyzwalania przerwania ICR1 z nadmierną częstotliwością. W układzie jak na rysunku 74HC590 zlicza gdy sygnał...
Nie czaję ;) Dodano po 10 A próbowałeś wszystko wrzucić do przerwania od Timera0? #pragma vector=TIMER0_A1_VECTOR __interrupt void Timer0_A1(void) { switch(TA0IV) { case 0x0A : // TA0OVF przepełnienie Timer0_state++; if (Timer0_state >= 12) { Timer0_state = 0; if(play_sample == 1) { one_byte...
Korzystałem z googla i czytałem dokumentacje. Chcę, żeby ktoś mi wytłumaczył co to dokładnie jest np Prescaler i jak mam go rozumieć w kontekście mojego projektu (tak, dokumentacja nie wyjaśniła mi tego dokładnie). Nie wiem jaką dokumentację czytałeś, le niewątpliwie nie tę, którą trzeba. Aby zrozumieć jak działa to wszystko trzeba przeczytać Reference...
no dobra tmod skałda się z dwóch czwórek następujących bitów: GATE,C/T,M1,M0 m1 i mo ustalają tryb które znasz. C/T określa funcję c/t=1 Counter czyli zlicza impulsy doprowadzone do wejścia T(0lub1 w zalezności który licznik) c/t=0 timer zlicza cykle maszynowe (właściwie to powinno być C/ (negacja) T, tylko nie wiem jak to napisać) :) :( Gate - bramkowanie...
Momentami odnoszę wrażenie, że nie wiesz co piszesz. Do pomiaru długości nie potrzebujesz dodatkowego timera oprócz tego t0. Wystarczy, że będziesz sprawdzał co określony czas, jeśli na wejściu będzie ten sam stan co poprzednio, to będziesz zwiększał pomocniczą zmienną. Jeśli stan się zmieni, to dopiero zapiszesz wartość do np.tablicy, żeby później...
https://obrazki.elektroda.pl/1761046600_... Pokażę tu jak uruchomić z Arduino czterocyfrowy wyświetlacz 7-segmentowy sterowany poprzez rejestr przesuwny 74HCT164 i cztery tranzystory BC546. Płytka z wyświetlaczem znów będzie odzyskana z elektrośmieci. Będzie to już kolejny temat, w którym uruchamiam wyświetlacz, gdyż omawiałem już...
Załóżmy: Zegar = 8MHz Preskaler = 64 Obliczenia: 1 / (8MHz / 64) przerwanie , a w nim zwiększać niezależny licznik (jakąś zmienną). Wtedy wynik: CZAS timer nie zdążył się przepełnić , to od startu do teraz minęło 8 x 120 = 960us...
Przepełnienie timera 2 nie ma znaczenia, po prostu skrócisz czas pomiaru do np. 1ms, bo po co mierzyć dłużej? Dla 5MHz będzie to nieistotny błąd, a zawsze możesz timer rozszerzyć - w przerwaniu przepełnienia timera2 wystarczy w tym celu inkrementować kolejną zmienną. Co do przebiegu - tak, musi mieć wartośćTTL kompatybilną z zasilaniem procesora. Jeśli...
Najmocniej przepraszam, że odświeżam i podłączam się pod temat, ale nie chce niepotrzebnie rozpoczynać nowego. Mam pytanie, które dotyczy Timera, chciałbym zmieniać wartość TIM_Period podczas pracy układu (podobnie jak można zmienić wartość Prescalera - aktualizując jego wartość). Niestety nie wiem jak dokonać aktualizacji TIM_Period. Chciałbym przy...
Dodajmy, że kiedfy pilot nie nadaje, odbiornik odbiera śmieci i wystawia na wyjściu przebieg prostokątny, któego zbocza są dużo gęstsze niż podczas odbioru danych, a każde zbiocze będzie w takim przypadku generowało przerwanie. Dlatrego lepiej jest odbierać w przerwaniu timera, a nie używać przerwań od zboczy. To jest oczywiste, ale.. odbiornik RF...
Potrzebuje wygenerować sygnał o długości 10 uS, aby rozpocząć cykl pomiaru odległości przez czujnik hc-sr04. W tym celu chciałem za pomocą timera stworzyć przepełnienie licznika po 1 uS i już dalej sobie ten sygnał stosownie wydłużyć do tych 10 uS, a w dalszej części mierzyć szerokość impulsu echa.
Można opalić timer w trybie CTC z preskalerem 1024 i ICR ustawić na 122. Wtedy osiągniesz przepełnienie zegara miej więcej z częstotliwością 128 Hz. W przerwaniu od timera ustawiać flagę, a w przerwaniu od ADC wysyłać dane tylko gdy flaga jest ustawiona, a następnie ją resetować. Inaczej: włączyć Auto Triggering dla ADC, jako źródło wyzwalania Compare...
sylwek2293 - jak masz to zrobić odpisał ci już inny sylwek :-) Najprostsza opcja to użycie timera w wersji 8 bit lub 16 bit. Gdy timer się przepełni to wygeneruje ci przerwanie, w tym przerwaniu odblokujesz pin który zbiera informacje. Aby w miare odmierzyć 2 sekundy to po każdym przerwaniu powinienes ręcznie załadowac timer jakąś wartością aby przepełnienie...
Włączanie i wyłączanie przerwań w pętli głównej lub jakiejś funkcji, czyli poza ISR może być stosowane w przypadku krytycznego kodu. Kod krytyczny to taki, który musi się wykonać ze ściśle określonymi zależnościami czasowymi. Tym samym wystąpienie przerwania w trakcie wykonywania tego kodu zakłóciłoby te zależności. Tutaj oczywiście nie ma to sensu....
Witam wszystkich, próbuję swoich sił z przerwaniem od przepełnienia timera na diodzie LED. Chciałbym najpierw spróbować chociażby zaświecić diodą gdy nastąpi przepełnienie timera. Głównie potrzebuję pomocy jak napisać procedurę obsługi przerwania...bo jej za bardzo nie rozumiem. Czy w procedurze muszę wyłączyć timer, zapalić diodę i ponownie go włączyć...
Timer 8-bitowy przepełnia się po zliczeniu do 256 a preskaler dzieli maksymalnie przez 1024 więc z prostego mnożenia wynika, że częstotliwość zegara, która spowoduje przepełnienie timera po 1 sekundzie to 1024x256=262144 Hz. Jeśli taktujesz mikrokontroler wyższą częstotliwością to na tym timerze nie zrobisz przerwania co 1 sekundę. Oczywiście timer...
A to trzeba korzystać z przerwania DMA? Chyba nie po to ono jest. Jest też inne przerwanie temu służące. SPI w F103 nie ma możliwości aby generować przerwanie po zakończeniu transmisji; jak DMA bitem TC. Chcesz reagować na każdy TXE? Chyba jednak nie. Do czego w takim razie jest przerwanie Transfer Complete od DMA, jeżeli nie do podjęcia akcji po zakończeniu...
Technicznie wygląda to tak: W każdym takcie zegara (np w 1/1000000 s - przy taktowaniu 1 MHz) zliczany jest jeden impuls. Timer 16-bitowy od 8-bitowego różni się tylko tym, że przepełnienie następuje po 65536 taktach a nie po 255. Ale żeby policzyć dokładnie jedną sekundę to musisz nadal odliczyć ten milion taktów. Jak widać zegar będzie leciał wiele...
Witam:) Ponieważ dopiero od niedawna uczę się programować w języku C ma problem. Nie wiem jak napisać program, który zapisuje mi bit po bicie dane w komórce pamięci. Dane są zczytywane z przetwornika A/C (kanał 0 i kanał 1). Jeżeli ich różnica jest mniejsza od wartości X do komórki pamięci powinna zapisać sie wartość 0, a jeśli większe od X to wartość...
Czy jest potrzebna jakaś kontrola (synchronizacja) czasu przełączania się Tx/Rx poszczególnych par urządzeń? Jeżeli protokół komunikacji jest dobrze "napisany" i zaimplementowany to nie trzeba nic synchronizować, jeżeli tak nie będzie, to będą problemy (np: odpowiedź od slave'a może nadejść za późno i wtedy jak master w tym czasie "zajmie" magistralę...
Obliczanie wartości Timera ma tylko wpływ na opóźnienie, jak sam powiedziałeś i tu masz rację. Ja też tak robię z tym że przepełnienie tego timera wywołuje mi przerwanie w którym wystawiam na porty kolejną wartość czyli kolejno: 1. wyłączam wszystkie anody (przeważnie stosuję takie wyświetlacze) 2. zmieniam wartość segmentów (dalej wszystkie anody są...
Wiec jakieś sposoby może z przykładami na AVRa..? Według autora linku którego podałeś najczęściej stosowaną metodą jest metoda z tego rysunku: http://www.auto-online.pl/serwis/poradni... i to jest chyba prawda. Metoda pierwsza i druga jest łatwa do pomiaru, wystarczy że bedziesz bramkował timer podczas otwarcia wtryskiwacza,...
Mam ustawiony timer na 4kHz [syntax=csharp]cli(); TCNT1 = 0; TCCR1 = 0; OCR1C = 249; // 4000 Hz (16000000/((249+1)*16)) OCR1A = OCR1C; TCCR1 |= (1 << CTC1); TCCR1 |= (1 << CS12) | (1 << CS10); TIMSK |= (1 << OCIE1A); sei();[/syntax] W przerwaniu timera machałem pinem [syntax=csharp]ISR(TIMER1_COMPA_vect) { //licznik timer1 przepełnienie...
nie mierz częstotliwości, tylko OKRES! V=o/t V - prędkość w m/s t - okres jaki upłynął pomiędzy dwoma następującymi po sobie impulsami z czujnika o - obwód koła w metrach Tak działają fabryczne liczniki, dzięki temu mierzą już bardzo małe prędkości. dodatkowo przejechany dystans otrzymasz dodając z każdym impulsem obwód koła do całkowitego dystansu...
W prosty sposób. Użyj 16-sto bitowego timera do generowania przerwania co określony czas, może on być krótszy od tego co napisałem. Drugiego timera użyj do zliczania impulsów, czas pierwszego timera dobież tak żeby przy maksymalnych obrotach nie nastąpiło przepełnienie drugiego timera. W przerwaniu przepisz wartość licznika do zmiennej X, porównującą...
Witam Poszukuję układu zewnętrznego Timera, który zawierał będzie minimum 2 timery i najlepiej gdy by dało się go konfigurować po magistrali I2c. Wymagane jest również aby mógł sygnalizować przepełnienie czy dopasowanie do wartości rejestru kontrolnego na osobnych nogach jako zmiana stanu umożliwiająca wywołanie przerwania w uP. Układ potrzebny ponieważ...
Skoro to silnik krokowy to nie dajesz mu zwykłego PWM, tylko na STEP musisz podaćokreśloną liczbę impulsów. W dodatku niezbyt szybko. Więc zamiast timera można wykorzystać przerwania, w których wysyłasz impuls i zmieniasz zmienną, ktora wskazuje ile impulsów wysłałeś. Można to też zrobić sprzętowo. Jeden timer generuje impulsy STEP, przez event system...
Możecie rzucić okiem na ten kod: [syntax=c] include <stdlib.h> #include <avr/io.h> #include <util/delay.h> # include <math.h> #include <avr/interrupt.h> #include "HD44780.h" int a; ISR(TIMER1_OVF_vect) { PORTB|=(1<<PB1); // podciągnięcie do VCC } int main(void) { TCCR1A |= (1<<COM1A1)|(1<<WGM11)|(1<...
Witajcie, mam problem z odczytem wartości z 2 kanałów ADC. Procesor to atmega32. Używam Timer0 żeby przełączać kanały, a na wyświetlaczu wyświeltane są 2 wartości, ale obydwie pokazują to samo- odczytywany jest tylko jeden kanał Inicjalizacja ADC [syntax=c]void ADC_init() { // ADC ADCSRA = (1<<ADEN) |(1<<ADPS0) | (1<<ADPS2) | (1<<ADSC);...
enkoder przepełnienie timera przepełnienie licznika przepełnienie pampersa
lampa aparacie sprawdzi płyta serwisant silnik zwolnić obrót
piekarnik temperatura serwis miele warszawa
Siemens EQ.6 seria 300 - błąd "brak ziaren kawy" Ekspres Siemens EQ6 300 - błąd po odkamienianiu