Przerwanie bym raczej właczył przed odpaleniem DMA. Odbiór przez DMA to raczej tylko w przypadku kiedy masz zawsze tę samą ilość danych. nie wiem jak w Twoim przypadku bo nic o tej "ramce" nie piszesz. Rozmiem że ma dokładnie 30 bajtów. Jezeli ma więcej lub mniej o choćby jeden bajt to Twój algorytm nie zadziała. - jezeli mniej np o 5 bajtów to odbierze...
Lepiej [syntax=vbnet]Print "dobra ramka " ""[/syntax] umieść poza przerwaniem.
http://obrazki.elektroda.pl/4164965000_1... Witam. Od dłuższego czasu interesuję się technologią RFID i dziś chciałem zaprezentować rozwinięcie mojej dawnej konstrukcji mianowicie czytnik kart RFID ze zintegrowaną anteną na płytce PCB. Ze względu na skomplikowaną konstrukcję anteny (niewielkie odległości między ścieżkami) płytka została...
zależy jak tą ramkę sobie zorganizujesz ale jeden z prostszych sposobów, gdy przesyłamy znaki ASCII to koniec ramki łatwo np odróżnić po tym, że nadleciał znak ENTER (0x0d). Gdy wykryjesz go w przerwaniu to już możesz powiadomić pętlę główną czy jakieś zdarzenie w tej pętli, że już jakaś cała i gotowa ramka czeka na odczytanie. Jeśli pętla główna będzie...
Ło matko! ludzie co wy tu opowiadacie? Jarosław J - odnośnie twojego problemu ale już konkretnie: 1. Możesz najspokojniej w świecie przy komunikacji dwóch procków zrobić tak, że jeden będzie taktowany wewn oscylatorem a drugi np. kwarcem (Żaden problem) !!! 2. ale używaj sprzętowego UARTA w Bascomie a nie to co tutaj wszyscy razem wyczyniacie ;) 3....
Czy kiedykolwiek zdarzyło Ci się użyć terminu UART tylko po to, by zostać poprawionym przez innego inżyniera, że nie jest to UART, ale USART? W pewnych przypadkach oba te terminy są zamienne, ale w wielu innych używanie ich wymiennie jest niepoprawne. Przyjrzyjmy się, czym dokładnie są USART i UART, a także jakie są pomiędzy nimi główne różnice. Większość...
Szanowni Państwo, Mam pewien problem z dekodowaniem zmiennych w ramce usart po string hex. Procesor Attiny1614 połączony z modułem bluetooth po TTL. Zaznaczam że ze zwykłymi stringami nie mam problemu tylko jak mam przekonwertować z string hex na int i odesłać. Procek wysyła proste rozkazy np: włącz, wyłącz, włącz na określoną moc, włącz na określoną...
https://obrazki.elektroda.pl/3922135000_... https://obrazki.elektroda.pl/1944236100_... Większość mierników panelowych ma małe wyświetlacze. Wskazania max 1999 (gdy oparte o ICL7106/7 lub podobne) lub mniej (np 199 gdy oparte o mikrokontrolery). Wersje na mikrokontrolerach przeważnie nie mierzą wartości ujemnych. Nie...
Często spotykam się z transmisją której ramka zaczyna się od 0x02 - STX a koniec oznaczony jest 0x03 - ETX. Poztywne odebranie takiej ramki sygnalizowane jest odesłaniem komendy 0x06 - ACK a błędne 0x15 - NAK. Przykładowa komunikacja: N: STX, ADRES, DANE, ETX O: ACK Z tym że dane w takiej komunikacji wysyłane są jako znaki ASCII. Wartość 1238 jest wysyłana...
Witam! Mam prośbę o pomoc w poprawieniu kodu. Otóż mam zadeklarowane globalnie następujące zmienne: [syntax=c] volatile uint8_t x; volatile uint8_t recaive_complete; volatile uint8_t block_recaiver; volatile unsigned char bufferin[5]; [/syntax] W programie głównym mam 2 funkcje w pętli while. [syntax=c] while(1) { ReadKeypad(); ComRdFrame(); }[/syntax]...
Witam. Próbuję odpalić komunikacje USART z PC na płytce nucleo STM32F302R8, z dokumentacji wynika, że USART2 jest podłączony z programatorem przez który można się komunikować z PC. Chyba wszystko dobrze ustawiłem a przynajmniej podobnie jak w poradniku właśnie z elektrody. Po wciśnięciu przycisku reset na RealTermie pojawia się "nul" czyli pusta ramka...
Problem mam chyba typowy. Oprogramowuje interfejs komunikacyjny. Jednym z poleceń tego interfejsu jest reset. Sprawa ma się oczywiscie odbywać tak, ze przychodzi ramka z poleceniem resetu, odsyłana jest ramka z ACK i następuje zerowanie. USART działa na przerwaniach. Jak wykryć kiedy ostatni bajt ramki opuścił bufor nadawczy? Teraz mam taki kod: USART_ITConfig(USART1,...
Witam , może mi ktoś wytłumaczyc w prosty sposób lub przesłac link co to jest format ramek , a tu podaje fragment książki z którym mam problem. "Przy pomocy interfejsu USART można wygenerować wszystkie 30 kombinacji formatów ramek. Każda ramka zaczyna się bitem startu, który nie podlega konfiguracji. Po nim następuje 5 – 9 bitów danych"
Witam Bardziej profesjonalnie jest wszystkie układy potraktować jako slave . Każdy słucha i czeka na przerwanie z uarta , jak je otrzymuje odbiera zawartość z udr porównuje i albo odbiera dalej albo ignoruje i czeka na kolejny adres . Atmel wyposażył układy w tryb multimaster ,który się do tego świetnie nadaje i warto o nim przeczytać w dokumentacji...
Ok, czyli jak obliczyć ile trwa wysłanie 1 bajta danych zakładając że ramka składa się z jednego bity startu, ośmiu bitów danych i jednego bitu stopu? Bitów parzystości nie ma. Prędkość transmisji to 115200baud. Dodano po 18 Dobra chyba sobie poradziłem. 115200 bitów na 1 sekundę czyli wysłanie 1 bitu trwa 8,6us. Czyli cała ramka wyśle się w czasie...
No tak nie do końca. Na AVR, w czasie transmisji do WS2812, na przerwaniach (usart/spi) obciążenie procka jest na poziomie 80..90% (zależnie od Fclk), "tachlując" GPIO 100% bez względu na Fclk. Liczenie bardziej skomplikowanych efektów w czasie rzeczywistym jest problematyczne, al jeśli jeszcze ktoś ma ochotę używac w tym czasie USART (np sterowanie...
Moja ramka składa się z 8 bajtów (ciągiem) które wysyłam własnej aplikacji napisanej w C#
Witam Testuje transmisje poprzez USART asynchroniczą, narazie na kablu, lecz nie każda ramka danych dochodzi(BAUDRATE=2400). Pytam się czy procki muszą być stabilizowane kwarcem, żeby poprawnie taka transmisja szła. Drugie pytanie dotyczy Attiny2310 w rej. UCSRC nie ma bitu URSEL, w atmedze jest, jednak jak wyłącze ten bit z atmegi8 to transmisja pada...
Witam, W taki sposób konfiguruje USART: aaaaa=100,bbbbb=2000 I chcę uzyskać: [syntax=c]int a = 100; int b = 200;[/syntax] Próbowałem się bawić z tą funkcją: [syntax=c]void USART1_IRQHandler (void) { u16 c; if (SET == USART_GetFlagStatus (USART1, USART_FLAG_RXNE)) { c = USART_ReceiveData (USART1); USART_SendData (USART1, c); while (RESET == USART_GetFlagStatus...
OK sprawdzilem, okazuje sie ze przerwanie jest poprawnie wywolywane. Sprawdzilem rowniez ze dane sa odbierane poprawnie, wyslalem do siebie to co otrzymalem. Dlaczego wiec ten kod w release mi nie dziala. Nie widze tu zadnego bledu. Tak wyglada obsluga przerwania: if(USART_GetITStatus(USART1, USART_IT_TXE) != 0) { USART_SendData(USART1,...
Witam ponownie. Uruchomiłem USART na stm32f4 chodzi pięknie . Teraz testowo chce wysłać ciąg 1,2,3 z wykorzystaniem DMA i niestety pomimo moich starań ramka przesyłana jest tylko raz. W czym leży problem. [syntax=c] void usartSetup (void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // enable clock for GPIOD RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // enable...
Wiec na komputerze byłoby coś takiego: [syntax=c] ..... byte tablica[1024]; //kazdy element tablicy przyjmuje wartosc od 0 do 255 ...... sp = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One); sp.Open(); sp.Write(tablica, 0, tablica.Length); //wysłanie tablicy przez port szeregowy (czy tak zadziała??). Wysyłam zawsze tablicę o takiej samej...
Czy jakbym zrobił to w ten sposób, miałoby to sens? Nie ma sensu! Czemu służy "delay(3);"? Para ma iść w gwizdek? W ten sposób to nie wiadomo jak szybki będzie uC, delay "zabije" jego prędkość. Zmienna (tablica) "readString " ma jakiś rozmiar, tajemnicą jest jaki, ale większość Arduino ma 2kB (2048) RAM. Stos (ok20 bajtów zależnie od skomplikowania...
Witam, Gdy próbuje skonfigurować dwa USART i przerwania do nich powstaje konflikt. Wystarczy, że odłącze kabel od USART1 i wtedy wysłanie komendy do komputera wraca do normy. Definiowanie: [syntax=c]RCC_AHBPeriphClockCmd(RCC_AHBP... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_US... ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE);...
Witam, wymyśliłem sobie, że dane z czujnika PMSA003 będę odczytywał UARTem z udziałem DMA. Wygląda to zatem tak, że na poczatku: deklaruję tablicę o rozmiarze ramki z czujnika w trakcie debugowania okazuje się, iż dane w tablicy nie są właściwe . Ramka powinna zaczynać się od bajtów startu 0x44 i 0x4D, a wg debugera takie wartości pojawiają się też...
Witam, przepraszam że tak odświeżam, studiowanie wymusiło na mnie programowanie innych spraw, więc nie było czasu na dokończenie projektu. Problem jest taki, że nie mogę znaleźć dostatecznie dużo informacji na temat protokołu midi, z tego co gdzieś wyczytałem ramka danych midi ma długość 10 bitów, natomiast prze USART mega16 mogę wysłać jedynie 9, jest...
Niemożność zmiany rozmiaru tego mizernego bufora to rzeczywiście fatalna wiadomość. Napiszę w czym jest rzecz ale prawdopodobnie nie jest to wina tego ubogiego bufora ponieważ myślałem, że wynosi on 8 bajtów a nie 1 bajt. Posiadam konwerter uart-ethernet, który podłączyłem do ATmega8A (wykorzystuję na chwilę obecną tylko linię Tx uC) i dla testu wysyłam...
Nie jest mozliwe wysylanie 2 bitow stopu i 9 bitow danych. Ustaw standardowo 8 bitow danych i 1 bit stopu. To w zasadzie nie robi różnicy , czy ustawimy 1 czy 2 bity stopu , bo przy ramce 9-bit , zostanie wygenerowany tylko 1 bit stopu. grzesio14 Nie działa Ci transmisja 9-bit , bo takowej nie ustawiasz. Popatrz: ;*** USART tryb 9-bit *** .include...
libmodbus jest biblioteką dla programów pracujących pod kontrolą systemu Linux. Możesz jej użyć do zbudowania programu Master pracującego na PC. Nie da się jej użyć do napisania Slave na atmega8. Do tej pory zbudowałem prototypową płytkę z RS232 która za pomocą USART komunikuje się z komputerem. Polecenia z komputera wysyłam poprzez terminal GtkTerm....
1. (at)Robak "Wystarczy napisać algorytm" - nie powiem, bardzo odkrywcze... 2. "W transmisji synchonicznej nie ma b. startu i stopu... - właśnie o tym ciągle piszę... chciałbym taką mieć, zaś a AVR otrzymuję dziwoląga - ramka jak dla asynchoniczej komunikacji i dodatkowo zegar... Aby nie dublować. Czy jest mozliwa konfiguracja AVR-owskiego USARTU tak...
Fajny projekt. Jak wygląda ramka wysyłana do komputera? Robiłem kiedyś podobny projekt niestety mogłem wysłać 6 kanałów w jednej "paczce", po stronie C# miałem to dobrze rozwiązane bo były tam kolejka <Que> która działała wielowątkowo, bo sprawa wyglądała tak że jak dane przyjdą to muszą być sparsowane i umieszczone w obiekcie który później wyświetla...
Wszystkie nazwy rejestrów, ich długość i w ogóle wszystkie niezbędne informacje znajdziesz w dokumentacji procesora który w danym momencie programujesz. To lepsze niż jakakolwiek książka. W nie wiem jak w at90s2313, ale chyba we wszystkich nowszych procesorach, w szczególności mega32, UBRR jest 16 bitowy. Ponieważ architektura AVR jest 8 bitowa, to...
Witam, mam problem z połączeniem po USARCIE tych dwóch procesorów. Sprawa wygląda następująco: atmega1284p ma być docelowo masterem, wysyła ramkę i w odpowiedzi dostaje ramkę zwrotną od atmega8. Obsługa ramek nie jest jeszcze napisana, na razie wysyłam 8 bajtów atmegą1284p i jeżeli wszystkie bajty zostają poprawnie odebrane, to atmega8 odsyła mi 11...
Temat do ogarnięcia na większości ARM. Na AVR dużo roboty. W RPi para idzie w gwizdek, trzeba dobrze kumać w temacie Linuxa. Dla kumatych ARM z min 32kB RAM, dla "niekumatych" ESP, w miarę łatwo da się zrobić ale... długa lista tych ale. Na "Ardunino" czyli w domyśle AVR nie polecam, mało RAM i przez to komplikuje się życie (prację). Poparcie moich...
Witam ponownie, mam teraz niezwykłą zagadkę, tak więc posklejałem kawałek kodu który obsługuje USART + Ethernet - program polega jedynie na tym że jak odbierze jakąkolwiek ramkę Ethernetową to powiadomi o niej i wyśle przez RS-232 MAC address nadawcy i odbiorycy (przy czym tutaj kwestia estetyczna jest niedopracowana) - tak czy inaczej kod ten przetestowałem...
Witam. Potrzebuję zrobić komunikację pomiędzy dwoma attiny2313 za pomocą USART. Jeden (slave) ma wyświetlać na lcd dane otrzymane od drugiego. Założenia: Master - ma to być czterokrotny licznik (+/- do 2 bajtów) + czuwanie dla kolejnych impulsów + nadawca slave - konwersja na 5 BCD + wyświetlenie na lcd ramka - 8,0,2 Pracuję w assemblerze I od razu...
Najciekawsze jest to - jak ty to obliczyłeś czy tam wydedukowałeś, że UDR to 4 bajty ? ;) oczywiście, że to 1 bajt (w uproszczeniu mówiąc, bo wiadomo, że ramka może mieć 9bitów i kilka bitów startu i stopu) - nie mniej jednak gdy używasz ramki np: 8,n,1 - to masz 1 bajt - a to, że przy odczycie zauważasz "zjawisko" nadpisywania się przylatujących znaków...
1. Można emulować programowo, ustawiając odpowiedni pin i czekając chwili, ustawiając inny stan itp aż się cała ramka asynchroniczna wyśle 2. Niektóre procki (napewno 16F876 16F877) mają moduł UART wtedy wystarczy skonfigurować go na jakąś częstotliwość i wpisywać znak do bufora. PS dość tanio mieli niedawno próbki na allegro, ale źródełko wyschło....
tak też zrobię, jadna ranka informacja o którą oś chodzi, druga ramka inforamcja o kącie i tak w kółko. Jeżeli chodzi o sam układ to myślałem o Atmega8, bo jest popularny, ma programowalny USART i zawsze znajdę informację w razie problemów, jego zadaniem będzie odbieranie danych po RSie i generowanie 3 niezależnych PWMów w zależności od tych danych....
Właśnie mam już opracowany program pod Windows komunikujący się z modułami. Wykorzystałem następującą konstrukcję ramek: http://obrazki.elektroda.pl/6262891000_1... Każde 8 bit jest jakby jednym znakiem RS-232. Ramka ma stałą długość, więc mam nadzieję, że nie będzie potrzeby wprowadzania dodatkowych znaków typu '\n', czy '\r'. Nie wiem,...
Czemu nie wysterowałeś pinu Tx jako pinu wyjściowego? Chyba domyślnie po resecie uC wszystkie piny są jako wyjście Zajrzyj do noty PDF, po resecie praktycznie wszystkie rejestry mają wartość = 0, a na pewno rejestry pinów, portów i kierunków. Czyli DDRx także jest = 0 a zatem domyślnie wszystkie piny procka po resecie są WEJŚIAMI. Ale wcale nie trzeba...
Witam prosze o pomoc w takim oto temacie : Staram sie odczytac/wyslac dane przez Usart przy pomocy AVR studio (jako ze jestem jeszcze zielony w tym temacie nie moge poradzic sobie z tym problemem sam) Zapalanie i gaszenie Ledow mam juz za soba i teraz chcialem nauczyc sie rozmawiac z komputerem przez USART wydukalem taki oto kod - ale niestety symulacja...
Witam koledzy i wszystkim dziękuje za okazaną pomoc. Poradziłem sobie już z odbieraniem danych na komputerze oraz pozbyłem się "echa" w terminalu. Dzisiaj usiadłem do pracy nad odbieraniem danych na uC. Chce zastosować kod poniżej wykorzystujący bufor cykliczny, aby przetrzymywać całą ramkę wysłaną z komputera. [syntax=C] #define UART_RX_BUF_SIZE 64...
Dziękuję uprzejmie za zainteresowanie i sugestie. :-D O RS485 mogę napisać tyle, że działa poprawnie. Bez oporników (terminatorów - linia wymaga dwóch!) rzeczywiście był niezły śmietnik (kiedyś oglądałem pod oscyloskopem). Dałem trochę większe (220 omów) niż przewiduje standard, gdyż transceiver RS232/RS485 wymagał takich (w specyfikacji - nie chciałem...
Według mnie, aby mieć inicjalizację danego peryferium w postaci pary osobnych plików, należy ustawić : Zakładka Project Manager -> Podzakładka Code Generator -> Ramka Generated files -> Oczko Generate peripherial initialization as a pair of '.c/.h' files . To jedna z tych opcji, które ja zawsze przestawiam właśnie w ten sposób i zawsze mam oddzielne...
Strasznie przekombinowane. Wystarczy tor radiowy, uC z USART, ramki z CRC. Po co jeszcze jakieś starodawne HT12D?
Witam, opracowana została prosta ramka przesyłania danych w oparciu o przerwanie USART_RXC_vect. Wysłanie bajtu 255 z aplikacji informuje mikrokontroler że zaraz otrzyma 5 znaków ASCII które ma załadować do tablicy charów a bajt 254 kończy wpisywanie do tablicy. Tablicę ze znakami wyświetlam na wyświetlaczu LED. LEcz np. wysyłam "186A0" a na wyświetlaczu...
Problem leży tu: SIGNAL(USART_RXC_vect) { if(UDR=='$') zapis=1; if((i<14)&&(z... { buf[i]=UDR; i++; } if(i>=14) { k=1; zapis=0; i=0; } } Otóż odczyt z rejestru UDR powoduje jego wyzerowanie a następnie załadowanie następnego odebranego znaku (jeżeli...
No i właśnie z tego należy skorzystać. Przy odbiorze bajtu sprawdzaj znacznik IDLE; jeśli jest ustawiony - jest to pierwszy bajt ramki, po odstępie.
Masz błąd w funkcji usart_init(). Brakuje Ci ustawień starszegi bajtu danych UBBRH oraz jednej najważnejszej rzeczy nie ustawiłeś ramki danych tzn bitów stopu, kontroli parzystości oraz wielkości ramki :) Funkcja usart_init() powinna wyglądać mniejwięcej tak: void USART_Init() { /* Ustawianie prędkości*/ UBRRH = (unsigned char)(UART_CONST...
stm32 usart ramka esp8266 usart przerwa usart
szlifierka kątowa bosch schemat zakłócenia skrętka assasins creed
stacja zasilania stacja zasilania
Febi Bilstein osłona tarczy przedniej Audi A1 – opinie, dopasowanie, jakość zamiennika 7.5 kPa to Watts Conversion in Vacuum Cleaners: Airflow, Air Watts, and Efficiency Explained