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...
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&...
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...
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...
Tak to powinno być, żeby tylko ciągle wysyłało? Dalej niestety nie działa. [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 */ /* Private variables...
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...
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ą...
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,...
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)...
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,...
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....
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...
odbierać usart stm32 esp8266 usart przerwa usart
first flash sharan ogrzewać gosund włącznik
moment dokręcania korbowodów moment dokręcania korbowodów
Czy Google spowalnia Firefox na YouTube? Jak sprawdzić sprawność miernika IMI Robin?