Po pierwsze enkoder możesz obsługiwać sprzętowo na XMEGA - w tym celu konfigurujesz event system na QDEC, a dowolny timer będzie ci zliczał impulsy i pracował jako enkoder. Co do transmisji USART - można paczki odbierać przez DMA, co jest wygodne, można to zrobić w oparciu o przerwania. W tym celu odblokowujesz przerwanie RXComplete sygnalizujące gotowy...
Zmienne globalne zajmują...... Pewnie ram dla led jest rezerwowany w chwili uruchomienia biblioteki przez memalloc. Gdybyś sam pisał obsługę led to użyłbyś tablicy o określonym rozmiarze dzięki czemu wiedziałbyś ile ram zajmuje program. Poszukaj jak wyświetlić ilość wolnej pamięci ram w czasie działania programu. Jakiś freemem jest. Trochę oszuka ale...
Witam, chce uruchomić transmisje szeregową na podanym w tytule uC i tutaj napotkalem na problem, poniewaz dokumentacja do 48 jest bardzo uboga :/ Zaimplementowalem cos, ale nie dziala. jaka uboga? o czym ty mówisz ? skąd ty takie ubogie dokumentacje bierzesz? wejdź na stronę www.atmel.com i pobierz z tamtąd pełną notę PDF do jakiego zechcesz tylko...
No dobra. Wywal wszystko na linii Tx telefonu do Rx procesora. Ma być połączenie bezpośrednie. Na drugim kierunku zostaw tak jak masz. Poniżej kod do testów. Powinien działać. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 Config Lcd = 16 * 2 Config Serialin = Buffered , Size = 100 Enable Interrupts 'Declare Sub Oproznij_bufor...
cześć. sprawdziłem Twój kod na arduino nano (AVR 328p). Kod zaczął działać prawidłowo po zmianie dzielnika w wyliczaniu ubrr. Powinno być: [syntax=c]#define RS_UBRR F_CPU / 16 / RS_BAUD - 1[/syntax] Ja zrobiłem to tak, że do funkcji uart_init podaję bauds (dla własnej wygody): [syntax=c]void uart_init(uint16_t bauds) { uint16_t ubrr=F_CPU/16/bauds -...
[url=http://www.ftdichip.com/Support/Doc... znajdziesz w miarę aktualną dokumentację do tego układu. Na stronie 30. masz schemat podłączenia do dowolnego uC. Nie potrzebujesz żadnych konwerterów napięć, ponieważ wszystko jest na poziomie TTL. Jest możliwość, aby podłączyć atmega8 bezpośrednio do portu USB, ale nie...
wywal opóźnienia z pętli głównej
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...
Jeśli zwykła transmisja asynchroniczna to wystarczy.
Ustawiasz DMAEN w ADC_CFGR1 przed kalibracją ADC, a powinieneś po jej zakończeniu.
https://obrazki.elektroda.pl/4168190800_... Na wstępie znajduje się „tło historyczne” przybliżające przyczyny powstania projektu, jeżeli ktoś jest zainteresowany jedynie kwestiami technicznymi proszę przejść od razu do części poświęconej skróconemu opisowi konstrukcji sprzętowej. Jak to się zaczęło Odkąd sięgam pamięcią,...
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ść...
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.
(...) if(odb_flaga) {at_komenda_sprawdz();}... } } Kod robi takie błędy --> Na początku sam wykonuje case 0, po nim mogę wprowadzić case 0 jeszcze raz po czym pętla się kończy a chciałem mieć możliwość nieskończonego wybierania klawiszy . Case 1 nie chce działać Na podstawie podanego fragmentu kodu trudno dokładnie...
Ale to: [syntax=c]int main(void){ MYUBRR = 25; //baud rate = 2400 USART_Init( MYUBRR ); USART_Transmit(USART_Receive()); //wyślij odebrany bajt }[/syntax] nie działa tak jak zakładasz. To się wykona raz po czym procesor wejdzie w martwą pętlę. Ostatnią linię trzeba więc zapętlić. Druga sprawa - jeśli odbierasz śmieci to znaczy, że masz źle ustawione...
bit startu, a potem po kolei bity od najmłodszego do najstarszego (czyli pierwszy po starcie leci "Bit0" potem "Bit1" ... itd, i tak jak napisałeś - jesli pierwszy bit będzie = 1 a pozostałe 0 to odbierzesz bajt o wartości 1) pozdr ;)
Kawałek kodu masz mocno namieszany, nie masz funkcji odczytującej daną z uartu - pokaż większy fragment kodu. ogólnie: [syntax=c] #define BUF_SIZE 100 char c; chat buffer[BUF_SIZE];//koniecznie deklaracja rozmiaru ... while(1){ if((c=uart_getc())){ buffer[i++]=c; if(i==BUF_SIZE-1){//zabezpieczenie przed przepełnieniem bufora buffer[i]='\0'; i--; //sygnalizacja...
port_szeregowy.Write(tablica_bajtów, 0, 1); Write jest jednoargumentowe 'Public Sub Write(Text As String)' A poza tym program w Tiny odbiera po jednym bajcie w pewnych odstępach czasowych i tak muszą być wysyłane w VB. Muszę się dokształcić żeby odbierać ciąg znaków. Tylko nie wiem czy wystarczy na to pamięci. Co innego w Atmedze, która ma wbudowany...
Tak. Połączenie ma skrosowane. Dodam tylko że funkcje wyslij i odbierz działaja dobrze. Testowałem to programem który tylko odbierał daną, wpisywał ją do Pwm i wyświetlał i wszystko dobrze chodziło. A po połączeniu ze sterownikiem serwa już nic nie odbiera. Oto funkcje: void UART_Wyslij(unsigned char dana) { while (!(UCSRA&(1<<UDRE&...
bufor_z_pozycja_GPS Nie wiem jak wygląda Twoje USART1_Receive(); ale dane z USART należy odbierać wtedy kiedy nadchodzą. Najlepiej za pomocą przerwania od RX. Jak myślisz że dane nadejdą akurat wtedy kiedy wywołasz swoją funkcję USART1_Receive(); to jest to założenie błędne.
Dekoder to helix mp3, do bufora fifo(51200B) wkladam dane w przerwaniu od usart rxne. Stos i stera ustawione na 0x1000
ale po co skoro można odbierać z USART za pomocą przerwań ,bez potrzeby sterowania INTx:?:
Witam, mam krótkie pytanie: czy modbus rtu możemy odbierać (nadawanie mnie nie interesuje) poprzez USART tak jak tryb ASCII i jak jest to opisane w datasheet Atmegi?
Witam, Próbuje zrealizować odbiór oraz nadawanie danych, przez USART. Chcę odbierać wartości wysyłane z PC do cpu do trzech różnych zmiennych oraz wyświetlać w konsoli wartość jednej zmiennej. Spróbowałem, to zrealizować w przerwaniach (na razie bez wykorzystania DMA, później oczywiście wykorzystam do tego DMA, ale chciałem przećwiczyć w przerwaniach)...
Przerwanie "Receive Complete" jest generowane po odebraniu każdego pojedynczego bajtu danych, czyli nawet dla dosyć niskiego transferu 9600bps co ok. 1ms. Zapis do EEPROM trwa ok. 8,5ms, więc policz sobie, ile bajtów "zgubi" USART, zanim skończy się Twoja obsługa przerwania. Podstawowy błąd masz w założeniach. Dane z USART należy odbierać do bufora...
Rozumiem, że masz dwa moduły BTM-222? Jeden przez RS232 podłączony do PC, a drugi do USART ATMEGI? Czy też jeden moduł BTM, a w komputerze jakiś moduł bluetooth? Jeśli chcesz sprawdzić działanie USART, to połącz w ATMEGA nóżki RXD i TXD. A funkcja, która będzie odbierać dane, niech wyrzuca je na PORT.
Witam, mam problem z oprogramowaniem STM32, próbuję odbierać i wysyłać dane z USART3 (do komunikacji z innym mikroprocesorem). Kod wygląda tak: [syntax=c]int main(void) { /* Flash unlock */ FLASH_Unlock(); /* Initialize Key Button mounted on STM3210X-EVAL board */ //STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); RCC_APB2PeriphClockCmd(RCC_APB1Periph_US...
Witam Poszedłem za twoją radą i odpaliłem najpierw rs232 #include <stdint.h> #include <avr/io.h> #include <util/delay.h> // Define baud rate #define USART_BAUD 9600ul #define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<<4... void USART_vInit(void) { // Set baud rate UBRRH = (uint8_t)(USART_UBBR_VALUE&g...
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...
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...
Diodami steruje Arduino nano z jego ułomną biblioteką "Adafruit_NeoPixel". Ułomna bo napisana tak że nie da się używać razem z nią przerwań co komplikuje przełączanie efektów Użyj USART i przerwań nadawczych do WS2812 a inne przerwania będą działać, tyle, że muszą być deklarowane z atrybutem ISR_NOBLOCK lub INTERRUPT. To oznacza problemy, gdy drugi...
No cóż chyba faktycznie czegoś nie doczytałem. Przyznam że kwarc wybrałem na podstawie moich doświadczeń z uC ATmega gdzie częstotliwość 1,8432MHz zapewnia transmisję z błędami = 0 "zero". Sądziłem że w Xmedze będzie identycznie. Przecież prędkość 115200 jest idealna krotnością dla zastosowanego kwarcu. Jeśli ktoś jeszcze coś podpowie to dzięki, ja...
Poprawiłem ten kod wg wskazówek. Jednak dalej nie chce mi odbierać ani wysyłać na PC. Teraz mam tak: [syntax=c]/* Includes */ #include <stddef.h> #include <stdio.h> #include "stm32l1xx.h" //defined USE_STM32L_DISCOVERY #include "discover_board.h" #include "stm32l_discovery_lcd.h" /* Private typedef */ /* Private define */ /* Private macro...
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 PC potrafi odbierać tak niskie boudrate? Nie wiadomo jaki jest błąd przy takich ustawieniach, ale obstawiam, że spory. Ponieważ baudrate zazwyczaj powstaje na skutek podzielenia częstotliwości taktowania USART przez podaną przez programistę wartość, to przy niskich wartościach różnice i błędy narastają lawinowo. W efekcie dwa układy, różnie taktowane...
Witam Zastanawiam się jak można oszacować wydajność systemu DMA. Chcę użyć trzech kanałów DMA a nie chce mi się kontrolować i prawidłowo reagować gdy transmisja DMA się nie wykona. Chcę: - odbierać dane przez USART 20 bajtów co 20 [ms] (ramka z wykrywacza) - wysyłać dane przez SPI 2*504 bajtów co 50 [ms] (obsługa dwu wyświetlaczy z nokii 3310) - generować...
Z przerwaniem masz racje, że najlepiej, aby przerwanie trwało jak najkrócej. Mam jeszcze pytanie bop na koniec transmisji wysyłam ciąg danych z PC jak narazie 3 znaki. Funkcja Waitkey z tego co czytałem zwraca przychodzący znak czy może ona zwrócić ciąg znaków jeżeli przypiszę ją do Bufora typu string*5? Probowałem odbierać osobnymi waitkey te 3 bajty...
Program, który odbiera dane po TCP musi być napisany tak, jakby dane przychodziły po 1 bajcie. Bo TCP to transmisja strumieniowa (dokładnie tak samo, jak z RS-em, więc wszystkie uwagi dotyczą też aplikacji korzystającej z seriala). W żaden sposób nie jest zapewnione by dane były odbierane takimi samymi kawałkami jak zostały nadane. Możesz nadać np 100,...
Rezystor włączysz w przewód na którym chcesz mierzyć napięcie. Przetwonik podłączasz tak żeby mierzyć napięcie na rezystorze czyli równolegle do rezystora. W zależności od tego jakie ma wejścia Twój przetwornik (czy symetryczne czy asymetryczne) trzeba dobudować układ na wzmacniaczu operacyjnym albo jakoś "chytrze" włączyć rezystor np jedną końcówką...
Absolutnie nie mam pojęcia co chcesz zrobić. Program który wstawiłeś jest kiepski: 1) Nie baw się w takie skomplikowane ładowanie danych ldi r17, 1<<CS02 out TCCR0, r17 in r16, TIMSK //tryb normalny sbr r16, 1<<TOIE0 out TIMSK, r16 //przerwanie od przepełnienia Tylko zrób to na brutala, bo tutaj niczym to nie grozi: ldi r16, (1<<TOIE0)...
Witam, jestem początkującym programistą. Zamierzam napisać program na µC ATmega8, który odbierze liczbę z zakresu 0-255 przez USART i ustawi odpowiednio rejestry OCR1A i OCR1B w zależności od wysłanej liczby i przypisanemu jej rejestrowi. Próbowałem napisać kod, który po wysłaniu 'y' dla rejestru OCR1A lub 'u' dla rejestru OCR1B przypisze odpowiednią...
W jak możesz nadawać znaki via UART to możesz przecież wszystko podejrzeć. Pokazanie kodu wydaje się konieczne, aczkolwiek ja szukając dalej błędu bym szedł małymi kroczkami. Sprawdź najpierw czy idzie odbierać znaki (np po odebraniu znaku włącz silnik, czy wyślij przez uart "hurra"). Dalej skonkretyzuj to do konkretnego znaku np 'a' i idz tak dalej...
Napisałem sobie programik jak niżej: #include <avr/io.h> #include <avr/delay.h> #include <stdlib.h> #include "lcd.h" #include <avr/signal.h> #include <avr/interrupt.h> #define TIMER0_INIT 0 #define plus bit_is_clear(PINB,4) #define minus bit_is_clear(PINB,5) #define tryb bit_is_clear(PINB,3)...
Nie. Pozostaje tylko współczuć. Może pora zmienić pracę? Po co? Ja mogę 5 razy robić to samo. Każą na 51, zrobię. Później na PIC, nie ma sprawy. ST8 - ok. Może i byc Z-80. Pewnie w magazynie jest 1000 płytek i chcą je wykorzystać. Płacą, robię. Przez lata nauczyłem się nie wybiegać przed szereg ale i robić dupochrony w postaci archiwum korespondencji....
Witam. Mam problem z filtrem adresu w CANie. Używam tej samej biblioteki co Yaerius . Płytka STM32F103 ma odbierać wiadomości. I odbiera, jak podam w filtrze jakiś adres. Drugą taką samą płytkę używam do nadawania wiadomości powiedzmy z adresami 33, 34 i 35 (płytka moja więc mogę zaprogramować dowolnie). Docelowo ta pierwsza płytka ma służyć jako analizator...
Co do wysłania danych przez terminal z MCU to jest tam przykład zapisu danych z terminala na kartę SD. Ale najprościej po prostu odbierać dane z USART i je zapisywać do tablicy w SRAM. Tylko uwaga - dane nie mogą być wysyłane zbyt szybko, to znaczy program musi nadążać z ich odbiorem. W przypadku SRAM to raczej nie jest problemem. Wynika to z tego,...
Ludzie... Poprawiłem ten błąd, to była literówka przy wpisywaniu na forum. W programie było dobrze. Tu poprawiony kod, dalej zachowuje się tak jak opisałem na początku. #include<avr/io.h> #include<avr/interrupt.h> volatile int b=20; volatile char key; ////////////////////////////////////////...
Dziekuję za wszystkie dotąd udzielone mi porady. Jeśli chodzi o transmisję binarną printbin, inputbin to próbowałem wyszło super przede wszystkim zmniejsza liczbę byte ramki chodzi mi o to, że gdy wysyłam parametr do pwm np. 255 to używam 3 znaków ASCII czyli 3 byte a binarnie wyśle byte 255 i to tyle ale w transmisji nie mogłem korzystać z przerwania...
Witam, Mam problem z odbiorem danych przez uC a od niedawna programuję w C. Mam takie procedury: void InitUART() { UBRRH = (uint8_t)(UBRRVAL >> 8); UBRRL = (uint8_t)UBRRVAL; /* Set the baud rate */ UCSRC = (1<<URSEL)|(1<<U... /* Set frame format: 8data,...
Tak do końca nie rozumiem. Procek dostaje tak dużo danych, że nie nadąża z resztą programu? Każdy odebrany bajt będzie stracony dopiero, gdy USART odbierze w całości następny (już nie wspomnę o sprzętowym buforze), a Ty nie zdążysz jeszcze pobrać poprzedniego. Masz w programie głównym jakieś czasożerne procedury? Odbieraj dane w przerwaniu i umieszczaj...
zakłócania transmisji do urządzeń w chwili wysłania czegokolwiek do VirtualCom. Żadnych zakłóceń nie ma. odłaczyć mostek USB Nie trzeba odłączać. Nie ma zakłóceń i nie trzeba odłączać? Schematy wskazują na coś innego. Mostek USB ma tylko rezystor szeregowy na linni TX (RX dla procka). Potrzeba dalsze wyjaśnienia? obciążenie procka może byc nawet 100%...
Witam, używasz zdaje się prędkości 4800 przy tym kwarcu tak? - sprawdź więc dobrze czy w odbiorniku masz taką samą. Taka sama, sprawdzam w terminalu co uC wysyła. 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...
Mam do odebrania co ok. 2 sekundy do 20 bajtów danych. Długość ramki jest różna, określona w drugim bajcie wysyłanej ramki. Po odebraniu ramki trzeba wyliczyć sumę kontrolną, a następnie odczytać z niej pewne dane, na podstawie których uP ma podejmować dalsze działania. Jak narazie zrobiłem odbiór jednego bajtu tak, że uP wykonuje jakieś zadanie w programie...
Nie rozumiem za bardzo co masz na myśli żeby programy działały przy różnej prędkości ;) ? ..... toż ideą działania RS232 jest to że dawa urządzenia, które ze sobą "gadają" po RS232 MUSZĄ !!! mieć ustawioną taką samą prędkość ;) - nie ma że boli - tego nie przeskoczysz. Przy różnym taktowaniu za to możesz spokojnie ustawiać różne prędkości ale tylko...
Witam, Próbuję korzystać z biblioteki Peter Fleury do obsługi usart-u, której listing znajduje się poniżej: PLIK uart.c /***************************************... Title: Interrupt UART library with receive/transmit circular buffers Author: Peter Fleury <pfleury(at)gmx.ch> http://jump.to/fleury File:...
Witajcie! Mam podstawy do tego aby sądzić, że uzyskanie milimetrowej dokładności w mierzeniu odległości przy pomocy ultradźwięków to fikcja. Przy odseparowanym nadajniku i odbiorniku, gdy wysyłam paczki 5 impulsów sygnału 40kHz co równe odstępy czasu, odbieram, w zależności od odległości interwały różniące się od siebie o 25us czyli dokładnie tyle ile...
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...
Witam, W chwili obecnej pracuje nad termometrem, sterowanym na pilota. Pilot wysyła dane w kodzie RC5. Wysłane dane trafiają na odbiornik podczerwieni TSOP31236 (36kHz). W momencie gdy dane nie docierają na wyjściu odbiornika jest stan wysoki, gdy odbierze jakiś sygnał na wyjściu jest poziom niski. Wyjście odbiornika podczerwieni jest podpięte do wyjścia...
Wiersze matryc masz sterowane z procka więc błąd bedzie w programie Pobieżnie przejrzałem program widze ze strobe ustawiasz na '1' a gdzie jest zerowany ten sygnał?
- F_CPU (czy jakąkolwiek inną makrodefinicję) możesz zapodać w makefile'u jako dodatkowy parametr dla gcc ( -D ). co jest opisane we wskazanym artykule. - Przy problemach z komunikacją przydaje się analizator logiczny - takim klonem Saleae za ~40zł można całkiem sporo zdziałać. lub za 7$ z darmową dostawą na aliexpress, czy ebay,
Ja znalazłem tam taki błąd: Zamiast: lcd_puts(c); Powinno być lcd_put_CHAR(c); Ale to raczej nie pomoże :)
Jak odbierasz znak powinieneś czekać na ustawienie flagi RXC, a nie UDRE: [syntax=c] while ( !(UCSRA & (1<<RXC)) ); [/syntax]
Zasadniczo nie jest to możliwe, tzn. funkcja wysyłająca wygląda dobrze, problem jest gdzieś indziej. Masz dokładnie taki program, jak pokazałeś? Jak odbierasz i wyświetlasz?
Witam, właśnie budują pewien układ, ale napotkałem problem, z którym nie mogę sobie poradzić. Układ poprawnie wysyła wszystko do komputera przez USART, ale nic nie chce odebrać, nie wiem co jest grane, co robię źle. tak inicjuję usart: ldi temp, 0x00 out UBRRH, temp ldi temp, 12 out UBRRL, temp ldi temp, (1<<RXCIE)|(1<<R...
Nie korzystam z systemInit ani zadnej innej biblioteki, cały kod który mam jest napisany w 100% przeze mnie. Czyli dobrze założyłem, to 16Mhz, pytanie ktore dalej pozostaje bez odpowiedzi to co jest nie tak ? :( Chyba jednak nie cały. Nie napisałeś nic o środowisku - obejrzyj SystemInit(). Najbardziej nie tak jest to, że nie pokazałeś poprawionego...
Spróbuj tego: [syntax=c]dane_odebrane = UART_Receive ();[/syntax] Z rejestru UDR można czytać tylko raz, robi to funkcja UART_Receive() i zwraca odczytaną wartość. Więcej w karcie katalogowej układu.
Funkcja (w takiej ostatecznej formie jak przedstawiona przez Ciebie), wygląda na poprawną, tzn. powinna działać tak jak tego oczekujesz, chociaż sprawdzałem pobieżnie i głowy nie dam :D "Poprawność" rozumiem tu w sensie użytej sekwencji instrukcji. Przypuszczam, że kłopot może wynikać z zależności czasowych. Robisz dużo operacji na LCD. Być może użyte...
Np. odbieram przez USART ciąg 49 50 51 65 66 67 na wyświetlaczu chciał bym wyświetlić 123ABC. Czyli chcesz wyświetlić reprezentację znaku ASCII o podanym kodzie? ( http://www.asciitable.com/ ) Jeżeli tak, to powinieneś użyć:[syntax=c]sprintf(str, "%c%c%c%c%c%c", w[0], w[1], w[2], w[3], w[4], w[5]);[/syntax]
Słuszna uwaga. Ewentualnie daj linię PORTC = znak; zamiast if (znak == 'w') { PORTC = 0x55; _delay_ms(1000); } else { PORTC = 0; } i zobacz, czy ci cokolwiek odbiera.
Usart odbiera co do niego nadajesz, on nie wie co ciebie z tego interesuje, to juz jest sprawa programisty.
Może dlatego, że niewiedzieć czemu po wysłaniu komendy czekasz na odebranie kolejnego znaku i go usuwasz odczytując UDR (dummy=UDR). Kolejna sprawa - te strcmp jest bez sensu, sprawdzać powinieneś dopiero po odebraniu danych. Ew. trzebaby zamazywać cały bufor, bo tak jak to masz zrobione przy odbiorze kolejnych komend bufor jest mixem nowych i starych...
Przeczytaj najpierw ze zrozumieniem dokumentację uC. Dodatkowo: po co pętla while w przerwaniu?
0xFF, to brak transmisji, ale 0xC0 świadczy o pewnym przesyle. Było by miło, gdybyś podłączył oscyloskop, bo mogli byśmy wyeliminować błędy transmisji. Połącz RxD z TxD mikrokontrolera i zobacz czy odbierasz to co wysłałeś.
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...
Jedyne co pomaga to sprawdzanie czy dane są odbierane z USART-a. Czyli jeżeli USART odbierze dane to przed wejściem do obsługi wyświetlacza odczekuje chwile. Zapobiega to wejściu w przerwanie gdy jest obsługiwany wyświetlacz.
A masz możliwość podpięcia się pod komputer i wysyłania/odbierania danych z PC (czy masz COM + przejściówka na TTL, lub FT232 lub podobne)?
Zanim zaczniesz rozbierać przejściówkę zauważ, że kod znaku "1" w ASCII ma wartość 0x31 szesnastkowo lub 49 dziesiętnie. if(bajt_odebrany == 0) na if(bajt_odebrany == 49) powinno działać zgodnie z Twoimi oczekiwaniami. Do sprawdzenia wielu rzeczy bez budowania układu może być przydatny program USART_Init(4800); //ustawienie prędkości...
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...
Z DMA powinno być łatwiej a z pewnością mniej obciąża CPU. Oczywiscie ze nie. Jak zwykle kol. (at)LChucki wprowadza w błąd. Dla 2 znaków oczywiście to nie ma sensu. Trzeba po stronie odbierającej wykrywać koniec transmisji (np poprzez IDLE, przekróecenie bufora itd itd). Do tego trzeba zaimplementować odpowiednie mechanizmy synchronizacyjne. Sądząc...
http://obrazki.elektroda.pl/8659817100_1... WSTĘP Inercyjna jednostka pomiarowa o 9 stopniach swobody do określania orientacji w przestrzeni. To mały projekt czysto edukacyjny, a jego celami były: -przypomnienie sobie jak sie pisze aplikacje na PC w Qt Creator -zapoznanie się z FreeRTOS i jego implementacja na procesorze -zapoznanie...
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...
Niewiele w nim zmieniłem, ale nie ma już ostrzeżeń W pętli ten " USART_Receive();" jakie ma zadanie? Chcesz odbierać co drugi nak? Dodano po 8 Niewiele w nim zmieniłem, ale nie ma już ostrzeżeń Tu też czi się pułapka, w która kiedyś możesz wpaść. Jeśli przy danej prędkości trzeba pracować w trybie x2 UARTa, to Ty ti ustawiasz bitu X2 w uarcie na podstawie...
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...
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...
OK, od początku ;) Sprawdź, czy zadziała: void usart_put_char(uint8_t znak) { while(!(USART2->SR & USART_SR_TXE)); USART2->DR = znak; }
Dodam tylko, że po drugiej stronie linii USART jest atmega 8, która poprawnie odbiera informacje.
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.
Zdefiniuj "nie działa". Nic nie odbiera? Bo w sumie to nie powinien. Żeby odebrać coś za pomocą przerwania należy te przerwania włączyć [syntax=c] NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp... = 0; NVIC_InitStructure.NVIC_IRQChannelSubPri... = 0; NVIC_InitStructure.NVIC_IRQChannelCmd...
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 naskrobalem taki oto program ktory w domysle ma odbierac z btm222 wartosc 1 i uruchamiac wyjscie pc7 do sterowania tranzystorem. hardware to atmega32 , uart to 19200 , 8 bitow danych , jeden stopu bez parzystosci [syntax=c]#include <avr/io.h> #define PRZEK_PIN (1<<PC7) #define PRZEK_ON PORTC &= ~PRZEK_PIN #define PRZEK_OFF PORTC...
1) Brak deklaracji CONFIG COM w obu programach 2) W odbiorniku wyrzuć TOGGLE i wstaw RESET bo za chwilę napiszesz czemu led się ciągle świeci ale przyciemniony 3) W odbiorniku wykorzystaj ISCHARWAITING i INKEY. Odbierasz tylko A i na podstawie czy jest =10 czy =15 wykonujesz ifa do świecenia ledem
Wystarczy napisać prosty program na dowolny mikrokontroler mający USART i SPI, który odbierałby dane z komputera i programował pamięć.
Znalazłem Tylko że muszę użyć układ scalony MAX232 do "pogodzenia" napięć PC i TTL. I to wszytsko ale jak przesyłać dane. Do transmisji danych w ATmega8 musisz użyć USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter) w trybie asynchronicznym. Łączysz pin wyjściowy oznaczony w ATmega8 jako TXD z wejściem RXD w porcie szeregowym...
Na ogół nie ma to sensu, bo zazwyczaj dane odbierane przez USART nie mają stałej długości,a sprawdzanie, ile ich przyszło przez DMA przysparza więcej problemów niż odbiór danych na przerwaniach bez DMA.
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...
Projekt SPI + DMA + USART to przymus, ktory musze zrobic a nie darze go jakas wyjatkowa sympatia, wrecz przeciwnie. Chodzi o samo wysylanie danych na jednym mikrokontrolerze pomiedzy SPI1 (master) a SPI2 (slave), Dalej mocno niezrozumiałe - np kol (at)Freddie Chopin nie wie gdzie jest SPI2. Moźe być też tak Jeden kanał odbiera USART -> RAM używając...
Dziękuję za odp. W takim razie mam pytanie dlaczego drugi USART (RXD1 oraz TXD1) mają stany wysokie gdy procesor nic nie robi (w tej chwili nie wysyła nic ani nie odbiera Pętla "Main: rjmp Main" - ten USART działa poprawnie odbiera i wysyła? RXD0 jest też w stanie wysokim i odbiera dane natomiast TXD0 ma stan niski (nie mogę podciągnąć rezystorem 1k...
Nie pamiętałem co czytałem wcześniej... Wysyłaj co sekundę 0xAA i daj znać co odbiera terminal.
Witam wszystkich Problem wygląda następująco, nie mogę odebrać żadnych danych za pomoca uarta1 atmegii 128 (poprawnie wysyła ale nic nie odbiera ;/ ) Prosiłbym o wszelką pomoc, poniżej wklejam programy inicjalizacji i odbioru: [code][syntax=c]void USART_Init( unsigned int ubrr, unsigned int port) { switch (port) { case 0: /* Set baud rate */ UBRR0H...
Ja mam u siebie troche inaczej. Ale najlepiej skorzystać z datasheeta bezczelnie kopiując kod. Po co Ci to L po określeniu taktowania? Piszesz w WinAVR czy czymś innym? Init: #define FOSC 8000000// Clock Speed #define BAUD_GPS 9600 #define MYUBRR_GPS FOSC/16/BAUD_GPS-1 ////////////////////////////////////////... void USART_Init( unsigned...
odbierać usart stm32 odbierać discovery radmor odbierać
cztero warstwowy klimatyzacja sterowanie zabezpieczenie falownika hybrydowego
izopropanol termopasty amica daw7123dcb
Moduł haka Steinhoff piszczy przy kierunkowskazie Technics SC-EH590 vs EH-580 vs EH-570 – różnice, moc, MP3, DSP, kolumny