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 -...
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.
wywal opóźnienia z pętli głównej
Ustawiasz DMAEN w ADC_CFGR1 przed kalibracją ADC, a powinieneś po jej zakończeniu.
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.
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 ;)
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...
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...
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...
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...
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...
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,
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...
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.
Usart odbiera co do niego nadajesz, on nie wie co ciebie z tego interesuje, to juz jest sprawa programisty.
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?
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]
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...
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]
Przeczytaj najpierw ze zrozumieniem dokumentację uC. Dodatkowo: po co pętla while w przerwaniu?
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.
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...
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...
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.
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...
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&...
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...
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ś.
Jednak jest to dość splątane, czyli zarówno UART jak i USART może sterować RS485? Jedyny mocny wyróżnik dla mnie między USART a UART to linia zegarowa poprowadzona między urządzeniami. Tak, UART jak i USART można podłączyć pod transceiver RS485. RS485 operuje na jednej parze różnicowej więc w ogóle w tym przypadku nie używa się dodatkowej linii zegarowej....
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.
Dodam tylko, że po drugiej stronie linii USART jest atmega 8, która poprawnie odbiera informacje.
ale po co skoro można odbierać z USART za pomocą przerwań ,bez potrzeby sterowania INTx:?:
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...
Wystarczy napisać prosty program na dowolny mikrokontroler mający USART i SPI, który odbierałby dane z komputera i programował pamięć.
OK, od początku ;) Sprawdź, czy zadziała: void usart_put_char(uint8_t znak) { while(!(USART2->SR & USART_SR_TXE)); USART2->DR = znak; }
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)?
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.
to podaj rozwiązanie tego ostatniego sposobu. Gdzie pętla wykona się wielokrotnie i za każdym razem zczyta nowe dane z terminala. W takim razie, jeżeli chcesz, aby Twój kod kontynuował odczytywanie nowych danych z terminala i odpowiednio reagował na te dane, powinieneś zaimplementować pętlę główną (`main loop`), która będzie kontynuować wykonanie i...
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...
Nie pamiętałem co czytałem wcześniej... Wysyłaj co sekundę 0xAA i daj znać co odbiera terminal.
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...
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...
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...
W Slave pin SS ma być ustawiony jako wejście... Masz racje, ale na początku kolega napisał: Masterem jest ATmega32 Z tego co zrozumiałem, w grę wchodzi 2x ATmega32. Poczekajmy na schemat/zdjęcie... ;) Moim zdaniem kolega nie steruje (w ogóle) pinami CS# swoich przetworników. Dokładniej przyjrzyj się kodowi, SS od ADS jest pod PB3, a drugiej ATmega32...
no wiec mam zrobic tak wysyłam 000001DC odbieram xxxxxxxx wysyłam CCxxxxxx odbieram xxxxxxxx wysyłam xxxxxxxx odbieram xxxxxxxx gdzie pierwszy odebrany bajt jest mi na nic?? a z pozostałych dwóch składam zmienna?? odbieranie ogranicza się do czytania rejestru SPDR?? nie będzie żadnego problemu z tym ze jest tylko 1 rejestr do wysyłania i odbierania...
Podstawowym sposobem programowania mikrokontrolera np. używanym w Arduino ATmega328 jest programowanie go zgodnie z dokumentacją w rozdziale: Memory Programming Opisane są tam programowanie: - równoległe, - szeregowe via SPI (MISO, MOSI, SCK). Do tego trybu niezbędny jest odpowiedni programator . Programatorem tym może być dowolne urządzenie, które...
jeszcze możesz sprawdzić MAX'a po odłączeniu od µC zwierając piny 9 i 10, wtedy układ powinien odbijać wszystko co do niego wyślesz z PC. np. wysyłasz "a" odbierasz "a"
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...
Zewrzyj tx z rx w przejściówce, wyślij cokolwiek i sprawdź czy odbierasz co wysłałeś.
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...
Przede wszystkim porzuć tą buibliotekę, przynajmniej w wersji klasycznej. I teraz od końca - odbiornik USART nasłuchuje cały czas i to nie angażuje procesora. Ba, np. w takiej XMEGA E5 procesor można nawet uśpić, a USART pracuje i jak zajdzie potrzeba to go wybudzi. To na czym powinieneś skupić swją uwagę to przerwania. A konkretnie przerwanie odbiornika...
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
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?
Dane odbierane przez USART tak jak pisze kol. mirekk36 muszę buforować. Niestety mam taki mętlik w głowie, że nie wiem jak wykorzystać do tego RAM procesora. Szukam, czytam i chyba mnie to przerasta. Niby zwykłe buforowanie... Może ktoś mógłby wyjaśnić jak buforować dane większe od 256 bajtów?
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...
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ć.
...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...
Dekoder to helix mp3, do bufora fifo(51200B) wkladam dane w przerwaniu od usart rxne. Stos i stera ustawione na 0x1000
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...
USART może zgłaszać koniec ramki. Warunek to odstęp pomiędzy bajtami nie dłuższy niż bajt https://msalamon.pl/odbieranie-uart-po-d...
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...
Skąd wiesz co odbierasz? W jaki sposób to sprawdzasz?
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...
spróbuj z AVRLIB http://www.mil.ufl.edu/~chrisarnold/comp... to zestaw bardzo wielu gotowych rozwiązań dla AVR na stronie www.societyofrobots.com masz tutoriale jak odpalic usart przy pomocy AVRLIB
Odbieranie danych z USART za pomocą przerwania odbioru, jest jak najbardziej sugerowane. Należy pamiętać, że dane przychodzą przez jakiś czas np. kilkadziesiąt µs, stąd by zsynchronizować czas odebrany za pomocą np. 10 bajtów, być należy uwzględnić czas trwania ich odbioru lub nie, jeśli czas ten nie jest istotnie długi.
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.
A do czego służy RTS? Request to Send Data Czyli? Jest otwarty Vcom RTS ma poziom aktywny, Vcom nie otwarty RTS nieaktywny. No nie, znaczy - można tak. Ale wtedy cała idea sprzętowej kontroli przepływu nie ma sensu. Poza tym, wiki twierdzi, że: Więc póki HC-05 używa RTS jak chce coś wysłać, czyli jak powinien, to powinno działać. Tak czy inaczej, niech...
Sprawdzilem i dalej nie wiem co jest grane. W trybie release moge wyslac wartosci przez usart, ale nie moge nic odebrac. Odbieranie probowalem zrobic na przerwaniach i w petli glownej. Za kazdym razem w trybie release nie moge nic odebrac. Ma ktos jakies pomysly co jest grane?
Na pewno chodziło ci o transmisję z 2 bitami stopu? To trochę nietypowa konfiguracja, spróbuj może klasyczne 9600 N 1. Sprawdź, czy na wyświetlaczu pokazuje ci dobrze jakiś stały tekst zapisany w programie. Zrób jak pisał balu - choćby prosta pętla w której po otrzymaniu np. 10 znaków bufor zostanie odesłany z powrotem, dowiesz się czy dobrze odbiera...
z zaprogramowaniem procka nie ma problemu :D ...chcialem się upewnić czy taki system odbierania danych z RS'a jest poprawny bo w takim przypadku wina braku transmisji będzie leżeć albo po stronie programu wysyłającego albo przejściówki....i tak metodą eliminacji...po sznurku do kłębka :D W każdym bądź razie dzięki i czekam do jutra ;)
Ulepszyłbym o tyle, że skoro wykorzystujesz soft posiadający bufor cykliczny, to zamiast tak jak napisałeś blokującej obsługi USART, zmieniłbym kod tak, żeby odbierał w przerwaniach kolejne znaki i po natrafieniu na CR/LF sygnaizował, że do sparsowania jest cały wiersz. W ten sposób odblokowujesz pętlę główną. Oczywiście warto też zrobić tak, żeby przerwa...
Ok. Dzięki za odpowiedzi, zrobię tak jak napisałeś i zobaczę co uC odbiera.
ustawienia PLL to w zasadzie tylko pomnożenie przez wybrana wartość zegara (np. HSE) i nie jest to trudne. A gdzie na przykład ustawiasz bity stopu, długość słowa jak coś ci pluje na COM w PC to ja bym stawiał, że te ustawienia Twoje nie zgadzają się z tym co odbierasz w PC.
PC wysyła wszystko co ma w buforze bajt za bajtem bez czekania. Można zwiększyć odstęp między bajtami, z tego co pamiętam to jest do wyboru szerokość przerwy 1, 1 1/2 lub 2 bity. A jak odbierasz dane? AVR'y nie mają buforu (no jest na 1 bajt, ale to nie bufor), najlepiej umieścić w przerwaniu wywoływanym przez USART podprogram który zapisze kolejne...
Chciałbym zrobić coś takiego: Odbieram przez USART odpowiedzi z telefonu i chcę wykryć np. brak lub wyłączony telefon. Sęk w tym, że w tym momencie korzystam z Watchdoga i kiedy jest brak odpowiedzi z telefonu to program zawisa na Input'cie i wtedy go watchdog resetuje. Chciałbym w jakiś sposób zliczać te resety by np. po dziesięciu próbować włączyć...
Ok, uporałem się jakoś z tym projektem, tak że wreszcie działa. W końcu użyłem tego gotowego przykładu: http://mikrokontrolery.blogspot.com/2011... i jakoś "ręcznie" dodałem biblioteki ASF od TWI. Było kilka niezgodności, ale się z tym uporałem. Tak więc program działa i wymienia dane z kompem. Mam...
Wyłącz JTAGa oraz debugowanie. Wydaje mi się, że masz problem z odbieraniem odpowiedzi z telefonu przez USART. Ustaw low FF i high EF Aha i musisz jeszcze dostosować odliczanie sekundy na timerze1 zmieniając wartość początkową ładowaną do timera
Podepnę się do tematu. Wykonałem projekt trackloggera rejestrującego dane gps i zapisującego je na karcie SD. Całość wykonałem na atmedze644 i śmiga bardzo dobrze. Pragnąłem dalej rozwinąć ten projekt i podłączyć wszystko do atmegi32, dodając jeszcze wyświetlacz. Podczas testów zmienionego pod atmegę32 kodu zaczęły się dziać dziwne rzeczy. Z gpsem komunikuję...
Witam, problem po godzinach zmagań został rozwiązany dzięki Waszej pomocy. Rzeczywiście uC nie nadążał odbierać. PC wysyłał zanim uC wykonał inne czynności przed odbiorem. Pozdrawiam!
Hej Wypisuj sobie w pętli while(true){......} komunikaty, tak samo w switch(command){......}. Będziesz wiedział gdzie się program zatrzymuje/zapętla. Może nie masz włączonego odbierania znaków przez port szeregowy czyli CREN = 1.
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. Z dokumentacji skopiowany kod także nie zadziałał. Odnośnie wysyłania i odbierania coś jest jednak nie tak. Wysyłam 1 odbieram 1 Wysyłam q odbieram...
USART1->CR1 |= USART_CR1_UE; //włączenie usart USART6->CR1 |= USART_CR1_UE; //włączenie usart To daj po całej konfiguracji a potem wysyłaj i odbieraj.
Robię pewien układ, w którym potrzebuję komunikować ze sobą 2 mikrokontrolery stm32f103 jedynie w jedną stroną po usarcie. Będzie wysyłanych kilka float'ów z maksymalną możliwą prędkością. Jak podejść do tego tematu, użyć do tego DMA, tak, żeby procek był jak najmniej obciążony ciągłym odbieraniem danych? Wysyłanie nie będzie problem, gorzej z odbieraniem,...
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, jestem początkujący w mikrokontrolerach i zacząłem dziś kombinować z USART. Moja atmega8535 wysyła rzeczy które odbieram za pomocą Tera Terma i wszystko jest ok. Chciałem natomiast zapytać jak wykonać przeciwną operację - tzn jak wysłać coś z komputera do atmegi? Jeśli ktoś mógłby podać jakim programem tego dokonać i łopatologicznie wyjaśnił...
Nie musisz odblokowywać ani obsługiwać przerwań timera. Jeśli raz włączysz wyzwalanie ADC, będzie ono włączone (raczej - co prawda STM32F1 są strasznie skopane, ale chyba nie aż tak). Nie ruszaj w ogóle rejestrów timera, których nie potrzebujesz. na oko potrzebujesz czterech dostępów - preskaler, okres, włączenie wyzwalania ADC i wystartowanie z autoreload....
wew oscylator... chciałem na zew spróbować ale atmega przestaje odp po przestawieniu fusebitow... a jeden bajt zawsze odbieram dobrze...
Nie wysyłaj jednym ciągiem tak dużej porcji danych - zrób odstęp, bo inaczej UART może mieć problemy z synchronizacją. Podejrzewam jednak, że problem może być dużo bardziej prozaiczny - czy jesteś pewny, że Twoje wysyłane/odbierane dane mieszczą się w pamięci?
Nie.. kod niejest poprawny.. nawet jeśli w najprostrzym przypadku uC miał by sie łączyć bezpośrednio z PC, to 2 linijki sie rzucają: USART_Transmit(USART_Receive()); USART_Receive()==tab while(1) { unsigned char cRcvd = USART_Receive(); USART_Transmit(cRcvd); tab[j++] = cRcvd; if(j==21) { if(tab[0]="w")...
Czy w funkcjach wysyłania/odbierania można wprowadzić taką zmianę aby dane "szły" nie na sprzętowy USART a na SPI? hmmm to raczej chyba pytanie do autora oprogramowania tejże przejściówki czyli Osamu Tamura - bo to on pisał ten sfotware do procka, na podstawie zresztą jakichś źródeł z jeszcze innej stronki. Tu raczej nikt się nie zajmował przerabianiem...
Witam mam problem z tym programikiem. Program ma odbierać znaki z RS-a i po wciśnięciu Entera wyświetlić cały ciąg ale niestety tego nie robi :( #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile uint8_t c,i,bit_rx; volatile uint8_t buf[63]="Test_wysylania\n\r...
Witam Poczytaj może najpierw datasheet'a i popraw swój kod, bo masz pomieszane warunki wysyłania danych. W nadawaniu masz podany rejestr odbiornika itp. Edit Odbierasz śmieci i za chwile je wysyłasz.
z jednej wysylasz z predkoscia 4800 b/s a drugim odbierasz z 9600 b/s ?
O problemach z nadawaniem 485 pisałem w innych moich postach. Właściwy moment przełączenia nadajnika w tryb odbierania danych jest najważniejszy. Dlaczego mając do dyspozycji sprzętowy usart używasz programowego? Flush _chyba_ nie działa na programowym a rozwiązuje problem na sprzętowym.
Mam jeszcze jedno pytanie. Odbieram dane z BMA180 w postaci uint8_t. Jak je przerobić na char, żeby wysłać przez USART do PC?
Podobają mi się te rzeczy o których czytam tutaj (; Do tej pory myślałem że DMA raczej nie ma sensu przy odbiorze danych których długość jest nieznana/zmienna, a tu proszę... Wychodzi na to, że przy zastosowaniu standardowych mechanizmów RTOSa (programowe timery) + ewentualne przerwanie od IDLE można mieć samo odbieranie "gratis". 4\/3!!
Problem rozwiązany. Miałem błędy w połączeniach przy gnieździe DB9. Teraz działa i wysyłanie i odbieranie. Dzięki wszystkim za pomoc. Zamykam temat.
odbierać usart stm32 odbierać discovery radmor odbierać
gazowanie reduktor podłączyć kamera cofać nawigacja uszkodzony sensor
szybkość internetu netia przesterowanie wejścia tunera
Optymalna obudowa i strojenie B&C 15PS100-4 Motorower Komar przerywa po dodaniu gazu - przyczyny i rozwiązania