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...
Witam, Tak jak w poprzedniej odpowiedzi pisałem USART działa. Jednak pojawił się problem, że nie działają mi przerwania w USART. Za pomocą kodu: ;***************************************... USART0_Receive: ; Odbiór USART0 ; czekaj aż bufor odbiorczy będzie pełny sbis UCSR0A, RXC0 rjmp USART0_Receive ; załaduj dane z rejestru...
Różnica jest olbrzymia. Napisz program wysyłający dane i przeanalizuj go w sytuacji, gdy masz bufor i gdy go nie ma. Jaka jest z jego punktu widzenia? I tak może zapisać jeden bajt na raz, tak że obsługę dosyłania kolejnych musi napisać sam. A tak przy okazji czy atmega128 ma tryb usart spi mode? Bo datasheet o tym milczy (a bit 7 rejestru, kóry powinien...
40 linii to tylko 5 portów a ATmega128 ma ich przeszło 6 czyli w zupełności Ci wystarczy. Niektóre porty mają możliwość generowania przerwania jak się zmieni ich stan ale przy tej rozdzielczości (5ms) wystarczy skanowanie wszystkich wejść a po wykryciu zmiany zapisać bieżący czas w buforze. Po zerwaniu się wszystkich przewodów cały bufor możesz wysłać...
A z jakiego terminalu korzystasz? Bo na obrazkach masz ustawienia portu tylko. Kiedy korzystasz z usartu nie musisz ustawiać kierunkowości portu. Po włączeniu RXEN i TXEN piny te automatycznie są wykorzystywane przez usart i procek sam nimi steruje (przynajmniej w usart0). A dlaczego nie korzystasz z usart0? Wykorzystujesz go juz? uint8_t uart_getchar(void)...
Funkcja czekająca na odpowiedz powinna być odporna na brak jakiekolwiek odpowiedzi. W przypadku braku odpowiedzi z modemu Twój kod się "zapetli". Jak wygląda kod usr0_getc()? Nie widzę związku między ISR a tą funkcją. Zakładam również, ze flagi (flagGotLine i pozostałe) zadeklarowales jako volatile. Postaraj się zaimplementować pkt. 4 z mojej poprzedniej...
1. Jakie prędkości masz po obu stronach? 2. Nie możesz tego zrobić sprzętowo? 3. Programowo robisz odbiór i nadawanie na przerwaniach i przepisujesz z jednego bufora dane do drugiego... 4. Jakie funkcje ma pełnić Atmega? Czy ma to być tylko monitor połączenia czy co?
Witam! Stawiam na błędne sterowanie buforami. Najprawdopodobniej w jednym momencie masz wysterowane co najmniej 2 odbiorniki RS485 i dochodzi do konfliktu poziomów. Proponuję odpiąć wszystkie RS485 prócz jednego i testować, albo po prostu podglądnąć analizatorem wszystkie wyjścia buforów... Pozdrawiam! Sławek
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...
Witam, Mam następujący problem. Buduje sobie lokalizator. Przez USART0 komunikuję się z GPSem (GPS wysyła dane co 1s) i tu komunikacja przebiega jak należy. Natomiast przez USART1 komunikuję się z GSMem. W tym przypadku wysyłanie działa poprawnie, natomiast odebrane dane zawierają tylko dwa pierwsze i dwa ostatnie znaki. Sprawdzałam procka RealTermem...
A jak wygląda u Ciebie procedura inicjalizująca USART'a? Jeśli chodzi o odbieranie pojedynczych znaków to tak właśnie działa. Bufor w Atmedze np. Atmega8 jest jedno bajtowy. Najprostszym rozwiązaniem jest stworzenie programowego bufora.
Pisałem że jest 1 usart! Narazie robie sobie taki mały prototyp, wszystko bedzie na pcb nie ma maxa bo to na poziomach 3V3.Zrobie taka mała plytke z rezystowarmi i sprawdze a jak nie wyjdzie to bede robil z buforem. Ale z tym buforem pod reset chyba jest najlepsze wyjście.
Musisz całkowicie zmienić obsługe slave. Po pierwsze musisz wprowadzić synchronizację, czyli machać linią SS. Po drugie odbiór w slave należałoby oprzeć na przerwania SPI - SPI nie ma wielostopniowego bufora, kolejne bity nadpisują poprzednie. W efekcie musisz mieć pewność, że zdążysz z odbiorem. To w miarę gwearantują ci przerwania, na pewno nie delaye...
A kompilator nie krzyczy ostrzeżeniami? Twoja funkcja Usart_wysylanie() przyjmuje na wejściu unsigned char, a w wywołaniu przekazujesz wskaźnik na char. Normalnie kompilator rzuca ostrzeżeniem. Teraz tak - Usart_wysylanie() przyjmuje na wejściu bajt danych binarnie i wysyła jego wartość tekstowo - nic dziwnego, że nie da się wysłać liczby wiekszej,...
Witam! Borykam się z następującym problemem. Przez USART1 pobieram dane z GPS i chce je przesłać dalej za pomocą USART0 (tymczasowo). Problem w tym, iż nie zawsze działa pobieranie odpowiedniej ramki ($GPRMC) Zrzut ekranu i kod programu poniżej.. proszę o jakieś wskazówki. Przerwania dla USART wydaje mi sie że działają poprawnie, dlatego nie załączam...
http://obrazki.elektroda.pl/6286418300_1... Zmieniłem na 8MHz, przebudowałem, wgrałem flash z fuse. UBBR odczytany z tabeli noty. Dalej nic, dioda TXD na płytce miga tylko gdy wciskam znak z klawiatury. W ogóle brak wejścia w przerwanie ( próbowałem leda zapalić). Dodano po 11 http://obrazki.elektroda.pl/5106256200_1...
Na AVR float==double - zmienne zmiennopozycyjne o rozszerzonej precyzji nie są obsługiwane przez AVR-gcc. Twój kod wydaje się prawidłowy, pokaż jak wygląda funkcja usart_tekst. Ew. zobacz w debugerze jak wygląda bufor po sprintf. No i pamiętałeś o dołączeniu libm.a i libprintf_flt.a? Do linkera przekazujesz -Wl,-u,vfprintf? Bez tych bibliotek sprintf...
Tak wiem o tym wyłączyłem. Dodano po 3 Trochę to trwało ale się udało.Nie wiem czy źle deklarowałem prędkość transmisji czy co ale działa to najważniejsze. Dużo pomógł kod dla UART0: [url=]http://www.elektroda.pl/rtvforum/t... [syntax=cpp] #define BAUD 19200 # define F_CPU 16000000 #define MYUBRR F_CPU/BAUD/16-1 #include <util/delay.h>...
Absolutnie nie posiadam przykładów w Bascom, mam tylko Helpa i co nieco pamiętam, co było juz na forum... ;) Na codzień używam asm - ma mniej poleceń do zapamiętania ;) Pewnie w ATmega128 bedziesz potrzebował użyć URXC1 zamiast URXC . Ostatnio, jak oprogramowywałem odbiór USART, to zrobiłem bufor w RAM "okrężny", z którego w wolnej chwili procedurki...
Jak już wcześniej kolega bobbyAIR zauważył aktywne jest przerwanie od odebrania danych/bajtu... RXCIE Ty uaktywniłeś globalne zezwolenie na przerwania... Dokumentację czytałeś ale coś jej nie rozumiesz... Dopisałeś funkcję które mają odbierać dane... Ale one czekają aż dane pojawią się w buforze... Odbieranie danych w przerwaniu z założenia ma przerwać...
Przez buforowanie transmisji... Po odebraniu pierwszego znaku odpalasz timer i zaczynasz ładować kolejne znaki do tablicy... Przy każdym następnym znaku resetujesz timer... Jak string się kończy timer się przepełnia i generuje przerwanie...
Witam! Nie umiem sobie poradzić z uruchomieniem kodu. Myślę, że temat książkowy. Mam błędy w programie który próbuję uruchomić w celu dalszej edukacji w C. Nie znam jeszcze dokładnie w tym języku wszystkiego, więc zwracam się o pomoc, jeżeli to możliwe, aby uruchomić ten projekt. Dodaję kod i plik z builda. Poprawiłem tytuł, formatowanie postu i pisownię....
Kiedy zgrywam mój program dzieją się dziwne rzeczy, kiedy programator jest podłączony do SPI i LPT po włączeniu robota LCD wyświetla napis, który jest ustawiony w nieskończonej pętli programu (1.jpg w załączniku) Kiedy programator nie jest podpięty robot po włączeniu włacza LCD, ale nic nie wyświetla. Kiedy bez podłączonego programatora podłącze kabel...
Witam serdecznie, mam mały problem z moim urządzeniem. Zbudowałem kiedyś płytkę ewaluacyjna dla Atmegi128, nigdy nie miałem z nią większego problemu. Mam teraz jednak problem. Jak zawsze chciałem ją oprogramować ale cos jest nie tak. Poniżej zamieszczam kod i tłumacze o co mi chodzi. #include <avr/io.h> #include <avr/interrupt.h> #include...
Witam, mam problem z połączeniem po USARCIE tych dwóch procesorów. Sprawa wygląda następująco: atmega1284p ma być docelowo masterem, wysyła ramkę i w odpowiedzi dostaje ramkę zwrotną od atmega8. Obsługa ramek nie jest jeszcze napisana, na razie wysyłam 8 bajtów atmegą1284p i jeżeli wszystkie bajty zostają poprawnie odebrane, to atmega8 odsyła mi 11...
Teraz udczyt masz jak zwykle dwie możliwość pulling i przerwania - pulling jest prościutki unsigned char USART_Receive( void ) { /* Testujesz flagę RXC w rejestrze UCSRA */ while ( !(UCSRA & (1<<RXC)) ) ; /* I czytasz z UDR jak w SBUF w 51*/ return UDR; } a teraz z przerwaniami :) Tutaj podobnie jak...
Witam! Może pomoge, o to mój kod do obsługi USART1 dla ATmega128 char __USART1_buf_RX[50]; char __USART1_buf_TX[50]; char __AT_comand_buf[20]; #define __CR 0x0a #define osc_freq 16 void USART1_ini(uint16_t __baud, uint8_t __parality, uint8_t __stop)// __baud-prędkosć transmisji w b/s // __parality bit parzystości 0-tak...
Witam, Niedawno wpadł w moje ręce wyświetlacz 4.3 cala z rezystancyjnym panelem dotykowym oraz procesorem graficznym FT810. Pierwsze co to poszukałem sobie informacji na ten temat oraz znalazłem książkę Pana T.Francuza oraz dołączone do niej biblioteki dla układów FT8xx. Przykłady są napisane dla AVR i ARM i wydawało by się że to formalność by napisać...
Koledzy zachęcają Cię, do użycia xmegi, którą ja też lubię. Jednak jestem sceptycznie do tego nastawiony, ponieważ wszystko jest fajnie dopóki chcesz mieć obraz mono. Ale pytanie czy po to budujesz urządzenie zdolne współpracować z teoretycznie dowolnym monitorem, aby wyświetlać na nim czarno-biały obraz w rozdzielczości 200x480? Xmega niby jest super,...
na jakiej diodzie???? tzn gdzie ją dałeś? ;) ja uzyskiwałem przy takim układzie prędkości transmisji 115200 przy kwarcu 11.059.200 Hz. Schemat połączeń uC z SN75176 mam dokładnie taki jak ty, poza tym że tylko 1 rezystor 120R. A tak nawiasem mówiąc - o jakim czsie przełączania mówisz? przecież przed wysłaniem ustawiasz stan wysoki i po zakończeniu wysyłania...
Wkleje plik includowany z obsługa LCD, który stosuje oraz czesc programu głownego: LCS.asm: ;=======================================... ; Obsluga LCD zgodnego z HD44780 dla 8-bitowej szyny danych v1.0 ; Nie obsluguje BUSY flag ani odczytu adresu z LCD ;!!! Znak lub komenda do wyslania do LCD przekazywane sa przez...
Problem już prawie rozwiązany, gdyż moja lista z projektami świeciła się jak choinka za sprawą tych samych, złych bibliotek. Poprawiłem już prawie wszystko, ale chce się upewnić co do jednego. Czy w kodzie który zamieszczam wystarczy usunąć "||" czy coś tam powinno być? W pliku źródłowym na jakiejś stronie internetowej też tego nie ma, więc nie usunąłem...
Skonfigurowałem sobie na ATmedze USARTa i pięknie wysyła dane:) w programie do kontrolera biorę sobie liczbę unsigned int i za pomocą itoa zamieniam ją na stringa. Nie wiem jak teraz odebrać te dane w Visual Basicu. Wcześniej robiłem to tak: Do DoEvents Loop Until MSComm5.InBufferCount >= 8 TextBox1.Value = MSComm5.Input Czekałem aż w buforze wejściowym...
OK, dzięki , nie wiem jakim cudem tego nie zobaczyłem w specyfikacji a ten kod mógłby mi ktoś sprawdzić, wydaje mi się, że z tym rozjaśnianiem nie mogłem nic zepsuć. #define UART_BAUD_RATE 19200 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC&... ((F_OSC)/((UART_BAUD... void USARTInit() { //Set...
Moim zdaniem jest prostsza metoda. Tworzy się dwa indeksy i tablice buforującą. Oprogramowanie zapisuje znaki to bufora i zwiększa pierwszy indeks (umownie indeks programowy). Po takim zapisie przed wyjściem zezwala na przerwanie. Przerwanie z kolei jak wykryje, że bufor programowy jest różny od drugiego buforu (umownie bufor sprzętowy) to z aktualnie...
Mam problem z wysyłaniem sms, wykorzystuję atmege128 i moduł sim900 na płytce Evb v1.01_pcb , proszę o rzucenie okiem na kod gsm.c [syntax=c]// PLIK: gsm.c // Dołączone biblioteki #include <avr/io.h> // Biblioteka obsługująca peryferia mikrokontrolera #include <avr/interrupt.h>// Biblioteka obsługująca przerwania mikrokontrolera #include...
Nie, SPI może współpracować z DMA, ale nie musi. Akurat łączenie ENC z XMEGA poprzez SPI jest niewygodne, bo SPI nie ma bufora nadajnika i cała transmisja jest dużo wolniejsza niż mogłaby być. Lepiej w charakterze urządzenia master SPI wykorzystać USART w trybie master SPI - ma bufor nadajnika dzięki czemu uzyskujesz ciągły transfer i bez problemów...
MNCHH z jakiegoś powodu broni się przed przerwaniami (...)Wydawało mi się że umieszczenie procedurki realizującej ECHO w kodzie głównym wydaje mi sie najprostsze, tym bardziej że w przerwaniach nie najpewniej się jeszcze czuję. ... Tak więc przerwania mogą być o ile będą wytłumaczone, ale z tego co mogę wysnuć z innej części maila, to że echo ma być...
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:...
W AVR, USART ma także bit informujący o fizycznym wysłaniu bajtu, a nie tylko o wolnym buforze nadawczym. Zdaje się to TCX. Pamiętam, że może generować przerwanie. Dodano po 47 procesor przerzuca go do niewidocznego bufora nadawczego opisanego w dokumentacji i zaczyna go transmitowac Zgadza się, AVR mają 2 bajty FIFO nadawczego i odbiorczego. STM32...
To skoro Serial Monitor wysyła liczbę którą wpisujesz jako ciąg znaków , to nic nie musisz dzielić. Musisz za to odebrać wszystkie znaki, na razie odebrałeś jeden... Bezpieczniej jest abyś stworzył sobie bufor na odebrane znaki i dopiero na nim wykonywał operacje. Pozdrawiam, GSM
Mógłbyś podesłać jakiś link na ten temat? :) Mam natomiast problem podczas słania z włączonym samym pinem nadającym. Otóż wg tego co napisano, przy wyłączonym odbiorniku, flaga RXC w rejestrze UCSRnA będzie automatycznie zerowana, a odebrane dane automatycznie uznane za odczytane z rejestru UDR - no chyba że źle coś zrozumiałem? Tak więc nie sprawdzam...
jeśli macie tego typu znaczki: řţř to najprawdopodobniej macie źle ustawioną prędkość w btm, u mnie nie wiem jakim cudem była na 9600 a ja cały czas próbowałem na domyślnej 19200. teraz mam taki problem, napisałem poniższy kod na ATmega168 z kwarcem 20 MHz. http://obrazki.elektroda.pl/5665484900_1... ale jak wepnę moduł VGJ elektronika z btm-222,...
Wszystko zaczyna się łączyć w jedną całość kiedy "odkryłem" USART w atmedze. Początkowo niemądry chciałem sam stworzyć cała transmisje szeregową zwyczajnie zmieniając stan jednego z pinów na porcie. Mam w związku z tym pytanie: Czy jeżeli ustawiłem długość słowa na 8bitów to bufor UDR przyjmie każda 8bitową liczbę? Powiedzmy coś w tym stylu: int dana;...
(at)nsvinc ad 1. Zawsze dobrze mi się z putty pracowało. ad 2. przepisana funkcja z noty katalogowej Atmela: void USART_Tx(unsigned char data) { while (!( UCSR0A & (1<<UDRE0))); // Wait for empty transmit buffer UDR0 = data; // Put data into buffer, sends the data } ad 3. na indeksie tablicy ad 4....
witam, próbuję osbłużyć akcelerometr ADXL345 po i2c, ale komunikacja zawiesza się po pierwszej komendzie i w ogóle program nie wchodzi do pętli while(1). jak zakomentuje linijkę: i2cTransmit(ADXL345, POWER_CTL, 0) w mainie; to ATmega wysyła po USARCIE dane bez problemu, w przeciwnym razie zawiesza się. o to listing programu: ATmega168 + 20 MHz, na samym...
1. No ale tu blokujesz działanie całego procesora na niepotrzebnie długi czas. Przy 9600 nadanie 1 bajtu to wieczność. Procesor może wtedy zatańczyć kankana. I to 2 razy ;) 2. Bo można to szybciej zapisać jako: "\r\n" w ciągu formatującym wyświetlanie liczby (printf) 3. Oj wygląd się liczy. I to bardzo. Jak napiszesz program liczący tysiące linijek...
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...
http://obrazki.elektroda.pl/9860418100_1... Witam Na początku pragnę się ze wszystkimi przywitać - jest to mój pierwszy artykuł na tym forum, więc jak coś zmaściłem, to proszę o litość :) Chciałbym przedstawić Wam moją wersję programatora STK500v2. Przy jej wykonaniu bazowałem na projekcie ze strony: http://we.easyelectronics.ru/Asticon/stk...
Witam, mam następujący problem - staram się dołączyć do Atmegi 64k pamięci sRAM, konkretnie 2x 61256-15. Póki co procek taktowany wewn. rezonatorem 8MHz, docelowo ma być kwarc 16MHz (jeszcze go po prostu nie wlutowałem). Wyłączona zgodność z Mega103, JTAG też. Schemat tutaj: http://obrazki.elektroda.pl/8691151200_1... Przy czym bufor...
usart atmega128 atmega128 usart usart bufor
zamarzać butla czujnik przepustnica mitsubishi wałek ładujący
mikrokomputer cobra1 przewod przelewowy wtryskiwacza
Technix SV200 – znaczenie komunikatu ver 2,33, firmware, uruchamianie sterownika CADe SIMU - Tłumaczenie i zastosowanie w Polsce