To zależy co chcesz mierzyć [z jaką częstotliwością]. Jeśli są to wolne przebiegi wówczas ustawiasz przerwanie timara a w nim: - uruchomienie pomiaru ADC [pojedyńczy pomiar] - wysłanie przez USART [syntax=c]ADCSRA |= (1<<ADSC);// start konwersji while(ADCSRA & (1<<ADSC));// oczekiwanie na zakończenie konwersji USART_Transmit(ADCH); [/syntax]...
Zakładając, że dobrze ustawiasz zegary i że funkcja od wysyłania której używasz automatycznie czeka na pusty bufor to powinno działać. No nie dokońca, nic tam nie czeka. Daj: while(USART_GetFlagStatus(USART3... USART_FLAG_TC) == RESET); USART_SendData(USART3, Dane); No i jeszcze: RCC_APB2PeriphClockCmd(RCC_APB2Perip...
Skorzystaj z opcji RTS/CTS.
Przerwanie od odbiornika jest wywoływane w momencie kiedy dana jest gotowa w rejestrze, więc ta pętla do while jest niepotrzebna (zresztą ona jest wręcz nie wskazana bo wydłuża obsługę przerwania o nie wiadomo ile czasu). Poza tym proponuję jeszcze w M8 sprawdzac rejestr UCSRA, w nim są zgłoszone ewentualne błędy (szczegóły w manualu). Poniżej działająca...
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ń...
Nie pokazałeś całego kodu. W obsłudze przerwania nie stosuje się numerów z LCD i czymkolwiek czasochłonnym. Co do realizacji odczytu USART w przerwaniu to podpowiedź brzmi " bufor kołowy". Dodam też że po około 30min wysypują też się atmego8A, No ja się wcale temu nie dziwię, w ogóle nie dbasz o zapisanie SREG ani używanych rejestrów w obsłudze przerwania.
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ż...
Shift jest od przesuwania bitów. Ty musisz przesuwać całe bajty w tablicy Buffer_in. Użyj sobie mojej metody odbierania: [syntax=vbnet]Inputbin Dana Buffer_in(in_pos) = Dana Incr In_pos If In_pos = 9 Then 'Jak zmieści się co najmniej jedna cala ramka danych If Buffer_in(1) = &H01 Then 'To sprawdzamy czy jest prawidłowo rozpoczęta If Buffer_in(2) = &H10...
Witam, próbuję zaprogramować mikrokontroler,aby obsługiwał USART do komunikacji przez RS232. Chcę wykorzystać do tego bufor cykliczny, który zaimplementowałem w następujący sposób: [syntax=c] #include <inttypes.h> #define BUFFER_SIZE 32 #define BUFFER_MASK ( BUFFER_SIZE - 1) typedef struct { uint8_t buffer[BUFFER_SIZE]; uint8_t head; uint8_t tail;...
No dobra. Wywal wszystko na linii Tx telefonu do Rx procesora. Ma być połączenie bezpośrednie. Na drugim kierunku zostaw tak jak masz. Poniżej kod do testów. Powinien działać. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 Config Lcd = 16 * 2 Config Serialin = Buffered , Size = 100 Enable Interrupts 'Declare Sub Oproznij_bufor...
Jeśli możesz użyć biblioteki to polecam http://homepage.hispeed.ch/peterfleury/a... jeśli nie to możesz się na niej wzorować. Ma bufor kołowy, odbiór/nadawanie w przerwaniach, przykład z parsowaniem danych też znajdziesz w google. Wyświetlając komunikat zachęty powinieneś ustalić ściśle akceptowalny format, np. Time:RR-MM-DD-GG-MM-SS,...
Myślę, że jedynym sposobem jest odbieranie danych z USARTa za pomocą przerwań. W programie należałoby ustawić jakieś opóźnienie i sprawdzać cyklicznie, czy nadszedł nowy znak. Jeśli w określonym czasie (zależnym od częstotliwości "powtarzania" klawiatury) nie nadejdzie nowy znak to diodę wyłączyć, jeśli nadejdzie i jest to 'w' to zapalić. Więc w funkcji...
Jak czytałeś lub nie :) karta ma sekwencje "startu" , nie pamiętam teraz jaki ma format, jest to jakiś 5bit znak, ja najpierw z czytuje cały bitstream od czytnika i potem funkcją szukam startu jak nie znajdę to "przekręcam" bufor (znaczy ostatni bit staje się pierwszym w strumieniu) i jeszcze raz szukam znaku startu, potem już tylko na podstawie tablicy...
Problem w tym, że moduł zasilany z napięcia 1,8V nie wystawi jedynki dla modułu zasilanego z 3,4V. Znaczy wystawi, tyle, że to będzie na granicy tolerancji. Dla pewności dodałbym tranzystor, który będzie z tego robił typowe wyjście OC, do tego rezystor podciągający. To oczywiście odwróci fazę, więc dodać trzeba drugi tranzystor, ew. bufor logiczny z...
To dobry moment na poczytanie w końcu datasheeta, czyli zrobienie tak zwanego RTFM. • Bit 7 – RXC: USART Receive Complete This flag bit is set when there are unread data in the receive buffer and cleared when the receive buffer is empty (i.e., does not contain any unread data). If the receiver is disabled, the receive buffer will be flushed...
Kolejny raz widzimy to samo. Zamiast dobrać kontroler do zadania, to próbujesz na siłę dopasować zadanie do kontrolera leżącego w szufladzie. Tutaj o tyle gorzej, że nawet się nie zastanowiłeś ile zasobów potrzebujesz, tylko od razu przyjmujesz 2 albo 3(!) kontrolery do w sumie bardzo prostej aplikacji. Moim zdaniem wszystko zrobisz na jednym uC i może...
Ło matko! ludzie co wy tu opowiadacie? Jarosław J - odnośnie twojego problemu ale już konkretnie: 1. Możesz najspokojniej w świecie przy komunikacji dwóch procków zrobić tak, że jeden będzie taktowany wewn oscylatorem a drugi np. kwarcem (Żaden problem) !!! 2. ale używaj sprzętowego UARTA w Bascomie a nie to co tutaj wszyscy razem wyczyniacie ;) 3....
Zapytaj profesora (ma tytuł profesora?) po co ta wiedza? 8253 ciężko już kupić (bi i po co, chyba, że ktoś chce składać PC XT), 8051 jest coraz mniejszy wybór. Biorą pod uwagę czas nauki i zmiany na rynku elektroniki, w szkole powinni uczyć o najnowszych uC a nie tego, czego za 5 lat nie będzie na rynku. Każdy współczeny uC zawiera bardziej zaawansowane...
(at)ElektrodaBot /* Program realizujący obliczanie i wysłanie przez moduł HC-05 (Bluetooth z interfejsem SPP, czyli RS-232) wyniku funkcji kwadratowej y = 0.3187x^2 + 2x - 7 na podstawie x odebranego wcześniej także za pomocą HC-05. Szczegóły: http://mikrokontrolery.blogspot.com/...
https://obrazki.elektroda.pl/8003230600_... Po umieszczeniu materiału o porównaniu częstotliwości Napiszcie co myślicie o takiej metodzie. Wróciliśmy do tematu https://obrazki.elektroda.pl/3296797900_... Wejście sygnału mierzonej częstotliwości podamy na TIM2 CH2 czyli PA1 na płytce oznaczone jako A1. Nie będziemy...
https://obrazki.elektroda.pl/4168190800_... Na wstępie znajduje się „tło historyczne” przybliżające przyczyny powstania projektu, jeżeli ktoś jest zainteresowany jedynie kwestiami technicznymi proszę przejść od razu do części poświęconej skróconemu opisowi konstrukcji sprzętowej. Jak to się zaczęło Odkąd sięgam pamięcią,...
https://obrazki.elektroda.pl/7186671300_... Od kilku lat programuję 8-bitowe mikrokontrolery AVR i przez ten czas zdobyłem trochę wiedzy na ich temat. Poniżej znajduje się kilka ciekawostek o tych układach. Jeśli znacie jakieś inne interesujące informacje, to piszcie. Najnowsza wersja artykułu jest również dostępna na mojej stronie:...
Bo program będzie akurat w tej chwili w innym przerwaniu o wyższym piorytecie Szukasz rozwiązania na około dla problemu który stworzyłeś sam? Złe założenia do algorytmu ot co.... w razie W jest DMA.... Ale nadal ciekawi mnie jakie przerwanie będzie trwało dłużej niż 200us co jest wiecznością dla STMa.
W przerwaniu USART_RXC musisz odczytać UDR niezależnie od warunków umieszczonych w kodzie, najlepiej, kopiując wartość tego rejestru do lokalnej zmiennej, tuż na początku funkcji. Jeżeli tego nie zrobisz, procesor zakolejkuje kolejne przerwanie. Piszę to na podstawie dokumentacji AVR8. W Twoim przypadku, gdy bufor odbiorczy się zapełni i nadejdzie kolejny...
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...
Jeżeli Twoja funkcja transmisji wygląda podobnie jak ta: ... niektóre przerwania przestają się wykonywać. A konkretnie są tracone, jeżeli były zgłoszone wielokrotnie w czasie, gdy nie zostały obsłużone. Tak na wszelki wypadek: http://mikrokontrolery.blogspot.com/2011... Rozwiąż to także flagami, a wtedy okaże się czy to było...
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...
https://obrazki.elektroda.pl/7460307300_... Obecnie mikrokontrolery posiadają wbudowane pamięci FLASH, które można programować za pomocą interfejsu ISP. Jest to zarówno szybkie, jak i wygodne rozwiązanie. Programowanie okładu odbywa się bowiem bez jego wyciągania z podstawki. Zresztą w tej chwili układów DIP jest coraz mniej, więc...
Pracowałem ostatnimi dniami nad małym kontrolerkiem, sterowanym przez RS232. Obsługa niektórych poleceń, wydawanych do niego, trwała nawet po kilka milisekund i... okazało się, że użyty przeze mnie 16F628A ma bufor wejściowy USARTa rozmiaru... 2 bajtów. Tak, to nie pomyłka :| Dlatego postanowiłem napisać obsługę cyklicznego bufora wejściowego - o rozmiarze...
https://obrazki.elektroda.pl/3252078300_... Poniższy artykuł przedstawia – krok po kroku – wykonanie niewielkiego, kieszonkowego oscyloskopu cyfrowego. Nie jest on tak dobry jak zwykły warsztatowy oscyloskop, ale z drugiej strony można zabrać go niemalże wszędzie. Poza tym – nie wszystkie projekty DIY muszą mieć sens....
Procedura "USART_Transmit" wykorzystuje sprzętowego USARTa ATmegi8. Działa ona w ten sposób, że najpierw sprawdza czy bufor w którym przechowywane są dane do transmisji jest pusty. Jeżeli nie jest pusty to czeka na jego wyczyszczenie, gdy stwierdza, że jest już pusty to wpisuje dana którą przekazujesz jako parametr do rejestru UDR, i transmisja odbywa...
Ale Kolego, SPRZĘTOWY bufor nadawczy/odbiorczy tego procesora ZAWSZE ma rozmiar 1 bajta. Tego nie da się zmienić - tak jest z punktu sprzętu i koniec. Aby stosować większe bufory musisz zastosować przerwania (RX_vect, UDRE_vect), bufory kołowe i zrealizować teoretycznie ograniczony tylko dostępnym RAM'em bufor programowo. Załączam kompletny przykład...
http://obrazki.elektroda.pl/1208484300_1... Projekt OpenMV ma na celu stworzenie niedrogiego i łatwego w obsłudze modułu wizyjnego, który dałoby się oprogramowywać w języku Python. Docelowo OpenMV ma stać się "Arduino wśród modułów wizyjnych", jak opisuje autor przedstawiający aspiracje tego projektu. Realizacja projektu rozpoczęła...
Witajcie moi drodzy. Chciałem zrobić komunikację po RS232, na początek w jedną stronę - z atmegi do komputera. Niestety, ciągle pojawia się taki błąd: http://obrazki.elektroda.pl/4311460800_1... Korzystam z zewnętrznego kwarca 16MHz bez kondensatorów. Takie mam fuse bits: http://obrazki.elektroda.pl/7171078000_1... Podłaczenia...
Witam serdecznie. Niedawno postanowiłem przesiąść się z Bascoma na C. Postanowiłem napisać bufor kołowy do wysyłania znaków przez USART. Znaki niby się drukują, ale, jeśli rozmiar bufora jest ustawiony na 2 bajty to po drugim znaku dostaje "śmieci", jeśli na 3 bajty, to po trzecim, itd. main.c http://obrazki.elektroda.pl/2199292400_1...
Witam, mam problem z nawiązaniem połączenia przez układ MCP2200. Jest to konwerter USART=>USB. Korzystam z programu z strony: http://mikrokontrolery.blogspot.com/2011... Kod programu: http://obrazki.elektroda.pl/3793960700_1... Wszystko robię tak jak jest opisane na stronie, po podłączeniu układu...
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...
[syntax=c]RCC_APB2PeriphClockCmd(RCC_AHB... ENABLE);[/syntax] Zdecyduj się, czy konfigurujesz szynę APB2, czy AHB?
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....
Teraz mam: [syntax=cpp] void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1,USART_IT_RXN... sie gdy bufor odbiorczy nie jest pusty { RxBuf[i++] = USART_ReceiveData(USART1); if(i>7){ USART1->CR1&=~(1<<2);// Odbiornik wylaczony USART1->CR1&=~(1<<5);//blok... przerwania odbioru i=0; j=0; for(l=0;l<=7;l++)...
Witajcie moi drodzy. Udało mi się obsłużyć (częściowo) klawiaturę matrycowa. Proszę o sprawdzenie kodu (kod bazuje na przykładzie dondu bo przez rs232 wysyłam to co kliknięto) http://obrazki.elektroda.pl/2692005700_1... 1. Co można ulepszyć/usprawnić? 2. Czy idea (oraz tryby pracy portów) są poprawne? 3. Czy wartość rezystora jest odpowiednia?...
Ogólnie to coś działa ale....... 1. Czemu dla takiego użycia ITOA wyskakują ostrzeżenia ? 2. Myślałem że jak zdeklaruję wielkość bufora mniejszą niż zmienna np http://obrazki.elektroda.pl/8716705500_1... [syntax=c]#include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "usart-lib/usart.h" void...
Pamiętaj, że rejestry SPI, w zależności czy to jest M/S, czy realizujesz przez USART, mają bufory. Jeśli więc coś nadajesz, a nie odczytasz SPDR, to ta wartość i tak tam jest, zostanie odczytana przy kolejnej okazji. Stąd możesz mieć opisane problemy z odczytem jakiś wcześniej przesłanych bajtów. Stąd też najlepiej albo jednocześnie zapisywać i odpisywać...
Poczytaj o instrukcji Config Serialin. To jest bufor wejściowy w USART w bascomie.
Porcje danych to okolo 10 bajtow. Czestotliwosc transmisji to okolo kilku minut wiec nie sadze zeby bufor byl potrzebny.
Próbuję uruchomić USART2 w STM32F0-Discovery, chodzi mi tylko o odebranie danych za pomocą przerwania i gdy wyślę z komputera jaką literkę to natychmiast ląduje w Default_Handler. Próbowałem różnych konfiguracji i nic. Konfigurację mam taką: [syntax=c]RCC->APB1ENR |= RCC_APB1ENR_USART2EN; RCC->AHBENR |= RCC_AHBENR_GPIOAEN; gpio_pin_cfg( GPIOA, 15, GPIO_AF1_PP_10MHz_PULL_UP...
Tak, że zostanie wykryte jako początek ramki. Skanujemy cały bufor odbiorczy, więc również dane.
To ten sam rejestr, tylko przy odczycie zwraca bufor odczytu, a zapis powoduje zapisem do bufora zapisu. Zobacz rejestr stanu USART i przeczytaj jego opis, a nastanie jasność :)
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
Przecież to nie działa. W przerwaniu timera wpychasz kolejno do UDR kilka danych nie sprawdzając, czy można to zrobić. Jeśli chcesz nadawać w przerwaniu timera, to musisz mieć przerwanie UART i (zapewne) bufor cykliczny.
usart bufor usart bufor kołowy atmega128 usart bufor
whitenergy zasilacz sagemcom dsi83 dekoder schemat zasilacza przedwzmacniacza
Pralka nie pobiera wody: przyczyny i diagnostyka Gotowe pliki projektów mebli szafek do SketchUp