Kiedyś umieściłem na obecnie niedostępnej stronie and.elektroda.eu materiał o dekodowaniu sygnału DCF. Urządzenie potrzebne było w urządzeniu, które wymagało synchronizacji czasu w pomieszczeniu gdzie wyprowadzenie anteny zewnętrznej do GPS było utrudnione. Poniżej umieszczam treść oryginalnego materiału, który może być pomocny przy budowaniu urządzeń...
Zacznij od opisania formatu danych. Po czym odbiorca ma poznać, że zakończono przesyłanie liczby? Tego ne napisałeś powyżej. Odbiór łatwo zrobisz w przerwaniu, pisząc obsługę przerwania w konwencji automatu. Najpierw poczytaj, co oznacza poprzednie zdanie. Potem możesz zacząć pisać automat. Potrzebne tylko dwa stany: - oczekiwanie na 'L' - skanowanie...
Witam, moim zdaniem źle odbierasz dane ze sprzętowego spi. Nie ma sprawdzenia czy dana (bajt) jest przez spi odebrana, a Ty zczytujesz ją zanim odbieranie sie zakończy. Przy spi programowym Ty wysyłasz zegar i po ośmiu taktach sprawdzasz liczbę odebranych bajtów. Przed odczytem SPID.DATA sprawdź flagę przerwania - co znaczy że odebrano, bądź wysłano...
Tego Ci trzeba (gotowy przykład): http://mikrokontrolery.blogspot.com/2011... a to przy okazji: http://mikrokontrolery.blogspot.com/2011...
witam. buduje systemy na rs485. niestety zadna z komend bascomowych nie była mi przydatna. używam przerwania do odbioru i sam obsługuje własny bufor z ustawieniem flagi informujacej iz właśnie w buforze jest odebrany "ważny" pakunek danych '------------------------ Rx_serwer: Rxdata = Udr1 Rem zabezpieczenie przed przepełnieniem bufora If Rx_count...
Profesjonalnie to można programować w każdym języku, tylko trzeba go po prostu znać i umieć stosować w praktyce co najważniejsze. Dla takich początkujących jak ty Bascom powinien być jednym z lepszych języków tym bardziej, że nie rozumiesz jeszcze przerwań. Bascom daje ci gotowe rozwiązania w tym zakresie na maxa - popatrz sobie na Config Serialin ........
A spróbuj tak: [syntax=basic4gl] ' Fuse bity ustawione fabrycznie $regfile = "m8def.dat" $crystal = 1000000 Config Portb = Output 'sterowanie segmentów LED Config Portd = Output 'sterowanie segmentów LED Config 1wire = Portc.5 Anoda1 Alias Portc.1 ' Lewy wyświetlacz Anoda2 Alias Portc.2 Anoda3 Alias Portc.3 Dim Nr_wysw As Byte Dim Liczba As Long Dim...
To jest proste jak świński ogon :D ahahahaha, ale napisz kawałek kodu. Czy masz tam jakiś LCD czy nie, czy masz tam jakiś Timer ustawiony do odmierzania sekundy czy Wait`ujesz :D Czy w dokumentacji czujnika pisze, że nadaje tez na końcu niewidoczne w terminalu znaki 13 lub 10? EDIT: aaa masz tu taki prosty. Napisałem przy śniadaniu więc błąd mógł się...
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...
Kilka spostrzeżeń na temat IR. AC jest problematyczne z obecną implementacją timera 50uS, ponieważ ciągi wymagane przez AC są znacznie dłuższe (w porównaniu do protokołu NEC), a timer jest ustalony, ponieważ powoduje błąd po pewnej długości ciągu poleceń. Próbowaliśmy tego z IR2 i flipperem zero w tym czasie, dlatego istnieje sterownik IR2. Zmienić...
http://obrazki.elektroda.pl/3796073600_1... I Opis ogólny urządzenia: Chciałbym przedstawić mój projekt bazujący na mikrokontrolerze STM32 dokładnie na modelu STM32F11RET6 http://www.st.com/content/st_com/en/prod... Jest to sterownik dla urządzenia...
W Zmienne globalne — wiedz, kiedy są modyfikowane Zmienne globalne muszą być ostrożnie obsługiwane, gdy są używane z przerwaniami, ponieważ te są generalnie asynchroniczne. I jeżeli zmienna globalna jest modyfikowana przez ISR, może zostać zmieniona w dowolnym momencie. Musimy mieć na uwadze następujące aspekty: Odczyt/zapis zmiennych globalnych...
wytłumacz mi kod bardziej szczegółowo. Oczywiście, chętnie to zrobię. Zacznijmy od początku: 1. `#define F_CPU 8000000UL` - To jest definicja częstotliwości taktowania mikrokontrolera. W tym przypadku wynosi ona 8 MHz. 2. `#include <avr/io.h>, #include <avr/interrupt.h>, #include <util/delay.h>` - To są biblioteki, które zawierają...
Dodam, że w obsłudze przerwania występuje takie ostrzeżenie przy kompilacji: "usart.c:60: warning: passing argument 1 of 'USART_puts' makes pointer from integer without a cast". Tylko nie wiem o co w nim chodzi, wszystkie typy zmiennych się zgadzają. Nieprawda, podajesz char tam gdzie powinno być char *. Ale po prostu wołasz złą funkcję. W przerwaniu...
Nie miałem na myśli obsługi przycisku w przerwaniu tylko o przycisk, który wykonuje przerwanie w którym jest wysyłanie komendy lub odbieranie (SLAVE). Nie wiem, czy dobrze to rozumiem, ale na wszelki wypadek. Nie wpadnij czasem na rozwiązanie, aby przycisk generował przerwanie. To raczej kiepskie, ale jeśli już, to pamiętaj o debouncingu przycisku...
Sposób najprostszy - użyć przewodów zamiast mikrokontrolera. Jeśli nie stać nas na dwa przewody, można zaprogramować DMA w tryb cykliczny na bezpośrenią transmisję pomiędzy rejestrami danych obu UARTów. Jeśli oprócz kopiowania dane mają być jeszcze przetwarzane, to należy oprogramować oba UARTy na przerwaniach i w nich zrobić przetwarzanie danych i...
Witam, drogich forumowiczów. Mam problem z komunikacją kilku urządzeń w sieci rs485. A tak prawdę mówiąc to z komunikacją pomiedzy dwoma, jednym "master" i jednym "slave". Normalnie staram się zadawać pytania w ostateczności na forum Elektroda, ale po prawie 3 tygodniach siedzenia przy problemie, przeglądaniu masy poradników i postów związanych z rs485...
Ja tam nie wiem, ale jakoś podejrzanie wygląda, że jest włączone przerwanie odbioru danych UART (a handlera ani widu) a nie ma włączonego przerwania końca odbioru DMA.
Dobrze. Użyłam Twoich funkcji, bo moja metoda na nic się nie zadała. Niby Twoje rozwiązanie działa. Ale zastanawia mnie jeden fakt. Otóż ze zrobionej aplikacji w C++builder wysyłam 5 liczb na mikrokontroler, i odbijam je z powrotem do aplikacji. Poprawnie odebrane są tylko te liczby które są większe od 8. Nie rozumiem tego. Tak wysyłam z builera char...
A faktycznie :D Tylko Ci to trochę wstrzymuje program. Bo instrukcja InputBin w przerwaniu poza odebraniem pierwszego bajtu czeka też na kolejne 3. Poza tym prawdopodobnie ustawiają one na nowo flagę przerwania więc po odebraniu tych 3 bajtów i wyjściu z przerwania program znowu wchodzi w przerwanie. Odbieranie zmiennej Long w przerwaniu ostatecznie...
Miałem takie zadanie: odbieram wiadomości z kolejki (message queue), używając mq_notify() do otrzymania sygnału, że pojawiła się wiadomość w kolejce, która była pusta, i mq_receive() do odbierania. Każda wiadomość może zawierać wiele elementów, które mają być przekazywane do EPICS-a. Tu mniejsza o to, czym jest EPICS - istotne jest może to, że nie mogę...
Ok, to postaram się krótko i na temat ;-) Moduł RFM12B podłączony jest do ATMega8 następująco: MEGA8 - RFM12B (16) SS - NSEL (17) MOSI - SDI (18) MISO - SDO (19) SCK - SCK (5) INT1 - DCLK/CFIL/FFIT oraz FSK/DATA/nFFS przez rezystor 10k do Vcc Makro, którego używam dla klarowności kodu: #define cbi(sfr, bit)...
Lecz nie potrafię wymodzić alternatywy dla odbioru danych i kożystam z przerwania RXNE: W przerwaniu masz odbieranie 3 bajtów i 3 pętle oczekiwania? ale on na odczycie wartości ze status register po prostu się zatrzymuje Jakbyś warunek pętli i jej ciało rozpisał w dwóch linijkach to byś się przekonał, że nic się nie zatrzymuje (zakładam, że używasz...
Chciałbym zrobić wysyłanie i odbieranie za pomocą przerwań(zgodnie ze sztuką),aby nie "zawieszać" wykonywania pozostałych operacji. Zacząłem od wysyłania. W wielu bibliotekach, które przeglądałem spotkałem się z takim podejściem, więc sam też postanowiłem je wykorzystać. W docelowym układzie oprócz UART, będzie wykorzystywany jeszcze sprzętowe SPI,...
Witam, Mam taki oto problem. Mianowicie: W przerwaniu INT0 (wywoływanym z PCFa) wysyłam co sekundę ramkę danych (konkretnie 13 bajtów) na USART0 na którym to działa pewien czujnik. Następnie oczekuję od niego odpowiedzi (47 bajtów) w przerwaniu od USART0. Odpowiedź dopisuję do pliku na karcie SD. I wszystko jest OK. Co pewien czas (np. raz na dobę)...
Witam, Napisałem sobie komunikację socketową w CODESYS jak poniżej: [syntax=c] IF run = TRUE THEN sa.sin_family := SOCKET_AF_INET; sa.sin_port := SysSockHtons(port); result := SysSockInetAddr(strIpAddres, ADR(sa.sin_addr.ulAddr)); //convert Ip STRING to IP adres hSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP, ADR(result));...
spróbuj odbieranie zrobić w przerwaniu (m32 ma wektor przerwania odpowiadający zakończeniu transferu przez SPI). W inicjacji slave'a: SPCR = (1<<SPE)||(1<<SP... // wł. SPI; SPI Interrupt Enable
Patrz ustawiasz nadawanie, wpisujesz dane do nadania i odrazu przełączasz na odbieranie co się stanie? Właśnie dla tego przerzuciłem zmianę kierunku spowrotem na odbieranie do przerwania które jest wywoływane dopiero po udanym wysłaniu, no chyba że się mylę i przerwanie USART_TXC_vect wywoływane jest jeszcze gdy trwa wysyłanie?
Trochę jestem zmęczony i nie pomyślałem. Podpiołem teraz ten moduł rs232 pod starą płytkę z stm32f103 - bez problemu mogę wysyłać dane na pc'ta. Tylko mam problem z odbieraniem danych - nie wiem czy to przez remapowanie pinów coś nie działa czy co. Więc to na pewno zasilanie było przyczyną nie działania układu. Dodano po 30 Miałem nieskonfigurowane...
Przerwania dla USART wydaje mi sie że działają poprawnie, dlatego nie załączam kodu obsługi USART. Przerwania same w sobie muszą działać poprawnie, jeśli tylko procesor jest sprawny i taktowanie, i zasilanie poprawne. Tym niemniej kod obsługi przerwania może zawierać błędne założenia, które mogą być przyczyną.
Jedno mnie dziwi - nigdy nie miałem takich problemów. To, że timery czy inne peryferia sobie pracują, gdy rdzeń jest halt to nie powinno nikomu przeszkadzać, skoro stepowany rdzen w ogóle nie skacze pod wektory ISRów...? Gdy używam Ride7 to nie mam tego problemu, ale gdy przekroczyłem limit 32kB przesiadłem się na Eclipse+OpenOCD. No i niestety w trakcie...
Witam, proponuję przede wszystkim zrobić odbieranie kodów z pilota na przerwaniach: najpierw deklaracja na początku: On Int1 Int1_rc5 ' obsługa odbioru kodów z pilota Getrc5 Config Int1 = Low Level ' wyzwalanie przerwania niskim poziomem Enable Int1 czyli podłączasz odbiornik IR np do nogi INT1 Int1_rc5: If Flaga_rs = 0 Then Disable Int1 Enable...
Odbieranie danych z USART za pomocą przerwania odbioru, jest jak najbardziej sugerowane. Należy pamiętać, że dane przychodzą przez jakiś czas np. kilkadziesiąt µs, stąd by zsynchronizować czas odebrany za pomocą np. 10 bajtów, być należy uwzględnić czas trwania ich odbioru lub nie, jeśli czas ten nie jest istotnie długi.
SPI działa w systemie full-duplex. Czyli w zasadzie wystarczy połączyć w sposób przedstawiony w pierwszym poście. Do odbioru wykorzystać przerwania zewnętrzne. Układ RFM zadba o nadawanie i odbieranie automatycznie. Mam nadzieje że sie niemyle.
Z programowymi rozwiązaniami byłbym ostrożny. Można założyć, że przerwanie od uart wykona się w 10us. Oczekujesz na serwie rozdzielczości 1 stopień. Jak wyliczył (at)emarcus wymaga to sterowania serwem impulsami o rozdzielczości co najmniej 2,8us. Jeśli serwem nie będziesz sterował sprzętowo przez PWM tylko jak zaproponowano w #8 (https://www.elektroda.pl/rtvforum/viewt...
Chciałem zrobić obsługę portu szeregowego na linuxie w c lub c++. Wysyłanie danych działa mi OK, odbór przez read również. Prawidłowo działa mi także odbieranie danych po otrzymaniu sygnału. Chciałbym odbierać dane asynchronicznie w przerwaniu/funkcji obsługi sygnału. Wiem, że jako takiego przerwania sprzętowego w C nie obsłużę, ale można otrzymać sygnał....
Witam Nigdy nie potrzebowałem SPI bo używałem UART . Tym razem jednak chcę użyć SPI w przerwaniu do transmisji danych . Napewno coś pominołem lub nie doczytałem i dlatego mam problemy . Nadajnik nadaje , odbiornik odbiera ale dziwnie muli a z czasem bełty widzę na lcd . Jak zrobię bez przerwania to chodzi OK ale mi trzeba w przerwaniu. nadajnik: [code][syntax=vbnet]$regfile...
To działa: [syntax=c] #define Port_USART3 USART3 #define Port_USART3_CLK RCC_APB1Periph_USART3 #define Port_USART3_TX_PIN GPIO_Pin_10 #define Port_USART3_TX_GPIO_PORT GPIOB #define Port_USART3_TX_GPIO_CLK RCC_AHB1Periph_GPIOB #define Port_USART3_TX_SOURCE GPIO_PinSource10 #define Port_USART3_TX_AF GPIO_AF_USART3 #define Port_USART3_RX_PIN GPIO_Pin_11...
drogi starosto int0 jako przerwanie zewnętrznę może posłużyć np tak jak na laborkach do obsługi odbioru rc5 gdy podczas wystąpienia tego przerwania odbierany jest kod rc5 z odbiornika podczerwieni . pml11
To zależy jak wysyłasz znaki, niektóre funkcje, np. sprintf same dodają null na końcu, zależy to także od zapisu literału. Oprócz niepotrzebnego odczytu UDR musisz też inaczej rozwiązać powiązanie bufora zapełnianego w przerwaniu z odczytem w głównej funkcji programu. Bo teraz jeśli porównanie wypada pomyślnie to zerujesz x mimo, że bufor może zawierać...
A po co te cztery zadania? jak tu widzę tylko jedno przerwanie timera PWM, ew. drugie do obsługi LCD łącznie jakieś 200 linii kodu w C, z tego ponad połowa do LCD. W sumie to może wszystkiego nie napisałam ;) ale rzeczywiście nie ma tragedii pewnie. - Task algorytmy - dane wejściowe - bieżąca wartość natężenia światła i zadana wartość natężenia światła,...
Co do procka to LordBlick ma racje. W LV wywal tą strukturę sekwencyjną i te "prymitywną synchronizację". Daj lepiej w zwykłej pętli while odczyt i zapis. Jak wejdziesz w przerwanie ustaw flagę informującą procke o wysłaniu danych po wyjściu z przerwania. Procek wychodzi z przerwania i wysyła info do LV. Jak coś wpiszesz do rejestru to wyślesz, LV odbierze...
Wielkie dzięki za tak szybką odpowiedź. Czy mógł bym spytać co rozumiesz przez skopane sparsowanie? Jeśli chodzi o return 0 w funkcji uart_getc() - to w książce, z której korzystałem autor z tego skorzystał, tłumacząc, że 0 przy łańcuchach tekstowych oznacza koniec tekstu. Czy w takim razie lepiej było by zrobić np. coś takiego? [syntax=c] char uart_getc(void)...
Sprawdziłem i program w ogóle nie wchodzi do warunku if(Flaga==1). W przerwaniu Flaga jest ustawiana bez problemu, jednak mimo to program nie wykonuje instrukcji w if(Flaga==1). Ma ktoś jakiś pomysł dlaczego?? Dodano po 5 Hmm. Miałeś racje z tym volatile. Dałem volatile int Flaga i teraz jest OK. Dzięki Dodano po 1 Witam ponownie. Przetestowałem wszystkie...
Witam, Czy mógłbym kogoś prosić o pomoc w zbudowaniu instrukcji dającej mi w języku C wartość ostatnich dwóch zmiennych na stosie ? Problem z jakim się borykam wygląda tak, że gdy program zbytnio 'zmęcze' danymi przychodzącymi, to przestaje wywoływać pętlę główną i skacze gdzies... niewiem gdzie. Lecz obsługa przerwania od odebrania znaku cały czas...
Witam, Programuje STM32F407 przy pomocy HAL ( STM32CubeMX ) i Keil uVision 5 . Stworzyłem komunikacje przez UART HAL_UART_RxCpltCallback wykona mi się dopiero po przyjściu 6 znaków Komunikacja UART potrzebna jest mi do implementacji interfejsu MODBUS. W interfejsie MODBUS jak czytam z pdfa "http://modbus.org/docs/Modbus_Applicati...
Witam, Potrzebuje pomocy w przetwarzaniu danych przychodzących na uart od modułu SIM900. Generalnie chodzi o to bym mógł odebrać i zidentyfikować dane np numer dzwoniącego, tekst smsa z komendą. Obsługę uartu mam sprawną w dwie strony. Moge wysyłać z dane z pamięci RAM i flash. Odbieranie danych realizuję w przerwaniu. Moduł SIM900 ma pewien standard...
Oczywiście, USART w przypadku wysłania i odbioru jest na przerwaniach, w pętli głównej sprawdzana jest tylko flaga, czy zostało już zakończone odbieranie całego komunikatu i następuje dalsza obróbka, ogólnie właśnie dodałem korekcję gamma i mogę powiedzieć że po wspomnianych poprawkach projekt spełnił oczekiwania. Oczywiście na małych jasnościach 8bitów...
Inicjalizacja [syntax=cpp] void uart::init(unsigned int myubrr) { /* Ustala pr�dko�� transmisji */ UBRRH = (unsigned char)(myubrr>>8); UBRRL = (unsigned char)myubrr; /* W��cza odbieranie i wysy�anie*/ UCSRB = (1<<RXEN)|(1<<TXEN); UCSRB |= _BV(RXCIE); //włączenie przerwania od odbiornika /*...
Konkretne pytanko. W książce Marcina Wiązani podano przykład kodu na odbieranie RC5 w przerwaniu dla Atmega8. Bazuje on na przerwaniu Int0. Ja w swoim hardware mam odbiornik podłączony do Int1, przy czym timer1 mam zajęty przez inną funkcję softu. Oto listing z książki: 'Program odbierający sygnały nadawane w standardzie RC5 'w przerwaniu Int0 'Na LCD...
odbieranie polsat odbieranie satelity odbieranie głosu
podłączyć falownik silnik schemat zmywarka electrolux kupić service xerox
Konfiguracja LNB dla Hotbird i Astra na Sony Bravia Windows 10 Pro – niedziałające klawisze F8 i F9 w notebooku, Fn Lock, sterowniki, BIOS