A to widziałeś? https://forbot.pl/blog/kurs-stm32l4-term... https://controllerstech.com/stm32-uart-7... https://deepbluembedded.com/stm32-1-wire...
Hint : przesuniecia bitowe ( co_posuwamy_w_prawo>>o_ile lub co_posuwamy_w_lewo<<o_ile )... BTW Problem był również w nazwie przerwania (zamiast SIG_USART_RXC powinno być SIG_UART_RECV )
Mega16 będzie działać nawet przy częstot. 20-pare MHz, ale producent nie daje gwarancji, że stabilnie. Domyślam się, że te tabele z UBR są po prostu przedstawione jako uniwersalne dla AVRów, a niektóre z nich mają maks. częstotliwość producenta 20MHz.
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...
... Dlaczego tak się dzieje? :/ Dlatego, że przerwanie ISR(TIMER1_COMPA_vect) jest wywoływane co 128 taktów zegara, a wykonanie procedury przerwania timera1 zajmuje ~200 taktów. Po zakończeniu wykonywania przerwania od timera, gdy uC wraca do programu głównego, ma już ustawioną flagę od OCR1 i ewentualnie flagę RXC. Ponieważ timer "stoi wyżej" w hierarchii...
14:20:25.471> X 14:20:26.405> X 14:20:27.342> X 14:20:28.340> X 14:20:29.276> X 14:20:30.211> X 14:20:31.147> X 14:20:32.084> X 14:20:33.099> X 14:20:34.033> X 14:20:34.969> X 14:20:35.967> X Teraz widać że timer nie dochodzi do 1 sekundy. Ale te wartości markera czasowego pochodzą nie z programu lecz z systemu operacyjnego, tak? Więc włóż je sobie......
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ż...
To, co nazywasz "liczba" po polsku nazywa się "cyfra". Aby uzyskać wartość cyfry musisz odjąć od niej kod zera, czyli wartosc = znak - '0'; Obsługa przerwania odbioru transmisji powinna działać w min. 2 stanach: oczekiwania na cokolwiek i skanowania liczby. W stanie podstawowym po napotkaniu pierwszej cyfry zerujesz liczbę (albo i nie), zapisujesz w...
1. W jaki sposób piszecie kod do obsługi peryferiów występujących pojedyńczo w mikrokontrolerze? Np RTC, LCD, RNG, czy CRC. Najzupełniej normalnie, czyli jako zwyczajną klasę. Jeśli jest tylko jeden taki układ peryferyjny, to w projekcie po prostu mam jeden taki obiekt. Z pewnością nie bawię się w żadne singletony czy klasę w której wszystko jest statyczne....
(at)tmf - dziękuję za miłe słowa :) Właśnie takie było założenie co do grupy "docelowej". Myślę, że jeszcze długo ATmegi i ATtiny będą punktem startowym dla hobbystów ze względu na nawał informacji w Internecie i mocno zakorzeniony pogląd jakoby wszystko inne było drogie/trudne itd. W sumie chciałem, żeby w poradniku było trochę więcej nawiązań do...
Cześć, mam takie zadanie, w sumie nie tyle chciałbym żeby ktoś mi je rozwiązał co poprowadził. Korzystam z AT90USB1287 ale nie ma to dla mnie większego znaczenia później przełożyć taki program jeśli propozycje będą na inne :) Jestem totalnym amatorem na poziomie migiania diodek, więc proszę o wyrozumiałość. ----------------------------------------...
IRQ tester https://obrazki.elektroda.pl/3243423400_... IRQ Tester to proste narzędzie, głównie do testowania czasu odpowiedzi na impulsy, lub czasów międzyzboczowych dostarczonego sygnału. Program został napsiany na ukontroler AVR Atmega168, a jego głównym zadaniem jest funkcja multiwibratora monostabilnego, którego działanie polega...
Ja bym zadbał żeby tablica miała ostatni znak '\0' i zrzutował char A to nie jest tak, że tablica automatycznie dodaje na końcu NUL? Co znaczy zrzutował? Jestem bardzo początkujący. Na potrzeby tego projektu zacząłem zagłębiać się w C i avr, choć uruchomienie komunikacji szeregowej z VFD, obsługa PGA2310 po SPI i parę innych drobiazgów dało mi dużo...
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 -...
Cześć chcę napisać program obsługujący transmisję pomiędzy komputerem a mikrokontrolerem poprzez RS485. Wykorzystuje do tego celu układ max3483. Czytałem dokumentację ST w której proponowane są dwa rozwiązania co do zarządzania linią sterującą kierunkiem transmisji: 1. Wykorzystanie przerwania od USARTA-TC oraz przerwania od DMA TC. 2. Wykorzystanie...
eśli chodzi o czas samej pętli, to przyznam szczerze nie wiem jak zmierzyć. Timerem, ale tych w małych prockach brakuje. Skomplikowane programy na 8051 wykonywały pętlę główną w ok 15ms. Oczywiście program musi byc napisany z głową i nie może byc w nim "dealy" a obsługa peryferii (np wysyłanie po USART czy obsługa LCD) na przerwaniach.
Mam następujące zadanie; stworzyć projekt na laboratoria z mikroprocesorów. Męczę się z tym już od początku semestru i szczerze nie mam pojęcia gdzie robię błędy. Liczę na moc internetu i oczywiście odpłatnie na pomoc. Pełna specyfikacja projektu: 1. Komunikacja z komputerem za pomocą interfejsu USART z buforem kołowym. 2. Zaprojektowanie i implementacja...
Mam jeszcze takie pytanie. Czy komunikacja poprzez USART powinna działać w oparciu o przerwania czy w oparciu o zwykłe funkcje też może być? Chodzi mi oto czy w bardziej zaawansowanym projekcie nie napotkam później jakiś przeszkód i nie będę musiał przerabiać całości. Pozdrawiam Można zrobić to na oba sposoby z tym że na przerwaniach jest znacznie...
W programie będzie też obsługa USART na przerwaniach więc stwierdziłem, że im mniej przerwań tym lepiej . Z jaką prędkością ten usart, że inne przerwania będą mu przeszkadzać? Nawet jeśli tak jest, to jaki problemu użyć przerwań pseudo-wielopoziomowych?
Atmega 328P z kwarcem 18432000 (w specyfikacji mozna ja kręcić do 20MHz) spokojnie potrafi wygenerować trzy PWM przesunięte w fazie o 120 stopni z krokiem 256 z częstotliwością 50Hz przy tym nadając na USART o aktualnych warunkach jednego potencjometru. Pewnie że potrafi, ja na attiny 861 wygenerowałem 3 sinusy co 120 st z regulacją F od 20 do 250Hz...
Tiny 13 nie ma sprzętowego uarta ,więc programowy uart zawsze będzie blokował wykonywanie pętli głównej programu . Jego obsługę musi wykonać mikrokontroler tak jak program. Żeby to mogło działać to trzeba użyć przerwań i timera do obsługi uarta programowego a w czasie gdy ten liczy opóźnienia obsługiwać resztę . Tyle że najlepiej to takie rzeczy pisze...
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....
Analizując różne rozwiązania i potrzeby wymagane w zadaniu, aby nie uciekać się do RTOS, który to w AVR nie ma za bardzo sensu zrobiłbym tak: 1. zadanie transmisji do WS2812 2. zadanie generujące efekty 3. zadanie przełączania efektów Realizacja 1, wiadomo, USART i przerwania 2 - maszyna stanów w pętli głównej 3 - obsługa przycisku w pętli głównej Niestety,...
To każ dy będzie dobry. Może pomyśl np. o RS232. Większość AVR-ów posiada sprzętowy USART więc cała obsługa jest banalna.
Chciałbym użyć przykładowego bootloadera z AES z Microchipa AVR231 [url=http://ww1.microchip.com/downloads/... ]Link (oryginalnie dla Atmega 328PB) Jednak chciałbym go używać na Atmega4809. Najpierw zrobiłem drobne przeróbki i przeprowadziłem testy na 328P, wszystko działało poprawnie. Następnie przerobienie obsługi USART dostosowując...
Masz opóźnienia- tyko ich na pierwszy rzut oka nie widać. Obsługa USART- czekasz w pętli while aż coś się pojawi w buforze UCSRA. A można to też zrobić w przerwaniu- po ustawieniu bitu RXCIE w UCSRB. Podobnie przy nadawaniu. Bo przy takiej obsłudze USART jak masz zwiększenie częstotliwości zegara pewnie nic nie da. Raczej szybkość transmisji może mieć...
Mógłbyś może zdradzić rąbka tajemnicy? Siedzę nad tym 2h i zaczyna mnie to lekko mówiąc denerwować. Patrzę na manual, kody z internetu i pustka. Zegary od portów są załączone USART działa, ale przerwania nie.
Dodano po 1 Dobra... Chyba mam źródło problemu... Chyba wina Windowsa, zaniosłem wszystko do kumpla, on ma se7en 64bit, ja 32... Po zaprogramowaniu u Niego działa wsio elegancko, u mnie nie... Winda aż tak krzaczy? :O
W tutorialu jest obsługa USART bez wykorzystania przerwań, a ty próbujesz odebrać znak w przerwaniu. Wstaw instrukcję sei(); przed pętlą while i sprawdź co się dzieje. Jeśli nie pomoże, w poniedziałek podeślę działający kod na przerwaniach.
Witam od dwóch dni mam problem z USART na stm32f4discovery. Otóż napisałem sobie prosty programik na bazie tego przykładu pod stm32f4discovery ze strony Freddiego Chopina, tyle że sam napisałem sobie konfigurację zegarów itd. Zrobiłem konfigurację USART 6, napisałem funkcję do wysyłania jednego bajtu oraz całego słowa i wrzuciłem sobie wysyłanie bajtu,...
Witam, Mam problem. Po podłączeniu wyświetlacza WC1602a do mojej płytki uruchomieniowej świeci się w nim tylko podświetlenie. Vss i Vdd pin podłączyłem pod zasilanie i masę, V0 i R/w również pod masę, RS i E odpowiednio pod PC0 i PC1, DB0..DB7 pod PB0..PB7 i oprócz tego podłączyłem zasilanie podświetlenia. Niezależnie od tego czy zasilanie wyświetlacza...
Pomyśl, ile czasu zajmuje pomiar i jak często przetwornik chciałby wywołać przerwanie. Potem zastanów się, ile czasu zajmuje obsługa przerwania. Samo to nie jest może powodem błędu, który obserwujesz, ale z pewnością nie ma sensu i jest błędem koncepcyjnym projektu. Niezależnie od tego, w jakim trybie pracuje ADC, czytaj wynik w przerwaniu timera, np....
Po skonfigurowaniu UART-a mam TXE w stanie 0 a RXNE w stanie 1 bo: USART_ITConfig(USART1,USART_IT_RXNE,ENAB... Przynajmniej to chciałem uzyskać pisząc ten kod:) Kod debugowałem i nie zacina się, wychodzi normalnie przez ostatni return w funkcji USART1_TxBuf. Sprawdziłem też że moja obsługa przerwania USART1_IRQHandler się nie wywołuje. Deklaracja TxIndex:...
Poprawiłem formatowanie kodu. Dodano po 1 Niby jaki odstęp pomiędzy bajtami ma dawać taka pętla? Potrzebujesz odstępu czasowego - użyj przerwania timera. Odstęp czasowy narazie realizuję blokującym whilem, później być może przerobię to na przerwania timera. Przed wysyłką 8 bajtów z prędkością 115200 wysyłam jeden bajt z prędkością 9600 Zrobiłem trochę...
Rozumiem że jeżeli nie ustawiasz żadnych bitów w rejestrze UCSRC to format transmisji to: 8 bitów bez bitu parzystości z jednym bitem stopu i takie są ustawienia transmisji w komputerze?. Sama inicjalizacja i obsługa USART wygląda ok. Inna jest kolejność pinów w wtyku RS232 niż podane na schemacie ale ich numeracja jest ok. Czyli jeżeli podłączane są...
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...
Witam Czy w mikrokontrolerach ATMEL występuje instrukcja która pozwala na realizacje krosowania wejśc-wyjść bez udziału programu, przerwań. Chodzi mi o to że chcę np. aby linie PA0 - PA1 wewnętrznie były połączone. To co wchodzi na PA0 żeby wychodziło na PA1. Programowa obsługa tych wejść nie wchodzi w rachube z powodu obsługi przerwań od USART i braku...
Można użyć USART w trybie SPI, bufor działa, ale niewiele to zmienia. Jeśli obsługa przerwania (łącznie z czasem potrzebnym na obsługę hardwarową - to jakieś 4-6 taktów) zajmie więcej niż owe 32 takty, to problem będzie się kumulował, aż dojdzie do przepełnienia bufora i koniec zabawy. Można zrobić tak jak piszesz - w pierwszym przerwaniu czekać na...
sprawdziłem w dokumentacji. FIFO ustawiane jest w trybie z DMA, którego nie używasz. Więc ten aspekt odpada. Dla uporządkowania tematu. PC-t wysyła do stm32f1.. ramkę z 8 bajtów z 1 bitem stopu bez parzystości. 8 bajtów wyjechało i masz je w buforze odbiorczym pc-ta jako echo. 1. czy arm widzi tylko wybrane bajty ? 2. czy arm widzi wszystko? 3. czy...
Freddie: to samo można napisać o dowolnym peryferialu, np. USB czy Ethernet - czytać manual, zrozumieć i pisać kod. ;) I2C w STM32 wymaga "wejścia w temat" - to nie jest tak prosty peryferial jak USART czy SPI, chociaż oczywiście prostszy niż USB. Obsługa przedostatniego i ostatniego bajtu pakietu odmienna od wcześniejszych jednak wnosi trochę zamieszania.
Co mogę na to zaradzić? Całość wykonuję w pętli while. Odpowiedź jest banalna - napisać ten kod porządnie. Przede wszystkim multipleksowanie zawsze robi się w oparciu o timer i przerwania. Nigdy nie robi się tego w pętli. Druga kwestia - obsługa DS18x20 przez bit-banging to nieporozumienie. Tak pisze się kod na szybko, w praktyce, o czym właśnie się...
Najlepsza metoda to obsługa RS-a w przerwaniu od UARTA.
Witam, Mam problem a USARTem w STM32F103. Bardzo rzadko, ale zdarza się że gubi znaki. 1. Sprzęt: SIM900 <---UART4---> SRM32F103 <---USART2---> PC 2. Program: Inicjalizacja UART4: http://obrazki.elektroda.pl/6434457100_1... Opis: (1) - Zapisz każdy odebrany znak do bufora i wyślij do PC (2) - Jeśli trafisz na sekwencję http://obrazki.elektroda.pl/6596964500_1...
pisać na piechotę całą procedurę mija się z celem bo za mało mam pamięci w tym attiny myślałem że są jakieś proste inne sposoby a z komend open próbowałem chyba że zrobiłem pomyłke mam tak ( Open "comb.2:2400,8,n,1" For Output As #1 ) wywala mi te dwa błędy 202 i 1 mowa oczywiście cały czas o bascomie Jeśli masz USI to obsługa za jewgo pomocą USART...
Taka obsługa przerwania: [syntax=c] void USART2_IRQHandler(void) { uint8_t a=USART2->DR; //odczyt znaku if (a>=97) a=a-32; //Jeśli mała to duża while ((USART2->SR & USART_SR_TXE)==0); //Sprawdzenie czy usart gotowy do wysyłki (właściwie to czekanie, aż gotowy będzie) USART2->DR=a; //wysłanie znaku } [/syntax] nie jest najlepszym pomysłem.
(at)lehastar A co jeśli w programie występują przerwania? W 1-wire musisz generować impulsy od kilku do kil;kunastu mikrosekund, z łatwością obsługa przerwania może być dłuższa co zrujnuje całą transmisję 1-wire. W dodatku niepotrzebnie blokujesz procesor.
Na procesorach bez wsparcia sprzętowego dla USB jego uruchomienie jest bardzo trudne i nieefektywne, a osiągane transfery są żałosne. USB jak każdy złożony protokół składa się z kilku warstw - interfejs sprzętowy zapewnia realizację warstwy elektrycznej i łącza, wraz z podstawowymi elementami wymiany danych - odbiór i nadawanie pakietów, enumeracja...
Witam! Musze w dość krótkim czasie (około 1.5 miesiąca) nauczyć się programowania procesora ATmega128. W związku z tym pytanie: gdzie można znalezć przykładowe programy pod ten procesor np. inicjalizacja USART i transmisja w trybie asynchronicznym, obsługa przerwań zewnętrznych, obsługa magistrali I2C itd. Najlepiej żeby były w asemblerze i C :-D Dzieki....
Ja tylko zacytuję mówj post w tym wątku z 18 lutego: "Do zaprogramowania tego przyda Ci się taka instrukcja: akt_bufor ^= bufor1 ^ bufor2; W ten sposób obsługa przerwania nie musi zawierać rozejścia na przypadek z buforem 1 i buforem 2 - zawsze wykonuje tę samą liniową sekwencję instrukcji."
Musisz więc w loop() sprawdzać stan wybranego pinu funkcją digitalRead() Naliczyłem 17 delay, których czas ustawiony jest na 100ms. Daje to łącznie 1,7sekundy i może być tak, że po takim czasie program zareaguje na zmianę stanu wejścia. Pierwsza rzecz jaką bym zrobił to wywalił delay i sterowanie zrealizował na przerwaniach od timera. Przy takim podejściu...
esp8266 usart przerwa usart usart wskaźnik
lexia sterowniki interfejsu volvo silnika klocki hamulcowe wymiana
mikser ręczny analizator widma
Seat Ibiza 2004 – centralny zamek z kluczyka otwiera tylko przednie drzwi, tylne nie reagują Piaggio X8 125 2006 – demontaż iskrownika i impulsatora krok po kroku