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/7186671300_... Od kilku lat programuję 8-bitowe mikrokontrolery AVR i przez ten czas zdobyłem trochę wiedzy na ich temat. Poniżej znajduje się kilka ciekawostek o tych układach. Jeśli znacie jakieś inne interesujące informacje, to piszcie. Najnowsza wersja artykułu jest również dostępna na mojej stronie:...
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...
https://obrazki.elektroda.pl/9151185000_... Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie...
https://obrazki.elektroda.pl/2568884200_... Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu...
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.
Niestety nie będzie działać, jeśli nie zastosujesz w tym przypadku sprzętowego (filtr RC) debouncingu. Pytanie, czy to musi być całkowicie sprzętowo? Jeśli tak to tylko zewnętrzny filtr RC + podłączenie pod wejście XCK timera, wtedy każde naciśnięcie przycisku generuje impuls zegarowy zliczany przez timer. Całkowicie sprzętowa realizacja prostsza jest...
Było by super, ale jak to zrobić żeby się nie rozjechało? Jak zrobić aby ten trzeci PWM chodził zgodnie z pierwszym? To jest inny TIMER jest jakiś fixpatent żeby to chodziło "synchronicznie"?
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...
Witam. mam problem z programem gdyż korzystając z Timera1 chciałbym w programie zmieniać prescale po wciśnięciu np. s1 na 8 a po wciśnięciu s2 na 1024, problem w tym że w najprostrzej wersji programu : If Pinb.0 = 0 Then Config Timer1 = Timer , Prescale = 1024 End If If Pinb.1 = 0 Then Config Timer1 = Timer , Prescale = 8 End If pinb.0 i pinb.1 ustawione...
Dlaczego nie uzyskasz? Dla 16-bitowego timera i preskalera 1024 dla f=1MHz uzyskasz nawet minutę. Ja bym to zrobił tak, że ustawiłbym timer na zliczanie tego okresu 0-1,3 Hz, w przerwaniu zmieniłbym parametry pracy tak, żeby kolejne przerwanie wyszło po 20ms, wtedy ponowna zmiana i generowanie czasu do kolejnego impulsu. W przerwaniu programowa zmiana...
Moim założeniem jest AT89C2051 i nie chcę tego zmieniać (zegar 20 MHz). Mam jednak pewną koncepcję dotyczącą realizacji PWM: Zakładając, że: - PWM 8-bitowy (255 kroków na jeden okres), - Zmienna wypełnienia R0 w zakresie 0 ÷ 255, - suma R0 oraz /R0 daje zawsze 255 (czyli pełny okres), można by pokusić się o zrealizowanie PWM skacząc do procedury obsługi...
Witam.. Mam nastepujacy problemik, mianowicie nie mam portu rs232 (laptop) a chcialbym sie skomunikowac przez ten port z mikrokontrolerem. Czy jest mozliwosc uzycia do tego celu portu LPT?? Myslalem tak sobie zeby wykorzystac pin np: ACT dla RX i DB0 dla TX czy to ma sens??Chodzi raczej o strone programowa w C++ Buider, czy ten standardowy Timer jest...
ł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....
Witam Nie znam C ale ciągle na forum robicie błąd pisząc że serwo steruje się sygnałem PWM, sterowanie powinno się odbywać sygnałem o szerokości około 1-2ms i stałym okresie powtarzania 20ms. Pierwsze doświadczenie, zmieniamy przy PWM okres powtarzania na 15ms, PWM się nam nie zmienia a szerokość impulsu sterowania serwa bardzo. Przydałoby się sterować...
piter2004: owszem można zmienić piny do transmisji na każdy inny pin.. skutek uboczny -> transmisja programowa co wymaga blokowania uC na czas transmisji i zużywa dużo zasobów (cykli). Transmisja musi się odbywać w trybie half-duplex. Trzeba przeznaczyć jeden sygnał przerwania zewnętrznego na sygnalizowanie początku ramki albo jeden timer na okresowe...
Czy o tym mowa? Mowa właśnie o tej pamięci, o której piszą te kartki, tylko, że nie tego szukam, chociaż to też się przyda. Czy masz dostęp do DSM-51? W 8051 jest rozkaz MOVC, który pozwala odczytywać również i tą pamięć. Pamięć EPROM znajduje się pod adresem od 8000h do FFFFh MOV DPTR, #8000h; Ustaw rejestr DPTR na 8000h MOV A,#00h ; Ustaw akumulator...
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.
Cześć jak zwykle metod jest wiele - sprzętowa i programowa. Programowa jest gorsza bo nic innego nie daje się wtedy zrobić mov R0, #255 skocz_tu: djnz R0, skocz_tu lub dłuższa czyli 255*255 mov R0, #255 skocz_tu: mov R1, #255 skocz_tam: djnz R1, skocz_tam djnz R0, skocz_tu Co do sprzętowej realizacji to niestety dłużej czyli ustawienie timer...
(at)skynet_2 na pewno da to radę zrobić w ten sposób. To wszystko zależy od zastosowania. Jeżeli ktoś ma wolny timer, to myślę że moja metoda jest najlepsza. Jeżeli ktoś nie ma, no to napisanie takiej funkcji to zadanie IMOH mało złożone. Do ciut większych opóźnień stosuje się np timer dedykowany systick. Troszkę czepiając się, to nie zawsze wiadomo...
Witam wszystkich majsterkowiczów :D Oto mój jeden z pierwszy programów napisanych na ATMEGE 8. Dotychczas programowanie mikrokontrolerów traktowałem jako zabawę, używając do tego BASCOMA i zestawu Treningowego. Obecnie stoję przed zamiarem budowy pewnego urządzenia ale przed rozpoczęciem prac chciałbym mieć pewność że część programowa będzie ok. Sam...
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...
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...
Witam Zamierzam jako laik powalczyć z takim projektem jak układ czasowy. Czyli naciskamy przycisk następuje odliczanie np 3 minuty i potem się układ wyłancza się. Proszę o jakieś propozycje programu bo mi najgorzej jest wystartować. A mając jakiś szkic mogę walczyć z układem... Układ chce zrobić na Atmega8 bo tylko do niego mam programator. Pozdrawiam....
Koledzy mam potrzebuje program opuznienia czasowego na timerach. dioda ma 5x mrugnąc co sekunde potem buzer co sekunde tez 4x a potem 3x dioda co sekunde. Prosze o pomoc bo nie wiem o co w tych timerach chodzi dzięki wielkie z góry ljmp start org 0bh ljmp intt0 org 100h start: mov r0,#7fh zeruj: mov (at)r0,#0 djnz r0,zeruj clr p1.7 mov r4,#5...
co napisaliscie jako swoj pierwszy program na dany uC w danym jezyku (rozbudowy sie licza, byle by wciaz byla to ta sama baza) n. n. - literka, cyferke z przodu dodam sam. zachowujcie chronologie w swoich dokonaniach na roznych platformach jezykowych i sprzetowych, tak aby to mialo sens! ____________________ 0x1-a. Freddie Chopin - migacz diodkami o...
Wg. mnie najlepiej zaprzęgnąć do tego celu timer no chyba że już zajęty to wtedy programowo PWM.
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...
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,...
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...
Znalazłem czas wniknąć w szczegóły...J Jaka ma być rozdzielczość/częstotliwość tego programowego timera? Bo z wartością 108 jest jakaś taka mało okrągła. Rozdzielczość 20ms nie wystarczy? Bo jeżeli musisz go tak skonfigurować do timerów programowych, to czwartego kanału serwa nie da się na nim zrobić. UART nie ma nic do rzeczy, ma swój generator częstotliwości....
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?
Spora część pytań, które zadajesz, dotyczy głównie podstaw programowania i podstaw języka C i nie mają wiele wspólnego z mikrokontrolerami. Jeśli HC-SR04 nie odpowie impulsem echo, należy go "skasować" podając na linię ECHO poziom niski. Inaczej zawiśnie na wieki.
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.
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...
Napisałem co trzeba zrobić. Ustaw wyjście fizyczne na sumę logiczną. Iloczyn zrób sobie gdzieś na wyjściach wirtualnych, a fizycznym wyjściem ma być suma logiczna sterowana z wyjść którymi chcesz sterować wyjście fizyczne Suma fizyczna narusza wyjście jeśli JAKIEKOLWIEK z wyjść sterujących jest naruszone.
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?
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...
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...
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...
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.
Hmmm... ale jeśli poprawa wydajności ma polegać na cyklicznym wysyłaniu jednego znaku z bufora, np raz na 1ms korzystając z timera programowego lub sprzętowego, to i tak linia RW nie jest potrzebna. Po wysłaniu każdego znaku, funkcja obsługi wyświetlacz by się kończyła, a w tym czasie procek robiłby coś innego. Można założyć, że w ciągu tego czasu...
Witam, Ściągnąłem kod uniwersalnego programowego UARTa ze strony http://supp.iar.com/Support/?note=88469. Próbuję go dopasować do mojej atmegi32, ale mam duży problem, bo nie wiem jakie określić parametry Timera. Po pierwsze co znaczy: 5. timer_set( BAUD_RATE ) Sets the timer to 3 times the baud rate. Czy chodzi o to, że np. przy 31250bps Timer...
Może by tak te impulsy na próbę podać na zwykły licznik/timer i zobaczyc ile zliczy na sek. i czy zlicza stabilnie? Przynajmniej bedzie wiadomo czy to problem bardziej sprzetowy, czy programowy.
Soft PWM i filtr wyjściowy... To w sumie najmniej elementów... i chyba jedyne wyjście.... Tylko trochę zabawy z programem... Sprzętowy timer do interwałów a resztę programowo... Każde inne rozwiązanie wymaga zewnętrznych układów...
1)Okej, czyli procedura przerwanie_od_T0 trwa 1 s ? 2)Gdzie tutaj miejsce dla właściwej treści programu, pomiędzy TR0=1 ,a while(1) w programie głównym? 3) Chciałbym uzyskać procedure która trwa równo jedną sekundę używając timerów, bo ponoć tak jest najdokładniej. Chciałbym później ta procedurę, SEKUNDA wykorzystać w dalszej części programu. 4) pojecia...
Możesz to przecież zrobić "sprzętowo" - każdy przycisk osobno do "dowolnego" portu, a dodatkowo wszystkie razem do portu "z przerwaniem", z tym, że od każdego przycisku do tego specjalnego portu dajesz diodę. Tym sposobem masz tylko jedno przerwanie, ale możesz wykrywać który przycisk został naciśnięty. Ponieważ i tak trzeba kombinować, to możesz zaoszczędzić...
Nie potrzebujesz przerwań co 8 us - skąd ten pomysł? Odbieraj znaki w przerwaniu UART i ustawiaj w nim timer programowy, dekrementowany w przerwaniu timera (np. co 1 ms). Równie dobrze możesz ustawić timer sprzętowy. Prawdopodobnie również najwygodniej będzie sprawdzać timeout (wyzerownaie timera programowego lub znacznik zatrzymania timera sprzętowego)...
W zasadzie to są dwa podejścia do tematu: 1. Odświeżanie na żądanie ( trochę mi się rymło ) tj. każda operacja zmieniająca wyświetlaną daną powinna wywołać funkcję odświeżania ekranu. Nowy odczyt temperatury - bach zapis na ekran. Zmienił się stan wejścia - bach zapis na ekran itd. 2. Odświeżanie cykliczne tj. ekran odświeżany jest w zadanych odstępach...
programowa timer licznik timer programowa programowa timer arduino
zapis portu pliku akira instrukcja skype tablet android
wkrętarka milwaukee milwaukee dioda
Rozładowujący się akumulator w Ford Edge z LPG KME Jak ominąć płytkę sterującą w żelazku Tefal?