No to szukaj błędu w ustawieniach zegara - skąd bierzesz przebieg wejściowy, częstotliwość (sprawdź czy dobrze ustawiona w module startowym), wywołanie SystemCoreClockUpdate itp... Prosty test: zaprogramuj timer i procedurę przerwania od niego an miganie diodą z częstotliwością 1Hz i zmierz sekundnikiem czas np. 60 mignięć.
proponuje cos takiego: #include <avr/io.h> #include <avr/delay.h> #include "io.h" void USART_Init( unsigned int baud ) { //ustawienie portu DDRD &= 0xFE ; DDRD |= 0x02 ; PORTD |= 0x03 ; /*set baudrate*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /*enable receiver and transmitter*/ UCSRB = (1<<RXEN)|(1<<TXEN);...
Piny na pewno dobrze połączon. Czyżby? gdy zewrę na atmedze piny rxd i txd to normalnie na komputerze otrzymuje "Hello World" To wskazuje na odwrotne podłączenie (obstawiam, że podłączyłeś RxD z RxD procesora i TxD z TxD procesora, zamiast na krzyż - czyli TxD do RxD).
Programowo nie da się jej zmienić....... Weź chłopie daj wszystko jak było, tylko BAUD daj 4800 i sprawdź, czy przy takiej prędkości działa #define F_CPU 1000000ul #include <avr/io.h> #include <util/delay.h> #include <avr/signal.h> #define FOSC 1000000 #define CZYT 50 #define BAUD 4800 #define MYUBRR FOSC/16/BAUD-1 void USART_Init(...
No to masz 4-bajtowy znacznik początku ramki, w dodatku niejednoznaczny, tylko po co? Przy automacie masz zmienną - stan automatu, którą elegancko robi się jaku enum, a dalej switch zapewniający obsługę kolejnego bajtu i przejścia pomiędzy stanami. Do obsługi tego początku, jaki masz, potrzebujesz czterech stanów automatu (piąty stan to odbiór danych)...
1. Tak. 2. Nie bezpośrednio, można kombinować np. tak: struct S { typ costam; typ tab[1000][16]; };
Zgaduję, że problemem jest komunikacja po USART - wysyłanie znaków pewnie blokuje program w przerwaniu na spory odcinek czasu.
Żeby bez potrzeby nie obciążać usart, wysyłać tylko te które trzeba, jak również, tylko wtedy gdy ich wartość się zmieniła. Pozdr
Tablica char str[3]; jest za mala (ma tylko 3 elementy) a Ty odwolujesz sie do 4.
Nie wystarczy itoa? http://pl.wikibooks.org/wiki/C/itoa Ja wiem, wiem - biblioteki zwiększają zajętość flash... , ale myślę (w tym przypadku), że jeżeli projekt jest mały i masz jeszcze trochę flash'a i RAM oszczędzanie - poprzez pisanie własnych funkcji konwertujących int na string nie ma sensu. Ale wracając do twojego kodu: W twoim przykładzie brak...
Witaj a nie masz czasem "wiszącego" wyprowadzeni rx bez włączonego wewnętrznego podciągania ? To wygląda jak by wyprowadzenie było wiszące i nigdzie nie podłączone bo bez względu na błąd prędkości jeśli zachowa taki sam stan uart nie odbierze ani jednego znaku . Jak zrobiłem wysyłanie co 1 sekundę wartości zmiennej index , to nie wysyłając nic z komputera,...
A co na to debugger? Wchodzisz w przerwanie UART? Wiesz, że bez zbędnych wywołań SPL/HAL program byłby z 5 razy krótszy? Np. zamiast: [syntax=c]NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp... = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPri... = 0; NVIC_InitStructure.NVIC_IRQChannelCmd...
Open your mind ;) uart_rx_buffer jest buforem odbioru. Wpis w PS jest poza tematem. Dotyczy dziwnego zachowania kompilatora i nie ma nic wspólnego z kodem z tematu. Poza tym uart_rx_buffer występuje w przerwaniu, dlatego volatile.
Witam, mam mały problem. Napisałem program mający za zadanie wysyłać przez USART w pętli znak. Wgrałem program podłączyłem wszystko na płytce stykowej przez max232 z portem COM w komputerze, odpaliłem RealTerma. Jednak po włączeniu Atmegi zamiast oczekiwanego znaku zapełniającego konsolę w Realtermie ekran zapełnia się napisem (nul). I nie wiem czy...
Jaki sens ma funkcja, która zawsze zwraca tę samą wartość? Równie "obiektowe", co bezsensowne. Taki pomysł na funkcję miał autor tematu. Nie wnikam w sensowność tego rozwiązania. Naprawdę, masz dziwne rozumienie obiektowości.
Pracowałem wówczas na ATmega162. Okazało się, że pewna seria '162 miała ten sam problem. Układ resetował się przy komunikacji UART. Temat zamykam.
Zastanówcie się Koledzy, co się będzie działo, kiedy wrzucicie do UDR ostatni bajt do nadania. Kto i kiedy skasuje zgłoszenie przerwania TXD po wysłaniu tego bajtu? W obsłudze przerwania to nie nastąpi, więc przerwanie pozostanie zgłoszone i będzie obsługiwane na okrągło - patrz granica stron 137/138 aktualnej wersji (aa) doc2486.pdf Flaga przerwania...
Ewentualnie jak posiadasz jakieś PICe z USB to możesz zrobić sobie przejściówkę USB<=>USART.
nie czekam na 0x00 bo muszę przesyłać różne znaki i null bardzo często występuje.No właśnie wiem że trzeba znak po znaku wysyłać :/ A może jakbym przed wysłaniem łańcucha ustawić RTS=1 i później wysyłać to by wtedy połączyły się w jeden 'pakiet' (a na końcu ustawić RTS=0). Lub jakieś inne linie. Szukałem w Internecie ale nie znalazłem niczego podobnego....
Witam, HSE_VALUE=8000000 w moim projekcie, a zegar AIFO włączam tą linijką: RCC_APB2PeriphClockCmd(RCC_APB2Periph_US... RCC_APB2Periph_AFIO, ENABLE);
O jaki drugi kabel chodzi? Tewraz podłaczył do płykowego usb - a chciałby przez ST-Link. Odpowiedź - tak można. Odbiersz np USART-em 3 i wysyłasz to na USART1, z którego "pobiera" dane VCOM ST-Link
Samo wysyłanie odbywa się z taką prędkością, jak ustawiłeś, ale między wysyłanymi liczbami robisz jeszcze dużo innych rzeczy, w tym obsługę LCD, co zajmuje procesorowi trochę czasu (szczególnie z takimi funkcjami, jak itoa()), dlatego średnia wychodzi poniżej 9600 bps. Spróbuj w nieskończonej pętli wysyłać w kółko stałą liczbę nie robiąc nic innego,...
A czy mógłbyś napisać coś więcej w jaki sposób można by to lepiej wykonać? 1. Praktycznie cała twoja aplikacja funkcjonuje w USART2_IRQHandler(); 2. Przerwania w miarę możliwości powinny być jak najprostsze, więc wywoływanie w nich funkcji atoi/itoa jest słabym pomysłem; 3. USART powinien wysyłać ciąg znaków, ich serializacja powinna być w wyższej...
Wyłącz przerwanie od TXE skoro nie chcesz wysyłać. 4\/3!!
Jakieś 4 dni męczyłem się żeby uruchomić transmisję pomiędzy Atmegą a kompem po rs232. Niezmiernie zaskoczyło mnie to, iż wszystko zaczęło działać gdy bity:UCSZ0,UCSZ1,UCSZ2 ustawiłem na 0. Czyli (według informacji Atmela) ramka danych miała 5 bitów, a przesyłałem dane 8 bitowe. Przy ustawieniu tych bitów na ramkę z 8 bitami danych nic nie chodzi:nie...
Witam, właśnie przerabiam kolejne ćwiczenie z książki J. Dolińskiego, ale przechodząc do rzeczy... Chcę wysłać kolejno w pętli za pomocą funkcji "WyslijTekstROM" 3 kolejne stringi, jednak przy wysyłaniu pojawia się następujący problem, że tylko ostatni string wypisywany jest na terminalu cały, a 2 początkowe są poucinane. Sądzę, że problem może leżeć...
ATMega8, 1Mhz, 9600bps - działa. Może masz źle ustawioną ilość bitów stopu? W przykładach z dokumentacji są chyba dwa, a zazwyczaj stosuje sie jeden. Moja standardowa procedura testowania protokołów komunikacyjnych - robię pętelkę zwrotną (RX-TX) i sprawdzam, czy mikrokontroler jest w stanie odebrać to, co sam wysyła.
Wyjaśnię wpierw skąd moje poprzednie pytanie. Mam ARM'a od NXP, z układem FT232 dołączonym tak, że steruje linią reset i jeszcze jedną wywołującą bootloader. Po podłączeniu tego przez USB do komputera, podczas uruchamiania sterownika widzę, jak układ jest kilka razy resetowany. Czasem w tym układzie uzyskiwałem podobne wyniki / problemy. Ale skoro już...
Na procesorach bez wsparcia sprzętowego dla USB jego uruchomienie jest bardzo trudne i nieefektywne, a osiągane transfery są żałosne. USB jak każdy złożony protokół składa się z kilku warstw - interfejs sprzętowy zapewnia realizację warstwy elektrycznej i łącza, wraz z podstawowymi elementami wymiany danych - odbiór i nadawanie pakietów, enumeracja...
ok, jako, że nie wiedziałem gdzie dopisać usart transmit, skorzystałem dla sprawdzenia z gotowego kodu, efektem tego było wysyłanie znaczków, które trudno nawet jest nazwać , może mi ktoś wytłumaczyć dlaczego tak się dzieje ?? źródło kodu: http://forbot.pl/blog/port-szeregowy-int... [syntax=cpp] #include <avr/io.h> #include <avr/interrupt.h>...
Skąd wiesz, że ustawia się na 4800 skoro nie wiesz czy nadajesz? Ta magiczna funkcja UsartInit skądś musi wiedzieć na jakiej częstotliwości chodzi jego APB. Sprawdź czy nie ma tam definicji od RCC. U Ciebie powinno być 8MHz bo nie konfigurujesz nigdzie HSE ani PLL.
Co może być przyczyną tego, że zamiast wysyłanego "hello" odbieram w termianlu "hhhhheeeeeellllllllllllllllllllloooooo"... Dodam, że przy wyłączonym DMA nic takiego nie ma miejsca. Nie wnikam w konfigurację DMA i USART, ale logika tego fragmentu programu jest dziwna. Mam wrażenie, że funkcja wysyłająca tekst (usart_dma_str) jest wywoływana w przerwaniu...
Chyba jednak mirkokontroler :P Byłem dziś u znajomego, ma inne sterowniki na laptopie i gdy dziś podłączyłem swoją płytkę z USARTem u niego to po chwili też pojawił się bluescreen. Czy powodem może być to, że jakiś czas temu spaliłem USARTa podpinając do niego zasilanie(3,3V) i masę z płytki, która z kolei była podłączona też do laptopa przez USB ?...
Witam. Pojawil sie kolejny problem z atmega 128. Probuje za pomoca max232 wyslac sobie na rs dane. od strony komputera nasluchure RS232 czy nadaje atmega za pomoca bushound i cisza. Max 232 podlaczlem do PE0 i PE1. Myslalem aby to zrobic za pomoca usart. Zrobilem jakiegos byka w kodzie?? #include <avr/io.h> #include <avr/iom128.h> #include...
Witam, tak jak w temacie - chciałbym wysłać zmienną typu double przez USART. Niejako podobny temat zlokalizowałem pod tym linkiem: [url=http://www.elektroda.pl/rtvforum/to... lecz nie udało się mi wywnioskować jak to zrealizować. Mój tok rozumowania: 1. zmienna typu float/double zajmuje w pamięci odpowiednio 2 i 4 bajty w pamięci. Usart...
Witam rcall nie przeszkadza USARTowi... i całe szczęście, bo musielibyśmy wyrzucić wszystkie AVRy do kosza ;) Problem jak zwykle tkwi w programie. W procedurze obsługi przerwania USART_TXC założyłeś, że możesz włożyć do UDR kolejny bajt, bez sprawdzania, czy jest on pusty. Poniekąd jest to założenie słuszne, ale nie w Twoim programie. A problem polega...
To raczej tak nie działa, bo po USART wysyła znaki, albo pojedyncze bity, więc raczej ciężko będzie. A przejściówka emuluje najczęściej port COM. Chociaż jak się bardziej zastanowiłem, to programowa emulacja protokołu może mieć sens. Grunt to pilnować timingów.
Dziękuję za zainteresowanie moim problemem. W ferworze walki poplątałem wiersze, ale było dobrze jak jest teraz i problem nadal istnieje. Program piszę w studio4, nazwy bitów były umieszczone w nawiasach i bez też nie pomogło. SP oto program: [syntax=text] .nolist .include"m128def.inc" .list .defAL = r24 .defAH = r25 ;akumulator .equ SYS_FREQ_HZ = 8000000...
Arduino (Bascom dla inteligentnych) nie ma debugera. Musisz zrobić jego namiastkę. Ja osobiście, włączyłbym przerwania od WDG. W wektorze przerwań, na np usart wysyłałabym adres, na którym program wisi. W pliku elf (sam musisz sobie wygenerować, bo Arduino tego nie robi) dowiesz się gdzie wisi. Metoda niezbyt skuteczna, ale jak chce sie Arduino, trzeba...
Witam. Utkwiłem z programem przy próbie uruchomienia USART. Przejrzawszy wypowiedzi na forum nie znalazłem rozwiązania, choć temat USART przewijał się niejednokrotnie. W celu przetestowania wysyłania danych próbuję wysłać na port kody ASCII kolejnych cyfr i zbierać to poprzez Hyper Terminal pod Windowsem. Inicjacja UART wygląda tak: void USART_Init(...
Inicjalizujesz USARTD1, a znaki wysyłasz przez USARTC0 - popatrz na USART_putchar. Popraw tą funkcję, żeby tam było usart->DATA=...
Witam Do wysyłanie znaków używam takiego kodu: #define C_GPI_1 (1<<2) UCSRB |= 1<<RXEN | 1<<TXEN;//transmisja: 8N1 UBRRL = 51; //9600 błąd 0.2% przy zegarze 8MHz TData[0] = 'P'; TData[1] = 'E'; for(int i=0; i<2; i++) { UDR = TData[i]; while( (UCSRA & 0x40) == 0 )...
Lepiej jest wykorzystać USART i wysyłać dane radiowo w trybie komunikacji wieloprocesorowej (Multi-processor Communication Mode), na jednej częstotliwości.
Nie musisz odblokowywać ani obsługiwać przerwań timera. Jeśli raz włączysz wyzwalanie ADC, będzie ono włączone (raczej - co prawda STM32F1 są strasznie skopane, ale chyba nie aż tak). Nie ruszaj w ogóle rejestrów timera, których nie potrzebujesz. na oko potrzebujesz czterech dostępów - preskaler, okres, włączenie wyzwalania ADC i wystartowanie z autoreload....
1. Poza tym zapis EEPROM w przerwaniu to też niedobry pomysł - to kilka ms/zapis. Od tego EEPROM generuje swoje przerwania, żeby zapisy buforować i zapisywać do EEPROM niezależnie. 2. Poza tym mieszanie ISR i SIGNAL czyli starej i nowej obsługi przerwań tez nie jest zalecane. 3. Wysyłanie znaku przez USART w obsłudze przerwania też może nie być dobrym...
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 /*...
No ale czy masz pewność, że tak właśnie nie powinno być? Bit można wyłączyć w przerwaniu od TC (albo po tym jak bit TC się ustawi), natomiast włączyć zegar trzeba przed rozpoczęciem wysyłania. Istnieje pewna szansa, że po prostu "tak ma być"... W moim rozumieniu USART działa jak SPI, a w SPI jest tylko jeden master i tylko on może wysyłać zegar. Datasheet...
Po prostu źle skonfigurowałeś pamięć - pewnie wynika to z niechęci do czytania RM-ów.
Użyć portu szeregowego (UART / USART) - włączasz nadajnik, wpisujesz znak (układ przycisków) do portu, czekasz na koniec wysyłania, wyłączasz nadajnik.
Twoje pytanie niewiele ma wspólnego z UART. Chodzi Ci po prostu o to, jak przesłać coś, co ma więcej niż jeden bajt. Rozbij to na bajty - sposobów jest wiele (np. unia typu, jaki chcesz przesłać i wektora bajtów), a potem wysyłaj bajt po bajcie.
Problem dotyczy wysyłania danych przez USART z atmegi8 do PC. Mianowicie poprawnie wysylane jest tylko kilkanascie pierwszych bajtow. W symulacji w tym momencie wyskakuje błąd "Stack Overflow at 0x0068" i "Excessive stack overflow, stop sim". Co mam zrobić? Podprogram realizujący wysyłanie bajtu przez USART: rs232: ldi licznik, 0x09 cbi PORTD, 1...
W zasadzie wszytsko robisz źle. Porównaj swój kod z dowolnym przykładem z transmisją szeregową na ATmega. Np. RXC i UDRE są to stałe,a Ty próbujesz sprawdzać ich awrtości i w zależności od nich coś robić lub nie robić. Procesor ugrzęźnie w wiecznie wywoływanej procedurze przerwania nadawania. Inicjowanie UART też błędne - najpierw włączasz transmisję,...
hmm więc sprawa jest skomplikowana trochę, a działałoby gdyby zamiast adc zrobić usart? znaczy przez usart wysyłać liczbę, która by określała obroty silnika? czy tu też byłby jakiś problem? EDIT. wpadłem teraz na inny pomysł, może by zrobić osobny układ który odpowiada za poziom napięcia który idzie do silnika? czyli jeśli chce mieć max obroty to daje...
Kabelki skrócone, problem jak narazie się nie pojawia, czyli jest dobrze :) Teraz z kolei walczę, a raczej poprawiam błąd programowy z kasowaniem daty i ustawień przez wyjęcie kabla usb z gniazda. Rozumiem, że wysyłane są śmieci, które procek zapisuje, śmieci te to same zera...usart wysyła tablicę zer, która się zapisuje. Zrobiłem sobie w programie...
Schemat musisz sobie sam stworzyć, tak jak i program? Jak podejść? Od początku... Od zapoznania się z językiem C, architekturą mikrokontrolerów AVR oraz bibliotekami dla nich. Można podeprzeć się bibliotekami dla Arduino. Dla wytrwałych zostaje jeszcze asembler, tego typu program dość łatwo byłoby napisać właśnie w asemblerze. Trzeba odczytywać stan...
Witam, używasz zdaje się prędkości 4800 przy tym kwarcu tak? - sprawdź więc dobrze czy w odbiorniku masz taką samą. Poza tym zajrzyj sobie do noty katalogowej ATmega8 tam są pokazane ładnie procedurki w asemblerze jak inicjalizować oraz jak odbierać lub nadawać - wydaje mi się, że powinno ci się wtedy wyjaśnić bo tu masz coś pogmatwane. W nocie sekcja...
CRC jest przecież bardzo proste, sam USART ma też bity parzystości, możesz dodatkowo każdą komendę potwierdzać ze strony urządzenia, ale powinno to wyglądać tak: 1. PC wysyła ramkę z bitami parzystości + CRC 2. Układ sprawdza parzystość (sprzęt) + CRC (program) 3. Jeśli CRC + parzystość zgodne to wysyłamy ACK, w przeciwnym razie prosimy o ponowne przesłanie...
nouki właśnie chciałem zaproponować Ci lekturę mojej biblioteki do której link podałeś. Wbrew pozorom biblioteka jest baaardzo prosta. Przeanalizuj sobie jak jest zbudowana. Wydaje mi się, że większość mechanizmów da się z powodzeniem zastosować w bliźniaczej formie w Bascomie. Dodano po 4 50 05 05 82 01 10 00 64. Jak ustalić że po nagłówku ramki 50...
Czyli z taktowaniem mam problem. Próbuję zrobić tak jak tutaj http://stm32f4-discovery.com/2014/04/lib... U mnie jest: Core Clock = ((HSE_VALUE / PLL_M) * PLL_N) / PLL_P Niestety po takiej konfiguracji STM wariuje, nawet USART wysyła śmiecie. Jak prawidłowo skonfigurować...
Mniesz program do obsługi. Procesor może robić coś innego niż pracować z szynami UART I2c. Np może wysyłać dane rs232 i liczyć impulsy timerem.
Hej, Podłączyłem sobie ATmegę16 do komputera przez RS-232 za pośrednictwem MAX232. Na początek chciałbym zrobić echo - to, co wpiszę w minicomie czy putty ma być przesłane do uC i wysłane z powrotem. Wykorzystane mają być przerwania. Problem jest taki, że procedura obsługi przerwania ISR(USART_RXC_vect) jest wykonywana albo bardzo rzadko, albo wręcz...
Zazwyczaj wysyłanie wygląda tak: void USART_putchar(char c) { loop_until_bit_is_set(UCSRA, UDRE); UDR = c; } Nie sprawdzałem zachowania się flagi TXC (zawsze działam w oparciu o UDRE). Mam pewne przypuszczenie, że procesor idzie zbyt szybko. edit: s/loop_until_bit_is_clear/loop_until_bit... - nigdy nie lubiałem tych makr
Napis jest w pamięci programu, czyli we FLASHu. Żeby to zadziałało, musisz albo przenieść napis do RAMu, albo odpowiednio zmodyfikować funkcję, żeby czytała znaki z tej pamięci. Zainteresuj się funkcją pgm_read_byte i jej pochodnymi.
Witam, pisałem w ostatnim czasie na tym forum wielokrotnie problemy wciąż dotyczą tego samego projektu. Tym razem do przerwania USART_RXC_vect wstawiłem ifa sprawdzającego czy ma transmitować dane czy nie. Bez tego warunku wszystko działa lecz wtedy nie mogę kontrolować startu i końca wysyłania. Poniżej kod przerwania timera i przerwania od USART. Jak...
nie wiem czy dobrze myślę, ale to nie ma szans działać, bo procesor jednocześnie nie nadaje i odbiera... Ma szanse działać ;) zapewniam cię. Tylko trzeba to dobrze oprogramować. Wprawdzie sam kiedyś tak myślałem ale ostatnio aż się zdziwiłem że kody wygenerowane w podczerwieni z diody IR (za pomocą zresztą programu z PC'ta, który przez USART wysyłał...
Pokaż schemat.
Znasz przecież operacje bitowe: http://mikrokontrolery.blogspot.com/2011... skoro piny ustawiasz i zerujesz. Po prostu zdefiniuj sobie makra za pomocą #define określając, który bit, to który przycisk np. tak: przyciski za pomocą funkcji z biblioteki lub przerwań: http://mikrokontrolery.blogspot.com/2011...
A nie jest tak, że polecenie Print wysyła łańcuch? Czyli "203", $0D, $0A ;), gdzie $0A = 10.
Schematu nie widzę. Napisałem Ci już jakie tranzystory możesz tam zapakować. Kosztują <0,50PLN/sztukę w TME, więc tanio. W dokumentacji do wyświetlaczy sprawdź maksymalny prąd i na początek ogranicz prąd maksymalny do tej wartości (prawdopodobnie 20-60mA). Program do napisania od nowa. 1. Po co zewnętrzny prescaler, jeżeli licznik TIM0 ma wbudowany...
Zwiększ rozmiar tablic tab_1 i tab_2. I pokaż jak to wysyłasz.
Witam, jestem w trakcie nauki programowania uC. Zakupiłem płytkę STM32F3Discovery. Próbuje wysłać na początek jeden znak na COM-a. Jednak niestety coś idzie nie tak :( Używam przejściówki USART-USB. Dodam, że konfiguracja musi być OK, bo gdy korzystam z biblioteki HAL to wszystko działa. Chce bawić się StdPeriph, bo mam wrażenie, że tutaj będę wstanie...
Nie ma innego przerwania. Co dokładnie źle wysyłam i gubię? :)
Witam. Potrzebuję napisać program obsługujący SPI i DMA, wraz z Usartem. Na temat SPI, DMA, Usarta, wiem dosyć dużo. Potrafię napisać każdą z tych rzeczy osobno, ale zielonego pojęcia nie mam, jak ma wyglądać kod łączący te wszystkie rzeczy. Domyślam się, że Usart ma wysyłać z SPI mastera do slave-a, jakieś dane i w drugą stronę, ale jak to ma wyglądać...
W sumie to co napisałeś Freddie Chopin dużo wyjaśnia to co się działo z STM. Musisz mieć rację. Napisz mi tylko jeszcze czy jest możliwe zrobić czegoś takiego: W USAR'cie gdy chciałem wysłać 1 bajt np. co 1sek to wówczas ustawiałem flagę nadawania program przechodził do procedury obsługi przerwania i kopiował zawartość zmienne do rejestru nadawczego...
A propos windowsa... oczywiście żartuję :) Pierwsze co mi przyszło na myśl to wykorzystanie tego do bezpośredniego połączenia uP do USB. Nie wiem, czy ktoś już o tym wspomniał, bo w gąszczu postów sporu mogłem coś przeoczyć. Przyznam się, że nie testowałem tego, ani nie przeglądałem kodu, ale skoro opracował ktoś komunikację USB w avr, to wystarczy...
Witam, napisałem program korzystający z USART-u. Zmiana stanu na wybranych wejściach uC ma powodować wysyłanie trzybajtowych pakietów danych. Wysyłanie odbywa się za pomocą przerwania USART_UDRE_vect. I oto dziwna rzecz: Pomimo, iż w SREG ustawiony jest najstarszy bit, w UCSRA sprzęt wystawia flagę pustego bufora, czyli UDRE jest ustawiony i wreszcie...
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...
Usart działa dobrze. To co otrzymujesz do wartość acsii pierwszej liczby. Innymi słowy - terminal nie wysyła liczby, którą wpiszesz, tylko znak. W kodzie ASCII '0' = 48, '1' = 49, itd. Otrzymujesz więc tylko pierwszy znak jaki wyślesz. jak wyślesz z terminala 'p' to powinieneś otrzymać 112
Sprawdź czy jednak nie trzeba wysyła CR i LF. W dokumentacji jest taki przykład: “AT+SYNW=1234ABEF\r\n” Jak widać wysyłają zarówno CR i LF JarekC
Ale na pewno bufor nie ma 2 bajtów. Ma - jeden bajt od razu jest ładowany do "shift register", a drugi czeka w rejestrze USART->DR. Dopiero trzeci i kolejne się nie mieszczą i muszą czekać na zakończenie wysyłania poprzednich.
Witam mam problem odnośnie zoptymalizowania kodu do przesyłania danych między Atmegą8 a aplikacją zrobioną w Borlandzie - skończyła mi się pamięć. W tej chwili mam wszystko zrobione za pomocą przesyłania znaków. np. ->Klikam w borlandzie przycisk bateria ->Borland wysyła po USART znak B (char) ->Atmega czyta i interpretuje, że trzeba wysłać na USART...
Po przejściu z at90s2313 na attiny2313 nie działa mi komunikacja z Pc, poprzez hyperterminal. Czy mogłby ktoś sprawdzic czy ten program rzeczywiście wogole jakies dane wysyła.
Na Mega328 z KB RAM uruchamianie OS nie bardzo ma sens. Zrób wielowątkowość opierając cały program o maszynę stanów. Zapomnij, że istniej delay. Owszem, krótkich delay (mikrosekundy) w AVR przeważnie nie da się przeskoczyć ale nie zawsze. Na 1-Wire, można obsłużyć USARTem. Nie ma żadnych delay i 1-Wire działa na przerwaniach. Masz więc już pierwszy...
Mam wysyłanie przez USART z wykorzystaniem DMA, ale dzieje się dziwna rzecz DMA wysyła o 2 bajty mniej niż zadeklarowane tzn gdy mam DMA1_Channel4->CNDTR = 8; to USART wysyła 6 bajtów: [syntax=cpp] volatile uint8_t TxBuf[8]={1,2,3,4,5,6,7,8}; volatile uint8_t x=0; void SysTick_Handler(void)// co 1sek { x++; if(x==5) { DMA1_Channel4->CCR &=...
Wiatam Wiemy już, że można wysyłać dane przez USART przy pomocy DMA. Czy można poprosić USART-a, by przyjmował dane z zewnątrz ? Również przy pomocy DMA.
Cześć, mam problem z komunikacją z modułem HC-05 za pomocą USART, operuję na uC xmega32A4U więc wspiera komunikację po USB z wykorzystaniem CDC. Komunikacja USB CDC działa, mogę wyświetlać różne wiadomości do serialu. Mam problem z komunikacją z modułem HC-05 - po odpaleniu terminala nie mogę wpisywać znaków (znaki nie pojawiają się pomimo ich wysyłania/...
Witam, wykonałem układ z ATmega88, który m.in. wykorzystuje wyświetlacz alfanumeryczny VFD. Mikrokontroler poprzez USART wysyła polecenia i znaki w oparciu o następujący kod: USART_Transmit w formie: Send_String w formie: Send_String tablicy znaków powoduje wystąpienie błędu z powodu, jak mniemam, konfliktu typu zmiennych: error: incompatible types...
Muszisz ustalić co (jaka funkcja) powoduje wawieszenie kodu. Możesz wykomentowac niektóre fragmenty albo wysyłać na usart informacje który fragmernt wykonał się. Teraz opisujesz sytuację, z jednym czujnikiem działa z pięćdziesięcioma nie. Napisz, z którym konkretnie.
Ja to wszystko doskonale wiem. Przeglądałem dużo tematów na elektrodzie i jestem świadom, że urządzenia takie są nie wiele warte i świadomość tą podkreślałem już w pierwszym poście. Niemniej jednak zależy mi żeby coś z tego zrobić, choć wiem, że czasami po prostu się nie da. Mam 2 płytki z atmega32(można powiedzieć, że testowe) i to je chciałbym wykorzystać...
Witam! Mam w planach zbudować małe urządzenie, które będzie potrzebowało aby 3 Atmegi współpracowały ze sobą razem. Dwie atmegi mają wysyłać swoje dane do trzeciej. Jak na razie to można powiedzieć, że jestem bardziej początkujący. Mam w miarę dobrze ogarniętą komunikację przez USART pomiędzy dwoma uC oraz magistralę I2C ale nie pomiędzy uC a na przykład...
Tak, dodaj po zapisie do UDR sprawdzanie bitu TXC w rej. UCSR. Dzięki temu funkcja nie zakończy się dopóki USART nie zakończy wysyłania wszystkiego co jest. Pamiętaj tylko, że trzeba ręcznie skasować za każdym razem TXC poprzez wpisanie na jego pozycję wartości 1. Wadą tego rozwiązania jest to, że transmisja będzie ciut wolniejsza (nie wykorzystujesz...
Jak odbierasz znak powinieneś czekać na ustawienie flagi RXC, a nie UDRE: [syntax=c] while ( !(UCSRA & (1<<RXC)) ); [/syntax]
Tak, to się tak właśnie robi. Oczywiście odbierasz wszystko w przerwaniu, wrzucasz do bufora, po odebraniu pełnej ramki ustawiasz flagę, którą można odczytać z pętli głównej programu. Dla pełnego bajeru transmitowane ramki powinny mieć jakąś kontrolę integralności. Dla jeszcze pełniejszego bajeru można wzbogacić funkcję odbierającą o wysyłanie potwierdzeń...
Witam wszystkich Chciałbym się poradzić ponieważ mam problem z komunikacją USART. W czasie wysyłania stringów do terminala komputer się resetuje, pojawia się blue screen oraz komunikat problem z multiple_irp_complete_request. Sytuacja powstaje tylko w przypadku gdy komunikuję się poprzez przejściówkę USB-USART, gdy korzystam z modułu bluetooth wszystko...
Witam Jaka jest pojemnosć, rejestru przesuwnego w USART w Atmega 16, wysyłam dane do atmegi i wychodzi mi, że rejestr ma pojemnośc 4 bajtów, pozniej jak nie odczytam UDR to znaki w rejestrze sa nadpisywane. Czy rejestr faktycznie ma pojemnośc 4 bajtów?
witam, jestem początkujący w mikrokontrolerach i zacząłem dziś kombinować z USART. Moja atmega8535 wysyła rzeczy które odbieram za pomocą Tera Terma i wszystko jest ok. Chciałem natomiast zapytać jak wykonać przeciwną operację - tzn jak wysłać coś z komputera do atmegi? Jeśli ktoś mógłby podać jakim programem tego dokonać i łopatologicznie wyjaśnił...
1. Jakiego zegara używasz do taktowania USART'a? PCLK czy SYSCLK (RCC->CCIPR)? 2. Po co mnożysz * 256 w obliczaniu BR? Ad1. SYSCLK ( który dopiero teraz ustawiłem, poprzez RCC->CCIPR (domyślnie jakbym tego nie ustawił to nie powinien być SYSCLK?) Ad2. Wzór podany przez prowadzącego na studiach, który "podobno zawsze działa" chociaż " szywronek " pisze...
Chciałem napisać funkcję która odbiera przez USART znaki z klawiatury składa je w łańcuch do momentu aż zostanie wciśnięty enter i wysyła je jako ciąg znaków. Usart skonfigurowany prawidłowo, pojedyncze znaki odbiera i wysyła jednak kiedy próbuje z funkcją która wygląda tak jak poniżej to wysyła mi znak "Ł" nie zależnie od tego co wpisze, co robię nie...
I2S jest interfejsem dość szybkim a do tego niosącym zegar. Niesie sygnał zegarowy, jak każdy synchroniczny interfejs szeregowy, akurat w tym niewiele jest odkrywczego. Jest dość szybki to akurat też nie jest problem, gorzej jak by był za wolny. Nie wiem jak to wygląda w AVRach ale wiem że w 51 można było wykorzystać USART do podłączenia np. rejestru...
Ten program wysyła bajty odczytane z pamięci jako znaki, a nie jako sekwencje cyfr ASCII. Zacznij od programu, który będzie w pętli co jakiś czas wysyłał np. kolejne cyfry lub litery. Jeśli to zadziała, będziesz wiedział, że masz poprawną transmisję - wtedy włącz obsługę pamięci i ew spróbuj wysyłać jej zawartość zamieniając ją na wartości np. szesnastkowe...
stm32f4 usart wysyłanie wysyłanie tekstu przez usart przerwa usart
napięcie hydrostatu podłączenie monitoringu czujnik temperatury mercedes sprinter
czujnik spalin ariston czujnik spalin ariston
Stihl 025/MS 250 zalewa się na gorąco – przyczyny, gaźnik, membrany, cewka, regulacja Kod usterki EDC 7EB22 1F w Iveco - diagnostyka i naprawa