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ć...
Więc w funkcji odbioru znaku jeśli bufor pusty zeruj zmienną c.
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 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)...
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...
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?
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...
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.
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...
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...
Witam ponownie, dziękuję za naprowadzenie. Jednak od razu nasuwają mi się kolejne pytania i nowo powstałe problemy. Odpowiadając na pytania: Freddie Chopin - założyłem, że zmienna typu double istnieje, ponieważ zadeklarowałem ją sobie i przy sprawdzania kodu debugerem w podglądzie zmiennych widniał właśnie mój wpis - zmienna typu double. A co do wysyłania...
Skoro bez przerwań wszystko działa poprawnie (nie licząc zgubionych znaków na USART1), wydaje mi się, że program jest zrozumiały dla uC oraz dla mnie. GPS - 3,3V GSM - 3,9V uC - 5V Wyprzedzając kolejne pytanie, stosuje konwerter napięć. Widzę, że rozmawiając w ten sposób niczego nie osiągnę. Może inaczej... Czy włączając przerwania [syntax=c]UCSR0B...
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...
Witam. Próbuję przesłać i odebrać znak pomiędzy atmega128 a putty. ATmega taktowana kwarcem 14.7456MHz. Korzystam z przejściówki USB<->RS232 (z atmega32 działa). RXD/TXD skrosowane. KOD: uart.c : [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include "uart.h" volatile char c_in; // odebrany znak...
Najnowszy uIP w wersji 1.0 ma dość ciekawe protosockety, niestety pojawia się problem z gubieniem danych przy zbyt szybkim ich napływie (mała ilość, rzędu 1-2kB ale napływające szybko). Na chwilę obecną nie udaje mi się zmusić stosu aby poczekał przed nadpisywaniem bufora. IwIP wygląda zachęcająco, zobacze czy da się go przystosować do avr :)
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, 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...
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ć...
Xmega niby jest super, ale jeżeli chcesz puścić dane przez port SPI (max. 8MHz, więc teoretycznie 200pxl), to nie masz bufora i pojawia się kwestia stabilizacji obrazu. Bufor ma tylko USART w trybie SPI, ale on pracuje z prędkością do 4MHz (100pxl/linię). Możesz użyć DMA do transferu danych na port, z którego uzyskasz kolory, ale... Prędkość DMA zależy...
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>...
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...
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...
Po pierwsze sprawdź co rzeczywiście ci ta kontrolka wyrzuca. Kolejna sprawa - zapis do LCD trochę trwa, niewykluczone, że gubisz znaki. Sprawdzaj stan rejestru statusu. Najprościej jest zrealizować odbiór znaków w przerwaniach i zapisywać kolejne znaki do bufora. Po odebraniu całości ustawiasz flagę gotowości i w procedurze głównej ją sprawdzasz i...
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ę....
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...
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ć...
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...
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...
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...
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...
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,...
Chyba czegoś nie rozumiem albo jestem tak topornie tępy. Jeszcze raz. Rozumiem że mam ustwić flagę TXCIE. Spoko. Czyli robie to tak: void USARTinit(unsigned int baud) { UBRR0H=(unsigned char){baud>>8}; UBRR0L=(unsigned char)baud; UCSR0B=(1<<RXEN0)|(1<<TXEN0)... UCSR0C=(0<<USBS0)|(3<<UCSZ0)... UCSR0B |= _BV(TXCIE);...
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...
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ć...
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...
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...
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:...
Przecież to co opisujesz to jest odbiór "po jednym znaku". Czy tobie chodzi raczej o całą liczbę mówiąc o "jednym znaku"? Jeśli tak to musisz sobie stworzyć bufor (tablica znaków), do którego będą zapisywane kolejne znaki. Gdy zbierze się kompletna liczba, wywołać na nim itoa . Pozdrawiam, GSM
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...
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...
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;...
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...
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...
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 bufor usart usart bufor kołowy
panel sterować nawiew mercedes prądnica pierścieniowa naprawa kosiarki
apple watch wyłączniki dotykowe
Plan instalacji elektrycznej motorówki – normy ISO, LiFePO₄, Victron, ochrona przed korozją VW Beetle 2008 1.6 MPI benzyna – samoczynne podnoszenie obrotów na biegu jałowym