Dobra, to ostatni post bo szkoda klawiatury. Nie wiem skąd masz takie info że niedokładność zegara musi być mniejsza niż 10%. Na moje oko to jest %5 (połowa czasu trwania bitu). I jak masz błąd większy niż ta wartość to transmisja nie będzie działać. Kolejna rzecz: 1000000 / (16 * 9600) - 1 = 5.51041666667 czyli wpisujesz do UBRR wartość 5. W datasheet...
Przestaw zegar na 8MHz. 7% błędów przy odczycie z 'obcego' urządzenia jest raczej nie do przyjęcia. Jeżeli komunikujesz się z urządzeniem które sam zbudowałeś, jesteś w stanie przewidzieć jakie dane otrzymasz, zastosujesz jakiś mechanizm sprawdzania poprawności otrzymanych danych, to te 7% nie jest jeszcze problemem. Ale w tym przypadku (zgaduję) jesteś...
Witam, czy warto zaryzykować i używać wewnętrznego oscylatora w mikrokontrolerze pic 18, gdzie układ ma pracować w szerokim zakresie temperatur i wykorzystywana jest transmisja USART 57600 czy lepiej zastosować zewnętrzny kwarc z kondesatorami, żeby mieć większą stabilność o wartość np. 3.6864 MHz. (Przy takiej f i 57600 błąd jest = 0%). Pytam, ponieważ...
Błąd transmisji na poziomie 0.2% to jest bardzo mały błąd. Transmisja będzie śmigać super. Jeśłi chodzi o przerwania od UARTA i Timera to są one zamiennie - to znaczy że jeśli procek obsługuje przerwanie od Tmiera to w tym czasie blokuje inne przerwania które czekają w kolejce. Dlatego jeśli Twoje przerwanie od Timera jest takie długie to może być problem....
Kontynuując transmisję LoRa - jest tam sporo zaawansowanych opcji jak hopping itp.. Np. sprawdzanie błędów CRC - czy to znaczy że przy włączonej opcji nie trzeba już stosować w programie dodatkowego CRC? Transmisja albo przechodzi bez błędów, albo w ogóle nie?
Podstawowy błąd to taktowanie USART z wewnętrznego generatora. On nie ma wystarczającej stabilności i transmisja po RS jeśli działa to tylko przypadkiem. Zmień na kwarc i problemy znikną.
witam! Czy udało się komuś odpalić USART-a przy wewnętrznym zegarze 1MHz? Procek mega8535. U mnie wysyła śmieci, a według datasheet'a max błąd dopasowania częstotliwości wynosi 0.2%*, czyli nie powinno być źle... Używam terminala "Bray'a", który umożliwia ustawienie dowolnej prędkości transmisji - "przeskanowałem" od 6.500 do 11.000 b/s z krokiem co...
Rzeczywiście znalazłem błąd w schemacie, ale teraz sobie sam pogrzebałem. Ponieważ wyłączyłem kod autoryzacji poleceniem ATP0 i się zaczęły problemy:( ponieważ nie mogę się połączyć z komputera do BTM-a:( podczas instalacji urządzenia wybieram opcje(opcja bez parowania), ale gdy włączam Realterm-a to jest wymagane parowanie, a kod 1234 już nie działa:(...
Wszystko zależy, jak zwykle od wielu czynników. Najbardziej interesuje Cię procentowy błąd transmisji a ten zależy między innymi od prędkości taktowania procesora. I tu znów kolejny czynnik bo jeśli użyjesz Arduino Mega to ono ma przylutowany mikroskopijny kwarc 16MHz który niewygodnie jest podmieniać. Prędkość 115200 przy 16MHz obarczona jest już dużym...
Witam Posiadam zestaw uruchomieniowy ATmega8 zl2avr taktowany 1MHz(fabrycznie) i chciałem napisac program przesyłajacy dowolny znak na PC, ma byc odczytywane w hyperterminal. Ale niestety nie mia transmisji zadanego przeze mnie znaku. W trakcie transmisji (wskazuje ją świecaca się dioda) kursor w hyperterminalu mryga szybciej, czyli wnioskuje ze cos...
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? Więc w jakim celu w takim UNO wyprowadzony jest UART na złącza i dostępne sa shieldy korzystające z tego ? I jakim cudem w tej właśnie chwili działa mi komunikacja z ESP, bez odłączania...
Witam, Usiłuję zmusić ATmegę128 do komunikacji z komputerem przez RS-232. Niestety mam z tym duży kłopot. Procesor chodzi z kwarcem na 16MHz, a transmisja do komputera ma się odbywać poprzez wbudowany w procesor USART z prędkością 115,2kbps. Transmisja ma być w zasadzie ciągła do póki są dane do wysłania (a będą cały czas) i jedynie procesor będzie...
panowie chce polaczyć zasilacz (sterowany mikrokontrolerem ATMega) z komputerem przez złacze RS232. działałby na zasadzie wysylania z komputera odpowiednich kodów w ASCII a mikrokontroler by sobie je odpowiednio dekodował i ustawiał według tego napiecie czy prąd ew. wysyłał aktualne wartości na komputer. tyle że nie do końca rozumiem sposob obsługi...
Twój kod a także same założenia są już pełne błędów. Zatem to co obserwujesz jest tylko wypadkową tego wszystkiego co robisz źle. 1. co to za inkludowanie plików *.c ???? Inkluduje się TYLKO pliki nagłówkowe *.h 2. co to za rozbicie inicjalizacji nadajnika i odbiornika ? Choć teoretycznie mogłoby tak być - ale nie robi się w ten sposób 3. w inicjalizacji...
Witam, Chciałbym się komunikować z uK za pomocą portu COM (RS232). Komunikacja miałaby przebiegać w stronę PC->ATmega16. Do komunikacji ma służyć Terminal. ATmega na podstawie odebranego znaku ASCII, czyli kodu klawisza klawiatury, ma wykonać jakieś zadanie. Podłączyłem Atmega16 do PC według schematu: http://obrazki.elektroda.net/48_12149859...
Witajcie forumowicze, może nie udzielam się tu zbyt często, ale tym razem potrzebuję pomocy i nie wiem już do kogo mógłbym się zwrócić. Mam 2 x ATmega8. Łączę je między sobą przez SPI. Master posiada dodatkowo UART do rozmawiania z konsolą na PC, slave ma dołożoną jedną diodę do sprawdzania najstarszego bita w przesłanym bajcie (tak w ramach kontroli)....
Jako, że od niedawna sam uczę się dopiero C, to proszę bardzo poniżej, najpierw kod do odbiornika RC5. Sprawdzony, krótki i odporny na zakłócenia oraz kody z innych pilotów - działa wyśmienicie i w ciekawy sposób wykorzystuje bit TOGGLE: // zmienne do obsługi kodów IR w standardzie RC5 volatile uint8_t address; // adres RC5 volatile uint8_t command;...
Brak wspólnej masy?
1. Jak długie jest połączenie PC-MCU? 2. Jaka jest szybkość transmisji? 3. Czy ATM16 jest taktowana kwarcem? O jakiej częstotliwości? Duża ilość błędów może sugerować niedokoładne dopasowanie szybkości USART po stronie PC i MCU. Przelicz jaki masz błąd.
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ś.
Dlaczego nie napiszesz po prostu tak: UCSRC = 1<<URSEL | 1<<UCSZ0 | 1<<UCSZ1; - bez zbędnych operatorów i sztucznego pompowania objętości kodu zarówno źródłowego, jak i wynikowego. Dlaczego sekwencja |= nie działa - nie wiem. Czy nie działa na żywym uC, czy na symulatorze? Jeśli to drugie - to błąd symulatora, jeśli to pierwsze - niezgodność...
Definiujesz .def zero=r2 , ale nie inicjujesz wartości tego rejestru. Po włączeniu procesora rejestr zawiera wartość przypadkową. Aby mieć pewność, że jego wartość jest równa zero musisz w kodzie dopisać (przed pierwszym użyciem tego rejestru) instrukcję clr zero .
Tak. Po to właśnie jest nagłówek setbaud.h a funkcję go wykorzystującą już znasz i opisałem ją dokładnie w komentarzach. F_CPU ustawia się w opcjach: http://mikrokontrolery.blogspot.com/2011... W ten sposób setbaud.h będzie wiedział jaka jest częstotliwoć taktowania mirokontrolera, i funkcja usart_inicjuj() dobierze odpowiednie...
Przy 9600 masz 7% błąd więc mogą być przekłamania. Zainicjuj uarta na 4800bps u mnie działa z wewn. kwarcem 1Mhz (USART_Init(12)). Więcej nie pomoge. Powodzenia.
Można przy wewnętrznym taktowaniu używać transmisji USART. Ale trzeba generator wewnętrzny skalibrować, używać zawsze w tej samej temperaturze i przy tym samym napięciu.
Tutaj popełniasz dosyć poważny błąd. Po odebraniu pierwszego bajtu zatrzymujesz transmisję na SPI na stosunkowo długi czas potrzebny na przesłanie tego bajtu poprzez USART. Nie to jednak jest najgorsze. Po dokładniejszym przeanalizowaniu noty ADIS16100 zauważyłem dwa dosyć ważne problemy. Pierwszy to taki, że stosunek czasu trwania stanu wysokiego...
Kończę właśnie mojego Hexapoda. Rozbudowuje komunikację pomiędzy dwoma atmega16. Jeden to sterownik serw a drugi oblicza kinematykę i struje wyświetlaczem LCD. Otóż problem polega na tym że transmisja jest pełna błędów. Uśredniając to co 5-6 transmisja jest prawidłowa. Ustawienia USARTu: UBRRL=0x33; UBRRH=0; //ustawienie prędkości transmisji dla 9600...
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...
[syntax=c]#define UART_BAUD 9600 //#define __UBRR ((F_CPU+UART_BAUD*8UL)/(16UL*UART_BAUD)-... #define __UBRR 103 #include <avr/io.h> #include <util/delay.h> void USART_Transmit (unsigned char data); void USART_Init(unsigned int baud); int main(void) { USART_Init(__UBRR); //103 odczytane z tabeli, f procesora=16MHz while(1) { USART_Transmit('A');...
A mogę prosić o wyjaśnienie? Bo nie potrafię się doszukać w tym kodzie błędu.
Źle bo k to nie 1000 tylko 1024 115200 / 10 = 11520B/s 11520 / 1024 = 11.25kB/s Oczywiście zakładając brak jakichkolwiek odstępów miedzy bajtami - co w przypadku rozbieżności zegarów między nadawcą a odbiorcą spowoduje błędy transmisji.
Hejka Zobacz do pierwszego lepszego datasheet'a AVR-ów. W temacie USART, masz podane w zależności od zegara F_CPU prędkości komunikacji USART. Przy kwarcu 1.8xxMHz, duże prędkości transmisji wykazują duże błędy. Spóźniłem się, hihi
Procedura "USART_Transmit" wykorzystuje sprzętowego USARTa ATmegi8. Działa ona w ten sposób, że najpierw sprawdza czy bufor w którym przechowywane są dane do transmisji jest pusty. Jeżeli nie jest pusty to czeka na jego wyczyszczenie, gdy stwierdza, że jest już pusty to wpisuje dana którą przekazujesz jako parametr do rejestru UDR, i transmisja odbywa...
Co ciekawe, gdy zrobię transmisję bez modbusa, wszystko jest ok No to już wiesz gdzie masz błąd. Szukaj innej biblioteki, napisz swoją lub popraw istniejącą (napisałem od najłatwiejszego do najtrudniejszego oczywiście IMHO). Możesz też wspomagać się pseudo debugowaniem po USART ale to nie jest wygodna metoda o czym już pewnie się przekonałeś.
w dokumentacji jest błąd, transmisję 8-bit uzyskuje się przy ustawionych UCSZ1 i UCSZ0. funkcje wyslij_znak i odbierz wyglądają poprawnie. W main zmień "odbierz" na "odbierz()". Jeśli MAX się grzeje, to znaczy, że jest źle podłączony, podrzuć jakiś schemat.
Na 99% nie. Można kombinować z auto-reload i transmisją jednego bajtu, o ile uda się przekonać DMA, że docelowy UART jest pamięcią, a nie peryferialem i o ile będziesz miał pewność, że nigdy dane nie będą równocześnie nadchodziły w takim tempie, żeby zapchać nadajnik. Czyli: nawet gdyby się udało, to jest to rozwiązanie wysoce niepewne i zawodne. Co...
O. To już coś działa. Wygląda na to, że albo masz źle policzoną wartość UBRR albo dobrze policzoną ale błąd jest zbyt duży do poprawnej transmisji. Problem polega na tym, że wartością UBRR ustawiamy dzielnik częstotliwości dla USARTa. Można go jednak ustawić tylko z pewną dokładnością. I tak dla niektórych częstotliwości i prędkości USARTa błąd jest...
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...
Chyba każdy usart jest synchronizowany podczas bitu startu - poto ten bit. Wydaje mi się, że problem błędów polega na transmisji ale po stronie usb gdzie procesor ma naprawdę dużo do przemielenia danych a nie po stronie uart gdzie procesor nic nierobi programowo.
Jest tu co najmniej kilka błędów. Pierwszy to taki, że funkcja uart_getc nie jest atomowa. W ogóle kolejka jest zrealizowana źle - nie uwzględnia, że odczyty/zapisy następują asynchronicznie, w związku z tym pewne operacje (np. uaktualnienie wskaźników początku i końca) muszą być robione atomowo. Przypadkowo to działa przy zapisie, bo ISR jest wykonywane...
Włączyłeś przerwania, jednak nigdzie nie masz procedury obsługi dla RXCIE i TXCIE. Wywołanie przerwania powoduje skok programu pod adres zdefiniowany w tablicy wektorów przerwań, czyli w Twoim przypadku reset procka. Druga sprawa to błąd w tej funkcji. Ona nigdy się nie zakończy, gdyż brakuje inkrementacji wskaźnika s w pętli. Ale zakładam, że to błąd...
Ten terminal nie obsługuje transmisji 9 bitowej ale może odebrać dwa bity stopu co niestety może Ci powodować przeszkody w transmisji i generować błędy. Natomiast na mikro procesorach możesz to dowolnie odbierać.
Konwerter jest do bani - nie da się go tak skonfigurować by naprawić ten błąd w transmisji.
Witam, Przejściówka od chińczyków za 5zł. http://obrazki.elektroda.pl/9250235300_1... Na innym temacie już się o niej rozpisywali, także odnośnie sterowników przy błędzie "USART receive framing error".
kwarc w transmisji rs232 lub rs485 ma znaczenie ponieważ korzystasz z USART - ustawienie parametrów transmisji np 1 MHz błąd w transmisji 7,5% przy prędkości 9600, 1,11 MHz błąd w transmisji 3,1% przy prędkości 9600, 1,84 MHz błąd w transmisji 0,2% przy prędkości 9600, itd.
kardynalny błąd -> oczekiwanie na co, na TC==1 ? Oczekiwanie na cokolwiek w przerwaniu jest kardynalnym błędem. Przeciez w notce katalogowej zalecają poczekać po zakonczeniu transmisji na TC. Czy aby napewno piszą to w kontexcie przerwań, czy może poczekania przez wyłączeniem danego modułu peryferyjnego? Poza tym nie odpowiedziałeś na moje pytanie,...
Aha i jeszcze taka mała rada na przyszłość. W programie miałem ustawione, że ten uP który nadaje, sygnał XCK bierze z drugiego uP. Najlepiej sygnał taktujący ustawić na sztywno z mikroprocesora, który ma niższy kwarc. Nie zaobserwowałem wtedy błędów w transmisji ;)
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...
Może zanim zapomnę o czym chciałem napisać a nie jest najważniejsze, ale dla Ciebie ważne. Tak w telegraficznym skrócie -> USART w AVR ma możliwość włączenia jakby podwójnej prędkości/próbkowania (to samo SPI). Bit ma skrótowa nazwę U2X. Przy taktowaniu 16MHz, jak prawie każda płyta Ardu, to bez U2X predkość 115200 miałaby za duzy błąd który niby maksem...
Dondu, Twój skrypt ze strony http://mikrokontrolery.blogspot.com/2011... działa. Wiem :) Na jego podstawie poprawiłem ten mój nieszczęsny i też zaczął działać :) Zmieniłem ... Masz na myśli, że działa na ATmega8? Bo jeśli na ATmega328 to przypadek, bo bity te nie występują w ATmega328. Jak więc się to ma do komunikatów...
błąd transmisja błąd transmisja rs485 esp8266 usart
kompresor regulacja aoyue kolba kolumna estradowy projekt
bateria parkside bateria parkside
Citroen C5 2009 F17 40A – lokalizacja bezpiecznika ogrzewania tylnej szyby i lusterek Przepisy do piekarnika z funkcją mikrofali i grilla: gdzie szukać dla Whirlpool, Samsung, LG, Panasonic