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ś...
A mogę prosić o wyjaśnienie? Bo nie potrafię się doszukać w tym kodzie błędu.
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...
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.
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ść...
Konwerter jest do bani - nie da się go tak skonfigurować by naprawić ten błąd w transmisji.
Brak wspólnej masy?
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.
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...
. Czy to wina ze nie mam podpietego zewnetrznego kwarcu ? Tak ale o odpowiedniej częstotliwości. Datasheet dla twojego procka zawiera tabelkę błędów z jakimi komunikujesz się po usart dla różnych prędkości zależnie od częstotliwości procka. Jednym z magicznych kwarców jest np 11.0592 który pozwoli tobie na pracę aż po 115200 z bodajże zerowym błędem...
To co pisze kolega atom to jedno, drugie to pewnie standardowy błąd - korzystasz w wewnętrznego generatora RC 8 MHz, a nie kwarcu? To masz problem, ten generator nie jest kalibrowany z dokładnością, ani nie ma stabilności wystarczającej do wykorzystania go do taktowania transmisji asynchronicznej RS232.
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...
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ą.
Przecież genetix już pisał, że działa i podał gdzie jest błąd, więc po co się dodatkowo rozpisywać ??? Pozatym dla 1M kalibracja jest automatyczna...
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.
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ś.
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...
Dziękuję za pomoc, oczywiście błędu szukałem wszędzie tylko nie tam. Teraz wszystko działa tak jak powinno.
Niestety dokumentacje tej firmy nie są najwyższych lotów. Czy masz jakieś doświadczenia z transmisją LoRa? Pozdrawiam JarekC
Globalne definicje przekazuje się przez kompilator, odpowiednimi parametrami. Powiem Ci w sekrecie, że wszelkie poszukiwania błędów w kompilatorze, szczególnie z takimi trywialnymi sprawami, są z góry skazane na śmieszność, tak więc to czy brnąć dalej w zaparte to już Twoja decyzja. Co z tego, że ty sobie w main.c zdefiniujesz, skoro pliki od UARTu...
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ż...
UART ruszył! Błąd w ustawieniu rejestru od konfuguracji USARTa - copy&paste z ATMEGA8 nie zadziałało ;/. Pozdrawiam!
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...
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,...
Witam, Mam problem z transmisją przez USART. Gdzie tu jest błąd ? [syntax=c] //zegar 1MHz, dla prędkości 9600b/s, 8data, 1stop UBRR0H = 0; UBRR0L = 12; UCSR0A &= ~(1<<U2X0); UCSR0B = (1<<RXEN0)|(1<<TXEN0); UCSR0B = (1<<RXCIE0); UCSR0C = (3<<UCSZ00);[/syntax] Fragmenty kodu obsługi: [syntax=c] void uart_znak( unsigned...
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 .
W datasheet od procesora sa dokladnie podane wartosci rejestrow dla różnych częstotliwości oscylatora i różnych prędkości. W tabelach tych podane są również procentowe błędy prędkości transmisji przy każdej konfiguracji. Polecam tam zajrzec. Gdzieś czytałem że procentowy błąd baudrate powienien byc poniżej chyba 5%.
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...
W moim układzie, w którym pracuje MAX232CPE prawidłowo do 230400 bps, na pompkach ładunkowych mam 4µ7 tantalowe, a pozostałe 10µ. Jeśli masz pod ręką woltomierz, to po prostu sprawdź napięcie na 6 wyprowadzeniu, powinno wynosić co najmniej -8V (względem GND), a jeśli jest -10V to jest wręcz idealnie. Prościej byłoby sprawdzić transmisję z...
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...
To znaczy że masz gdzieś indziej błąd. u mnie ta prędkość to od 230400 do 230400 * 5 Na każdej działa. HSE oczywiście. Dodano po 2 bo w DS piszą 10.5Mbps ale wiem, że to są bajki. Dlaczego tak myślisz? Masz pewnie błędy transmisji i dlatego wywala
Zła szybkość transmisji - przy oscylatorze 1 MHz możesz transmitować na 4800 - przy 9600 i błędnym wzorze na podzielnik UBRR masz 9% błędu, a przy poprawnym miałbyś 7% (powinno być max 2.5%, żeby była pewna transmisja). Wyłącz podział częstotliwości - przy 8 MHz możesz transmitować do 38400.
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ść...
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...
W dalszym ciągu nic mi nie działa:( Przesyłam schemat w załączniku, pewnie tam jest jakiś błąd. Opiszcie mi również proszę krok po kroku co należy zrobić w Hiperterminalu, żeby zainicjować połączenie i odebrać coś od AVRa.
Jeśli ta transmisja RS ma być pomiędzy dwoma prockami, które są taktowane kwarcem o tej samej częstotliwości, lub wielokrotnością to problemu w ogóle nie ma, bo błąd po obu stronach będzie taki sam i się zniesie. Jeśli chodzi o transmisję do PC to po prostu policz błąd dla wybranej szybkości i sprawdź czy mieści się w tolerancji. BTW, wspomniana XMEGA...
Porada maciej_333 zadziałała, odbiera i wysyła. Skoro już to mam, zajmę się przerwaniami. Temat do zamknięcia i dziękuję za szybką odpowiedź :) Wychodzi na to, że lepiej czytać dokumentację. Właśnie na jej podstawie to napisałem. Wysyłanie i odbiór z kolei skopiowałem z pewnego mojego programu dla ATTINY2313. Wystarczyło zmienić nazwy rejestrów. Dlaczego...
W typowych warunkach 50 m to nic dla USART. O RS485 warto by przy tej odległości pomyśleć w warunkach przemysłowych, gdzie poziom zakłóceń może utrudnić transmisję. Co do kwarcu USART-frendly, warto też pamiętać, że przy połączeniach AVR-AVR stosujących te same kwarce błąd będzie wynosił zawsze 0%. Dlaczego? Ano dlatego, że podzielenie stałej przez...
No to ma wspólnego ze zwiększoną transmisją, że ją po prostu zwiększa :D No o tych samplnięciach to wszystko ok, rozumiem - tylko chyba się zakałapućkałem z samym nazewnictwem bo przecież jeśli dla prędkości np 76800 przy 8MH bit U2X=0 to mamy duży procent błędu. A przy tej samej prędkości i bicie U2X=1 (tylko inna wartość BBRR) zmniejsza się procent...
Detekcja flagi nie jest problemem. Kombinowalem z tym na różne sposoby. Pytanie dlaczego po czwartym bajcie wzbudza się przerwanie z częstotliwością ok 700kHz. Wygląda jakby przerwanie nie kasowało flagi ale żadna flaga nie jest ustawiona. Pracuje pod debugiem pod pełnym JTAG. Moze mam stara rewizję proca jedna z pierwszych z jakimś błędem, plyta Eval...
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....
Czyli Twój pseudokod to jest taka jakby kolejka FIFO? No niezupełnie. To co przedstawiłem buffer_is_empty() zwracająca prawdę lub fałsz) należy sobie dopisać. Sprawa jest dosyć prosta np. w przypadku USART. Wystarczy dodać bajt do bufora, później - jeśli bufor nie jest pusty - pobrać bajt i wysłać. W przypadku I2C sprawa jest o tyle skomplikowana,...
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...
Przy wysyłaniu zmiennej innego typu niż unsigned/signed char mogą się dziać dziwne rzeczy podczas konwersji typów... W tym przypadku nie bardzo wiem co jest grane... Robiłem ostatnio rejestrator i po licznych próbach doszedłem do czegoś takiego... bajt startu - liczba zamieniona na ciąg znaków - bajt next - liczba... - bajt stop W związku z tym, że...
Witam, RXD jest alternatywną funkcją portu, UART lub USART - sprzętowe wsparcie dla szeregowej transmisji danych, nie korzystasz z tego przy implementacji 1wire. Możesz dowolnie zmienić pin procesora do którego będzie podłączony termometr. Pozdrawiam. GSM P.S. Kod który wkleiłeś pisał ktoś niekonsekwentny. Aby uzyskać łatwą zmianę używanego pinu, poza...
Przy wewn. oscylatorze nawet 1MHz nie będzie żadnych problemów ze stabilną komunikacją. Komunikacja - jeśli ją autor w końcu dobrze ją napisze, a widać, że i z tym ma jeszcze problem, będzie działała zupełnie w porządku i to nie ważne czy będzie wewn. oscylator 1MHz czy 8MHz. A problem że teraz nie działa i pojawiają się krzaki leży przecież gdzie indziej....
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:(...
No ale jaki jest w ogóle sens tego kodu? 1. Najpierw czekasz na zmienną którą ustawiasz w tej samej funkcji i ponoć nie masz przerwań (choć w komentarzach coś niby o nich piszesz), to po co czekać? (nie mówiąc już o tym, że się nigdy nie doczekasz poza pierwszym razem [może], gdyż nigdzie tej zmiennej nie zerujesz przy braku problemów) 2. Potem kopiujesz...
jak to wyliczyłeś? 14,745 / 14,7456 = 0,99995931. Do pełnej 1 brakuje zatem 0,00004069 czyli właśnie te około 40ppm. Rezonator chciałbym zastosować w uC by otrzymać 0% błędów w komunikacji przez USART. Będzie ona pracowała w trudnych warunkach. Akurat UART to dość mało wymagające zastosowanie. Oczywiście na tyle wymagające żeby wymusić zastosowanie...
Ź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.
Witam!!! Mam problem z odbiorem danych przez procka z PC. Napisałem procedury do obsługi USART. Inicjalizacja i wysyłanie danych do PC działa bez błędnie. Nie mogę jednak nic odebrać z komputera. Nie wiem gdzie mam błąd w programie. Zamieszczam listing kodu: usart.c: #include "usart.h" void usart_init(void) { UBRR0H = 0x00; UBRR0L...
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...
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...
Jeśli np. z niektórych zmiennych korzystasz tylko w module usart a nie w main to możesz je zrobić jako global static (chyba te zmienne const się do tego nadają) i wtedy nie trzeba ich też extern robić bo main z nich nie korzysta const musi być znany podczas kompilacji a nie jest. Przerzuć te zmienne do pliku cpp i będzie ok. Ja może wyjaśnię w czym...
Schemat: http://tuxgraphics.com/common/src2/artic... Nie ustawiałem fusebitów, ale mam pewność, że częstotliwość się zgadza, gdyż odliczanie sekundy z przerwania działa idealnie (kod z jednego z programów autora schematu). Co do kodu do UARTa, oczywiście zmieniłem 8 na 12,5. Generalnie na sprzęcie ładnie hula serwer HTTP, klient...
Znalazłem błąd, Jak to zwykle bywa był zupełnie gdzie indziej niż szukałem, Inny proces mi śmiecił po linii sterującej buforem RS, Dość złośliwy zbieg okoliczności, Tak czy siak dzięki za pomoc.
Jest kolejny postęp. Program działa prawidłowo przy ustawieniach: prędkość 4800, wewnętrzny oscylator 1MHz. Wyższe prędkości lub wyższa częstotliwość oscylatora - krzaczki. Na kwarcu 8MHz - krzaczki. No i po raz kolejny zgadłem ;) - czyli masz ŹLE FUSEBITY USTAWIONE a innymi słowy - masz je w ogóle nie ustawione. I nie dziw się, że przy 1MHz działają...
W swoim urządzeniu które projektuję planuję główny układ - czyli Atmega32 - mieć na kwarcu 3,6864 MHz. Ma on mieć możliwość podłączania urządzeń zewnętrznych, które będą się komunikowały z układem głównym przez USART. Urządzenia zewnętrzne powinny jednak pobierać bardzo mało prądu, dlatego zdecydowałem, że jeśli będą to jakieś atmegi, to będę je taktował...
Czy odpowiedzi są deterministyczne? To znaczy czy za każdym razem jak wyślesz 'A' dostajesz '_'? Jeżeli tak to raczej błąd programu. Z kwarcami nie powinno być problemu. Dla idealnej poprawności powinieneś zastosować 7.3728 MHz. Przy częstotliwości 8MHz (czy to z kwarcu czy to z oscylatora wewnętrznego) przy prędkości transmisji prawdopodobieństwo błędnej...
Witam wszystkich Forumowiczów. Szczerze mówiąc to moja pierwsza tak poważna przygoda z asemblerem...ale do rzeczy...znalazłem na necie programik który przekształciłem na swoje potrzeby. Program ten jest odpowiedzialny za odbieranie łańcucha znaków (tekstu złożonego z ok. 15 znaków) przesyłanego z modułu Bluetooth (wt11) do interfejsu USART (w trybie...
Znalazłem problem, aczkolwiek jestem bardzo zaskoczony. Błędem okazało się używanie transmitera z USART1. Kiedy USART1 i USART6 zamieniłem rolami okazuje się, że wszystko działa. Jedyne wytłumaczenie to to, że do PA9, pinu transmisji USART1 podłączona jest na płytce dioda wykrywająca zasilanie micro USB, przynajmniej ja to sobie tak tłumaczę, czy jest...
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
Witam, mam problem z którym męczę się już sporo czasu. Chcę połączyć Siemensa s65 z Atmegą162 przez sprzętowy USART Atmegi. W najprostszym rozwiązaniu mógłbym wybrać ATmegę w wersji zasilanej 3V, aby uzyskać kompatybilność napięć. Niestety takiej nie mam, a układ, na razie prototypowy musi być kompatybilny z GPSem na 5V, więc kwestią do rozwiązania...
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...
niby dobrze.. zakładam że w terminalu czy aplikacji też nie ma głupiego błędu co do konfiguracji samego rs'a spróbuj zmniejszyć szybkość transmisji, jak się poprawi to kwarc coś nie domaga, albo coś muli firmware - wklej kod programu mimo wszystko. Ja odbierałbym dane w przerwaniach, w atmedze (avrgcc) bardzo prosto się to robi 'ISR (USART0_RX_vect)'
Oczywiście max232 jest. Kondensatory mam 1µ więc po południu zmienie je na 10µ i pochwale się co to dało. Kabel mam około 1,5m wcześniej atmega z taka konfiguracja działała tylko była zasilana z baterii - dlatego moje podejrzenia że to wina zakłuceń od trafo. Oczywiście masy PC i płytki są wyrównane. Co do ramki też różnych konfiguracji już...
Nie przesadzajmy. Kod działał na ATMega88 i po prostu został przeniesiony na ATMega32. Stąd tyle linijek. Błędem nie jest więc napisanie dużej ilości linijek. Błędem jest pozostawienie dużej ilości linijek po przeniesieniu kodu gdy się okazało że on już nie działa :D Tak więc na początek na przykład uproś kod do wysyłania np. co 1 sekundę jednego znaku...
Dobry obyczaj nakazuje, aby stosowac kwarce o częstotliwości dającej łatwo uzyskac potrzebne szybkości transmisji. Praktyka jednak pokazuje że przewaznie działa z kwarcem wewnętrznym. Na stronie 138 dokumentacji Tiny2313 masz opisane, jakie szybkości da się uzyskac i z jakim błędem. Jeśli nie przekroczy on 1% to śmiało można stosować, raczej nie kwarc...
1. Najpierw włączasz transmisję UART, a potem programujesz jej parametry - to niezbyt sensowne. 2. (Nieaktualne, racja, to jest na przerwaniach.) 3. Jeśli będziesz używał nazw symbolicznych bitów w rejestrach, być może ktoś sprawdzi, czy dobrze ustawiłeś te bity i znajdzie jakiś błąd. 4. Nie używaj operatorów |= i &= przy początkowym programowaniu peryferiali...
Dzięki. W nocy poradziłem sobie. :) Problem tkwił w tym, że w inicjacji najpierw ustawiałem format ramki, a potem bitrate. Trzeba odwrotnie. Dlaczego? Nie mam pojęcia, nie znalazłem o tym notki w Datasheecie. :/ Niemniej, po wpisie do URR H/L w pierwszej kolejności wszystko ruszyło samo... A ja straciłem na to pół dnia... ...i nocy... :-| Natomiast...
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, Chciałbym dokonać transmisji przez port szeregowy Atmegi. Niestety ciągle otrzymuje krzaki na terminalu. Czasami są to krzaki czasami inne litery, a niżeli te wysłane programem, często w terminalu pojawia się błąd frame error. Co lepsze program działa na symulatorze bez problemów... W tej chwili stosuje kod rodem z datasheet Atmegi: #include...
Litości... 1. Pokazałem Ci, jak się włącza dowolne przerwania w dowolnym Cortexie,a nie jak masz włączyć przerwanie, o którym marzysz, bo nawet nie wiem, o którym marzysz. Lista nazw przerwań znajduje się w sławnym pliku cośtam.h. 2. Ja jestem za leniwy naliczenie wartości ładowanych do BRR i timerów, dlatego każę to robić kompilatorowi. Tobie radzę...
Freddie, ja sam w błąd wprowadzam, nie ma powodu do korzystania z liczby mnogiej. Sorry, nie wiem czemu myślałem że w temacie wypowiadał się jeszcze jeden user na samym początku - nie sprawdziłem, mój błąd (; Stąd, domyślam się, takie a nie inne zmiany w C++11. Ponownie warto podkreślić, że RVO nie jest cechą tylko C++11 - wg wiki cecha ta (popularniejszą...
To że zostałem wprowadzony w błąd to wiem po tym jak zakupiłem wszystko co potrzeba i zorientowałem się że w programie trzeba uwzględniać nrf komendami radio. No cóż mój błąd nie sprawdziłem. Teraz pytanie ten moduł esp8266 jest zaskakująco tani jak na moduł wifi. Shielde stały po 200 zł. Czy ten moduł można sterować podstawowymi komendami z arduino...
Ciut podobnie do tego, co masz, tylko bez pętli while w usart_dma_string() - programujesz DMA na długość łańcucha. Wysyłanie przez DMA po jednym znaku będzie zawsze wolniejsze niż wysyłanie bez DMA. W Twoim kodzie jest jeszcze jeden gruby błąd - dane transmitowane przez DMA są pochodzą ze zmiennej lokalnej, która ginie z chwilą zakończenia wykonania...
Linii RX i TX nie trzeba konfigurować. Po włączeniu UART'a są one przejmowane przez ten moduł. Z wyliczania wartości UBRR w Twoim programie wychodzi wartość '5', a wg. tabeli w nocie katalogowej procka sugerują wpisanie '6'. Nie wiem, czy ta różnica ma jakiś większy wpływ - zawsze korzystam z wartości podanych w nocie (można pobrać np. z www.elenota.pl,...
Chyba, że ja się też mylę. Mój program działa poprawnie. Za to Ty na pewno się mylisz. Zapraszam do zapoznania z tabelą kodów ASCII. Po przeszukaniu całego internetu i wielu nieudanych próbach rozwiązania problemu udało mi się częściowo naprawić sytuację. Mianowicie po zmniejszeniu prędkości transmisji wyłącznie na mojej ATmedze32A większość znaków...
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...
...czy na czas wytransmitowania, bądź odbioru znaku program wstrzyma swoje działanie na 10ms, czy po prostu odbędzie się to równolegle... Jeśli budujesz transmisję RS232 na przerwaniach, sprzętowy USART odbiera znak w czasie, gdy procesor wykonuje program główny. Po odebraniu całego znaku generowane jest przerwanie. W obsłudze przerwania musisz tylko...
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 ;)
No niby to nie błąd rzeczywiście, ale stanowczo odradzam tego typu zabiegi, tak tworzy sie kiepski i nie czytelny kod, do pełni szczęścia brakuje jeszcze tylko "GOTO". Ja z kolei stanowczo zachęcam do zapoznania się z tym plikiem nagłówkowym i przemyślenia, kiedy takie zabiegi są konieczne. W pokazanym akurat przypadku taka potrzeba nie zachodzi, bo...
W końcu udało mi się bufor prawie uruchomić, wziąłem przykład z strony keila dla stm31f1 [syntax=c] #define TBUF_SIZE 16 /*** Wielkosc potegi 2 (2,4,8,16,32,64,128,256,512,...) ***/ #define RBUF_SIZE 16 /*** Wielkosc potegi 2 (2,4,8,16,32,64,128,256,512,...) ***/ /*--------------------------------------... *---------------------------------------...
1. mierzę czas pomiędzy każdym opadającym i rosnącym zboczem dzięki czemu mierzę dokładnie czas w tym przypadku połówki każdego bitu. Dzięki temu mogę sobie spokojnie założyć, że tolerancja może być aż 20% !!! i nadal wszystko będzie dobrze!!! 2. aby mierzyć czas pomiędzy każdym zboczem oczywiście w procedurze obsługi tego przerwania co chwilę zmieniam...
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ć.
Zastanawiam się jeszcze nad kwarcem dla uC. Jaką wartość najwygodniej użyć? Prędkość transmisji nie musi być wysoka. Jeśli wystarczy ci standardowa prędkość 9600 to w ogóle nie potrzebujesz kwarca zewnętrznego no chyba że układ będzie pracował co jakiś czas w skrajnie różnych temperaturach to wtedy można pomyśleć. Jeżeli w takiej samej temperaturze...
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 )...
Witam, Tak jak w poprzedniej odpowiedzi pisałem USART działa. Jednak pojawił się problem, że nie działają mi przerwania w USART. Za pomocą kodu: ;***************************************... USART0_Receive: ; Odbiór USART0 ; czekaj aż bufor odbiorczy będzie pełny sbis UCSR0A, RXC0 rjmp USART0_Receive ; załaduj dane z rejestru...
Wielokrotnie była o tym mowa - w ATMega generator RC nie ma wystarczającej stabilności, aby bez dodatkowych procedur kalibracyjnych wykorzystać go do transmisji UART. Oczywiście może to działać, ale zapewne efekt będzie taki, że raz działać będzie, a raz nie. Gdzie się takich bzdur naczytałeś Tomku po wpisaniu w odpowiedni rejestr wartości kalibracji...
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ś.
Dobrze policzone. Po primo - ten baude rate dla 1MHz daje 7% błędów transmisji W połączeniu z tak-sobie stabilnym taktowaniem, błąd rośnie :) spróbuj z 4800 Edit: nie ma znacenia czy napiszę 15/3/3/3/3/3 czy 15/(3*3*3*3*3) najpierw wykonywane jest pierwsze dzielenie 15/3 , potem liczba, którą otrzymamy, jest dzielona /3 itd, w drugim przypadku najpierw...
Niestety to również mi nie działa, zastanawiam się czy to nie jest błąd po stronie javy.. Objaw jest taki, że diody się czasem zmieniają (gdy klikam non stop, opcję SEND w aplikacji mam pod przyciksiem i to dzięki niemu cały czas wysyłam ten bajt) i nie ma to żadnego związku z ustaloną wartością. 1. czy jest coś dla windowsa dzięki czemu mogę obserwować...
...Mikrokontroler w obecnej postaci programu nie wysyła 97 tylko inne wartosci np 82, 133. Natomiast gdy wrzuce ldi r20, 97 do petli "petla" program działa dobrze. ... Nie napisałeś dokładnie , co oznacza "tylko inne wartosci np 82,133". Czy procek po zresetowaniu generuje nonstop 82 , a po następnym resecie 133 , czy procek pracuje cały czas , a Ty...
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...
Dziękuje za pomoc w temacie jak już wcześniej napisałem został on przeze mnie rozwiązany, błąd tkwił w złym policzeniu parametru UBRR, dziękuję również za link z informacjami o makrach: [syntax=c] #define BAUD 57600 //tutaj podaj żądaną prędkość transmisji #include <util/setbaud.h> //linkowanie tego pliku musi być //po zdefiniowaniu BAUD //ustaw...
Witam, rzeczywiście jedyną dobrą wskazówkę dał ci MirekCz, najważniejsze to umieć dobrze czytać notę - PDFa. To , że błąd może przekraczać 2% czy 5% nie oznacza, że w twoim lub innych przypadku tylko 2 lub 5% transmisji będzie zakłóconej a reszta poprawna .... (czyli że na 100 transmitowanych znaków 95 przyleci poprawnie a 5 źle) - tu robisz błąd -...
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...
-> BlueDraco Postraszyłeś tym DMA i teraz początkujący Kolega uczy się: "DMA jest trudne i złe, lepiej napisać to na przerwaniach". BŁĄD!! Po to jest DMA w prockach, zeby z niego korzystać, i odciążać rdzeń tu gdzie tylko się da. I tym sposobem moja konstrukcja mieli ciągły strumien z UARTa rzędu 230kB/s dekoduje, sprawdza poprawnosc, przetwarza,...
Mam jedno pytanie czy są małe avr-ki ,attiny w obudowach dil ośmino nóżkowe , które posiadają sprzętowy uart . Albo jak w bascomie mogę napisać procedurę do np. attiny 25 który nie posiada takiego sprzętowego uarta żeby można było użyć komendy print program ma wysłać kilka zmiennych .W atmega 8 jest specjalna nóżka tx oraz rx do transmisji szeregowej...
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...
błąd transmisja błąd transmisja rs485 przerwa usart
zbiornik nadkole magneto naprawa przewód licznika rozdzielnicy
schemat bezpieczników atego wypadanie zapłonu
Piaggio X8 125 - Iskra pojawia się tylko raz, rozrusznik kręci Czy elektrozawór można podłączyć pod 220V?