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ęć.
Wyłącz przerwanie od TXE skoro nie chcesz wysyłać. 4\/3!!
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(...
Zgaduję, że problemem jest komunikacja po USART - wysyłanie znaków pewnie blokuje program w przerwaniu na spory odcinek czasu.
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]; };
Ż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.
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.
Witam, Skonfigurowałem USART żeby wysyłać dane, do komputera lecą prawidłowo. Chciałem teraz odbierać dane z komputera, jednak chciałbym to zrobić w przerwaniu aby tam w tablicy buforować dane i co jakiś czas obrabiać je w głównej pętli programu. Problem jest z tym, że po uruchomieniu przerwań uzyskuję jakieś śmieci - tak mi się wydaje, bo nie wysyłam...
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...
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...
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...
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.
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.
Ewentualnie jak posiadasz jakieś PICe z USB to możesz zrobić sobie przejściówkę USB<=>USART.
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...
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);
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...
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,...
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...
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śnienie twojego problemu: 1. włączasz układ i natychmiast zaczyna wysyłać 2. podłączasz terminal - zauważ, że twój układ już dawno zaczął wysyłać znaki 3. na terminalu pojawia się "escczescczesc" bez "cz", które zostało wysłane w trakcie 1 i 2 Powiem więcej, twój program zapewne wysłał "czesc" tysiące razy zanim podłączyłeś terminal.
BlueDraco dzięki, podkręciłem taktowanie wewnętrzne na 8MHz i wysyła 'A' w zamyśle mam wysyłać maksymalnie cztery znaki, które będą zmienną max liczna to 1500 więc coś jeszcze będzie trzeba pozmieniać. piotrva dziękuje skorzystam z rady co do terminala
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ć...
No pomyśl, kto wyświetla ten bluescreen. Raczej nie mikrokontroler... Błąd w programie dla uC też jest - nie można wysyłać przez UART danych bez przerwy. Daj jakieś opóźnienie czasowe po wysłaniu łańcucha. Być może kiedy to zrobisz, wadliwy sterownik na PC przestanie wylatywać na błędzie, nie oznacza to jednak, że działa on poprawnie. Masz też parę...
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...
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...
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...
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...
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...
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...
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...
Inicjalizujesz USARTD1, a znaki wysyłasz przez USARTC0 - popatrz na USART_putchar. Popraw tą funkcję, żeby tam było usart->DATA=...
A więc działa. Gratulacje :) Docelowo chcę zrobić co innego: Muszę próbkować 4 kanały ADC1 w przemiataniu i wysyłać wartości po USART do komputera. Tylko, że kanał 4 DMA zajmuje się USART1 TX a kanał 1 ADC więc jeszcze nie mam pomysłu jak to połączyć. Kolizja DMA nie występuje, bo są różne kanały. Po prostu jeden poczeka na drugi. Jak najbardziej sensowne...
Lepiej jest wykorzystać USART i wysyłać dane radiowo w trybie komunikacji wieloprocesorowej (Multi-processor Communication Mode), na jednej częstotliwości.
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(...
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.
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...
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.
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...
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ę,...
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...
Witam, Napisałem program do obsługi USART-a, ale nie chce on poprawnie wysyłać znaków. Atmega8A, 8MHz-kwarc, 19200. W kodzie pokazałem problemy: [syntax=c] #include <string.h> #include <avr/io.h> #include <stdlib.h> void uart_puts(char *s); int main(void) { // zapis rejestrów USART UCSRA= 0; UCSRB=0x18; UCSRC=0x86; UBRRH=0; UBRRL=25;...
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...
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...
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 )...
W avr stos liczy wstecz od podanego adresu. to znaczy ze jak wpisałeś 127 i dwa razy push to zmienne na stosie będą aż w 126. Nie wiem dlaczego akurat wpisałeś tam 127 - M8 ma 1K ram i naprawdę można tam wpisać 1023. Wtedy nie będzie ci sie prawie nigdy nakładało. O ile dobrze pamietam to w kompilatorach asm dla avr domyślnie nie podaje sie gdzie zmienna...
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ć...
Witam! Po odłączeniu sygnału RESET najprostszego programatora ISP (podłączenie bezpośrednio z portu LPT do procesora) od procesora AT90PWM3B ten zaczyna wysyłać przez port szeregowy RS232 dziwne, nierealne dane. Napięcie na tym sygnale przy odłączonym oraz przyłączonym sygnale reset z programatora jest takie samo (stan wysoki). Proszę o wskazówkę. Dziękuję...
Witam. Niestety potrzebuje znów pomocy - porady. Zakupiłem wyświetlacz prezentowany już na forum.... O ile jeden z Kolegów pokusił się o napisanie bibliotek na c ( które działają) o tyle ja muszę niestety zrobić to na bascomie. Potrzebuje wysyłać dane w formacie 50 05 05 82 01 10 00 64. 50 05 - nagłówek ramki 05 - ile danych 82 01 10 00 64 - dane wysyłam...
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ć...
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ł...
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...
Witam, mam drobny problem z programem na ATMEGA8. RXD i TXD podłączone są pod kostke SN75176 która wysyła na szyne RS485, pinem PD4 przełączam tryb pracy kostki (1- nadawanie, 0 - odbieranie). Kwarc 4MHz Program ma wysyłać wartość 97 na szynę przez USART. Kod programu poniżej: Kod programu poniżej: .include "m8def.inc" .cseg .org 0x00 ;###...
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...
Jest jeszcze jedna możliwość: program, którym odbierasz dane, przerywa odbiór po odebraniu bajtu równego zero. Co jest po drugiej stronie kabla?
Zwiększ rozmiar tablic tab_1 i tab_2. I pokaż jak to wysyłasz.
W przerwaniu USART_RXC musisz odczytać UDR niezależnie od warunków umieszczonych w kodzie, najlepiej, kopiując wartość tego rejestru do lokalnej zmiennej, tuż na początku funkcji. Jeżeli tego nie zrobisz, procesor zakolejkuje kolejne przerwanie. Piszę to na podstawie dokumentacji AVR8. W Twoim przypadku, gdy bufor odbiorczy się zapełni i nadejdzie kolejny...
Nie ma innego przerwania. Co dokładnie źle wysyłam i gubię? :)
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...
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.
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...
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
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...
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 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...
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...
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.
To dobrze że da się te dwa układy niezależnie odpalić, tak mi się wydawało ale nie byłem pewien. Jeśli chodzi o zastosowanie to ma to odczytywać dane (w sumie 16bitów) z przetwornika ADC i wysyłać max 10x na sekundą dalej po rs485. To można napisać nawet bez użycia przerwań.
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.
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ł...
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...
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ć...
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 &=...
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...
A jak z ustawioną szybkością USART? W przykłądzie szybkość drugiego portu USART ustawiana jest na szybkość wybraną w terminalu podczas łączenia urządzeń przez CDC. Poza tym w przykładzie znaki są odsyłane, jeśli podłączone urządzenie je odsyła. Jeśli moduł BT ma wyłączone echo to znaków w terminalu nie zobaczysz, pomimo, że wszystko działa. Najprościej...
Jak odbierasz znak powinieneś czekać na ustawienie flagi RXC, a nie UDRE: [syntax=c] while ( !(UCSRA & (1<<RXC)) ); [/syntax]
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?
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...
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 się wiecej nauczyć. Projekt pod nazwą "StdPeriph" lub "SPL" został uśmiercony przez ST wiele lat temu i zastąpiony tym ich "HALem", który nadal jest aktywnie rozwijany. Dla StdPeriph/SPL nie ma paczek...
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...
Funkcja hextoul przyjmuje stringi które powinny być zakończone zerem. A u ciebie wartosc1 ma tylko dwa bajty na wartość. Anomalie też są jeśli chce przesłać czas włączenia urządzenia w formacie hh;mm;ss Może ramu za mało. Na dodatek, jeśli wysyłasz w funkcji main oraz przerwaniu, to jeśli funkcja wysyłająca nie jest atomowa, to będziesz miał sieczke...
Podepnij kwarc i na nim sprawdź. Generalnie ATMega nie powinna byc taktowana z RC jeśli myślisz o USART.
PC wysyła wszystko co ma w buforze bajt za bajtem bez czekania. Można zwiększyć odstęp między bajtami, z tego co pamiętam to jest do wyboru szerokość przerwy 1, 1 1/2 lub 2 bity. A jak odbierasz dane? AVR'y nie mają buforu (no jest na 1 bajt, ale to nie bufor), najlepiej umieścić w przerwaniu wywoływanym przez USART podprogram który zapisze kolejne...
Witam. W trybie MULTIPROCESOR ATMega128 może współpracowac ze 128 innymi kontrolerami wykorzystując jeden USART ;) Pozdrawiam.
Masz źle napisaną funkcję odbioru na PC. Musisz to napisać tak, aby dane ASCII opakować jakimś znacznikiem końca, lub przesyłać informację ile znaków wysyłasz i w funkcji odbierającej czekać na odebranie wszystkich lub zgłosić time out. Potem te odebrane dane parsujesz i przypisujesz stosownym zmiennym.
stm32f4 usart wysyłać wysyłać tekst przez usart realterm wysyłać
volvo silnika rozruchu nierówno pracuje wyłącznik akumulator skuter
suszarka bauknecht einhell spawarka
Diagnostyka OBD1 w pojazdach Chrysler: kody błędów i narzędzia Częste awarie odtwarzaczy CD: silnik obraca się bez potrzeby