Przerwanie bym raczej właczył przed odpaleniem DMA. Odbiór przez DMA to raczej tylko w przypadku kiedy masz zawsze tę samą ilość danych. nie wiem jak w Twoim przypadku bo nic o tej "ramce" nie piszesz. Rozmiem że ma dokładnie 30 bajtów. Jezeli ma więcej lub mniej o choćby jeden bajt to Twój algorytm nie zadziała. - jezeli mniej np o 5 bajtów to odbierze...
Tablice wartosc1,wartosc2,wartosc3 są zbyt małe muszą mieć po 3 elementy. W funkcji hextoul tratujesz przekazaną zmienną jako string kończący się 0, a w tablicach nie masz już miejsca na koniec stringu. Dalej nie przeglądałem.
Z tą długością i negacją to nie mój pomysł, ale niezły. Właśnie tak to można traktować. Jeżeli kolejny bajt nie jest negacją poprzedniego, to przyjmujemy, że to nowa długość i czekamy, aż następny będzie negacją. Dodatkowo można narzucić ograniczenia na dozwolony zakres długości.
Strasznie przekombinowane. Wystarczy tor radiowy, uC z USART, ramki z CRC. Po co jeszcze jakieś starodawne HT12D?
Lepiej [syntax=vbnet]Print "dobra ramka " ""[/syntax] umieść poza przerwaniem.
Witam. Z małymi pomocami mam taki kod: [syntax=basic4gl][/syntax]$crystal = 8000000 $regfile = "m1284def.dat" $baud = 19200 Dim W As Byte Config Timer2 = Timer , Prescale = 256 Config Portb.3 = Output Reset Portb.3 Config Portb.4 = Output Reset Portb.4 Dim Buffer_in(32) As Byte Dim In_pos As Byte Dim Dana As Byte Dim Poldana As Long Dim Polowa As Byte...
No i właśnie z tego należy skorzystać. Przy odbiorze bajtu sprawdzaj znacznik IDLE; jeśli jest ustawiony - jest to pierwszy bajt ramki, po odstępie.
Witam! Mam prośbę o pomoc w poprawieniu kodu. Otóż mam zadeklarowane globalnie następujące zmienne: [syntax=c] volatile uint8_t x; volatile uint8_t recaive_complete; volatile uint8_t block_recaiver; volatile unsigned char bufferin[5]; [/syntax] W programie głównym mam 2 funkcje w pętli while. [syntax=c] while(1) { ReadKeypad(); ComRdFrame(); }[/syntax]...
Programujesz tylko Atmegę, a w jej sofcie zawierasz komunikację z RFM. Sam moduł radiowy nie posiada (chyba) pamięci EEPROM itp, więc po każdym włączeniu musi dostać sekwencję konfiguracyjną, a następnie ramki danych.
Witam, opracowana została prosta ramka przesyłania danych w oparciu o przerwanie USART_RXC_vect. Wysłanie bajtu 255 z aplikacji informuje mikrokontroler że zaraz otrzyma 5 znaków ASCII które ma załadować do tablicy charów a bajt 254 kończy wpisywanie do tablicy. Tablicę ze znakami wyświetlam na wyświetlaczu LED. LEcz np. wysyłam "186A0" a na wyświetlaczu...
Można tak, a dla danych binarnych np. pierwszy odebrany bajt może zawierać długość ramki. Wtedy kończysz odbiór w momencie odebrania określonej przez pierwszy bajt ilości bajtów. Wygodnie jest też jako ostatni bajt umieścić CRC, wtedy CRC całej ramki powinno wynosić 0, jeśli nie to mamy błąd.
Witam Skonfigurowałem UART-a w STM32 do współpracy z DMA i teraz mam pytanko czy jest jakiś łatwy sposób na generację przerwania nie po skompletowaniu określonej liczby znaków tylko po nadejściu konkretnego znaku (znacznik końca ramki) ??
Według mnie, aby mieć inicjalizację danego peryferium w postaci pary osobnych plików, należy ustawić : Zakładka Project Manager -> Podzakładka Code Generator -> Ramka Generated files -> Oczko Generate peripherial initialization as a pair of '.c/.h' files . To jedna z tych opcji, które ja zawsze przestawiam właśnie w ten sposób i zawsze mam oddzielne...
Przerwanie przyda się jedno odbiór ramki USART - będzie adres urządzenie + komenda, przejście w tryb nadawania. Można by i pewnie zrobić to w pętli ale jakoś wolę przerwanie jak i tak nie wykorzystam zasobów uC. Myślałem jeszcze o innym rozwiązaniu. Użyć transcriverów RS485 na każdej linii SPI, ale 8xMAX485 (po 4 w nadajniku i odbiorniku) wyjdzie zdecydowanie...
CRC jest przecież bardzo proste, sam USART ma też bity parzystości, możesz dodatkowo każdą komendę potwierdzać ze strony urządzenia, ale powinno to wyglądać tak: 1. PC wysyła ramkę z bitami parzystości + CRC 2. Układ sprawdza parzystość (sprzęt) + CRC (program) 3. Jeśli CRC + parzystość zgodne to wysyłamy ACK, w przeciwnym razie prosimy o ponowne przesłanie...
Wszystko jest dobrze podpięte, osobiscie lutowany Rs232 kabelek. Być może to jest jakiś problem z terminalem? No nie wiem, w każdym razie chyba będę musiał zastosować jakąs detekcje początku ramki.
W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz to wykluczyć, przed wysłaniem ramki do komputera wyślij cokolwiek do STM32, żeby ten zarejestrował adres IP i MAC w swojej...
Skoro Rx jest wyjściem, a wyjść, które nie są OC się nie łączy to twój układ jest błędny. Nadawanie z RPi będzie ok, lecz nadawanie z ATMega nie zadziała - nastąpi konflikt. Rozwiązaniem jest zrobienie tak, żeby Rx były typu OC - jednak w ATMedze bezpośrednio tego nie zrobisz - stąd trzeba zastosować bramki z wyjściem OC lub zrobić to na elementach...
W transmisji synchronicznej nie ma czegoś takiego jak bity startu i stopu. To są bity charakterystyczne dla transmisji znakowej (asynchronicznej). Transmisja synchroniczna jest zorientowana bitowo i dane odbiera się analizując odebraną ramkę - np. określony ciąg bitów jako znacznik początku czy końca ramki/transmisji.
Witam , może mi ktoś wytłumaczyc w prosty sposób lub przesłac link co to jest format ramek , a tu podaje fragment książki z którym mam problem. "Przy pomocy interfejsu USART można wygenerować wszystkie 30 kombinacji formatów ramek. Każda ramka zaczyna się bitem startu, który nie podlega konfiguracji. Po nim następuje 5 – 9 bitów danych"
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ść...
Problem mam chyba typowy. Oprogramowuje interfejs komunikacyjny. Jednym z poleceń tego interfejsu jest reset. Sprawa ma się oczywiscie odbywać tak, ze przychodzi ramka z poleceniem resetu, odsyłana jest ramka z ACK i następuje zerowanie. USART działa na przerwaniach. Jak wykryć kiedy ostatni bajt ramki opuścił bufor nadawczy? Teraz mam taki kod: USART_ITConfig(USART1,...
A więc działa. Gratulacje :) Docelowo chcę zrobić co innego: Muszę próbkować 4 kanały ADC1 w przemiataniu i wysyłać wartości po USART do komputera. Tylko, że kanał 4 DMA zajmuje się USART1 TX a kanał 1 ADC więc jeszcze nie mam pomysłu jak to połączyć. Kolizja DMA nie występuje, bo są różne kanały. Po prostu jeden poczeka na drugi. Jak najbardziej sensowne...
Dane USART prądkosc 57600, jednoczesnie mikrokontroler będzie analizował ramki z przepływajacych danych. Chodzi o przełaczanie z 4 wejść na 8 wyjść. Moze udałoby sie w przerwaniu ustawic podawanie na wyjscie odczytanego stanu z wejscia ale mikrokontroler często bedzie w przerwaniu od USART i przez to gubienie danych.
Chodzilo mi o wykorzystanie protokolu, tak aby go nie pisac. Z tego co przeczytalem to RS485 to tylko transmisja z ramkami(tzn USART). Protokol trzeba sobie samemu "stworzyc", czyli napisac rozpoznanie do ktorego Slave'a chce wysylac dane itd. To upraszcza mi budowe ukladu, komplikuje soft. Jednak mysle, ze latwiej jest dopisac te kilka linijek kodu...
Witam, W taki sposób konfiguruje USART: aaaaa=100,bbbbb=2000 I chcę uzyskać: [syntax=c]int a = 100; int b = 200;[/syntax] Próbowałem się bawić z tą funkcją: [syntax=c]void USART1_IRQHandler (void) { u16 c; if (SET == USART_GetFlagStatus (USART1, USART_FLAG_RXNE)) { c = USART_ReceiveData (USART1); USART_SendData (USART1, c); while (RESET == USART_GetFlagStatus...
(at)paluszasty To żle myślisz.Jak pisałem, flaga nie jest automatycznie zerowana, tylko wtedy, jeśli z jakiegoś powodu w ISR jej odczyt może być potrzebny. Tak jest np. jeśli dany wektor współdzieli kilka różnych przerwań (trzeba jakoś odróżnić, które przerwanie zaszło) lub np. w przypadku omawianych przerwań UART - flaga jest kasowana w czasie dostępu...
Witam :!: Mam pytanie czy dobrze zrozumiałem że do transmisji danych do układu STA015 używam protokołu FIFO czyli wysyłam dane przez USART(UART) :?: Jeżeli tak to nie doczytałem niczego na temat wielkości ramki danych i bitach parzystości jak i stopu :cry: :arrow: Czy jest ktoś w stanie mi pomóc :?: :idea:
A jakby zrobić coś takiego. W przerwaniu timera 1 i poza nim uruchomić przerwanie od Usarta w którym znaki będą zapisywane do tablicy, a w pętli głównej programu sprawdzać tylko zapełnienie tablicy. Po jej zapełnieniu analizować dostarczone dane przy wyłączonym przerwaniu z Usarta. Pytanie czy Usart daje przerwanie przy zakończeniu odbioru znaku (wypełnieniu...
Pomimo, że kolega nie udostępnia całego kodu to można liczyć na fragment (tu bądź na pw) odpowiadający za łączenie przeliczonych próbek w jedną ramkę i ich wysłanie? Użyłeś kwarcu "USART friendly" czy 1, 4, 8... ?
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...
Witam Testuje transmisje poprzez USART asynchroniczą, narazie na kablu, lecz nie każda ramka danych dochodzi(BAUDRATE=2400). Pytam się czy procki muszą być stabilizowane kwarcem, żeby poprawnie taka transmisja szła. Drugie pytanie dotyczy Attiny2310 w rej. UCSRC nie ma bitu URSEL, w atmedze jest, jednak jak wyłącze ten bit z atmegi8 to transmisja pada...
pdf-a przeczytałem ze 20 razy. A skoro się nie ustsawiają to niby jak mam ustawić liczbę bitów w ramce??
Wykorzystuję F103 +MAC/PHY ENC, F107, F2. Apropo taniości to pierwsze rozwiązanie jest chyba najtańsze skoro MAC/PHY ma podobną cenę jak sam PHY a procek sporo tańszy. Problemy miałem jedynie z serią F2 ale jest już to w erracie opisane. Tak w ogóle to się zainteresuj czy nie da się go kupić też w pobliżu 20 zł bo coś kojarzę że widziałem taką cenę...
Witam, masz wolny pin od postu szeregowego USART? Podłącz się pod procesor komputerem i po konwersji każdej ramki wysyłaj odczytany wiersz i zdekodowaną ramkę do PC-ta. Przekonasz się czy odczyt jest właściwy czy może coś z konwersją jest nie tak.
Bufor cykliczny, inaczej też nazywany kołowym, to najlepsze rozwiązanie do tego co chcesz zrobić. Tym bardziej, że jak zaznaczyłeś danych będzie sporo. Każdy odebrany znak wpisujesz do bufora i przesuwasz wskaźnik zapisu o 1. Możesz to robić przez obsługę przerwania od portu szeregowego, albo możesz do tego wykorzystać DMA. Dlaczego bufor? Ponieważ...
z jakiegoś powodu nie odbiorę ramki to ona przepadnie ? Z jakiego np??..
/* Set frame format: 8data, 1stop bit */ UCSR0C = (1<<USBS0)|(1<<UCSZ00); Przy takim ustawieniu to masz ramkę 6 bitow + 2 bity stopu.
Witam. Próbuję odpalić komunikacje USART z PC na płytce nucleo STM32F302R8, z dokumentacji wynika, że USART2 jest podłączony z programatorem przez który można się komunikować z PC. Chyba wszystko dobrze ustawiłem a przynajmniej podobnie jak w poradniku właśnie z elektrody. Po wciśnięciu przycisku reset na RealTermie pojawia się "nul" czyli pusta ramka...
A może poczekałbyś na wysłanie znaku? Tak patrząc odbierasz w przerwaniu po co więc ta pętla for? a jeśli już to od odczytaniu UDR czekaj na odebranie nowego znaku. Skoro chcesz wysyłać komendy ramką odczekać w przerwaniu na 5 znak ramki i dopiero sprawdzaj komendę.
Moja ramka składa się z 8 bajtów (ciągiem) które wysyłam własnej aplikacji napisanej w C#
W ASM bo jego się uczę. Chodzi o to żeby podać informacje, jak należy uzyskać odpowiednie informacje w czytelny sposób dla atmegi. Czyli jak sprawdzić że jest 'break', jak pobrać zawartość ramki z danymi i przy tym wykorzystywać sprzętowy USART żeby nie powariował. Stronkę znam.
Nie potrafie dokladnie okreslic co sie dzieje gdyz w release nie mam dostepu do debuggera :) Obsluge USART zrobilem na przerwaniach, wpisuje po kolei dane az do konca ramki komunikacji. W petli glownej ramka jest dekodowana i wywolywane sa polecenia. Uzywam kompilatora CrossStudio. Sterowanie silnikiem dziala po skompilowaniu w release. Dorobilem komunikacje...
Robił ktoś coś na uIP ? Jak to jest z uip_process ? w buforze powinna być ramka z MACadresami na początku czy powinna je pominąć ?
W sumie to co napisałeś Freddie Chopin dużo wyjaśnia to co się działo z STM. Musisz mieć rację. Napisz mi tylko jeszcze czy jest możliwe zrobić czegoś takiego: W USAR'cie gdy chciałem wysłać 1 bajt np. co 1sek to wówczas ustawiałem flagę nadawania program przechodził do procedury obsługi przerwania i kopiował zawartość zmienne do rejestru nadawczego...
Zacznę bez zbędnego wstępu. Do czujnika PMSA003 wysyłam kilka ramek w trakcie działania programu - wszystkie mają 7 bajtów. Xmegę debuguję, a USART obserwuję analizatorem stanów. Dwie pierwsze instrukcje docierają do czujnika poprawnie. Kiedy jednak wychodzi trzecia, to po 5 bajtach stan linii TX pozostaje niski, a flaga DREIF wskazuje na brak miejsca...
Atmega 128 posiada 2 UARTY. A mam takie pytanko mógłbyś podzieliś informacjami jak komunikujesz się pomiędzy 2 uC, chodzi mi głównie o program i odczyt ramki
Zacznę od końca - otóż nie można. Transmisja synchroniczna będzie bez specjalnych nadajników/odbiorników linii działać tylko na małe odległości. 1-wire działa na odległości setek metrów. Napisałem też, że zalety z enumeracji urządzeń pojawiaja się jeśli mamy elastyczną sieć, do której możemy wpinać i wypinać urządzenia. Dodano po 7 Podstawową zaletą...
Doceniam za ten hash, choć nie spełnia to koncepcji ramki co do startu (konieczne) i kontroli poprawności (mile widziane/zalecane). Jak ramki są przez USB, ETH, mówimy o "sprzętowym," odbiorze a nie mostki w rodzaju FTDI, to, o ile ramka nie przekracza wielkości przyjętej przez standard, startu i stopu nie musi byc. Podobnie CRC, bo USB/ETH, daję "czyste"...
I2S jest interfejsem dość szybkim a do tego niosącym zegar. Niesie sygnał zegarowy, jak każdy synchroniczny interfejs szeregowy, akurat w tym niewiele jest odkrywczego. Jest dość szybki to akurat też nie jest problem, gorzej jak by był za wolny. Nie wiem jak to wygląda w AVRach ale wiem że w 51 można było wykorzystać USART do podłączenia np. rejestru...
Jest to urządzenie odbiorcze i nadawcze transmisji DMX-512. https://obrazki.elektroda.pl/7875710200_... https://obrazki.elektroda.pl/1473579200_... Drugi tester wyglądał tak: https://obrazki.elektroda.pl/1506942700_... https://obrazki.elektroda.pl/1505487800_... https://obrazki.elektroda.pl/3619195400_...
Na temat łatwych do identyfikacji ramek danych była też dyskusja tutaj: http://www.elektroda.pl/rtvforum/viewtop...
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...
Pisząc że dowolny podałem pierwszy lepszy bo oczywiście że może być jeden i drugi. Jest w tym racja że npn może wciąż przewodzić gdy nie nadajemy a ty pisałeś nawet o potrzebie oszczędności, ca ja przeoczyłem, przyznaję. Ale nie ma zaraz co drzeć szat i rozpaczać ;) bo co za problem wyłączać nadajnik programowo po nadaniu ramki danych, albo go włączać...
Rozumiem, o co ci chodzi, ale nie ma w Bascomie instrukcji z taką składnią jak napisałeś...SET PORTB.7=ADC. Po odebraniu komendy, czy ramki, czy jak tam wolisz sterować procesorem przez RS232, musisz zmienić stan i kierunek portów za pomocą wspomnianych rejestrów. Np: If key="A" then DDRC=&b01010101 PORTC=&b10101010 end if "KEY" Pobierasz...
To wyślij dwie identyczne, jedną ze swojego stosu i jedną z UIP i sprawdź czym się różnią bajt po bajcie. No wlasnie to zrobilem. Przez identycznosc struktury mialem na mysli ze nie roznia sie w ogole "bajt po bajcie" - nawet adresy IP sa takie same (oczywiscie dwa procki nie pracuja w tym samym czasie). Roznice wynikaja jedynie z innych identyfikatorow...
Ale bez odebrania kolejnej ramki sam z siebie poprawny się nie stanie :). Czyli chodzi pewnie o taki prosty kod, przy okazji pozwoliłem wprowadzić sobie kilka drobnych modyfikacji: [syntax=c]int main (void) { unsigned char ramka[5]; while (1) { for (int i = 0; i < 5; i++) ramka[i] = odbior_USART(); if (ramka[0] == 1) funkcja(ramka[1]); } return 0;...
Witam, przepraszam że tak odświeżam, studiowanie wymusiło na mnie programowanie innych spraw, więc nie było czasu na dokończenie projektu. Problem jest taki, że nie mogę znaleźć dostatecznie dużo informacji na temat protokołu midi, z tego co gdzieś wyczytałem ramka danych midi ma długość 10 bitów, natomiast prze USART mega16 mogę wysłać jedynie 9, jest...
w JAKIM terminalu? Może liczbę wysyłasz jako 3 znaki? No skoro sam nie jesteś pewny i piszesz chyba to warto zacząć od tego sprawdzanie. Poza tym trochę dziwne jest to odbieranie "ramki" w przerwaniu - zastosuj jakiś normalny bufor cykliczny...
Mam na F_CPU na 32000000, optymalizacja na -Os. przesyłam teraz dłuższy tekst i pierwszą literę przesyła bez problemu z kolejnymi ma problem. Aktualny kod: [syntax=c] #include <avr/io.h> #include <avr/pgmspace.h> #include "usart.h" #include <util/delay.h> bool OSC_wait_for_rdy(uint8_t clk) { uint8_t czas=255; while ((!(OSC.STATUS &...
No właśnie w ogóle mało pisze ile chce czy też co chce zrobić a to jest ważniejsze niż ot takie tam zwiększanie ramki. Stos z tuxgraphics ma mocne ograniczenia i nadaje się do bardzo prostych zastosowań. Jeśli więc coś bardziej zaawansowanego robić to pewnie, że już lepszym byłby uIP albo i mocniejszy procek w ogóle.
Witam, Gdy próbuje skonfigurować dwa USART i przerwania do nich powstaje konflikt. Wystarczy, że odłącze kabel od USART1 i wtedy wysłanie komendy do komputera wraca do normy. Definiowanie: [syntax=c]RCC_AHBPeriphClockCmd(RCC_AHBP... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_US... ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE);...
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...
zmienilem funkcje wysylajaca na: void USART_Wyslij(unsigned char dane) //procedury wysyłania danych { while (!(UCSR0A & (1 << UDRE0))); UDR0 = dane; //umieść dane w buforze, wyślij dane } void USART_Ramka(unsigned char adres, unsigned char dane) //Wysłanie ramki po RS232 { //pakiety tx_buf[0]=0x3A;...
W zasadzie tak. UDR to jest dosyć szczególny rejestr, bo jakikolwiek jego odczyt sygnalizuje procesorowi odebranie znaku z USART-a i wtedy automatycznie dzieje się kilka rzeczy, m. innymi gaszona flaga RXC, załadowanie do UDR następnego przyjętego znaku, jeśli zdążył się pojawić (jest to możliwe, bo AVR-ki mają 3-bajtowy bufor sprzętowy, który jest...
ok, mowie o hexach, bo to mi wypluwa avr studio w domyslnej konfiguracji ;] ale jesli mozna wrzucac cały plik bajt po bajcie, to moze jest to lepsze rozwiazanie. tylk oczy w pliku bin nie wystapią zakazane znaki [początek i koniec ramki]...
Masz ustawioną 9bit ramkę danych w uC. A w terminalu masz pewnie 8bit i nawet nie ma możliwości wybrania 9bit. Usuń (1<<UCSZ02).
Wiec na komputerze byłoby coś takiego: [syntax=c] ..... byte tablica[1024]; //kazdy element tablicy przyjmuje wartosc od 0 do 255 ...... sp = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One); sp.Open(); sp.Write(tablica, 0, tablica.Length); //wysłanie tablicy przez port szeregowy (czy tak zadziała??). Wysyłam zawsze tablicę o takiej samej...
Ok, czyli jak obliczyć ile trwa wysłanie 1 bajta danych zakładając że ramka składa się z jednego bity startu, ośmiu bitów danych i jednego bitu stopu? Bitów parzystości nie ma. Prędkość transmisji to 115200baud. Dodano po 18 Dobra chyba sobie poradziłem. 115200 bitów na 1 sekundę czyli wysłanie 1 bitu trwa 8,6us. Czyli cała ramka wyśle się w czasie...
Problem leży tu: SIGNAL(USART_RXC_vect) { if(UDR=='$') zapis=1; if((i<14)&&(z... { buf[i]=UDR; i++; } if(i>=14) { k=1; zapis=0; i=0; } } Otóż odczyt z rejestru UDR powoduje jego wyzerowanie a następnie załadowanie następnego odebranego znaku (jeżeli...
Mam prośbę, upraszczam jak to tylko możliwe bibliotekę do komunikacji XMEGA->RS232 przez USART. Idea jest taka żeby tylko na samym początku programu zdefiniować o który usart chodzi i podać prędkość transmisji a reszta powinna się sama skonfigurować. W zasadzie już wszystko działa ale nie mogę sobie poradzić z automatyczną konfiguracją pinów tzn...
Kod: [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" #include "stdint.h" #include "misc.h" #define CLK_FREQ 36000000 /* User defined function prototypes */ void GPIOA_Init(void);...
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ć...
Ok, jak chcesz uparcie brnąć w tą kiszkę, to tak, być może to zadziała, w każdym razie rozumowanie jest poprawne. Ale dlaczego nie poświęcić dodatkowego pinu IO Raspberry i zrobić to tak, żeby na 100% zawsze działało? Ok, nie chcesz dodatkowego pinu, to wstaw tam jakiś mały MCU, który odbierze dane po USART z raspberry, przetworzy je na ramkę RS485...
Ale kolego M.S. niektóre telefony Nokii mają tylko interfejs Mbus/Fbus a nie maja typowego RS232 (nie chodzi tu tylko o poziomy napięć) ... więc chyba o te telefony chodziło autorowi? - a jeśli tak to przez Mbus/Fbus nie da rady kontaktować się za pomocą wysyłania zwykłych komend typu AT - w tych protokołach dane przesyłane są w postaci ramek o strukturze...
Ja to trochę inaczej rozumiem... Moduł ma wejście cyfrowe przy czym nie ma zdefinowanego formatu danych co według mnie oznaczałoby że można moduł traktować jak kabel przez który leci transmisja USART (8-9bitów), transmisja na bazie uarta (dowolna ramka), jakiś inny sposób formatowania przesyłanych danych, lub poprostu przycisk... Przy czym prędkość...
Masz błąd w funkcji usart_init(). Brakuje Ci ustawień starszegi bajtu danych UBBRH oraz jednej najważnejszej rzeczy nie ustawiłeś ramki danych tzn bitów stopu, kontroli parzystości oraz wielkości ramki :) Funkcja usart_init() powinna wyglądać mniejwięcej tak: void USART_Init() { /* Ustawianie prędkości*/ UBRRH = (unsigned char)(UART_CONST...
Pokaz caly program, ktory wywoluje problem. Z tego co widze nie ustawiasz w init formatu ramki. Baud o ile jest bezposrednio wartoscia wpisywana do rejestru powinno byc typu unsigned.
Jakieś 4 dni męczyłem się żeby uruchomić transmisję pomiędzy Atmegą a kompem po rs232. Niezmiernie zaskoczyło mnie to, iż wszystko zaczęło działać gdy bity:UCSZ0,UCSZ1,UCSZ2 ustawiłem na 0. Czyli (według informacji Atmela) ramka danych miała 5 bitów, a przesyłałem dane 8 bitowe. Przy ustawieniu tych bitów na ramkę z 8 bitami danych nic nie chodzi:nie...
Tak sie zastanawiam, po co dywagacje nad szybkością działania algorytmu liczącego CRC, skoro dane są wysyłane dość wolno po USART? Mowa o RS485 i komunikacji z PC. Nie sądzę, aby przekroczony został 1Mb/s (921600). Jak często będzie wysyłana ramka? Przypuśćmy, zed 10 razy na sekundę. Jaka różnica, przy 100ms, czy CRC jest liczone 10 czy 100us?
tu jest kod prostego programu który podgląda to co dzieje się na magistrali, filtruje odpowiedź jednego z urządzeń i obrazuje na ekranie to co jest odbierane. jest tam też pomocniczy licznik który pozwala mi analizować ile tych ramek (które są odpowiedzią urządzenia może być pomijane. Jedyne "przetwarzanie" ramki to wyświetlenie jej zawartości na ekranie....
Nie mam pojęcia czemu jest failed, płytka testowa oryginalna "Leona" ale ten rejestr chyba i tak nie ma znaczenia w tym przypadku. Po dodaniu stddef kompiluje się wszystko ale te kalibracje w ogóle nie wpływają na pomiar. Cały czas min. odczyt to 180. Jedyną rzeczą dziwną jest to że przez około 1s po połączeniu się przez RS-a wyświetla się kontrolka...
no wiec z ta kolejnością wysyłanych danych to jest w porządku (tej konkretnej kolejnosci wymaga ramka) kod funkcji zamieszczam : void USART_putchar(char c) // wysyła znak c na USART { UDR = c; // wpisz c do rejestru UDR loop_until_bit_is_set(UCSRA,TXC)... // czekaj na zakończenie transmisji SET(UCSRA,TXC); // ustaw bit TXC...
Nie jest mozliwe wysylanie 2 bitow stopu i 9 bitow danych. Ustaw standardowo 8 bitow danych i 1 bit stopu. To w zasadzie nie robi różnicy , czy ustawimy 1 czy 2 bity stopu , bo przy ramce 9-bit , zostanie wygenerowany tylko 1 bit stopu. grzesio14 Nie działa Ci transmisja 9-bit , bo takowej nie ustawiasz. Popatrz: ;*** USART tryb 9-bit *** .include...
libmodbus jest biblioteką dla programów pracujących pod kontrolą systemu Linux. Możesz jej użyć do zbudowania programu Master pracującego na PC. Nie da się jej użyć do napisania Slave na atmega8. Do tej pory zbudowałem prototypową płytkę z RS232 która za pomocą USART komunikuje się z komputerem. Polecenia z komputera wysyłam poprzez terminal GtkTerm....
Witam, Chciałbym się spytac czy ktoś miał doczynienia z kamerka PO3030K i mógłby mi pomóc w jednym problemie. Udało mi się ją uruchomic na atmedze128L(8MHz) i obraz jaki uzyskuje bezpośrednio przesyłam przez USART(38400). Rejestry kamery ustawiam na 640x480, czarno-biały, format danych YYYY. Odczytywane pixele(narastające zbocze PCLK) przesylam do kompa,...
Niemożność zmiany rozmiaru tego mizernego bufora to rzeczywiście fatalna wiadomość. Napiszę w czym jest rzecz ale prawdopodobnie nie jest to wina tego ubogiego bufora ponieważ myślałem, że wynosi on 8 bajtów a nie 1 bajt. Posiadam konwerter uart-ethernet, który podłączyłem do ATmega8A (wykorzystuję na chwilę obecną tylko linię Tx uC) i dla testu wysyłam...
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...
W bibliotece mam takie funkcje do wysyłania, któraś się nada ? Dodano po 2 Nie mam pomysłu jak wysłać liczbę większą niż 32767 na terminal. A do wysłania są nawet signed int 32. Podpowiedzcie coś. http://obrazki.elektroda.pl/7037624600_1... Dodano po 40 ok dobra juz wiem, utoa, dtostrf, itp - działa.
To jest modulacja ASK. Prawdopodobnie dla 0 (bo jak rozumiem nadajnik nie byl sterowany) bedziemy miec zinterpretowane 0 (terminal chyba wlasnie to pokazuje jako, że 0 jest znakiem 'non printable'). Formą "ramki" może być sterowanie nadajnika z uarta (bit startu, bit stopu, itd). NA ile sie to sprawdzi to inna sprawa. Nie mam niestety wiekszego doswiadczenia...
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, Piszę aplikację w QT, która ma za zadanie odebrać ramkę z danymi, sparsować je i odpowiednio wyświetlić w GUI. Dane z mikrokontrolera wysyłam w postaci binarnej, podzielone na LSB i MSB (razem 16 bitów) Mam następujący problem: Odczytuje przez USART dane zawarte w ramce i wrzucam je do bufora typu QByteArray. początek ramki (bity startu) odczytuje...
Witam, Mam taki banalny problem, a mianowicie używam do wysyłania danych przez USART DMA w trybie normal [syntax=c]// data transfer mode DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; [/syntax] No i chciałbym po złożeniu ramki kolejny raz wystartować transfer z buffora Czy muszę robić DMA_DeInit a potem DMA_Init czy jest jakieś lepsze podejście. No i jeszcze...
Nie wiem "jak to jest opisane w datasheet Atmegi". Modbus RTU odbiera się tak samo jak ASCII. Różni się sposobem wykrywania początku i końca ramki - w trybie RTU to czas ciszy na łączu. [url=http://www.modbus.org/specs.php]Spe...
Wszystkie nazwy rejestrów, ich długość i w ogóle wszystkie niezbędne informacje znajdziesz w dokumentacji procesora który w danym momencie programujesz. To lepsze niż jakakolwiek książka. W nie wiem jak w at90s2313, ale chyba we wszystkich nowszych procesorach, w szczególności mega32, UBRR jest 16 bitowy. Ponieważ architektura AVR jest 8 bitowa, to...
Będzie porównywalnie odporny jak RS485 (bo UARTa to chyba nie chciałeś puszczać jako czysty UART?) Czyli będzie kilkadziesiąt razy bardziej odporny niż I2C. CANa w STM32F103 chyba da się puścić na 2 Mbps. Tylko weź pod uwagę narzut na obudowę ramki (zresztą przy UARCie też on jest nawet jak nie ma CRC). Jak policzyłeś że potrzeba Ci 2 Mbps?
Czyli mikrokontroler powinien być zarówno nadajnikiem, jak i odbiornikiem? Jeśli mój program jest dobrze napisany to zero odpowiedzi, pozatym moduł na chwilę wchodzi w tryb AT ale za ok.5 sek dioda zaczyna szybko migać tak jak wtedy kiedy nic nie jest do niego podłączone. Oto kod pętli nadawania i odbioru bo konfiguracja jest dobra: [syntax=c]for(;;)...
Nie no zaraz zaraz. RX uC to jest to co odbiera dane, łączysz to bezpośrednio z TX telefonu ponieważ telefon i tak nie da więcej niż 3,3V a uC działa na 5V. TX uC to jest to co nadaje dane, i tutaj wychodzi sygnał 5V czego telefon nie przyjmie. Skoro układ z diodą nie działa najlepiej, użyj dzielnika napięcia szeregowo 2,4k, potem 2,7k do masy. Co do...
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...
Ciężko będzie wybrać odpowiedni rozmiar tablicy. Trzeba będzie zwiększać / zmniejszać ją dynamicznie... Tylko to raczej nie problem bo miejsce gdzie używam ramkaodbierz jest właśnie w przerwaniu: USART1_IRQHandler(void) a robiłem próbę gdzie ciało tego przerwania za komentowałem, tym bardziej że gdy linia RX jest rozpięta to po jakimś czasie transmisja...
stm32 usart ramka przerwa usart usart wskaźnik
brother błąd skanować huawei google konto excel pierwszy pusty wiersz
Brak iskry w Piaggio X8 125 2006 po wymianie akumulatora Audi A4 1.8T gaśnie podczas jazdy - możliwe przyczyny