OCnX to wyjścia, nie wejścia. Skoro nie możesz odblokować timera0 (bo T0 i T1 można taktować z zewnątrz) to są opcje takie: 1. Zastosowanie przerwań INT0 i INT1 z detekcją odpowiednich zbocz i zliczanie imp. w przerwaniach 2. Polling pinów z odpowiednią częstotliwością Poza tym jaka częstotliwość impulsów?
Dlatego też postanowiłem usypiać scalaka kiedy tylko się da i jak najgłębiej jak w danej chwili można. Dlatego też rozwiązanie TWI na przerwaniach jest dla mnie ważniejsze niż czas jaki poświęcę na opracowanie kodu w stosunku do metody czekania w pętli na kończenie poszczególnych rozkazów TWI. Czy o to Ci chodziło? Tak o to chodziło, i tak tylko podpowiadam...
Jakieś timery - to jakaś rzeźba. Tego się nawet przeczytać nie da. Do tego te wiele mówiace nazwy zmiennych - np flaga_! ... flaga_n. Pisz staranniej to łatwiej Ci będzie samemu czytać to co napisałeś.
3. Napisałem obsługę I2C na przerwaniach samodzielnie Nie napisałeś obsługi I2C na przerwaniach tylko masz polling I2C w przerwaniu timera. To jest klasyczny przykład na to jak czegoś nie należy robić. Obsługa I2C w przerwaniach polega na obsłudze przerwań przychodzących z tego waśnie peryferium. i zastanów się jak połaczyć przerwania I2C z przerwaniem...
kolega john_t myli się co do możliwości swobodnego ustawiania priorytetów przerwań. Wystarczy nie właczać globalnego zezwolenia i ręcznie sprawdzać przerwania (polling) Program autora wątku nie jest specjalnie skomplikowany (podejrzewam) więc spokojnie można dodać procedurę sprawdzania przerwań (zapewne nawet pod Bascom, w którym domyślam sie pisze...
To co- wtedy gdy jest polling to wyłączasz obsługę przerwania? Przecież polling jest stale- jak można wtedy wyłaczyć obsługę przerwania. A jak w trakcie pollingu wejdzie przerwanie- to w maliny. Albo jedno albo drugie. Ja Ci radzę- rób jak uważasz.
(at)Piotrus_999 Te tajemnicze biblioteki są dostępne w internecie od ponad 10 lat bo sam używałem ich do pracy magisterskiej. Użycie google pozwoli Ci rozwikłać ta zagadkę. (at)Soberro Według mnie masz problem z problem z obsługą przerwań od przycisku. Byćmoże robisz tam coś czego nie powinieneś. Bez kodu nie da się więcej powiedzieć. Powinieneś zrezygnować...
Przecież wystarczy sprawdzić flagę źródła przerwania przez polling, co będzie tak samo skuteczne w sensie czasu, a nie będzie zbędnego wejścia i wyjścia z ISR, przerzucania danych na stos i nie będzie tej nieszczęsnej zmiennej globalnej zadeklarowanej jako bit flag. Pamiętaj że każdy procek będzie miał inaczej zrealizowane przerwania, cortex-m zrzuca...
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
Przy enkoderze zdecydowanie odczyt w przerwaniach, przy rozbudowanym kodzie w trybie polling (jak wyżej) po prostu przestaje działać. Pozdr
Nic nie robiłem z kartami, nic nie robiłem na PIC, nie znam Twojej procedury TimeOut-u a już mi się nie podoba. Albo zrób to na przerwaniu albo zrób polling. W przerwaniu- jak karta wystawi 1 wiesz że gotowe. W pollingu- co jakiś czas w głównej pętli sprawdzasz co jest na pinie. Jak jest 1- to gotowe. Sprawdzanie robisz wykorzystując timer. Najlepiej...
Bo enkoder mechaniczny generuje drgania styków - a te mogą wywołać wiele przerwań. Dużo lepszym i oszczędniejszym w zasoby uC sposobem na enkodery jest polling w przerwaniu timera.
Jak zaprogramowac sterownik 8259a w trybie polling, uzywajac debuggera i pokazac jak przyjmuje przerwania IRQ& iIRQ^ z przyciskow?
Jeśli obsługujesz jakiś układ peryferyjny przez polling (a nie w przerwaniach) i chciałbyś móc też wchodzić w tryb obniżonego poboru mocy, to opcja budzenia bez przerwań jest "jak znalazł".
sprawdź w ustawienich "opcje gier" na "panelu sterowania", w zakładce "identyfikatory kontrolerów" zobacz jak jest ustawiony "polling przerwań" ja mam odznaczone i jest dobrze, zaznaczę to wtedy pad wariujei ucieka w lewo,
Po co wysyłasz poprzez polling a odbierasz w przerwaniu? Bez sensu to kompletnie.
Ależ właśnie o to! To o czym Ty chyba myślisz jako priorytet to tylko kolejność sprawdzania (polling sequence) warunków przerwania. http://www.8052.com/tutint.phtml Albert
Tyle że to jest bezsensu... Przecież flaga ustawia się sama - wystarczy sprawdzać rejestr statusowy timera (czy czego tam trzeba) i już wiadomo, że można coś robić. Tym sposobem z "przerwań" robi się najzwyklejszy "polling". 4\/3!!
odpaliłem sterownik ze strony producenta o nazwie Firmware polling rate adjustment to 500Hz, przestała działać po 5s i wyłączyłem instalator. To nie sterownik a oprogramowanie układowe - czytaj co pobierasz - był zapewne pasek postępu a Ty przerwałeś.
Polling wymaga wyłączenia przerwań w pewnym momencie (na kilka instrukcji ale zawsze) Ale przerwań od I2C, czy w ogole wszystkich przerwań? tadzik85 DMA też używasz?
To semafora nie popchnę? to ja nie chcę tak:] Niestety nie (; Zasadniczo używanie dowolnej funkcji samego RTOSa jest wtedy zabronione i nic ciekawego się nie da na to poradzić wprost. Interfejs przerwanie <-> wątki trzeba wtedy zrobić jakoś cudacznie, np. przez polling.
Na początek kwestia formalna: jest za dużo tabulatorów w kodzie przed komentarzami, przez to prawa strona posta oraz kodu jest ucinana na ekranie (mam mały ekran). Co do kodu: czytanie zegarka oraz formatowanie sprintfem w procedurze obsługi przerwania jest mocno słabe. Diabli wiedzą jak jest zrealizowany lib TWI. Jakby był oparty na przerwaniach to...
Obie metody są ogólnie dobre (polling i przerwania). Natomiast co do szczegółów - bierzcie z kolegami do ręki User manual, kurs C i do roboty. nenpa8lo: Twój opis shadow registers może być bardzo mylący dla początkującego - sugeruje, że są jakieś 2 miejsca do wpisywania. Postępowanie jest dobrze opisane w UM rozdział o PWMLER. I nad tym 499 też należałoby...
Niczego nie odbierasz - nieważne czy przez polling czy w przerwaniu czy przez DMA czy jakkolwiek sobie życzysz - układ MAX-485 masz przestawiony na nadawanie. Odpowiedź przychodzi w czasie Twojego delaya. Jeśli wiesz lepiej gdzie jest problem niż kilka osób (mówiących o tym samym problemie), to w sumie po co pytać na forum?
Tak się tego nie robi - nie przerwanie ale polling mode - sprawdzasz stan bitu w pętli i zgrywasz dane - wtedy masz w pełni kontrolowana sytuacje i możesz wyliczyć czas trwania instrukcji - alternatywnie możesz zrobić to sprzętowo - inny temat. Dobrze byłoby gdyby gdyby źródło zegara dla CPU i tego co zgrywasz pochodziło z tego samego miejsca.
Nie wiem dlaczego czytasz informacje "z drugiej" ręki, zamiast skupić się na dokumentacji ? Mam tu na myśli książki i jakieś poradniki. Wszystko jest tam idealnie opisane. Nie sprawdzałem tego kodu. Jeżeli nie chcesz przerwań i wystarczy Ci tzw. "polling", to jeszcze prościej. Zakładam zegar na 16 MHz. Inicjalizacja USART0 dla 9600 b/s, 8N1, jako interfejs...
W jaki sposób wysyłasz dane? Przez DMA, w przerwaniach od TXE czy przez polling? To co opisujesz przerabiałem przy próbach odczytu danych przy użyciu DMA, kiedy bit EN w DMA->CCR był ustawiany przed otrzymaniem ACK ze slave'a. Po korekcie programu, nie notowałem innych problemów. Możesz pokazać tę część programu, która odpowiada za transmisję? STOPF...
Hej! Wbrew pozorom, projekt ciągle żyje i doczekał się kilku usprawnień. Oto kilka z nich: - pełna obsługa dla komunikacji po usarcie oraz i2c (polling i przerwania) wraz z opcjonalnym zwracaniem statusu co poszło nie tak - obsługa crc32, rng, watch dogów i exti (póki co tylko piny) - możliwość ustawienia zewnętrznego timera dla systemowych delay'ów...
polling- odpytywanie. Okresowe testowanie stanu pinów.
No i co się wtedy stanie? Problem byłby, gdyby tam było ==, a jest <. Delay będzie dłuższy o czas przerwania, tak że precyzja jet średnia. Działanie w przerwaniu jest dokładniejsze a nie polling licznika. Jak już napisałeś o ARM-ach to w więszości wypadków konieczności robienia czegoś w dokładnie określonych okresach czasu lepiej wykorzystać timery...
Odbiór danych nie przez polling tylko poprzez przerwanie z wektorem TIMER0_OVF_vect Ciekawa koncepcja, ale to chyba jednak polling? Otwarte pozostaje pytanie jak często. Jeśli w kodzie jest więcej takich kwiatków to jednak bez całości kodu wgranego w procesor nie spodziewaj się pomocnej odpowiedzi. Albert
Nie należy wprowadzać _delay() do przerwania! To jest jak z papierosami- łatwo zacząć a potem bardzo trudno się odzwyczaić. Proponuję przerobić program na taki bez przerwań na początek. Wprowadź polling- czyli po polsku- odpytywanie stanu klawiatury. To się robi tak- pętla główna kręci się w kółko i trwa to jakieś mikrosekundy. W tej pętli sprawdzasz...
Witam wszystkich, Tytułem wstępu: Jestem poczatkującym użytkownikiem Arduino (i dlatego piszę w dziale dla początkujących). Jednym z moich projektów jest sterowanie urządzeniem za pomocą enkodera. Problem wydaje się bardzo prosty - ale na Arduino. Z GitHub'a (https://github.com/brianlow/Rotary) ściągnąłem doskonałą bibliotekę do obsługi enkodera, która...
Nie wchodząc we wszystkie szczegóły - staję przed próbą podłączenia mikrokontrolera Atmega do pewnego systemu mikroprocesorowego jako emulatora pamięci zewnętrznej z programami. Aktualnie zadanie jest realizowane przez CPLD xc95 podlaczony do dwóch układów ROM 27c040. Zarys był taki, żeby użyc atmegi i karty SD ale timing jest raczej nieosiągalny, więc...
A pytanie jest takie- czy da się to zrobić bez while()? Tylko na przerwaniach. FIFO na instrukcje, kolejkowanie kolejnych tranzykcji. Opracowujesz Sobie zgrabną strukturę: teraz operował. I masz pełną dowolność, prosta maszyna stanów FSM i sprawdzasz za pomocą if co można zrobić i zmieniasz stany. Nie ogranicza Ciebie timeout, bo takiego z reguły nie...
Witam, Od jakiegoś czasu zmagam się z komunikacją SPI pomiędzy dwoma procesorami stm32l452re. Transmisją i odbiorem danych zajmują się oba procesory. Wysyłam 6 bajtów po 16 bitów, co daje nam sumarycznie 3 przerwania. W taskach od FreeRtosa transmisja danych i sprawdzanie otrzymanych bajtów odbywa się w nieskończonej pętli while. Problem dotyczy tego,...
1. Miałem, jedna z linii miała stan 0. SCK jeśli się nie mylę. Ale to było przy odczycie ze slave. 2. Polling najgorszy pewien moment jest krytyczny. , najlepiej na przerwania to zrobić z jakimiś timeoutami.
Gorzej, jeśli algorytm tego nie gwarantuje - a ja właśnie takie urządzenia ostatnio głównie robię. A jaka jest różnica, czy nie nadąży na przerwaniach, czy przez DMA? ;] Jak nie nadąży, i tak któreś dane musisz zadeptać, albo przyblokować nadawce RTSem. A to może robić supervisor, którego częstotliwość odpalania jest już tylko zależna od głębokości...
Polling- czyli odpytywanie. Pojedyńczych pinów na tyle często żeby ich stan zmieniał się kilka-kilkadziesiąt razy wolniej niż to odpytywanie. Ponieważ procesor jest szybki a sygnały na pinach zmieniają się zwykle wolno to tak się robi. W głównej pętli- raczej nie w przerwaniu. Oczywiście to trzeba oszacować albo czasem dokładnie obliczyć- zależy od...
Przerwanie do debouncingu styków to jest takie sobie. To nie jest sygnał o jasno określonej szybkości narastania zbocza. W przypadku takiego sterowania każde zakłócenie będzie odebrane jako sygnał przerwania. Na wejście przerwania powinien iść sygnał ukształtowany przez jakiś przerzutnik albo układ RC. Polling w pętli głównej albo odpytywanie co jakiś...
Co się dzieje jak ARM VIC vector mode jest zablokowany w rejestrze Host Control Register? To w jaki sposób przerwania są realizowane, tzn. wiem że poprzez metodę odpytywania (polling)... z tym, że zauważyłem, że i tak jest wykorzystywana tablica wektorów adresów procedur obsługi przerwania (z rejestru Interrupt Vector Address Register0-N (gdzie N to...
czesc, mam czysto teoretyczne pytanie dot. wymiany danych miedzy 2mikrokontrolerami. Mam to wytlumaczyc podczas prezentacji,ale troche mi sie juz pomieszalo. Z tego co zrozumialam to:SPE=1,MSTR=zalezy,SPIE=1,SPIF=1, Master ustawia SS=0 i pisze w Data Register co wlacza Clock Generator(czy to znaczy SCK=1???) i bajt zostaje przeslany do Slavea. Wtedy...
OK, opaliłem HIDa kompletując to w osobnym folderze (tak że jestem pełen zachwytu dla siebie :) ) i mam kolejne pytanie. Transmisje można podtrzymywać na dwa sposoby- polling lub interrupt, czyli albo wywołuje w pętli głównej obsługę co przynajmniej 10ms albo zostawiam to przerwaniom. No i właśnie, o jakie przerwania chodzi?. Nie widziałem żeby tam...
przycisk który Ty naciskasz "raz" może wygeneruje tylko jedno zbocze, a może 10000 (drganie styków). W jaki sposób w takim razie "sensownie" obsłużyć przyciski? Polling i softwareowy debouncing - to wiem, a jak to zrobić sensownie/porządnie?
Było robione na eventach - to dopiero była masakra... wysłanie kolejnego żądania musiało się znajdować w kodzie eventu odebrania odpowiedzi - problem z przerwaniem odpytywania, z obsługą przekroczenia czasu oczekiwania z wprowadzeniem wymaganych opóźnień. Polling portu powinien się odbywać w oddzielnym wątku i w pętli.
Linia do przerwań, jest tylko dodatkiem o którym pomyślałem, polling z ATMegi i tak będzie wykonywany (co pewien czas) ale jeśli w żadnym urządzeniu nic się nie zmieniło to po co? Magistrala to 1-Wire, myślałem tylko o dorobieniu takiej dodatkowej lini żeby niepotrzebnie nie generować ruchu na tej magistrali. Co do rezystancji to masz rację, mój błąd,...
A i zrobiłem tak, że nadaję za pomocą DMA oraz odbieram pollingiem Sposób który wybrałeś jest po prostu z założenia zły. Nadając przez DMA osiągniesz max możliwą do uzyskania prędkość. Odbiór przy pomocy pollingu zwykle nie ma prawa w takim przypadku działać, bo kod który go realizuje jest fizycznie zbyt wolny żebyś w końcu nie trafił na overrun (oczywiście...
Program w tej wersji działa dla ośmiu kanałów. No pewnie że dla innej ilości kanałów będzie źle. Albo dla portu dać maskę i wystawiać dla mniejszej ilości kanałów. Albo zmieniać zależności czasowe. A spróbuję połączyć te dwie funkcje. Ale z wylączeniem przerwania od ADC- to nie wiem. Żądanie pomiaru jest ustawione sprzętowo w rejestrze SFIOR- od przepełnienia...
W RFM12 trasceivery ustawia się poprzez komendy SPI, wysyłanie następuje poprzez wybranie odpowiedniej komendy i wypełnienie bufora FIFO (również via SPI). Odbiór może następować poprzez polling (czyli mikrokontroler sterujący co jakiś czas "odpytuje" urządzenie czy odebrano dane) lub w trybie przerwania (generowane przez RFM12 w momencie wypełnienia...
No chyba żartujesz. Co Ci się nie podoba w ATmedze? To dlaczego w obsłudze RFM12 nie stosujecie przerwań ? We wszystkich (?) aplikacjach widzę tylko tryb "polling", a dla komunikacji z modułem, "progromowy SPI" ? Może nie zajrzałem do wszystkich aplikacji ? A z modułami to też chyba żartujesz. Ja przy kodowaniu nadmiarowym oczekuję transmisji 150kb/s...
Sensu w tym żadnego nie widzę - skąd i po co te przerwania Jeżeli chodzi o moje rozwiązanie, to przerwania będą pochodziły od 8275, 8042, 8251 i może jeszcze od czegoś. Jak na razie uruchamiałem układy przez polling, zaś 8259 testowałem osobno z generatorem funkcji na jednym z wejść. Jeszcze nie podłączałem poszczególnych peryferii pod linie IRQ 8259....
W takim razie rozwiąż to inaczej - skonfiguruj przerwanie zewnętrzne tak, aby było wyzwalane zmianą stanu i osiągnij ten efekt w ten sposób - polling pinu to w tym przypadku moim zdaniem nie jest najlepsze rozwiązanie.
Co ja widzę? Ty Cały kod programu z dziesiątkami pętli nieskończonych i delay'i wrzuciłeś w kod obsługi przerwania?? Gratuluję pomysłowości... :) Po co stosując przerwanie od zakończenia transmisji używasz jeszcze jakiegoś USART_vReceiveByte(void) które miałoby sens gdybyś stosował polling. Nie prościej w [syntax=C] ISR(USART_RXC_vect) { data=UDR; //dalszy...
Mam problem w poczynieniu założeń. W urządzeniu przypominającym małą suwnicę bramową mam zamontować ok. 20 czujników - w zasadzie krańcówek. Czy to będą transoptory szczelinowe czy kontaktrony- jeszcze nie wiem. No ale żeby nie ciągnąć grubej wiązki wymysliłem żeby badać ich stan przez I2C albo 1Wire. PCF8574 albo DS2413. Odległość jest głupia- 6-10m....
Polling w tym przypadku oznacza mniej więcej przesył manualny :D Procesor ma 168MHz, a czekając na paczki, które idą z prędkością 160kHz to równie dobrze mógłbyś go zwolnić do 1MHz. W przypadku tak wolnych transferów DMA jest idealne. Jeśli chcesz mieć większą kontrolę nad transferem to przerwania. Jeżeli nie przeszkodzi Ci to w dalszym postępie projektu...
Trochę sobie skomplikowałeś życie. - czy zmienne używane w przerwaniu (te, które również są) są volatile? - co to za wersja RTOSa bo chyba jakaś przedpotopowa :) - po co Ci taka kontrola przepływu ? Działa to teraz tak samo jakbyś nie używał przerwania w ogóle a wprowadza tylko zamieszanie. Funkcja i tak czeka aż się przerwanie skończy, więc czemu nie...
Bez przerwań nie da się zrobić absolutnie niczego, co jest bardziej skomplikowane. Dzięki zastosowaniu przerwań mikrokontroler nie musi stale sprawdzać, czy zaszło jakieś zdarzenie. Ciągłe sprawdzanie czegoś takiego (ang. polling) spowolniłoby program. Ponadto kolejny kłopot to odczytanie danej flagi z układu zewnętrznego (np. przez SPI/I2C) to dodatkowe...
Sądzę, że chodzi o konstrukcję programu w stylu: przerwania wykrywają zdarzenia i ustawiają flagi, main jest prostą pętlą (być może z uśpieniem procesora na końcu), w której są testowane flagi, a na podstawie wyników testów uruchamiane są inne procedury. Pozdrawiam, Dr.Vee
Debugger służy tylko do obserwowania skutków działania programu, np. pokazuje zawartość komórek pamięci. W debugerze się nie porgramuje. Musisz mieć skompilowany program, którego działanie podglądasz. Podejrzewam, że będziesz go pisał w assemblerze. Żeby pokazać polling musisz w jakiśch sposób generować na zmiane sygnały IRQ6 i 7 . W tym trybie nie...
Pytałem na samym początku o jakim uC rozmawiamy i dostałem odpowiedź, że problem jest ogólny. A to nie jest prawda. Problematyczny jest przypadek szczególny, niedoróbka ze strony Atmel'a. 5 czy 6 cykli zegara na synchronizację? Dramat. Może mało wiem i mało widziałem, ale żaden inny uC oparty na rdzeniach Cortex-M nie ma takich cudów.. Konstrukcje oparte...
Timer- np. Timer1- jako licznik zlicza impulsy zewnętrzne. Podane na odpowiednią końcówkę- T1 w wypadku ATmega8. Nie potrzebuje żadnego preskalera- bo preskaler dzieli impulsy z zegara- a tu nie ma co dzielić. Ustawiamy bity CS10-CS12 na external clock source- falling lub rising. Czy ustawiamy końcówkę T1 jako wejście- nie pamietam. Można ustawić. Ilość...
Poznałem już DMA o czym napisałem parę postów wyżej, w kontekście obsługi ADC. Właśnie taki sposób obsługi I2C jak w przypadku ADC via DMA byłby ideałem. Przy transmisji z ADC dzięki DMA nawet przez chwilę procesor nie jest wykorzystywany. Jedynie sprawdza co pewien czas czy dane z tablicy tych wyników mieszczą się w ustalonym przedziale. Przeoczenie...
Faktycznie, teraz dopiero zauważyłem, że dodałeś (a u mnie zabrakło zapamiętywanie poprzednich wartości). Dodatkowo skopałem inicjalizację zmiennych A0 i B0. Pierwsze uruchomienie (z pomocą zmiennej "init") pozwoli na poprawną inicjalizację zmiennych przechowujących "poprzednie" wartości. Dzięki temu przy starcie programu nie wygeneruje się impuls zmieniający...
Nie mogę się zgodzić, choćby dlatego, że można do tego zaprząc DMA i mikrokontroler nie będzie musiał NIC robić. Wersja "manualna" - przerwanie od ADC albo polling i wpisanie na port - też spokojnie by wyrobiła moim zdaniem. Ale z czym się nie możesz zgodzić? Że ledwo zapewnia? Napisałem tak bo zapewnia tylko przy określonej częstotliwości zegara (28MHz...
Napisano mi wcześniej, że nie mogę bezpośrednio użyć UDR w switch czy w if, żeby wrzucić z UDR do zmiennej tymczasowej i tą zmienną sprawdzać. Tak więc zrobiłem. Niestety zrobiłeś to źle. Napisano Ci również, że po odebraniu każdego bajtu rejestr UDR można odczytać tylko raz, a Ty wywołujesz funkcję odbierz() , która odczytuje i zwraca wartość rejestru...
A jaka to będzie różnica, czy robi to przerwanie a program sam nic, czy robi to program a przerwanie nic? Poza tym przerwanie realizuje przyciski zmiany godziny, żeby to miało ręce i nogi trzeba polling robić w równych odstępach czasu, program główny tego nie gwarantuje, musiałbym używać delay. Po zmianie godziny przyciskami trzeba przeprowadzić aktualizację...
Program ma wysyłać "powitanie" na port szeregowy. Kompilowany przy pomocy Winavr + avr studio(w najnowszych dostępnych wersjach). Bez optymalizacji wysyła "Witam" ale tylko raz, a powinien dwa razy. Po włączeniu optymalizacji nie wysyła nic. Gdy robiłem transmisję przez polling wszystko było ok. Przerwanie włącza makro TXON; . Dzięki Plik iom16.h /*...
Jesli transmisja ma być nieblokująca to polling odpada. Jak rozumiem można podłączyć modem tak, że po wykonaniu rozkazu dostaniemy przerwanie (również gdy coś się nie powiedzie). Wtedy wg. mnie trzeba zrobić bufor (np. cyrkularny) do którego będzie wpisywać pakiety główny program i inicjowac transmisję. Przerwanie będzie sprawdzało status, zdejmowało...
Następnie Ty zerujesz bit ACK i bit Stop powodując zawieszenie się magistrali. Ogarnij się.... Czyli ten fragment kodu jest błędny ? Jest w 100% poprawny.... Tak naprawdę jest to żądanie STOPU a nie jego wygenerowanie. Przed tym warunkiem ostatniego bajtu masz odczyt z DR oznacza to, że JUŻ TRWA odbiór ostatniego bajtu, po którym zostanie wygenerowany...
Witam W ramach poszerzania wiedzy i umiejętności postanowiłem rozpocząć zabawę z architekturą ARM i natrafiłem na problem - nie potrafię poradzić sobie z transmisją UART przez kanał DMA, w trybie polling wszystko działa. Napisałem program w oparciu o CooCox IDE i HAL drivery. Transmisja w trybie poling śmiga, zaś próbując wysłać coś przez DMA - kiszka....
A jaki właściwie masz ten mikrokontroler? Jeżeli coś z nowszych (mega88 itp), pozwalających na włączenie przerwań z dowolnego pinu, to widzę jeszcze szansę (dla trybu standard - 100kb/s). Natomiast nie wydaje mi się, aby dało się to zrobić całkowicie w polling-u. Jak byś to sobie wyobrażał, jeżeli procesor ma jeszcze czymś sie zajmować? Zrobienie programowego...
AVR z PCF8563 i AT24c256 A pytania: 1. Czy przerwanie np z licznika trwające dłużej (bo wówczas pewnie przerwanie będzie miało wpływ na I2C) wprowadzi błąd do transmisji I2C)? 2. Czy sygnał SCK jest nadawany ciągle (jedynie slave przechwytuje jego generowanie a czasie nadawania). Czy tez generowany jest tylko podczas transmisji, a gdy I2C nie jest wykorzystywana...
Bo nie ma tak, że komunikacja z JTAG jest niezależna zupełnie od działania procesora. Jeżeli idzie ci program gdzieś w krzaki, to i komunikacja z OCD może szwankować. Dlatego też pytałem o te tryby stand-by. Piszesz, że dopóki nie podłączysz USB, to wszystko działa ok i możesz krokować kod. Czyli może jednak coś z programem lub konfiguracją kompilatora,...
Z tego co czytalem w datasheecie to przy ustawieniu bitow preskalera CS.. na 0 licznik sie wylacza. Da sie to robic inaczej? Jest to dobry sposób. Zerowanie wartosci licznika 2 zrobilem na wszelki wypadek, bo nie bylem pewny czy czegos nie wpisuje jeszcze przy ostatnim takcie zanim sie wylaczy w przerwaniu, uwazasz ze to zbedne? Nie oto chodzi. Pętla...
timera powinien ustawiać flagi (np stan=port_z_czujnikami) i koniec przerwania (żadnego wyłączania przerwań i innych śmieci). Drugi timer odlicza sekundy (czy tam inne dt dla kolejnych diod), led_port(i)=schody(i) (środkowe 6 bitów, więc trzeba przesunąć i maskować); + flaga wejścia Generalnie ta idea jest bezsensowna. Zauważ że absolutnie zupełnie...
Z opisu wynika, że masz coś nie tak w programie, niestety bez wnikliwego przejrzenia całości nie ma szans, aby ci pomóc. W pewnych sytuacjach różnice w szybkości wykonywania programu pomiędzy -O0, a -O2 mogą przekraczać 50%. Jeśli tak napisany kod migający LEDem w pętli głównej, ma różnice w czasach wykonania 11-20s, to masz powaźnie skaszaniony kod....
Z tego co wyczytałem to, to przerwanie jest wywoływane przy każdym naciśnięciu klawisza. Jest ono zwiążane z przerwanie sprzętowym klawiatury. Domyślna procedura odbiera znaki i przekazuje je dalej. Wydaje mi się że procedura ta odbiera dane z portu klawiatury 0x60h. Klawiatura przekazuje bajt po naciśnięciu/puszczeniu klawisza. Po naciśnięciu przychodzi...
Ja też chętnie poczytam o eventach :-) Ostatnio tak kombinuję, że może dobrze byłoby zastąpić dynamiczny polling (czekanie na spełnienie jakiegoś warunku w danym stanie) po prostu wywołaniem danego stanu (z "niebytu") w momencie wystąpienia warunku (czyli eventu). Niestety, ale "coś" co zarządza eventami i potem przekazuje sterowanie do odp. fragmentu...
Nie- polling to sprawdzanie stanu (wejść, wyjść czy jakiejkolwiek zmiennej) co jakiś czas. Zwykle w głównej pętli- ale wtedy nie wiemy co jaki czas. A w tym wypadku zależy nam aby wiedzieć co jaki czas sprawdzamy. Po to aby obliczyć czas. To że w przerwaniu- to tylko dlatego że chcemy wiedzieć ile czasu trwa sygnał wysoki na wejściach.
Bo nie tak się używa przerwań zewnętrznych. Można po pojawieniu się przerwania od zbocza narastającego wystartować timer, w przerwaniu zmienić na zbocze opadające i gdy pojawi się zbocze opadające zatrzymać timer, odczytać jego stan do zmiennej volatile wykasować i ponownie ustawić na zbocze narastające. Mozna też wykorzystać oba dostępne przerwania....
Przepraszam za literówkę, polling. https://pl.wikipedia.org/wiki/Odpytywani... Za zwyczaj jak odpalisz coś sprzętowego w AVR, to potem nie ruszasz tych pinów. Musisz wybrać które chcesz używać. Możesz wstępnie coś ustawić na tych portach przed przejściem na sprzętowe, ale zwróć uwagę na polaryzacje i fazę (2 bity, dokumentacja) bo przy odpaleniu sprzętowego,...
Witam! Z pewnością chcesz wykorzystać mechanizm "polling" :) jak to się ładnie nazywa w dokumentacjach. Po pierwsze w ATmega8 nie ma flagi Tirf.0, jest natomiast flaga Tifr.0 o którą zapewne Ci chodzi, dlatego pewnie nie do końca che działać. ;) Pozatym aby używać przerwań w ATmega8 musisz też odblokować globalny system przerwań, ponieważ po starcie...
Witam! Mam taki oto problem dotyczący fragmentu kodu dołączonego do tego postu. Po wyłączeniu optymalizacji poniższy kod wyrzuca mi na wyświetlacz (funkcja write_char) znaki "ba" , czyli wszystko jest OK. Gdy optymalizacja jest włączona to wyrzuca mi "aa"! Czy ktoś wie jak coś takiego rozwiązać. Środowisko AVRStudio 4. Chciałem sobie zrobić elegancki...
Co to są za bzdury, gdzie ty widziałeś 16bitową atmege?! ------------- Rodzina propellerów nie zadziwia niestety niczym - scalaki są drogie, ciężko dostępne, i wolne . Naczytałem się kiedyś materiałów na ich temat. 1. Spin to badziewie. Sami się przyznali do tego, że soft w spinie marnuje sporo mocy obliczeniowej rdzeni. Siłę procka widać dopiero wtedy,...
(...) odczytu temperatury. Jaki zaproponowałbyś kod (AVR GCC), aby nie trzeba było używać delay'a (może pooling lub maszynę stanu) ? Przy okazji przedstaw optymalną (bez zmiennoprzecinkowych liczb) konwersję danych ze scratpad'a na stopnie (może być złożeniem liczb całkowitych jako stopnie i części ułamkowe). Do obsługi termometrów DS18B20 bez blokowania...
Transakcja przerwaniowa ( którą jest np hid- moje przyp. )jest elementem transferu przerwaniowego.Nazwa może być myląca, ponieważ przerwanie kojarzy się na ogół z natychmiastową obsługą zdarzenia, podczas gdy w systemie USB transfer przerwaniowy polega na odpytywaniu urządzenia(polling) w regularnych odstępach czasowych -tak małych jak 1ms lub wielokrotność...
Dziękuje...jeszcze pytanie o nadajnik - rfm02. Wg dokumentacji http://www.hoperf.com/upload/rf/RFM02.pd... , patrząc na przebieg czasowy, jest tak, że aby wysłać dane przez SDI, należy wpierw nadać 0xC6, a potem bez zegara nadawać daną...jak to synchronizować (skąd wiadomo, że nadaną np. jedną jedynkę a nie dwie jedynki)? Patrząc na przykład programowania...
Ja bym zrobił polling- czyli odpytywanie stanu wejścia. Co jakiś czas- dużo mniejszy niż minimalny czas trwania impulsu. W petli głównej. A czas odpytywania wyznaczany przez któryś timer. Skoro czas odpytywnia wyznaczany przez timer to co szkodzi od razu skoczyc do obslugi tego timera i odpytać w przerwaniu? Angazowanie programu głównego do tego celu...
Oczywiście jest tak jak kolega mówi winne są USART_putstr("Rejestr: "); USART_putint(wynik,16); ponieważ nie masz zadnego buforowania i korzystasz z pollingu a nie przerwan znaki odbierane podcas wykonywania tych funkcji przepadają ( to jest 2 linie) musisz wrzucic te odebrane znaki do jakichś zmiennych a wysyłać/wyswietlac dopiero po zakonczeniu całej...
Znalazlem juz problem. Gdyby ktos byl ciekaw: Problem elzal w upgradzie CrossWorks. W wersji 2.0.5 -> 2.0.6 zmianie ulegla jedna wartosc domyslna DebugIO Implementation. Uzywalem w projekcie wartosci domyslnej, ktora jeszcze w 2.0.5 byla 'Mem Poll', czyli polling pamięci. Od 2.0.6 to sie zmienilo (nie moge znalezc co jest obecnie wartoscia domyslna)....
Getrc5 działa bez problemu na at90s2313 i attiny2313. Takie porady są najbardziej rzeczowe na tym forum ;), bardzo dużo pomogłeś, prawie problem rozwiązany :). Takie "nabijanie" tematu powinno być przez moderatorów korygowane... To dlaczego ciągle na tym forum jest mnogość tematów na temat GetRC5 i tiny2313 np. Witam Mam problem z odbiornikiem RC5...
Czy ustawienie priorytetów załatwi problem czy może jest jakiś inny powód że przestało to działać? Definitywnie to drugie. Na 99% Twoje przerwania trwają zbyt długo lub użyłeś w nich (pośrednio lub bezpośrednio) funkcji blokujących/oczekujących/pollingu. Jeśli zaczniesz kombinowac z priorytetami bez zrozumienia przyczyny, to tylko wpędzisz się w więcej...
Nie ma potrzeby stosowac interrupt. Jezeli jednak go stosuje to bezposrednio w jego subrytynie moze wpisac "Exit For" , natomiast moze bezposrednio w petli "for...next" sprawdzac (polling) Stan logiczny pinu wejsciowego I w przypadku jego zmiany zastosowac "EXIT FOR" E Marcus
wiem, ze 100 razy szybciej napisałbym sobie to od zera, ale trzeba poznać HALA i widzę, ze będzie to droga przez meke :( A po co w ogóle się męczyć? W repozytorium CubeMX (można też to ściągnąć osobno) masz gotowe przykłady jak obsługiwać I2C w HAL w różnych trybach poczynając od prostego pollingu przez przerwania i DMA. I to dokładnie na Twoją płytkę....
No oczywiście że nie ma problemu, ale trzeba umieć to napisać :] Nie każdy potrafi.... Trudność (nie problem) polega właśnie na napisaniu tego dispatchera, bo: 1) transakcje nie powinny być wskaźnikami w fifo, lecz powinna być lista niezrealizowanych transakcji tak samo jak lista zrealizowanych transakcji 2) transakcje powinny być priorytetowane 3)...
Nie wiem jak podłączyć lcd zgodne z biblioteką, biblioteka XPT2046 nie pozwala mi zdefiniować innych pinów SPI To prawda, że bezpośrednio nie pozwala, bo to taka uniwersalna biblioteka jest ;) Używa natomiast domyślnych pinów dla magistrali SPI (kanał HSPI ): SCK - 14 MISO - 12 MOSI - 13 CS - 15 W ten sposób trzeba połączyć TS z ESP32 i na razie odłącz...
Sprzętowo tak, jak zrobi programowy I2C to 1,1Mb/s da sie uzyskać przy Fosc16MHz, więc przy 20MHz (np Mega324) jakieś 1,3Mb/s. Inna sprawa to na ile slave pozwala. Programowe I2C o prędkości 1.3Mb/s. Nie ma jak 100% czasu procesora przeznaczać na komunikację przez polling. To brzmi jak rozsądny pomysł. Na slave to będzie już trzeba AVRa z zegarem 100MHz....
Czołem wszystkim :) Chciałbym sobie napisać w końcu porządny sterownik do obsługi UARTa i bibliotekę do obsługi SIM800L. Wykorzystywany sprzęt: LaunchXL-TMS320F28027F. Już mam za sobą podejście do tego zestawu i po przygodach z zasilaniem SIM800L'a uzyskałem komunikację. Pierwsze podejście to jednak jakiś polling i po czasie patrząc w kod to widzę,...
Panowie, a ja mam takie pytanie, bo mało na ESP robiłem, ale mam ESP-WROOM-32 i chciałem użyć na tym przetwornik ADC, ale w sposób nie blokujący. Z tego co kiedyś szukałem, w starej wersji środowiska Arduino były funkcje umożliwiające testowanie flagi, czy przetwornik już skończył, ale potem te funkcje zniknęły i przestało się kompilować. Próbowałem...
Ale problemów jest więcej. Masz np. klasę GPIO, która powinna mieć tylko jedną instancję, a co jeśli programista sobie utworzy kolejną? Trzebaby zrobić singletony. To nie jest żaden problem, a singletony nie są żadnym rozwiązaniem. Tak samo można powiedzieć "a co jak programista napisze dwie funkcje do odbioru przez UART1 - jedną na przerwaniach a...
przerwać polling stm32 polling renesas przerwania
samsung model matrycy kontrolka ładowania renault scenic czyszczenie lasera samsung
Żywotność elementów w drukarce Samsung CLP-325 Usunięcie konta na YouTube - możliwe przyczyny i rozwiązania