Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
Której? PLL czy tej z dwoma Timerami? Ta z PLL jest bardzo zamotana (albo inaczej - zamotana nie jest ale wymaga dużej ingerencji procesora. A to bardzo spowalnia program główny więc trzeba to napisać a assemblerze i własnie to powoduje zamotanie). Podam więc ten drugi sposób: $regfile = "M8def.dat" $crystal = 8000000 $hwstack = 64 '---------------------------------------...
http://obrazki.elektroda.net/10_12666033... Witam, Ponoć każdy prawdziwy mężczyzna musi spłodzić syna, posadzić drzewo oraz ... zbudować dom albo robota. Ja wybrałem to drugie - spłodziłem robota dla syna ;) Inny cel to zdalna obserwacja moich 2 kotów w mieszkaniu w najróżniejszych sytuacjach i filmowanie ich nawet gdy się tego nie spodziewają ;)...
https://obrazki.elektroda.pl/3227491500_... https://filmy.elektroda.pl/98_1514068986... Właściwie mamy już Święta i świąteczny konkurs w DIY. A w nim sporo konstrukcji opartych na programowalnych diodach WS2812B. Stąd też, aby ułatwić innym realizację świątecznych projektów oświetleniowych, postanowiłem podzielić się rozwiązaniem...
Problem z timerem jest taki, że Match0 jest przyporządkowany do pinu Tx.0, Match1 do pinu Tx.1 itd., więc za jeden pin odpowiada tylko jeden rejestr porównania i jeden typ "akcji". Do generowania PWM w LPC zwykle jest jeden specjalny timer oznaczony PWM. Jeszcze jedną alternatywną metodą byłoby ustawienie Match na 50% okresu timera i w przerwaniu przestawianie...
Zafiksowany Kamyczku. Wykrycie naciśnięcia przecisku w przerwaniu timera - to 2 linijki kodu w C, wykonywane 50 razy na sekundę. Ty proponujesz rozwiązanie wymagające przerwania od przycisku, w którym to przerwaniu należy zablokować to przerwanie, ustawić znacznik/timer programowy, a następnie w przerwaniu timera odblokować przerwanie przycisku. Mamy...
Lepsza opcja to timery programowe https://github.com/adamdunkels/uip/blob/...
A ja z innej beczki... Sposób w jaki zrobiłeś miganie (program) kiedyś się na Tobie zemści ;) . Wystaczy, że coś na chwilę przyblokuje pętle główną i ustawiony czas migania pójdzie w maliny... Timery programowe do takich celów robi się troszkę inaczej - wybrałeś najgorszą z możliwych metodę.
Chodziło mi o uart jednej atemgi( RXD1 i TXD1 ) i uart drugiej atmegi( RXD2 i TXD2 ) Napisałeś, że Obsługiwał będę w programie docelowym: -UART -Timery Programowe + PWM (Na jednym timerze"2") -3xserva -Czujnik HC-SR04 na timerze ICP Do reszty nie są potrzebne przerwania i timery. Jeśli te zadania rozbijesz na dwa AVR a komunikacja pomiędzy nimi jest...
Użyłem jednego timera, żeby obsłużyć PWM i Timery Programowe [syntax=c] #include <avr/io.h> #include <avr/pgmspace.h> #include <avr/interrupt.h> #include <util/delay.h> #define LED_R (1<<PB5) #define LED_G (1<<PA1) #define LED_B (1<<PA2) volatile uint8_t pwmR, pwmG, pwmB; volatile uint16_t Timer1; void soft_pwm_Timer(...
Czasami trzeba przeczekać na coś ileś tam czasu ale po co marnować go w delay? Jakie mamy alternatywy i jak z nich korzystać? Timery, przy czym mogą to być programowe timery zrealizowane w przerwaniu np 1ms. kolejna sprawa to "podział" czasu procesora na dwa zadania. Jak sensownie to wykonywać? Oczywiście nie chcę tu mieszać do tego RTOS'a. Najłatwiej...
Kod jest prosty, bo siedze nad nim od dawna i już wyrzuciłem wszystko co było zbędne. Zależy mi na tym by na wyświetlaczu pojawił się napis "Timer0 OK". [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "LCD/lcd44780.h" void timer_start (void); volatile uint16_t...
...NIGDY nie robi się multipleksowania na tym samym Timerze , który jest wykorzystany do odmierzania czasu... ...Mega 8 na pewno ma dwa Timery, więc jeden na przerwania związane z czasem oczekiwania klawiszy, natomiast drugi do multipleksacji.... Hmmm... nie wiem czy dobrze zrozumiałem, ale jeśli się mylę to mnie popraw i wytłumacz dlaczego wszystko...
Kod z 1 posta z odrobiną poprawek w formatowaniu: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h > #include <avr/pgmspace.h > #define LED1 (1<<PC0) // zwykła dioda LED #define LED2 (1<<PC1) // podświetlenie LCD #define LED1_ON PORTC &= ~LED1 #define LED1_OFF PORTC |= LED1 #define LED1_TOG PORTC ^= LED1 #define...
Dzień dobry. Poszukuję timer czy też programator czasowy ale inny niż ten w załączniku, którego można kupić praktycznie wszędzie. Chodzi mi o taki by można było ustawić czas, kilka czasów w których by się załączał, a co najważniejsze to aby jego ustawienie było w sekundach czyli Ustawiam o 12:35:00 włącza się i wyłącza o 12:35:05 I takich cykli w ciągu...
Wszelkiej maści kursy języka C na necie - uczą co najwyżej jak się poruszać w środowisku AVR za pomocą języka C a nie programowania tak ogólnie. Rzeczywiście akurat ten kurs z EdW jest chyba najlepszy. Ale żaden kurs z tych, które widziałem niestety nie nauczy tak całościowo technik dobrego programowania oraz wszystkich aspektów związanych z możliwościami...
Panowie, cały temat można załatwić w mega prosty sposób, bez żadnych sztuczek cyrkowych z taką ilością przerwań o jakich piszecie. Zdarzenia - to słowo padło już kilka razy choć wiem, że brzmi dla wielu enigmatycznie a można to zrealizować na wiele sposobów. Wystarczy JEDEN najprostszy timer sprzętowy tylko po to, żeby albo: 1. generował tzw: "tyknięcia...
Nie o to mi chodziło. Tą wielowątkowość zrobiłem dla bajeru. Waitms-y użyłem żeby było prościej i żeby było widać o co chodzi. Programowe timery stosuję tylko nie wiedziałem że to się tak nazywa :D Linka do wielowątkowości podałem, bo autor tematu napisał że swój problem już rozwiązał, więc założyłem że nie będzie brnął w wielowątkowość. Zresztą gdyby...
Poczytaj sobie panie kolego ten temat: http://www.elektroda.pl/rtvforum/topic11... Zobacz jak prosto można zrobić taki nadajnik a odbiornik jeszcze prościej. Zero dodatkowych elementów przy procku poza klawiszamy, diodą czy odbiornikiem IR. (masz tam też sporo informacji jak się za to zabierać samemu). To z tego powodu ja twierdzę, że budowanie...
A co dokładnie nie działa? Pewnie cały czas świeci :) Przeanalizuj swoją pętlę while i zobacz co się dzieje po ustawieniu timera :) Podpowiedź: wykorzystaj dodatkową flagę i użyj tylko RAZ timera programowego.
Nie potrzeba 100 linijek. Ja zazwyczaj robię to tak iż jeszcze nie zdarzyło mi się nie użyć timera. Jak by nie robić to jego użycie zawsze ułatwia cały program. W timerze sprawdzam stan klawiatury i ustawiam odpowiednią flagę. W kolejnym zgłoszonym przerwaniu z timera powtórnie sprawdzam klawiaturę i jeśli to ten sam klawisz i ustawiona jest flaga to...
Hmm, Siemens zwykle pisze, jeśli jakieś wyjście są "high-speed". Np. tutaj na str. 19 http://www.paratrasnet.ro/pdf/automatiza... Digital outputs Number of digital outputs - 6 of which high-speed outputs - 2; 100 kHz Pulse Train Output Akurat datasheet do Logo jest dość ubogi w informacje lub tych funkcjonalności po prostu tam...
Ogólnie mam 3 pytanka. 1. Czy ten kod w komunikacji AVR-PC zwróci mi 'T' czy popełniam jakiś błąd? Przede wszystkim źle napisany kod i tu popełniasz błąd. Poza tym jak chcesz efektywniej działać z modemem to wyłącz sobie echo poleceniem ATE0, bo do niczego ci to nie potrzebne a tylko będzie ci (skoro początkujesz jak widzę z pisaniem w ogóle programów...
No właśnie- kłócicie się o bajty a całe moje rozumowanie idzie chyba o kant... potłuc. tmf podał w swojej książce opis menu- dość rozbudowany, z podmenu i innymi bajerami. Kod jest na ftp Helionu. Obsługuje się to enkoderem z przyciskiem. Jak się jest na określonej pozycji to naciśnięcie powoduje włączenie funkcji dopasowanej do tej pozycji- w moim...
Swoja drogą... Ciekawe jak ja zaimplementuję RC5 skoro wykorzystałem wszystkie timery (T0 użyty do odmierzania czasu)... :P Swoją drogą takie 3 albo i 4,5 PWMów to można machnąć programowo i to np 9bitowych zamiast jak masz tutaj 8bitowych, które gorzej działają niestety. Przy okazji to w ogóle do takich celów nie jest ci potrzebna w najmniejszym przypadku...
A jak jesteś ambitny i musisz coś tam pokazać to prościej (i taniej) niż na S7 (i cena podobna jak przeciętny sterownik bramy a z drugiej ręki nawet taniej - ok 300-350 zł) zrobić całość na LOGO! (albo innym podobnym - np. Moeller Easy) - masz w najprostszej wersji 8 wejść (np - 2 kanały radiolinii , czujnik zmierzchowy, włacznik ręczny, linia podczerwieni,...
Wykorzystanie timerów programowych masz u mnie na blogu - sterownik pieca http://blogi.linuxpl.info/blog/duino/pro...
1. Zaprogramuj timer w tryb CTC, np. na częstotliwość 100 Hz. W przerwaniu timera: - sprawdź, czy przycisk naciśnięty; jeśli tak - zapal diodę i załaduj wartość 1000 do zmeinnej - "timera programowego". - jeśli zmienna timera ma wartość różną od zera, zdekrementuj ją, a jeśli zdekrementowała się do 0 - zgaś diodę. Razem daje to 5 linii kodu w przerwaniu...
Witajcie. Ostatnio zmagam się z obsługą klawiaturki analogowej składającej się z 3 klawiszy. Poradziłem sobie z uruchomieniem ADC na ATmedze8 i zrobiłem sobie 2 Timery programowe . Teraz próbuje zgodnie z przedstawioną przez Mirka (w filmach z cyklu "Przetwornik ADC - część 06") koncepcją zrobienia repeat klawiszy. https://www.youtube.com/watch?v=BdCCe6XO...
Zwarcie Vcc do GND pomogło, ale dopiero takie dłuższe zwarcie ( 5 sek). Wyświetlacz ocnkął się, wyświetla dane, ale !!! ciekawostka, zegar stoi. Załaczam kod, taki wprost z Eclipsa, bez bibliotek. Jestem w trakcie przeróbki z innego projektu, proszę o wyrozumiałość. /* * main.c * * Created on: 2010-09-25 * * * PD7 - 1WIRE * PA0..PA7 - LD0..LD7 -...
Nie wiem czy kod w Bascom na coś Ci się przyda ale właśnie na takiej zasadzie jak w tym programie zrobiony mam pomiar prędkości wiatru w moim pozycjonerze. Troszkę inaczej wykorzystuję tu timery niż założyłeś ale... Zostawiłem Ci tylko fragment odpowiedzialny za liczenie impulsów i dodałem obsługę wyświetlacza. Program jest na tyle prosty, że z interpretacją...
Załącz plik ds18x20.c, załączyłeś tylko plik nagłówkowy. Potem będziesz musiał zamienić zmienne cel i cel_fract_bits na tablice i będzie ok. Twoim zdaniem utworzenie tablic będzie zbawienne, może to trafne. Od jakiegoś czasu ma pomroczność i nie mogę się skupić, najprostsze rzeczy stwarzają mi ogromną trudność - to chyba przesilenie. A zatem stworzenie/zamiana...
Oto i źródło, może Wy zauważycie coś dziwnego... [syntax=c] // PINY WEJŚCIOWE #define ZIELONA PIND5 #define CZERWONA PIND6 #define DEBUG_PORT PORTD #define DEBUG_DDR DDRD #define ZOLTA PIND3 #define KL_PORT PORTC #define KL_PIN PINC #define KL_DDR DDRC #define LEWO PINC0 #define DOL PINC1 #define PRAWO PINC2 #define GORA PINC3 #define LEWY PINC4 #define...
Witam .. a może spróbować takiej konfiguracji [syntax=c]TCCR1A |= (1<<COM1A0)|(COM1B0); TCCR1B |= (1<<WGM12)|(1<<CS10); OCR1A = .....[/syntax] Pisane na podst. dataschetu - nie sprawdzane. Nawiasem mówiąc nie meczy Cię przeliczanie wpisu w rejestry na kod HEX ?. Co do szerokiego przestrajania poczytaj o timerach programowych. Pozdr.
łatwiej się już chyba nie da. Sorki, ale ja bym raczej powiedział, że: "JUŻ GORZEJ SIĘ NIE DA :(" Co to za rozwiązanie gdzie w środku siedzi jeszcze obrzydliwy Wait !!! brrr ale żeby nie być gołosłownym, który tylko krytykuje.... Ok, panowie - widzę, że wasze zmagania spełzają na niczym, pokażę wam więc jak się powinno podchodzić do programowania....
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
Wg. mnie najlepiej zaprzęgnąć do tego celu timer no chyba że już zajęty to wtedy programowo PWM.
Zgadza się. Na większości płytek jest 4k7 do +5, który dość skutecznie zastępuje 1k5 do +3.3. z grubsza chodzi o to, żeby przy podłączeniu na linii D+ pojawiło się napięcie nieco ponad 3V przy ściągnięciu w dół prądem ok 200uA. Stos USB z CubeMX nie wykrywa odłączenia, a funkcja Deinit() jest wołana tuż przed Init(). Są sposoby na wykrycie odłączenia,...
Zdaje się, że PWM-y generują przerwania a te pochodzą jak stwierdziłeś od zegarów. To w czym problem? Wyzwalaj pomiary A/D od przerwań PWM. Jak będzie za gęsto to dodaj prosty licznik w zmiennej z porównaniem i uruchamiaj przetwornik co n-te przerwanie od TOVn. Biorąc sygnał z wyjścia PWM i dzieląc go przez 2 uzyskasz przebieg o stałym współczynniku...
możesz zrobić przerwanie z timera + programowy "watchodg" który sprawdzi co jakiś czas czy procesor działa. Jeśli nie (bo wartość w programowym watchdogu jest zbyt duża) to wtedy taka sekwencja: 0. sprawdzenie flagi "gotowy" - jeśli ustawiona to czekaj na reset z WD - nie rób nic 1. reset wd 2. zapis do eeprom 3. ustawienie flagi "gotowy" cóż, słyszałem...
Spojrzałem w ten kod i niestety jest tam o wiele więcej problemów. Typowy kod początkującego, ale OK - każdy kiedyś zaczynał i pisał takie potworki ;-) Co można naprawić? Już Ci to mówili w innym wątku: przede wszystkim wywalić czasochłonne operacje z przerwania. W ISR ustawiasz tylko flagę, a w pętli głównej sprawdzasz jej stan i, jeśli zachodzi warunek,...
Masz narzucony zegar 12MHz i on jest podstawą do obliczeń. Timer będzie taktowany zegarem 1/12 Fosc czyli 1MHz i tego nie zmienisz. Masz do odmierzenia 2 czasy 3360us i 10640us. Wybierając tryb 2 Timera utrudniłeś sobie sprawę bo maksymalny okres który możesz zliczyć do 256us. W takim przypadku musisz zrobić dodatkowy programowy licznik. Największy...
Witam! Mój przedmówca nie ma niestety racji. Timery nie służą do dokładnego pomiaru czasu. Dlaczego? Trzeba pamiętać, że timery pracują asynchronicznie w stosunku do wykonywanego programu. Kiedy wiec jakiś timer doliczy swój czas dowiemy się o tym dopiero przy najbliższym obiegu pętli programowej. Wynika z tego ze odmierzony czas może być (w najgorszym...
To nie są przerwania na PB1, 2, 3, a sprzętowe wyjścia timerów. NA ATmega8 masz trzy wyjścia PWM - dwa z T1 i jedno z T2. Nie wiem, ilu w końcu potrzebujesz. Jednego powinieneś użyć do generowania 36 kHz, kolejnego (a może dwóch) do sterowania silnikiem. Czemu mają służyć te zabawy z przerwaniem timera i programowym machaniem nogą uC?
Przy czasach na poziomie sekund, minut to nie jest to żaden problem. Jeden timer ustawić na stałe przerwanie np co 100ms, w przerwaniu od tego timera przeglądać jakąś tablicę, w której każdy jeden element odpowiada jednemu programowemu licznikowi. Zmniejszać liczniki w elementach w tej tablicy, po czym po wyzerowaniu się wywołać jakąś funkcję. W moich...
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Sprzętowo tylko na wyjściach OC. Przy tej częstotliwości można sterować dowolnymi wyjściami programowo, obsługując wszystkie przerwania timera.
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Na 99% ustawiony programowo Time Out Timer na 3 sekundy. Tak się to zachowuje przynajmniej. Na 1% uszkodzone radio, ale wątpliwe. Bateria jak trzyma?
Ja bym zrobił to w drugą stronę. Tworzysz 3 zmienne globalne jako liczniki (tak jak masz TCNT dla timera). W przerwaniu od timera jedyne co robisz to inkrementujesz te zmienne. W ten sposób częstotliwość zmieniasz poprzez wartość tych zmiennych (do ilu ma liczyć twój programowy timer). A pwm robisz na 3 ifach w pętli głównej (wypełnienie zmienisz poprzez...
Prawdopodobnie o żaden konkretny tylko o samo porównanie. Prościej więc po prostu programowo sprawdzać ten warunek (w końcu wartości pewnie też będą generowane programowo). A co do Timera to faktycznie on tylko porównuje na równość (==). Więc na nim tego nie zrobisz.
programowe chłodzenie przerwanie programowe kodowanie programowe
tripower sunny scyzoryk kluczyk kontrolka grzać świeca
bateria parkside styki bateria milwaukee
Niszczarka DBA – naprawa, typowe usterki, czyszczenie, konserwacja Audi A1 kontrolka TPMS i poślizgu – różne opony Hankook 215/40 R17 vs Continental 2015