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...
Eno bez jaj...wskaźniki?... Co tu jest skomplikowanego? Przecież tu wystarczy aktywować cykliczne przerwanie, którego okres zależy od częstotliwości i rozdzielczości potrzebnego PWM. Programowy PWM to raptem 2-3 linie. Do tego timer programowy do odliczania migania i to wszystko. W pętli głównej pozostaje tylko zarządzanie tym timerem i w zależności...
ł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....
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...
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...
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...
Prosty timer z nastawą czasu. 0. Elementy: * wyświetlanie na 3 cyfrowym 7 seg. wyświetlaczu * krańcówka * triak * eeprom * buzzer * 2 przyciski 1. Zasada działania Nastawa zapisana w pamięci eeprom, przy włączeniu zasilana wczytana z powrotem. Przy rozwartej krańcówce: *rozłączony obwód triaka *nastawa czasu 1-999 sekund za pomocą + oraz -. Przy zwartej...
Mirekk36 a jaką dać częstotliwość taktowania bo dla twojej funkcji mi dioda miga co około 72s Najpierw sprawdź czy jak dasz _delay_ms(1000) to czy miga ci co sekundę - jeśli nie to napisz/powiedz/sprawdź czy masz dobrze przede wszystkim Fusebity ustawione ? Na pewno sama funkcja i while nie robi takiego narzutu żeby zamiast 60s było 72s ;) - jak już...
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to...
XMEGA ma podsystem nazywany AWeX (WeX w E5), który dystrybuuje sygnały zegarowe generowane przez timer na wyjścia portu, wprowadzając ustalane programowo czasy martwe. Dzięki temu XMEGA może sprzętowo sterować silnikami krokowymi i BLDC (zasadniczo też krokowymi) - sekwencja komutacji też może być sprzętowo ładowana do AWeX, dzięki temu sterowanie nie...
Można by tak: zegar 12 MHz i wtedy cykl maszyny trwa 1 us, timer T0 ustawiasz w tryb 2 (autoreload) wpisując do jego rejestrów TH0 i TL0 wartości takie by przerwanie od niego było co 10us (problem kroku załatwiony). Tworzysz licznik programowy w którym będziesz odliczał potrzebną ilość wcześniej ustalonych przerwań. Po przekręceniu licznika reakcja...
Jest gdzieś skrótowa dokumentacja do ustawień CubeMX, aby zaczynający programista się nie zniechęcił? Nawet jeśli korzystasz z CubeMX to zacznij najpierw od jakiejś literatury. "Poradnik Szczywronka" takie rzeczy dość łopatologicznie tłumaczy tzn. podstawy działania timerów (i nie tylko). Na pierwszym zrzucie mamy włączony OPM na drugim wyłączony....
Próbuję uruchomić programowy zegar w Bascom na arduino Mega 2560 Kompiluje się bez problemu ale niestety nie działa. Jakiego 'działania ' się tu spodziewasz? -ma poruszac wskazówki, czy też wskazywac czas na dysplay leżącym w szufladzie? - a może przekładac kartki kalendarza? Nie bardzo będziesz mógł uruchomic 'Bascomowy- softwarowy' zegar na Arduino...
Tego jitteru w żaden programowy sposób nie wyeliminujesz. Jego powodem jest to, że wejście w ISR trwa nie zawsze tyle samo - XMEGA wykonuje instrukcje w ciągu 1, 2 lub 3 taktów, a ISR nie przerywa instrukcji, lecz CPU musi ją najpierw dokończyć. Więc w zależności od wykonywanej instrukcji już masz jitter 0-2 taktów. Do tego, jeśli MCU wykonuje inne...
Robiłem kiedyś sterownik choinkowy pięciokanałowy. Sprawę rozwiązałem następująco: - przerwania od przepełnienia Timer0 generują skoki do podprogramu (u mnie był kwarc 4MHz, dobierz preskaler) [syntax=basic4gl]Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Software_pwm Enable Interrupts Dim Reference As Byte Dim A As Byte Dim B As Byte...
To Ci będzie sterować kolejno czterema diodami na pinach od B0 do B3. Zalecam wnikliwą analizę, zanim zalejesz mnie pytaniami :) Timery zawsze rób na odliczanie w dół do 0, w przeciwnym wypadku po wpisaniu nowej wartości w trakcie odliczania możesz mieć niezły kwas - pomyśl dlaczego :) Pozdrawiam [syntax=basic4gl]$regfile "m8def.dat" $crystal = 8000000...
Pobawiłem się dziś chwilkę programowym PWM. Jest to rozwiązanie na 8 kanałów - 25 może być ciężko pociągnąć ale oczywiście możesz próbować rozbudować program i zmienić częstotliwość zegara czy wywołania przerwań. Pierwszy to demonstracja tworzenia w zasadzie dowolnie biegnącego światła - dane umieszczamy w liniach Data (wartości od 0 zgaszone do 8 max...
Kwarc wstaw w obu przypadkach nawet 16MHz. Baudrate jest zależna w zasadzie od jego dzielnika niż od kwarcu. Nie szalej też z dużą szybkością bo błędy mogą wyskoczyć, zacznij od 4800 bps. Połączenie po UART masz zrobić sprzętowo! Timer niech ci obsługuje multiplexing, główna pętla programu sprawdzanie czy w UART coś przyszło i przepisywanie do tablicy....
Kolejny raz widzimy to samo. Zamiast dobrać kontroler do zadania, to próbujesz na siłę dopasować zadanie do kontrolera leżącego w szufladzie. Tutaj o tyle gorzej, że nawet się nie zastanowiłeś ile zasobów potrzebujesz, tylko od razu przyjmujesz 2 albo 3(!) kontrolery do w sumie bardzo prostej aplikacji. Moim zdaniem wszystko zrobisz na jednym uC i może...
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/6848039300_... Ogranicznik czasu pracy to dość banalne urządzenie włączane pomiędzy mechanicznym włącznikiem ciśnieniowym a pompą, mające ochronić ją przed przegrzaniem (skutkiem suchobiegu). Zasada działania: 1. Po włączeniu zasilania przekaźnik jest włączony i zaczyna się odliczanie 100 sekund (w normalnej...
http://obrazki.elektroda.pl/3092945800_1... Witam Nie jest to mój pierwszy projekt ( było ich już z kilkunaście ;) ) , jednak jestem z niego nieco bardziej zadowolony niż z innych; włożyłem w niego także więcej pracy dlatego postanowieniem go opublikować. Ponieważ postanowiłem podciągnąć/ sprawdzić swoje umiejętności programowania /...
Dużo bawiłem się z watchdogiem i ostatecznie to działa, więc powinno zostać połączone. Przetestowałem gałąź żądania ściągnięcia, działa, a OTA później też działa, więc powinno być tak samo w przypadku scalania. Problem polegał na tym, że nasz sterownik Freeze był zbyt agresywny, przez co nawet timer wdt w jakiś sposób nie działał. Usunąłem kod nieskończonej...
http://obrazki.elektroda.pl/4404773800_1... Witam. Chciałbym zaprezentować Państwu moją konstrukcję DIY. Jest do panel kontrolny do komputera PC, który aktualnie spełnia funkcję 6-kanałowego nastawnika obrotów wentylatorów typu 12V 3pin. 1. Wstęp Jako, że jakiś czas temu zacząłem się interesować moddingiem i tuningiem PC, napotkałem...
Rozumiem, że można timerem obsłużyć procedurę programowego pwm, ale i samo miganie Led, czylindodawanie/odejmowanie zmiennych odpowiedzialnych za jasność i to będzie sobie działało niezależnie od tego co w pętli głównej, czy tak? Dokładnie. Czyli timer generuje np. 1000 przerwań/s, tam sobie inkrementujesz/dekrementujesz zmienne, robiąc programowy...
https://obrazki.elektroda.pl/9151185000_... Druga część artykułu o najtańszych nowych mikrokontrolerach z roku 2017. Ekosystem developerski Środowisko developerskie mikrokontrolera ma ogromny wpływ na jakość pracy z nim i w konsekwencji - na produktywność. Na to składają się różne czynniki – jakość IDE, dostępne biblioteki, płytki...
A czy zdajesz sobie sprawę z tego , że Twój programowy UART ma baudrate = 100 bps :?: :!: :!: :!: Poza tym ten Keil-owski kod , też jakiś ... dziwny :( /*...*/ static char internal_tx_buffer; static char user_tx_buffer; /*...*/ internal_tx_buffer = (user_tx_buffer<<1) | 0x200; Piotrek
Buduje sterownik RGB przez bluetooth. Potrzebuje zrobić mruganie diody o określonej wartości pwm prze określoną wartości mrugania. Użyłbym delay, ale nie chce mieć opóźnienia w komunikacji. Użyłem timerów programowych, ale gdy działa pwm nie działa timer i na odwrót. W ustawianiu rejestrów i używaniu timerów jestem mało doświadczony, więc ustawiłem...
Na tego typu problemy jest jeden prosty sposób, wielokrotnie dyskutowany na forum: automat w przerwaniu UART. Jeśli ma być wykrywana "przerwa w transmisji" najpierw trzeba zdefiniować, co to jest ta "przerwa". Jeśli "przerwa" - to brak nowych danych przez czas np. potrzebny na transmisję jednego bajtu - UART potrafi takie coś wykryć w sprzęcie. Jeśli...
1. dodaj timer programowy 2. pomyśl, jaki jest związek wartości timera, ilości przerwań, które wystąpią, częstotliwości zegara, prescalera i czasu jaki upłynął...
Jaros: o ile zaświecenie na 1/1000 sekundy można zauważyć (ale niezbyt łatwo i mało to "informacyjne" w praktyce), to zgaszenia już nie, a o to Ci podobno chodziło. Takie rzeczy robi się zwykle tak, że przy zapisie danych do rejestru nadawania zaświecasz lub gasisz programowo diodę i nastawiasz timer programowy. W przerwaniu timera dekrementujesz ten...
Witam, piszę pracę inżynierską w oparciu o Arduino Ręce opadają... :( A co do tego programu to zrób sobie Timer programowy wykorzystujący Timer sprzętowy.
Debounce spokojnie by tu wystarczył jeśli nie zależy Ci na ciągłości działania programu (ten zawsze wstrzyma na 25ms). Do tego wykorzystaj dodatkowy timer programowy do mierzenia czasu trwania buzera (ewentualnie można to zrobić w jakiejś pętli jeśli wstrzymanie programu jest nieistotne). Można też wykorzystać badanie portu z maskowaniem (AND) jeśli...
Może układ ma kwarc. Wtedy wystarczy przeczytać. Rezonatora wewnętrznego nie przeczytasz bo nie wiadomo czy i jakie przebiegi program wyprowadza na porty I/O. A nawet jak jakaś nóżka wykaże jakiś przebieg to trudno będzie się domyślić jakie jest F_CPU, jaki preskaler, tryby pracy timer'ów, jeszcze do tego timer programowy etc... Nie da się.
Narzut na włączenie i wyłączenie swoje zrobi przy dużym time. A na zwykłej fladze od przerwania ominąłbyś ten problem, kombinujesz tylko po co? Nie prościej zrobić timer programowy z tego? Nie prościej zapisać odpowiednią wartość do ARR?
Czesc. Szukam pomocy w zaprogramowaniu jednego przycisku żeby ustawiał stan wysoki na pierwszym wyjściu po jednym kliknięciu, drugie wyjście po drugim i trzecie po trzecim i tak dalej aż do resetu. Zaczynam przygode z plc. Z gory dzięki za pomoc. Wstępna ocena dostępnych informacji Cześć, Rozumiem, że chcesz zaprogramować sterownik PLC w taki sposób,...
Załóżmy, że obsługujemy klawisz w przerwaniu zewnętrznym i ustawiamy flagę, że został naciśnięty. W pętli głównej sprawdzamy flagę i toglujemy diodą na wyjściu wysyłając jednocześnie po uarcie info - dioda ON/OFF. :idea: - taki przykład dla początkujących :D Osobiście zrobiłbym to zupełnie inaczej. Obsługa przycisków przy użyciu przerwania zewnętrznego...
No to tak. Nie lubię _delay(). Do kodu menu tmf dodałem timer programowy z książki Mirka. Najpierw kompilator powiedział mi że jestem głupi bo nie widzi Timer1 w pliku menu_alfa. To zgodnie z tym co napisł tadzik85 napisałem że jest extern volatile- no to kompilator się na to zgodził. Chociaż nie rozumiem- przecież Timer1 jest volatile- globalny w pliku...
Poza tym nie trzeba wcale mieć timerów ani zadnego supervisora, jeśli masz gwarancję, że dane przetworzysz szybciej, niz przychodzą. A parser i obróbka może się mielić najzwyklej w pętli głównej. Ja tutaj patrzę od razu pod kątem podpięcia takiego odbioru pod strumienie (czyli FILE, scanf() itd.), które z racji swojej asynchroniczności generalnie potrzebują...
Czy ten pomiar danych z kilku źródeł jest jednocześnie wysyłany do LCD, czy też dane z tych źródeł są w jakiś sposób kolejkowane w celu ewentualnego przetworzenia, a później wyświetlenia? Funkcja wyświetlania wywoływana jest asynchronicznie co 200ms. Pobiera dane z rejestrów w RAM aktualizowanych na przerwaniach timerów, w których to 16 bit timer +...
No z delay na pewno nie :). Ustaw sobie w przerwaniach timer programowy co 1s, a w pętli głównej możesz zrobić "liczydełko" reagujące na zbocza. W każdym tyknięciu timera w przerwaniach zapisz ile impulsów zliczyło i wyzeruj licznik. To co zapiszesz to w zasadzie gotowy wynik, który co 1s będzie aktualizowany. To chyba najprostsze rozwiązanie. Można...
Jakoś nie bardzo wierzę, że programowy UART bez użycia przerwania timer ama prawo działać - to po pierwsze. Po drugie - częstotliwość wewnętrznego zegara ATTiny13 jest na tyle niedokładna, że komunikacja szeregowa nie musi działać Kiedyś robiłem coś takiego, i średnio jeden uC na 4 nie transmitował z poprawną szybkością. Mając to zrobione na przerwaniach...
A nie lepiej po prostu nie blokować i pozwolić programowi wykonywać się? Coś w stylu: [syntax=c] uint16_t tick_get(void); uint16_t tick_expired(uint16_t tick, uint16_t val); .... if (tick_expired(tick, 100)) { //do something tick = tick_get(); } ... [/syntax] Albo jak ktoś potrzebuje czegoś dokładniejszego to zrobić sobie programowy timer z możliwością...
Inny problem to to, skąd wołasz tę funkcję i kiedy. Jeśli z "pętli głównej" - to prosisz się o kłopoty. Z pętli głównej. Czemu o kłopoty? Przeciez aktualny stan procedury dekodującej przekazywany jest poprzez wskaźnik do zewnętrznej zmiennej... Jeśli chodzi o funkcję repeat to usunąłem te część kodu bo akurat w tym zastosowaniu była mi niepotrzebna......
Podawałem już moje rozwiązanie w temacie http://www.elektroda.pl/rtvforum/viewtop... przytoczę jeszcze raz: [syntax=basic4gl]Dim L_d As Byte Sel_p Alias PortX.Y '-------- ' ' ' '-------- If Sel_p = 0 Then 'klawisz Waitms 25 'najlepiej zastąpić przez timer programowy If L_d < 255 Then Incr L_d If L_d = 30 Then 'czekaj około 0,7s...
Załaduj ten programik (zmień tylko procek i port dla własnych potrzeb) i zobacz jak to działa. To o wiele czytelniejszy i łatwiejszy sposób odliczania potrzebnych czasów niż zabawa we włączanie i wyłączanie timerów. Możesz zrobić nawet kilka różnych "odliczaczy" i to nie tylko 8-o ale i 16 (lub więcej) bitowych, a do tego coś się jeszcze innego w przerwaniu...
To co rozważasz to bardzo dobry sposób ;) nie ma lepszego. Wszystko zależy czy potrzebujesz super dokładnego 100ms czy tylko zgrubnie odczekać 100ms. W tym drugim przypadku można zrobić programowy timer i na jego podstawie odmierzać różnej długości odcinki czasów dla wyzwalania jakichś zdarzeń itp. Ale jeśli precyzyjnie to tak jak piszesz.
To da się bardzo prosto zrobić z przerwaniem od zbocza: - przerwanie od zbocza blokuje przerwanie od zbocza i uruchamia timer w trybie one shot, - przerwanie timera włącza przerwanie od zbocza. Jak widać wystarczy dedykowany timer i dwa przerwania i już można obsługiwać przycisk przerwaniem od zbocza. Zamiast dedykowanego timera może być programowy...
Daj swoje źródło programu, bo nie wiem jak zrobiłeś to menu. ... Jeżeli masz wolny jakiś Timer to możesz go uruchomić podczas wejścia do menu i przy wykryciu naciśnięcia przycisku go zerować a jak nie to zrobić jakiś programowy Timer. W procedurze obsługi przerwania od Timera zrobić skok w odpowiednie miejsce.
Tak tez uwazam ale lepiej spytac. W miedzy czasie wpadl mi do glowy taki pomysl: jeden timer nalicza bardzo krotkie impulsy, natomiast drugi nalicza imp zewnetrzne. Przyczym timer wewnetrzny, programowy wzbudzany jest jednym z imp zewnetrznych. Po wystapieniu pewnej ilosci imp zew, wartosc to porownywana jest z imp wewnetrznymi. Jezeli znamy czas imp...
programowy timer rozdzielczość programowy atmega programowy
schemat bateria nokia sprinter potencjometr filtry piezoceramiczne
aktualizacja netia magnum snake
Sterownik nie wyświetla temperatury, kod błędu 3 Kompatybilność ASRock N68C-GS FX z GTX 1060