Może taki kodzik - odebranie znaku sygnalizowane mignięciem a nie zapaleniem LED + echo (UART_BAUD do ustawienia na własny):[syntax=C]#include <avr/io.h> #include <avr/wdt.h> #include <avr/interrupt.h> #define PARITY_NONE 0 #define PARITY_EVEN (1<<UPM1) #define PARITY_ODD ((1<<UPM1)|(1<<UPM0)) #define STOP_BITS_1...
Witam, słabo znam te procesory, musisz więc sprawdzić w dokumentacji, moim zdaniem problem nie bierze się z kolejności wysyłania ale z kolejności odczytu. Generalnie, ośmiobitowe procesory przy dostępie (odczycie i zapisie) do szesnastobitowych timerów wykorzystują (dla zagwarantowania jednoczesności obu bajtów) specyficzny mechanizm. Starszy bajt nie...
Nie wiem jak działa na tej Atmedze SPI, ale konfiguracja tego NCO za pomocą SPI 8bitowego powinna wyglądać tak że: 1. Wysyłasz starszy bajt zaczynając od MSB!, 2. Po wysłaniu tego bajta trzymasz FSYNC na low cały czas, a SCLK w idle hi, 3. Wysyłasz młodszy bajt, 4. Po zakończeniu FSYNC na hi. P.S. Pomyliłeś działy.
Nie napisałeś jaki ma to być Modbus ascii czy rtu, kodu w bascomie nie posiadam ale może Ci coś podpowiem, więc tak jeśli chodzi o rtu jest to postać bitowa i ważne są odstępy czasu miedzy znakami oraz początkiem i końcem ramki, jak to zrealizować a no bardzo prosto ramkę składasz z ascii i posyłasz to na rs232/485 i będzie działało może nie jest to...
Nie wiem do końca jak to jest w PC. O ile wiem to pracuje głównie jako porst asynchroniczny. Przesyłanie odbywa się w ramce bit startu, 8 bitów danych, 1 lub 2 bity stopu. Nie można zatem w jednej ramce przesłać więcej niż 1 bajt. Dane dłuższe trzeba podzielić na kilka ramek. W mikrokontrolerach rodziny '51 port szeregowy może także pracować w trybie...
Wolno, tylko wtedy jak to drugie z ustawionym jednym bitem stopu coś nada, to to pierwsze odbierając zasygnalizuje framing error przy pierwszym bajcie, a w następnych odbierze śmieci. Nie kombinuj, tylko rób przerwy co ileś bajtów. Co lepsze UARTy mają coś takiego jak funkcja IDLE - wymuszenie braku transmisji przez czas równy transmisji bajtu. Jeśli...
Wyświetlacze LCD charakteryzują się interfejsem 8-bitowym, tworzonym przez 8 linii danych DB0...DB7. W praktyce stosuje się interfejs 4-bitowy z linii DB4...DB7. W trybie 4-bitowym transmisja bajtu dokonuje się w dwóch etapach - w pierwszym przesyłany jest półbajt starszy, a w drugim półbajt młodszy. Wybór sposobu sterowania zależy od konstruktora który...
W dokumentacji nie znalazłem, ale zdrowy rozsądek wskazuje, że to powinna być ostatnio wpisana dana.
Masz błędnie napisane procedury transmisji - bit TXC ma stałą wartość 1, więc nie czekasz an wysłanie znaku. W jakim celu wymyślasz własny błędny kod do transmisji bajtów, skoro w manualu Atmela masz gotowy poprawny: [syntax=c]void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ;...
Żeby włączyć nowy transfer trzeba wyłączyć poprzedni (nawet jeśli się już skończył), przez zapisanie zer do stosownych rejestrów. Synchronizacja kanałów polega właśnie na tym, że dany kanał jest "sprzęgnięty" np. z Timerem czy z UARTem. Niemniej jednak być może dałoby się ustawić timer tak żeby wyzwalał transmisję tylko jednego bajtu na raz, tylko ciężko...
Nie możesz jeden po drugim, bez żadnego czekania odczytywać czy wysyłać kolejnych bajtów przez I2C. Pomiędzy każdym wysłaniem lub odebraniem muszą być sprawdzane stosowne flagi wskazujące czy transmisja danego bajtu się już skończyła. Początek każdej transmisji musi zaczynać się warunkiem startu, a kończyć warunkiem stopu. Razem z adresem urządzenia...
a dokładniej to jest tak - ramka z jednego proca: 5,95,48,56,146,10,1,0,203,3 odp. z drugiego: 2,95,48,53,146,202,3, pierwszy bajt transmisji określa ilość merytorycznych bajtów w ramce.(05) lub (02) dla tych przykładów. 2 i 3 bajt to adres urządzenia lub proca widoczny w zapytaniu i odpowiedzi (95,48) dalej zawartość "merytoryczna" ramki np.(56,146,10,1,0,)...
Wygląda na to że: Uart_komunikacja.c // Funkcja przerwania od odebranego znaku przez UART i dekodowania ramki // postac ramki transmisji: // 1 bajt - Znacznik startu // 2 bajt - ID robota // 3 bajt - komenda // 4 bajt - dana W Uart_komunikacja.h jest lista komend oraz wartości dla znacznika startu i ID robota.
Przepraszam moje nie dopatrzenie , co do Twojego kodu ,wkleje swoj do obsługi TWi działający ponieważ widzę pewne róznice w kodach : void TWI_INIT(void) { TWSR = 0; /* no prescaler */ TWBR = ((16000000/F_TWI)-16)/2; /* must be > 10 for stable operation */ } // procedura transmisji sygnału START void twistart(void)...
W kwestii bascom-u Ci nie pomogę ale może wykorzystasz wstawki asemblerowe ; .org 0 rjmp RESET ; Reset rjmp EXT_INT0 ; zewnetrzne Int0 rjmp EXT_INT1 ; zewnetrzne Int1 rjmp TIM1_CAPT ; zewnetrzny wychwyt wartosci licznika 1 rjmp TIM1_COMPA ; komparator A licznika 1 rjmp TIM1_OVF ; przepelnienie licznika 1 rjmp TIM0_OVF ; przepelnienie licznika 0 rjmp...
Jeżeli chcesz uzyskać pomoc, to wstaw właściwy program. Deklaracja zmiennej nie ma nic wspólnego z tym co wysyłasz. W podanym programie wysyłasz tylko 8 bitów. Rejestr sprzętowego SPI nie przyjmuje więcej niż 8 bitów, a w funkcji programowego SPI inicjujesz "licznik" na 8 bitów, przez co nie możesz wysłać więcej. Najprostszym sposobem jest wysłanie...
Nie zrozumiałem,że chcesz powiedzieć ,że twój zegarek nie wyświetla sekund :) tylko pullujesz zegarek DS 3 razy na minutę ,żeby nie przegapić zmiany minuty :) Żartuję oczywiście :) metoda dobra jak każda :) Podeślij kawałek kodu obsługi i2c może znajdziemy babola. Podejrzewam, że układ DS podobnie jak niektóre PCF-y[phlipsa] blokuje stan zliczania czasu...
W załączniku biblioteka z dwoma prostymi przykładami - dla nadajnika i odbiornika.
Modulacja LoRa została stworzona z myślą o uzyskaniu maksymalne dużego zasięgu. Odbywa się to jednak kosztem przepustowości łącza. Jest prawdopodobne, że ustawiłeś takie parametry pracy gdzie transmisja kilkunastu bajtów trwa sekundę. LoRa nadaje się do czujników, które sporadycznie przesyłają pomiary. Tylko w takim przypadku można spełnić prawne ograniczenia...
Patrząc jak implementują taką sytuację różne scalaki I2C to po prostu rozpoczynają transmisję od nowa. Czyli master w kółko odczytuje to samo, czyli jeśli slave ma 4 bajty, a master uprze się, aby odczytać 5, to piąty bajt transmisji będzie taki sam jak pierwszy. W każdej sytuacji to master musi wiedzieć co robi, od tego w końcu jest masterem.
No nie wiem jakie to procesory, ale można by je spiąć za pomocą drugiego sprzętowego SPI (UART in SPI mode - bo zwykły UART to trochę za wolno, a tymczasem tu mamy transmisję 1 bajta danych w kilku taktach uP) i robić komunikację, żeby master nakazywał slaveowi odczyt - to już moim zdaniem lepsze rozwiązanie, z tym, że slave będzie wtedy raczej zajęty...
No to rozmawiamy o Nibylandii... Często ma znaczenie pominięcie jakiegoś bajtu w transmisji. Istnieje wiele rodzajów kart SD.
Zatem nie nadążasz odbierać z PC, nadpisujesz bufor ze znakiem wysyłanym do PC albo PC nie nadąża z odbiorem. Stawiam na drugi przypadek.
od czegoś trzeba zacząć :) http://www.easy-soft.net.pl/artykuly/jez... co kolega sądzio poniższym rozwiązaniu? http://extremeelectronics.co.in/microchi... Na poczatek ok, można zrozumieć zasadę...
250 ns to trochę mało. Ale ogólnie daje się zrobić dowolny interfejs programowo. Po prostu "ręcznie" wystawiasz odpowiednie sygnały na dane linie. Tylko, że ja robię to w asemblerze :P
Obsługa przerwania ma być najkrótsza. Najlepsza analogia do życia, to gdy dzwoni telefon, to tylko go odbierzesz, porozmawiasz i koniec, nie będziesz nieruchomo stał, aż zadzwoni następny raz. Podobnie w procesorze są przerwania uzależnione od różnych zdarzeń, zmiany stanu zewnętrznego pinu, opróżnienia bufora transmisji wyjściowej, otrzymania bajtu...
Dziękuję za odpowiedź (at)Freddie Chopin . pomiędzy poszczególnymi słowami pojawiają się przerwy . Dokładnie coś takiego zauważyłem i dlatego wzbudziło we mnie to ciekawość. Wydajność kodu jest dla mnie istotna, ale mimo wszystko pewność, że żaden inny proces mi tej komunikacji nie zakłóci jest znacznie ważniejszy. Pomyślałem również o DMA, ale będzie...
Witam mam taki problem potrzebuję nadawać ciąg 8 bajtów danych powtarzany z dość znaczna częstotliwością około 100x na sekundę. Pytanie jak się zabezpieczyć programowo zarówno od strony mikroprocesora jak i komputera przed zjawiskiem odbioru danych w niewłaściwej kolejności ? na razie jest zrobione tak że licznik zwiększa swoją wartość przy każdej odebranej...
scalak na 5V...a on nie ma odpowiednika Możesz przynajmniej zdradzić co to za magiczny układ? Dlaczego? Wydawało mi się, że to dość popularny standard. Nie należy mylić popularności z niezawodnością ani wydajnością. I2C działa w oparciu o wired-and, czyli wszystkie urządzenia mają wyjścia typu OD, a to fatalnie wpływa na propagację sygnałów, co np....
SPI wysyła bit z prędkością 2MHz, 16bajtowa tablica ma 16*8=128 bitów. Czas w sekundach to 128/2000000, czyli 64/1000000, czyli 64/1000ms, czyli 64us.
W sumie to powinieneś wywalić te spi_send() . Użyj ich odpowiednio tylko przed rozpoczęciem transmisji i po jej zakończeniu. Nie powinieneś ruszać linii CS przed zakończeniem wysyłania wszystkich bajtów. Rozpoczęcie transmisji: [syntax=C]PORTB &= ~(1<<CS_ADC); Tu jakieś mikrosekundowe opóźnienie...[/syntax]Wysłanie bajtu: [syntax=C]while(!(SPSR...
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...
To tylko transmisja dwóch bajtów po SPI a gdzie są piny SPI to w PDF zobacz. Nie patrzyłem na PDF tego przetwornika ale z programu wynika ze wystarczy zamiast jedynek wstawic oczekiwaną wartosć 12 bitową Spi_nadaj: $asm ldi r16, 0001[color=red]1111[/color... Out Spdr , R16 Czekaj: sbis spsr,spif rjmp czekaj ldi r16, [color=red]11111111[/color...
USART sprzętowo nadaje cały bajt, wraz z bitem startu, stopu i parzystości. PRzerwanie w czasie takiej transmisji nic nie zakłóci. Co najwyżej do nadania kolejnego bajtu minie jakiś czas, ale to nie problem, gdyż każdy bajt ma swój bit startu, w efekcie odbiornik to poprawnie odbierze.
Gdy uruchamiam program DDT2000 Light bez włożonego kabla program uruchamia się Gdy uruchamiam program DDT2000 Light z włożonym kablem i podpiętym do auta program uruchamia się i pokazuje czerwony ekran z komunikatem error 1009. Generalnie powinno być na odwrót :) Dodano po 2 W Zaawansowanych mam Odbioru (Bajty): 4096 Transmisji (Bajty): 4096 Tutaj...
Mam taki problem Robię komunikacje dwóch AVR-ów. Pierwszy wysyła ciąg 30 bajtów drugi odbiera zawsze bezbłędnie z tym nie ma problemu. Gdy odbierze dane poprawnie od razu odsyła pierwszemu znak "T" dając pozwolenie na wysłanie nowych danych. Zrobiłem sobie taką próbę że pierwszy wysyła dane co 20ms nie czekając na zgodę na nadawanie czyli tą zwrotną...
Daj sie wykazac google. 2 minuty i jest: http://www.holtek.com/pdf/consumer/6221_... dekodowanie wrzuć szukanie np. ir nec decoding a na stronie producenta Holtek są tez ciekawe noty aplikacyjne o dekodowaniu tego kodu np. http://www.holtek.com/english/tech/appno... Użyj przerwania np. INT0 i licznika. Ale szczerze mówiąc...
Ok, 20 IO cyfrowych to 20 bitów, czyli 3 bajty. 10 wejść analogowych 16-bitowych, to 20 bajtów. Tyle chcesz odczytać. Do tego narzut protokołu - bajt adresu, masz 4 urządzenia, to dodatkowo 4 bajty. A więc jeden cykl to co najmniej 27 bajtów do przesłania. Ponieważ korzystasz z UART, więc jeden transmitowany bajt to co najmniej 10 bitów, a więc masz...
Zieeew. Mówimy o podstawach działania UART, a nie o jakichś wydumanych parametrach ilościowych. MUSIMY co jakiś czas (np. co kilkadziesiąt bajtów) robić przerwy w transmisji danych nie krótsze niż czas transmisji bajtu, bo inaczej być może NIGDY nie odbierzemy żadnej danej. Parę razy temat ten był już poruszany. Ale nie jak wysyłamy na VCOM (a tu pewnie...
Tak na pierwszy rzut oka - wysyłasz bajt i w czasie transmisji deaktywujesz CS - to nie ma prawa działać. Zawsze wysyłaj i odbieraj, deaktywuj CS po odebraniu,
3. Napisałem obsługę I2C na przerwaniach samodzielnie Nie napisałeś obsługi I2C na przerwaniach tylko masz polling I2C w przerwaniu timera. To jest klasyczny przykład na to jak czegoś nie należy robić. Obsługa I2C w przerwaniach polega na obsłudze przerwań przychodzących z tego waśnie peryferium. i zastanów się jak połaczyć przerwania I2C z przerwaniem...
Nie wiem dlaczego analizator pierwszy bajt odbiera prawidłowo a przy kolejnym pokazuje jakiś błąd Pewnie przez zbyt krótki "impuls" na linii CS. Generalnie CSa powinieneś przestawiać dopiero po całej transmisji, a nie między każdym bajtem, a jak już między każdym bajtem, to raczej przydałoby się coś dłuższego niż takie "pyknięcie".
Dziędobry Tu masz pomysł na protokół transmisji. Oczywiście należy dostosować ten pomysł do Twojego projektu. Zalety : 1. Początek transmisji jest unikalny i znak początku NIE MOŻE wystąpić w treści ramki 2. Łatwość debugowania - nie potrzeba żadnych programów do dekodowania treści - wystarczy popatrzeć. 3. Dało się uruchomić bez żadnych zacięć w jeden...
Masz poważne błędy. Czytasz dwa bajty z termometru zamiast 9. Nie sprawdzasz CRC. po wystawieniu reset nie sprawdzasz czy linia wróciła do poziomu wysokiego. To samo po presence oraz transmisji bajtów. Zrób prosty test, zewrzyj magistralę z masą. Jakie otrzymasz wyniki?
W datasheecie znajdziesz informacje, czy parametr tego typu (zbocze na którym wysyłane są dane) można zmieniać gdy SPI jest aktwne. Na pewno nie można parametru tego zmienić w trakcie trwającej transmisji bajtu/slowa. 4\/3!!
Co do synchronizacji mialem na mysli skad Pc wie, ze wysylany bit jest 0. jesli komunikacja odbywa sie za pomoca 0/5V (chyba, ze mi sie tylko wydaje) To już wynika z samej specyfiki standardu RS232C. Transmisja każdego bajtu (przy standardowym ustawieniu) jest podzielona na ramki. Każda ramka musi zaczynać się od bitu startu. W normalnym stanie (gdy...
0. Zacznijmy od czasu: Jeżeli masz do przesłania 3x24bity i chcesz to robić z częstotliwością ~96kHz, to wystarczy zegar SPI nieco powyżej 7MHz. Dla STM32F407 to nie problem, bo max. jest 42MHz dla SPI1 i 21MHz dla SPI2 oraz SPI3. Realne :) 1. To normalne, że ADC jest urządzeniem podrzędnym, więc nie generuje sobie zegara tylko jest taktowany z mastera....
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...
Cała obsługa transmisji po SPI powinna zostać przeniesiona do funkcji obsługi przerwania od SPI. Nie bardzo chcę to robić. SPI działa na max, czyli fcpu/2. Wysłanie bajtu to 16 cykli zegara. Wejście i wyjście z przerwania zajmie więcej niż transmisja bajtu. Używanie przerwań jest więc trochę bez sensu.
Witam, Czyli jeżeli rozumiem to nie ma potrzeby stosowania interfejsu RS 422 (tzn układu do konwersji)? bo już trochę się pogubiłem ;( trzeba stosować układy do konwersji, ponieważ wszystkie "porty" tych enkoderów są różnicowe, to znaczy używają sygnałów symetrycznych. Taki sposób przesyłania sygnałów dość często stosuje się w urządzeniach przemysłowych,...
slave po transmisji bajtu oczekuje sygnału ACK A jak odbiera? jakos nie moglem wykryc reguly - albo juz mnie to zmeczylo a nie mam analizatora (chyba sobie trzeba sprawic prezent swiateczny :))
W tym przypadku potrzebujesz interfejsu na Max232, podłączasz 11nogę maxa do 51 nogi Toshiby, odpalasz program Comm_rs włączasz radio i czytasz transmisję. Kod jest jawny, tworzą go dwa ostatnie bajty jakie odczytasz. Wszystkie materiały i narzędzia masz na elektrodzie
W sumie jak miałeś napisany tak kod, że zawsze zdążyłeś dodać nowy bajt do bufora przed zakończeniem transmisji poprzedniego to przerwanie od TXC nie wykonało się ani razu (bo bufor nigdy nie był pusty przed zakończeniem transmisji bajta z shiftera). Dopiero po zakończeniu transmisji całego pakietu. Czyli Twój kod działał tak jak mój aktualny... mniej...
Podejrzewam, że twoja funkcja USART0_Transmit_Word może zbyt długo czekać i bufor odbiorczy UARTu się przepełnia. Załóżmy, że powyższa funkcja wysyła znaki '\r' '\n' po każdym jej wywołaniu. Wówczas jeśli program otrzymuje tekst i po owym tekście #010, to cały komunikat trafia do wysłania i jest w porządku. Jeśli tekst zacznie się od #010, natychmiast...
SPI ma bufor, więc ładowanie nic nie kosztuje - odbywa się w czasie transmisji poprzedniego bajtu. Transmisja bajtu odbywa się automatycznie, jeśli rejestr danych nie jest pusty, więc to też nic nie kosztuje. Co do animacji - małoistotne jest jak szybko kontroler może odświeżać, jeśli LCD z KS zmienia stan piksela z zapalonego na zgaszony i odwrotnie...
Nie używam, ale pochwalam. ;) Wystarczy przerwa ciut dłuższa niż czas transmisji bajtu, np 11 T - ważniejsze, żeby w ogóle była. Jest parę równie standardowych protokołów z ramkami rzędu 1 KiB. Popatrz, ile razy był tu wątek "wysyłam w kółko 'A', a odbieram krzaczki".
Mysle że implementacja kol (at)pawlik118 na zasadzie "kompensujących się błędów" ukrywa problem. Asynchroniczna transmisja bajtu wymaga 11-12 impulsów zależnie od ustawień. Jeśli przyjmiemy 12, weźmiemy odwrotność, błąd zegara 4% to pół impulsu, umowna granica że z większym błędem nie może dobrze działać.
Mam jeden wav. Scooter-weekend i działa.... Patrzyłem na własciwosci jego i jest tak. szybkosc transmisji bajtów: 64kb/s rozmiar probki audio: 4 bitów kanały: 1(mono) czestotliwosc probkowania audio: 16khz format dzwieku: IMA ADPCM
...wydaje sie być OK, ale wlasnie musisz wymyslec cos innego do rozpoznawania przez slave'a co master chce uzyskac...najlepiej wyslac kilka bajtow do slave , stworzyc sobie jakis prymitywny protokol transmisji, np pierwszy bajt to 0x44 drugi 0x22, koniecznie oba po sobie !! i teraz w slave dajesz warunek ze jesli otrzymasz takie dwa bajty po sobie to...
Zerknij na nowy log. Czujnik przesyła dane w formie dziewięciu bajtów. Do odczytania temperatury wystarczyły by dwa pierwsze, ale reszta przydaje się by sprawdzić poprawność transmisji. Ostatni, dziewiąty bajt to suma kontrolna CRC obliczana przez czujnik. Może być tez obliczona przez mikrokontroler. Jeśli jednak linia była by zwarta do masy i wszystkie...
Jak mam być szczery, to nie wiem co zrobiłem, że ruszyło, ale działa :) UART działa, przy czym oba procesory jadą na tym samym zegarze z zewnętrznego generatora kwarcowego na bramkach, prędkość w zakresie do 38400. Przesyła do kilkunastu bajtów bez problemu. Bez ustawiania buforów itp.cała obsługa UARTa jest w postaci inputbin i printbin na przerwaniach...
Z opisu metody Read kontrolki SerialPort "Reads a number of bytes from the SerialPort input buffer..." wynika, że pobiera ona bajty, które się znajdują w buforze kontrolki. Możesz otrzymać mniej znaków niż żądasz, jeśli przed upływem ustalonego timeout'u w buforze kontrolki nie znajdzie się odpowiednia liczba znaków. Czy i na jaką wartość ustawiłeś...
Wydaje mi się, że przy transmisji pojedynczych bajtów z małą prędkością (9600) powinien zagadać...
Kupiłem interfejs na znanym portalu aukcyjnych i wszystko pięknie działa. Przy okazji powiem, ze nie trzeba zmieniać prędkości portu. Wystarczy zrobić tylko to: Wielkość transferów USB: - Odbioru (Bajty): 1024 - Transmisji (Bajty): 1024 Opcje BM: - Czas opóźnienia (msek): 1 Reszta opcji - bez zmian. Dziękuję i pozdrawiam Mariusz
Widzę tu całe stado błędów logicznych. Napisz, jak ma wyglądać jedna sesja transmisji i co właściwie chcesz uzyskać. Użycie DMA do transmisji jednego bajtu nie ma sensu, parę innych rzeczy też. Zgaduję, że przy pomiarach masz wysłać jeden bajt polecenia, odebrać baj t nieistotny, przełączyć kierunek i przesłać kilka bajtów pustych odbierając dane -...
W każdej funkcji i2c stosuje czekanie na zwolnienie flagi. To nie to samo co odczyt bitu potwierdzenia. Ty po prostu czekasz tylko na zakończenie transmisji bajtu. Informacja o wysłaniu (lub nie) przez układ slave bitu potwierdzenia znajduje się w rejestrze TWSR po zakończeniu transmisji bajtu wpisanego do TWDR i jest ona bardzo istotna, bo dzięki...
Nie ma problemu - da się tak komunikować... Obliczony błąd na moim egzemplarzu przy tej prędkości i ustawionym zegarze na 4MHz wyniósł raptem 2%... Czyli w granicach tolerancji, którą przyjąłem (i przy której da się jeszcze połączyć) na 3,5%... Warto przetestować, ponieważ różne egzemplarze mogą zachowywać się inaczej. No i zależy to też od warunków...
Czas transmisji po IIC (nawet 400kHz) jest stosunkowo długi. Można go skrócić niewykonując pewnych operacji, np sprawdzenia czy DS2882-800 zakończył transmisję bajtu. Gdy cykliczne obsługujemy 6 kanałów, to odczytywany bajt musi już być w odbiorniku. Widzę takie rozwiązania: - 6 uartów i sześć DS2480 :-) - jeden DS2480 praca z prędkością 115200, - obsługa...
Twoje pytanie niewiele ma wspólnego z UART. Chodzi Ci po prostu o to, jak przesłać coś, co ma więcej niż jeden bajt. Rozbij to na bajty - sposobów jest wiele (np. unia typu, jaki chcesz przesłać i wektora bajtów), a potem wysyłaj bajt po bajcie.
Dla mnie ma to znaczenie. W oryginalnej funkcji, używałem tej samej zmiennej do zwracania wartości rejestru statusowego z modułu radiowego. Zwracałem bajt. Tutaj jest kawałek wykastrowanej funkcji, a rozwodzisz się nad tym jak nad kodem odpowiedzialnym za lądowanie silnika Falcon Heavy. Czy możesz zaprezentować wzorcową funkcję obsługi SPI przez polling?...
Przecież wysyłasz kolejne bajty po I2C to chyba wiesz co jest co. Inicjujesz transmisję, wysyłasz np. 4 bajty i kończysz transmisję, na drugim arduino odbierasz po prostu 4 bajty i w kolejności odbioru przypisujesz do odpowiednich wartości, nie ma tu nic niezwykłego i skomplikowanego. Pozdr
Witam, bezpośrednio nie pomogę, ale może odezwie się ktoś, kto przeczytał dokumentację tego wyświetlacza. Problem z odbieraniem możesz rozwiązać dość "łatwo". Nie blokuj przerwań na czas dłuższy, niż trwa transmisja jednego bajtu. Czym konkretnie zajmuje się Arduino, że nie może jednocześnie obsłużyć portu szeregowego na czas? Ile to coś trwa? Pozdrawiam.
moze MM transmisja do rejestru SPI wyzwalana timerem. co to znaczy MM? O ile dobrze rozumie sugestię to chodzi o to aby ładować dane do SPI z timera który będzie wysyłał żądanie do DMA w odstępach ciut większych niż czas transmisji 1 bajtu?
... natomiast w trybie synchronicznym linia TxD służy do wysyłania danych, a RxD służy do wysyłania impulsów synchronizacji. Jest dokładnie na odwrót - RxD to wysyłanie/odbieranie, a TxD to zegar. Zwróć uwagę, że zegar jest zawsze generowany przez procesor - zarówno w trybie nadawania, jak i odbierania. W jaki sposób urządzenie odbierające transmisję...
Witam ponownie, dokonałem dzisiaj długich i żmudnych testów odnośnie prędkości i ilości wysyłanych danych pod kątem błędów transmisji. testy robiłem transmitując z procka do PC 800 bajtów z pamięci SRAM ATmega8 9600 - bez najmniejszych problemów 19200 - bez najmniejszych problemów 38400 - bez najmniejszych problemów 57600 - raz na kilka transmisji zgubiny...
Nie wiem jak Arduino obsługuje 1-Wire. Używasz programowego uarta. Obsługa 1-Wire pewnie czasami zawiesza przerwania. Dla sprzętowego uarta to nie problem (na dzień dobry przerwania moga byc zawieszone na czas transmisji bajtu no i jest 2 bajtowe fifo). Zablokuj obsługe 1-Wire i sprawdź jak będzie zachowywał sie program. Przy okazji, po usuwaniu SMS...
Oczywiście przy dużych szybkościach transmisji obsługa przerwań staje się problematyczna, lub wręcz (dla SPI) bezsensowna, bo obsługa trwa dłużej niż transmisja bajtu. Natomiast DMA oprócz eliminacij narzutu związanego z przerwaniami zmienia też styl programowania. Np. dla SPI z maksymalną szybkością programowe nadawanie zajmuje 100% czasu MCU, pomimo,...
Dzieki za zainteresowanie, ale przed etykieta SKOK: postawielem SETB TI, czyli na sztywno po raz pierwszy ustawiam ten bit a potem powinien sie juz ustawiac sie sam w petli pod koniec transmisji bajtu. Wartosci przypisywane SFRom zaczerpnalem z przygladowego programu udostepnionego na stronach Atmela Co do deklaracji SFRow to wiem ze zrobilem to na...
W sumie jeśli pierwszy bajt wyślesz jako 0b01010101 a program rozpozna, że rozpoczęła się transmisja to dałoby się conajmniej dwukrotnie zmierzyć jaki czas trwa stan wysoki i na podstawie tego można już określić jaką prędkością transmisji nadawca się posługuje. Z tym, że trzeba taki bajt synchronizujący wysłać - a nie zawsze będzie to możliwe. Można...
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,...
Faktycznie sprzętowo wygląda na RS-232, natomiast logicznie są to ramki o określonej strukturze wysyłane po RS-232 8 bitów , 1 bit startu, 1 bit stopu i brak parzystości. To czy jest to TTL czy inne poziomy napięć zależy prawdopodobnie od urządzenia (lub jego ustawień). Pierwszy bajt to nagłówek określający nadawcę i odbiorcę, następnie 1-14 pakietów...
To musisz sobie sam ustalić. Wszystko zależy ile danych przesyłasz i od protokołu transmisji (nie mylić ze stadardem poziomów napięć RS232). Jeżeli jest to kilka bajtów możesz liczyć te bajty i jak naliczysz ile przyszło to musisz wiedzieć ile miało przyjsć, porównać i odpowiednio zareagować. Ostatni bajt to przeważnie jakis specyficzny kod np: (ETX...
masz źle PE zrobione. Wysyłasz 0xAC, 0x53, 0x34(przykład) i teraz wysyłasz dowolny bajt (ja zwykle 0xff) i podczas niego dopiero odczytujesz bajt z układu. Bo to jest transmisja 4 bajtowa a nie 3 jak w starych s8252,s53.
Dlaczego nieprzerwanej? I nieprzerwanej w pętli wykonującej się 300ms Klasyczny przepadek Arduinowca, dziesiąki delay. Nawet nie będzie, ze pętla główna wykonuje się 0ms ale obsługujemy w niej LCD przez PCF8574czyli 100kHz i 4 przesłania na jeden bajt: danaL + E=H e=L danaH +E=H E=L Wyswietlacz ma 20x4, więc 160znaków co daje 640 danych do wysłania...
One też są w tej strukturze. http://msdn.microsoft.com/en-us/library/... Trzeba je ustawić na czas transmisji jednego bajtu (po zaokrągleniu w górę).
Zapamiętujesz timestamp ostatnio odebranego znaku (w milisekundach albo w mikrosekundach w zależności od prędkości transmisji). Następnie testujesz ile czasu upłynęło od odebrania ostatniego bajtu (np w przerwaniu od timera). Jeżeli czas od odbioru ostatniego bajtu > 3.5T to uznajesz że odebrałeś poprawną ramkę.
Panel - czujnik. Wygląda jakbyś miał Waść coś pokopane z parametrami transmisji danych.Prawdopodobnie liczba bitów stopu lub liczba bitów danych.Pierwszy bajt idzie ok a potem ramka się rozjeżdża.
Inna kombinacja, w której zmniejszyłem rozmiar odczytu do 16 bajtów (+2 bajty crc) i zwiększyłem szybkość transmisji do 1500000 Spróbowałem raz i zadziałało, było bardzo szybko.
Aha... jeszcze jedno.. lepiej podczas nadawania nieedodawać tej jedynki do sumy.. przypuśćmy że jakieś ciekawe zakłucenia spowodują transmisje 9 bajtów o wartości 0... wtedy transmisja będzie uznana za poprawną. podczas gdy bez dodawania tej jedynki do sumy wystąpi odrzucenie pakietu ponieważ wystąpi wartość 00h zamiast 0ffh
Oto zawartości plików twi.c: #include "twi.h" // procedura transmisji sygnału START void twistart(void) { TWCR = (1<<TWINT)|(1<<T... while (!(TWCR & (1<<TWINT))); } // procedura transmisji sygnału STOP void twistop(void) {...
Zwykle "znak" - to 8 bitów, a nie bajtów. Kolega "ekspert" chyba nie bardzo kojarzy, co robi. Kod w pierwszym poście bez sensu - STOP generuje się na koniec transmisji ciągu bajtów, a ile bajtów można zapisać jednym ciągiem w 24C08 - to sprawdź w datasheet - na pewno nie 760.
Przed przełączeniem wejść, wyłącz przerwania RX, a po przełączeniu poczekaj przez czas potrzebny na transmisję 1 bajtu, skasuj flagę przerwania RX i włącz - może pomoże ;) Albo przed skasowaniem flagi, sprawdź czy się ustawiła.
Mam STM32F4 DISC1 (z programem napisanym w C#.NETMF), który odbiera dane z aplikacji Windowsa (napisanej w C#.NET). Aplikacja wysyła zadany przebieg czasowy a STM32 go odczytuje i zapisuje w tablicy. Następnie zgodnie z zadanym przebiegiem czasowym ma sterować procesem. STM32 jest widziany jako wirtualny port COM. Prędkość transmisji - próbowałem 9600...
Założyłeś nowy temat, chociaż zagadnienie nadal dotyczy poprzedniego. [syntax=C] uint8_t tab[8] = {rejestr1.bit0, rejestr1.bit1, rejestr1.bit2,rejestr1.bit3, rejestr1.bit4,rejestr1.bit5,rejestr1.bit... [/syntax] Takie rozwiązanie nigdy nie zadziała, ponieważ tworzysz tablicę 8 bajtów, do każdego z nich przypisujesz jeden bit ze struktury...
No właśnie nie wiedziałem jak ugryźć temat, ale chyba trafilem właśnie na RFM70, tak musi być radio i to informacje cyfrowe, dodatkowo odbiornik musi być zasilany bateryjnie, transmisje w interwale co 5sekund 1 bajt.
Prędkość transmisji 19200 bitów / sekundę ( np ). To jest ( w dużym uproszczeniu ) 19200 / 10 bitów ( 8 + stop ) daje 1920 znaków na sekundę. Z tego wynika że w 100 mS (1/10 sekundy ) można przesyłać do 192 bajtów. Przypuszczam że takiej długiej transmisji (at)madiz08 nie ma. Nie znam HC12 ale myślę że można znacznie ograniczyć czas transmisji do minimum....
... teraz się męczę ręcznie ustawiać flagi itp... co prawda da się sprawdzić prostą transmisję kilku bajtów ale jest to dość uciążliwe... Przyznam się , że nie bardzo rozumiem co masz na myśli , pisząc o flagach i prostej transmisji :?: :| Piotrek
Bez wyjścia 1PPS tego nie zrobisz. Czas podawany w ramce to (o ile pamiętam) czas rozpoczęcia transmisji pierwszego bajtu. Odbiór tego bajtu kończy się po przesłaniu 10 bitów, a trzeba jeszcze dodać narzut czasu samego UART i oprogramowania.
Tak to jest, kiedy zamiast uczciwie za darmo sterować transceiverem z mikrokontrolera czy komputera, stosuje się dodatkowe układy analogowe, podwyższające koszt układu i wprowadzające błędy. Sama transmisja jest trywialna - każdy bit trwa tyle, ile wyliczyłeś, jedynka jest stanem nieaktywnym. Kiedy stosuje się takie dziwadełka, czas trwania impulsu...
Czy w terminalach masz takie same ustawienia transmisji :?: Liczba bajtów na sekundę:4800 Bity danych :8 Parzystość :brak Bity stopu :1 Sterowanie przepływem :brak Piotrek PS Fusiki ok :D
odczyt bajtu wysyłanie bajtu odwracanie bajtu
pompa ciepła usterka zmiana polaryzacji zasilania aktywacja usługa netia
programowanie motorola wzmacniacz lampowy
Parametr P18 w kotłach Termet Ecocondens - regulacja czasu wybiegowego pompy Jak zmienić region na Polskę w Sharp Roku TV?