A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
1. Poza tym zapis EEPROM w przerwaniu to też niedobry pomysł - to kilka ms/zapis. Od tego EEPROM generuje swoje przerwania, żeby zapisy buforować i zapisywać do EEPROM niezależnie. 2. Poza tym mieszanie ISR i SIGNAL czyli starej i nowej obsługi przerwań tez nie jest zalecane. 3. Wysyłanie znaku przez USART w obsłudze przerwania też może nie być dobrym...
Zacznijmy od pytań: 1. Które bity według Ciebie ustawiłeś w TCCR2B : Autor tematu pisał, że stosuje gotową bibliotekę do obsługi jakiegoś panelu dotykowego. Z tego, co zrozumiałem, to przerwanie to znajduje się we "wnętrzu" tej biblioteki. Takie efekty są oczywiście normalne, gdy ktoś mało świadomy tego, co się dzieje w jego programie stosuje gotowe...
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...
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/9079980500_1... Na wstępie chciałbym przybliżyć, skąd taka a nie inna nazwa nadana przeze mnie temu projektowi. Prace rozpoczęły się w momencie zapotrzebowania na minimum dwa zsynchronizowane generatory małej częstotliwości. Ponieważ zakres przestrajania jaki mnie zadowalał ograniczał się do 100Hz przy rozdzielczości...
Wszędzie gdzie masz wywołanie USART_RX_vect wstawiasz USART0_RX_vect gdy chcesz używać UART0 lub USART1_RX_vect gdy używasz UART1. Analogicznie wszystkie inne przerwania i rejestry, nazwy mogą nie być tylko takie że cośtam0 lub cośtam1 bo czasami jest cośtam0cośtam, więc wrzuciłem Ci tu wszystkie. No nie ma chyba wielkiej filozofii dopisać 0 lub 1?...
"Nowe" czyli od Xmega i nowsze AVR mają mozliwość priorytetu przerwania. Poprzednie miały ustalony. Nie wiem jaki to AVR, ale jeśli ustawisz Timer i przerwanie od niego to jak będzie w przerwaniu to oczywiście zauważy potem flagę przerwania z USART, ale może być za późno, dlatego jeśli nie trzeba, to się przerwań od wszystkiego nie uruchamia. Rzadko...
Witam, Może wiecie gdzie znajdę opis znaczenia poszczególnych bitów specjalnych rejestrów Atmega8 - chodzi mi przede wszystkim o bity i znaczniki przerwań od USART'a (flagi) i Timerów - w pdf'ie tego nie widziałem? I jeszcze jedno, skoro ta Atmega posiada sprzętowy I2C to czy Bascom korzysta z programowej obsługi tego protokołu tak jak w przypadku 89C2051...
Może ktoś pomoże, dlaczego usart atmega 128 nie wysyła nic na wyjście RS TxD. Uart jest ustawiony, po wpisie do UDR0 nie wychodzi nic na wyjście TxD, nie wchodzi również w obsługę przerwania od nadajnika. SP. oto program: [syntax[syntax=asm] .nolist .include"m128def.inc" .list .defAL = r24 .defAH = r25 ;akumulator .equ SYS_FREQ_HZ = 8000000 .equ RS232_BAUD_RATE...
Używam Timera1 z Atmega164P w trybie CTC, Atmega ma kwarc 16MHz, interesujący kawałek programu wygląda tak: Konfiguracja Timera: void Timer1_Init(void) { DDRD |= (1<<PD7); // PD7 wyjście PORTD |= (1<<PD7); // PD7 <= 1 TCCR1B = (1<<WGM12)|(1<<C...
Witam forumowiczów, Sytuacja wygląda tak, że z jednostki nadrzędnej słane są ramki danych, Po każdej ramce jest szczelina czasowa tak aby nasza ATmega zdążyła odpowiedzieć, Mamy Atmega16 kwarc 16MHz i transmisje 57600 (w przybliżeniu), Gadamy przez RS485 tak, że między ramkami jeszcze przełączam linie bufora, Steruje równocześnie buforem wejścia i wyjścia...
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...
Wysyłanie: // wcześniej musi być: // UCSRB &= (~(1<<TXCIE)); // UCSRB |= ((1<<UDRIE)); // UCSRB |= ((1<<TXEN)); ISR(USART_UDRE_vect) { UDR = ZmiennaDoWyslania; // wyłączenie przerwań od możliwości załadowania bufora UCSRB &= (~(1<<UDRIE));...
Witam, Moja przejściówka USB - RS232 okazała się być jakimś chińskim szajsem więc nie mogę chwilowo sprawdzić poprawności kodu. Czy ktoś mógłby rzucić okiem i stwierdzić czy poniższy kod ma szansę funkcjonować? ATmega jedynie odbiera jeden bajt po RS'sie i w zależności od tego czy jest to 1 czy 0, ustawia cały port C w stan aktywny bądź niski. Mikrokontroler:...
Przy UART mamy 3 bity na ramkę, a więc 260 kHz. Przy 16 MHz daje to 62 cykle procesora na przerwanie - wątpię, czy przy programowaniu w C ATmega ma szansę się wyrobić. Podwójny bufort UART tu nie pomoże, chyba, że w przerwaniu dorzucimy aktywne oczekiwanie, co wygląda śmiesznie, ale zmniejsza liczbę przerwań o połowę kosztem w tym przypadku dodatkowych...
Pokaż program po zmianach. [syntax=c] /* BAUD RATE: 9600 */ #include <avr/io.h> // Załaduj bibliotekę input/output #include <util/delay.h> // Załaduj bibliotekę opóźnień #include <avr/interrupt.h> // Załaduj bibliotekę obsługi przerwań #include "ioinit.h" // Załaduj bilbiotekę zew. (do ustawienia portów ATMega 8) #include "uart.h"...
Witam :) Zrobiłem układ, którego głównym elementem jest uC Atmega 8. Problem w tym że posiada ona w swojej strukturze tylko jeden port USART. W mojej aplikacji posiadam dwa urządzenia które komunikują się wykorzystując właśnie ten interfejs. Dodatkowo jedno z nich zasilane jest napięciem 3,3 V (odbiornik GPS) drugie natomiast 5 V (telefon). Analizując...
Witam, mam dziwny problem, pomoże mi ktoś go rozwiązać? Chodzi o to, że buduję urządzenie, które na żądanie będzie mierzyło temperaturę układem DS18B20. Żądanie odbywa się poprzez naciśnięcie odpowiedniego przycisku na pilocie RC5. Całe moje urządzenie to dwa AVR: Atmega8 (jako dekoder RC5, który wysyła odebrany adres i komendę poprzez USART do drugiego...
Postanowiłem zrobić taki test: Po wysłaniu przez atmega do at90 temperatury ten powinien zwrócić ciąg danych. Pierwsza dana to temperatura, druga 56, trzecia 40, czwarta 24 i piąta 8. Ciąg danych następnie wyświetlany jest na LCD i oto co dostałem. http://obrazki.elektroda.net/93_12152502... Czyli jakby 1 dana (ta wysłana przez atmega i zwrócona)...
Witam. Rozpoczynam z Uartem. Przesyłam dane w postaci jednego bajtu bezproblemowo, natomiast mam większe problemy jak chcę wysłać kilka zmiennych stablicowanych, a wysyłanie zrealizowałem w pętli. Oto kod jaki chciałem użyć, dla wysyłania i odbierania: Wysyłanie: void USART_Transmit(uint8_t adres, uint8_t dane) { unsigned int i; //zmienna...
krotki opis proramu, po wykryciu przerwania pierwszy raz na INT0 uruchamia timer i odlicza czas do drugiego przerwania, po drugim przerwaniu i kolejnych na PA2 jest wystawiany impuls trwajacy 200us, impuls jest opoznany w stosunku do sygnalu wejsciowego w zaleznosci od okresu sygnalu. Problemem okazalo sie dodatkowe opoznienie wprowadzone przez obsluge...
Witam W projekcie wysyłanych będzie około 800bytów danych do PC i w PC bedzie na bieżąco wyświetlane. Do czego zmierzam. W czasie kiedy bedę obsługiwać przerwanie od Timer1 może pojawić się sygnał do PC, że dokonywana bedzie tramsm,isja. W atmega8 nie mozna ustawiać priorytetów przerwań w odróżnieniu do 8051. Kiedy pojawiało mi się przerwanie do timer1...
Skoro nikt mi nie potwierdził że schemat jest dobrze to ja sam potwierdzę (jest dobrze, przetestowałem na żywo). Atmega16, zewnętrzny rezonator kwarcowy 16MHz. Rzeczywiście max to 1Mbps. Teraz kolejne pytanie. Transmisja asynchroniczna działa bez problemu, natomiast jak chcę przesłać dane wykorzystując transmisje synchroniczną to odbierane są krzaki......
Witam, mam problem z kodem ( no właśnie, to sie okaże :) ): #define F_CPU 16000000UL #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/pgmspace.h> #define UART_BAUD 115200 //prędkość transmisji #define UART_CONST (F_CPU/((16*UART_BAUD)-1...
Np usunąć włączanie przerwania od nadawania albo dodać taką obsługę w programie. Inaczej program leci w krzaki. Swoją drogą, jak daje radę wysłać cały tytuł to i tak jest niezły. Ja na podstawie analizy dałbym mu jedną literkę.
Cieszę się, że ci to działało, ale wystarczy zaglądnąć do noty procesora i zrobić parę prosty obliczeń, żeby przekonać się, że ci USART taktowany wewnętrznym generatorem w ATMega działał wyłącznie przez przypadek. Tak na szybko ja znalazłem dwa przykłady obliczeń: http://www.maximintegrated.com/app-notes... http://electronics.stackexchange.com/que...
Twój kod a także same założenia są już pełne błędów. Zatem to co obserwujesz jest tylko wypadkową tego wszystkiego co robisz źle. 1. co to za inkludowanie plików *.c ???? Inkluduje się TYLKO pliki nagłówkowe *.h 2. co to za rozbicie inicjalizacji nadajnika i odbiornika ? Choć teoretycznie mogłoby tak być - ale nie robi się w ten sposób 3. w inicjalizacji...
Witajcie, w jaki sposób można optymalnie odczytać przesłany (aż do znaku nowej linii / powrotu karetki) ciąg znaków od przerwania otrzymania danych? /* * Sterowanie przez RS232 (main.c) */ #include "defines.h" #include <ctype.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <avr/interrupt.h>...
Witam, Od jakiegoś czasu zmagam się z problemem braku odczytu danych z żyroskopu w układzie MPU-6050, poprzez I2C. Wykluczam problem z komunikacją pomiędzy układem, a mikroprocesorem(Atmega 32), ponieważ wszystkie dane z rejestru można odczytać(w tym z akcelerometru). Podejrzewam, że żyroskop trzeba w jakiś specjalny sposób aktywować, choć przekopałem...
Witam , mam nadzieję iż nie zanudziłem bez reszty.. W zestawieniu z moimi "dokonaniami asm." kolega michalko12, jest najbliższy temu co ja kiedyś robiłem . Oto wersja asm z przełącznikiem kompilacji aby kompilować jako samodzielny plik - kto chce ->ten może :D ( ta wersja to 16-timerów, 16-nasto bitowych, każdy cztery tryby konfiguracji, oczywiście...
Zmień vector przerwania na ISR(USART_RX_vect)
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. Mam taki problem. Próbuję się bawić z UARTem. Program (tzw. echo) działa poprawnie - sprawdzam za pomocą Br(at)y terminala. Natomiast chciałem pójść dalej i wykorzystać przerwanie od odebrania. no i niestety mi niezbyt to działa (w sensie nie wchodzi w to przerwanie). A oto kod: #include <avr/io.h> #include <avr/iom162.h> #include...
Rozdwajasz temat niepotrzebnie: http://www.elektroda.pl/rtvforum/topic24... Zacznij od wywalenia z przerwań funkcji , które się długo wykonują: http://mikrokontrolery.blogspot.com/2011...
While w przerwaniu i inne takie kwiatki. Proszę się wzorować na dobrych przykładach.
Witam, opracowana została prosta ramka przesyłania danych w oparciu o przerwanie USART_RXC_vect. Wysłanie bajtu 255 z aplikacji informuje mikrokontroler że zaraz otrzyma 5 znaków ASCII które ma załadować do tablicy charów a bajt 254 kończy wpisywanie do tablicy. Tablicę ze znakami wyświetlam na wyświetlaczu LED. LEcz np. wysyłam "186A0" a na wyświetlaczu...
Hej, Podłączyłem sobie ATmegę16 do komputera przez RS-232 za pośrednictwem MAX232. Na początek chciałbym zrobić echo - to, co wpiszę w minicomie czy putty ma być przesłane do uC i wysłane z powrotem. Wykorzystane mają być przerwania. Problem jest taki, że procedura obsługi przerwania ISR(USART_RXC_vect) jest wykonywana albo bardzo rzadko, albo wręcz...
... 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...
Ja bym napisał tak, jak w załaczeniu. Zmieniając wartość dla zmiennej Czas_led , można zmieniać czas świecenia ledki.
Robak chyba ja tego nie łapie:( mozesz mi wiecej podpowiedziec jak mam to w main zrobić #include <avr/io.h> // dostęp do rejestrów #include<avr/interrupt.h> #include<avr/signal.h> #define F_CPU 8000000ul // częstotliwość zegara w Hz #include<util/delay.h> #define cbi(sfr, b) (sfr &= ~(1<<b))...
jeśli chodzi o przerwania korzystaj z SIGNAL a nie ISR (a dlaczego? to już sobie sam doczytaj) Wycinek z <avr/interrupt.h> z najnowszego AVR-GCC #if defined(__DOXYGEN__) /** \def SIGNAL(vector) \ingroup avr_interrupts \code #include <avr/interrupt.h> \endcode Introduces an interrupt handler function that runs with global...
Niektóre z funkcji faktycznie zawierają pętlę oczekującą na zwolnienie magistrali: [syntax=c] while ( TWI_Transceiver_Busy() );[/syntax] Autorzy założyli, że można będzie użyć tej funkcji w dowolnym momencie, niestety powoduje to, że kiedy wywołamy funkcję, kiedy magistrala jest zajęta, to będzie ona czekała na zwolnienie magistrali, co wprowadza czasami...
oraz jeszcze: 1. stosujesz stare funkcje obsługi przerwań a nowe wektory - stosuj nowe funkcje ISR(): http://nongnu.org/avr-libc/user-manual/g... i wywal nagłówek #include <avr/signal.h> 2. returny w funkcjach ISR() i main() są zbędne. 3. Ostatnia uwaga kol Zaquadnik jest baaaardzo istotna. Nie dość, że czekasz w funkcji...
Witam, mam problem ze znakiem "$", jest mi on potrzebny do odczytu ramki NMEA. Jak widać poniżej inne znaki działają. Specjalne także, oprócz # i $. Wyskakuje wtedy takie coś: dla $: "<0>13", dla # "#013". Mam przejściówkę USB->RS232 -> ZL3AVR. Przejściówka to model: USB-SERIAL CH340. Nie wiem w czym leży problem. A niestety nie mam kabelka...
5. Czy powinienem włączać linie SCL i SDA jako wyjścia lub wejścia poprzez ustawieniea w DDRC? Przy sprzętowej obsłudze TWI dzieje się podobnie jak przy sprzętowej obsłudze USART. Czyli włączenie mechanizmu sprzętowego powoduje automatycznie zmianę funkcji odpowiednich pinów transmisyjnych i wymusza ich działanie. Tylko przy programowej realizacji...
Z tego co wyczaiłem to mega popędzana jest kwarcem 14,7456 MHz (kwarc do USART)... Timery ustawione są tak, że przerwanie wywoływane jest co 0,05s stąd podstawowa zmienna zliczająca do sekundy zwiększana jest co drugie wywołanie przerwania (odpowiadają za to variable i variable1)... Spróbuj przeanalizować ten kod i skonfrontować go z dokumentacją do...
Witaj. Przyglądnij się przykładowi na ATmega: http://mikrokontrolery.blogspot.com/2011... Na podstawie przykładu opracuj swoją wersję na ATtiny. Funkcja USART_ReceiveByte() do przerwań Ci się nie przyda.
USART na przerwaniu od odbioru, a przycisk na przerwaniu zegarowym co 1/10s.
Oj, przejrzałem pobieżnie kod - uwierz mi - skasuj go. W C jest coś takiego jak funkcje - wykorzystaj to, kod, który masz jest kompletnie nieczytelny. Każdy normalny promotor by to coś uwalił chociażby za to. Co do szybkości działania - pokaż kod funkcji odpowiedzialnych za komunikację z czujnikami. Z kodu, który masz: - funkcjie piszące do LCD są zapewne...
Build started 6.4.2014 at 00:25:04 avr-gcc -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Proba_10.o -MF dep/Proba_10.o.d -c ../Proba_10.c avr-gcc -mmcu=atmega16 -Wl,-Map=Proba_10.map Proba_10.o -o Proba_10.elf avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature...
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...
Konwerter napięć? Mam zasilanie z dwóch baterii- paluszków (Atmega 8L) lub zasilacza bezpośrednio do pinu zasilania. Pin reset dołączony do zasilania.
Nie masz funkcji obsługi przerwania od usartu, przez co po wystąpieniu przerwania procesor się resetuje. Brak funkcji obsługi wynika ze złej nazwy: jest SIG_UART0_RECV a powinno być SIG_USART0_RECV (lub USART0_RXC_vect). Warto czasem zobaczyć co w iom162.h siedzi.
Na jakiej podstawie twierdzisz, że problemem są priorytety przerwań? Przerwania występują na tyle sporadycznie, że nie ma tutaj miejsca na problemy. Jeśli wysyłany jest znak '2', to porównanie (i==2) jest błędne TCCR2 = 1<<CS00 | 1<<CS02 | 0<<CS01 ; proponuję zapisać tak: TCCR2 = (1<<CS00) | (1<<CS02) |...
to od razu w tym przerwaniu zapisuj dane do bufora i je analizuj.
Czy wysyłanie danych (USART_Transmit_string) też działa na przerwaniach i na odpowiedni bufor? Bo wywołujesz tą funkcję w przerwaniu od odbiornika i jeśli to czeka, to czeka tyle ile transmisja kilku znaków - w tym czasie gubisz przychodzące dane. Natomiast jak to masz na przerwaniach, to czy nadajnik posiada bufor, czy jedynie pamięta wskaźnik - w...
(at)ElektrodaBot w ostateczności mam taki kod, lecz niestety nie chce działać. #define F_CPU 8000000UL // 8 MHz #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 volatile char odb_dane; volatile char odb_flaga = 0; void USART_Init(unsigned int ubrr) {...
W twoim main brak jest na koncu petli i procesor sie resetuje. Po drugie jeli korzystasz z przerwan to musisz zdeklarowac ile bajtow jest do wyslania np. w sposob w jaki pokazalem w swoim kodzie. NAQ tym to polega wskazujesz skad wyslac dane(bufor), w jakiej ilosci i procesor zajmuje sie czyms innym np. kolejnymi obliczeniami nie martwiac sie o obsluge...
Nie da się na to pytanie odpowiedzieć nie widząc kodu. USART obsługujesz w przerwaniach? Pamiętaj, że na czs jego wykonania inne przerwania są blokowane, użycie nieblokujących handlerów przerwań wymaga głębszej analizy. Ale generalnie spójrz na to w ten sposób - procesor przez 40% czasu się nudzi. Więc dla 16MHz masz sytuację taką, jakbyś miał cały...
3) Generalnie na początku makra SIGNAL wyłączane są przerwania (funkcja cli), a na końcu są odblokowywane (sei), tak więc nie ma zagnieżdżenia przerwań, po prostu niektóre pomiary gubisz. 2) wg noty katalogowej do masy przez kondensator 1) jeśli ich nie używasz, to należy je ustawić jako WYJŚCIE, i można na nich ustawić stan 0. Nie powinny wisieć w...
W urządzeniu było mało USART, został użyty układ SC16IS760IPW. Teraz musze dodać kolejny SC16IS762IPW czyli dwa USART. Procek z USARTEM komunikuje się po SPI. Komunikacja to wysłanie adresu rejestru i zapis/odczyt danej. Teraz wszystko odbywa sie w pętli głównej, muszę jednak odbiór przenieść na przerwania. Jak sie łatwo domyśleć, nie może byc tak,...
zgadzam się z przedmówcą ,włącz przerwania i odbieraj dane w przerwaniach ,dodaj : UCSRB = _BV(RXEN) | _BV(TXEN) | _BV(RXCIE); oraz : ISR(USART_RXC_vect) //przy odebraniu znaku { bufor = UDR ; }
W dziele Transmisja danych znajdziesz przykład USART na przerwaniach z buforem: http://mikrokontrolery.blogspot.com/p/sp...
GPS: GMS-U1LP GSM: ZTE MG3030 Wina na pewno nie leży po stronie połączenia, ponieważ przy podłączeniu z PC sytuacja wygląda identycznie. Zastanawiam się jeszcze nad prockiem, może on jest uszkodzony. Próbowałem początkowo oprzeć wszystko na przerwaniach ale w momencie włączenia przerwań, program w ogóle nie wchodzi w główną pętlę while, a jeśli już...
Przepraszam, ale jak mam skonfigurować przerwania?? Myślałem że wystarczy na początku prog podać #include <avr/interrupt.h> #include <avr/signal.h> To przerwania należy jeszcze konfigurować? Poproszę przerobić mój kod jeżeli jest to możliwe.
Dane USART prądkosc 57600, jednoczesnie mikrokontroler będzie analizował ramki z przepływajacych danych. Chodzi o przełaczanie z 4 wejść na 8 wyjść. Moze udałoby sie w przerwaniu ustawic podawanie na wyjscie odczytanego stanu z wejscia ale mikrokontroler często bedzie w przerwaniu od USART i przez to gubienie danych.
Czyli obecnie masz zepsutą i błędną funkcję pobierającą rzekomo łańcuch, a w rzeczywistości jeden znak na ATmega oraz program na PC niedopasowany do poprzedniej, nieco kulawej ale jakoś działającej funkcji odbioru łańcucha. Program na PC nie może wysyłać nowych znaków dopóki nie odbierze całego łańcucha z ATmega, bo inaczej nadawane znaki nie będą odbierane...
Dzięki za odpowiedzi. Myślałem, że jestem już na dobrej drodze, żeby to ogarnąć ale okazała się, że byłem w błędzie. Podłączyłem na krzyż przez UART dwie atmegi328p i do obu wgrałem taki sam kod: Nie wiem czy dane się poprawnie wysyłają, bo utknąłem na przerwaniach. Jedna atmega ma wysyłać co 1000ms cokolwiek, a druga gdy to odbierze ma (na razie) po...
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...
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...
Witaj kompilator Ci krzyczy, że adres do którego chcesz skoczyć jest za daleko (dla tej instrukcji) Jeśli zmienisz "out" na "sts" to wyskoczy Ci inny błąd, że nie znajduje komendy takiej to a takiej. Program jest zlepiony z kilku i nie mówię, że nie wygląda fachowo, tylko tak lekko dziwnie... Po za tym nie pisałeś go sam prawda? Użyłeś wielu zapożyczeń...
Witam, Od samego rana próbuje skłonić mojego AVR do współpracy, chcę mianowicie, aby odebrał znak (slowo) w przerwaniu, a nastepnie wyswietlił go na wyświetlaczu LCD i odesłał odpowiedź. I problem jest nastepujący. Jeśli odbieram dane znak(słowo) bez przerwania (po prostu funkcją USART_Receive), to działa, ale jak dodam instrukcje obsługi przerwań to...
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ć...
W zasadzie wszytsko robisz źle. Porównaj swój kod z dowolnym przykładem z transmisją szeregową na ATmega. Np. RXC i UDRE są to stałe,a Ty próbujesz sprawdzać ich awrtości i w zależności od nich coś robić lub nie robić. Procesor ugrzęźnie w wiecznie wywoływanej procedurze przerwania nadawania. Inicjowanie UART też błędne - najpierw włączasz transmisję,...
Tak, jeśli używasz przerwania to nie potrzebujesz tej funkcji. Procesor wcale nie musi się resetować, może wpadać w nieokreśloną martwą pętlę po skoczeniu do przerwania od RX (które jest nieokreślone). Program działa więc tak: wykonuje wszystko aż do napotkania funkcji USART_ReceiveByte, wchodzi do niej i oczekuje na zakończenie odbioru bajtu przez...
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ę....
Ustawiasz bit zezwolenia na przerwanie TXCIE, a gdzie masz procedurę obsługi tego przerwania? Po odesłaniu znaku flaga TXC zostaje ustawiona i ze względu na brak procedury obsługi tego przerwania program najprawdopodobniej startuje od początku. Nie ustawiaj bitu TXCIE lub napisz dla tego przerwania chociaż pustą procedurę obsługi: [syntax=c] EMPTY_INTERRUPT(USART_TXC_vect);...
Ja ogólnie etap migania diodami mam już za sobą zrobiłem parę projektów prostych wykorzystujących TIMERY, Przerwania zewnętrzne, obsługę klawiatury bądź LCD i teraz zamierzam się właśnie dokształcić w interfejsach a doświadczenia w tym temacie nie mam, dlatego też pytam się was. A co sądzicie aby ten problem spróbować zrobić na interfejsie SPI? Z tego...
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;...
Szanowny Panie Kolego... Uwag co do tego rozwiązania można mnożyć... 1. Dlaczego nie na przerwaniach? Taka biblioteka już milion razy w internecie była. Ta nie używa przerwań, blokuje działanie uC przy nadawaniu i odbiorze... 2. Po co funkcje do wysyłania CR i LF? przerost formy nad treścią 3. Funkcje do wysyłania liczb - fajnie, ale po co skoro można...
tablica wektorow przerwań jest ustawiona na bootloader. chyba ze to źle robie... boottest2.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000158 00001800 00001800 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 0000002a 00800060 00001958 000001ec 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000002...
... ATmega nie obsłuży 260 tysięcy przerwań na sekundę potrzebnych do transmisji na przerwaniach ... 260k przerwań opróżniających bufor atmega bez problemu obsłuży - oczywiście nie może być to kod 'ala arduino. Przykładowo uart można zmieścić w 50 43 cyklach: https://github.com/jnk0le/Easy-AVR-USART... Dla 16MHz przerwania...
Schemat: http://tuxgraphics.com/common/src2/artic... Nie ustawiałem fusebitów, ale mam pewność, że częstotliwość się zgadza, gdyż odliczanie sekundy z przerwania działa idealnie (kod z jednego z programów autora schematu). Co do kodu do UARTa, oczywiście zmieniłem 8 na 12,5. Generalnie na sprzęcie ładnie hula serwer HTTP, klient...
Open your mind ;) uart_rx_buffer jest buforem odbioru. Wpis w PS jest poza tematem. Dotyczy dziwnego zachowania kompilatora i nie ma nic wspólnego z kodem z tematu. Poza tym uart_rx_buffer występuje w przerwaniu, dlatego volatile.
Mnie wychodzi, że to nie jest tryb CTC tylko normalny. Po drugie na przerwanie compare trzeba zezwolić w rejestrze TIMSK - bit OCIE0 - masz < zamiast << stąd problem. Jak masz jakieś wątpliwości co do konfiguracji, to użyj symulatora AVR Studio. Można sobie w nim też ustawić tryb pracy i odczytać wartości rejestrów kontrolnych dla niego i potem...
Nie mogę znaleźć uchwytu przerwania od USART, jest jedynie od UART i nie chce działać. O ile mi wiadomo to nie ma żadnego rozróżznienia między przerwaniem od USART a UART. Niewazne czy Uklad transmisji szeregowej pracuje synchronicznie czy asynchronicznie i tak zawsze jest to samo przerwanie generowane. A moze by tak odblokowac przerwania od odbioru...
Witam, zanim zabierzesz się za pisanie własnej obsługi przerwań do RS232 w Bascomie, to może najpierw spróbuj zrobić to w oparciu o dobrodziejstwa jakie daje ci Bascom. nie znasz poleceń INPUT , INKEY czy PRINT ???? do tego jeszcze może Config Serialin bo w powyższym kodzie odstawiasz niezły "miszmasz" i nie ma co się dziwić, że ci nie działa. Oczywiście...
co do odbioru masz 2 mozliwosci albo czekac az cos przyjdzie albo uzyc przerwania ".org 0x00B ;USART, RXC USART, Rx Complete" w momencie odebrania jednego bajta nastapi przerwanie. w obsludze przerwania nalezy odczytac np "in r16, UDR" a nastepnie mozemy sobie zapisac r16 np do ramu i "reti". jak bedziesz mial problem pisz na gg jestem praktycznie caly...
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, wykonałem układ z ATmega88, który m.in. wykorzystuje wyświetlacz alfanumeryczny VFD. Mikrokontroler poprzez USART wysyła polecenia i znaki w oparciu o następujący kod: USART_Transmit w formie: Send_String w formie: Send_String tablicy znaków powoduje wystąpienie błędu z powodu, jak mniemam, konfliktu typu zmiennych: error: incompatible types...
1. Nie stosuj niestandardowego połączenia pinów w gnieździe programowania, bo gdy podłączysz programator zgodny z ISP z włączonym zasilaniem układu programowanego, to będzie buuuuuum: http://mikrokontrolery.blogspot.com/2011... 2. Coś pomieszałeś ten układ resetu. Rezystor 330 przy kondensatorze ma ograniczać prąd jego rozładowania...
m8se zgadza sie mozna i tak sterowanie multiplekserowe, tylko nie wiadomo jak beda sie zachowywaly wyswietlacze jak chce ich podpiac az 8 ;) beda migotaly bo jeszcze mam tam zamiar zrobic transmisje szeregowa do kompa (usart) ale moze to w przerwaniach ale to sie zobaczy narazie trzeba sobie poradzic z wyswietlaczami ;)
Z tym równoległym to warto się zastanowić. Niektóre kontrolery LCD mają stosunkowo wolne interfejsy równoległe, a megaszybkie szeregowe, w efekcie równoległy jest oczywiście ciągle szybszy, ale nie aż tak bardzo w stosunku do szeregowego. SPI jest proste i wygodne, na XMEGA wyciągniesz 16 MHz na tym interfejsie, na ATMega 10 MHz, to daje ci odpowiednio...
Jeśli wysylasz male porcje danych i rzadko mozesz zastosowac takie roziwazanie. W inym przypadku proponuje wykorzystac przerwania i zrobic jakis buforek nadawczy/odbiorczy.
Cześć Pobierz notę katalogową np. Attiny2313a i popatrz jak wygląda kod obsługi USART'a, bo masz błędy w kodzie. Nie chce mi się wierzyć, że nie da się osiągnąć tego czego oczekujesz na Attiny. W przerwaniach timer'a, czy to jednego czy drugiego, możesz manipulować rejestrami COM0Xn, przerwaniami TIMSK. Powinieneś osiągnąć możliwość włączania i wyłączania...
Natomiast w sytuacji gdy zarówno cały Timer2 jak i Usart robiony jest na przerwaniach tego problemu nie ma. Po to one są :) Powodzenia w dalszych pracach.
Napisałem sobie takowy program: #include "stdio.h" #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define FOSC 12000000 #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 SIGNAL(SIG_UART_RECV) { //USART_Transmit(UDR); PORTB=~PORTB; _delay_ms(300); } void USART_Init(...
Zastanówcie się Koledzy, co się będzie działo, kiedy wrzucicie do UDR ostatni bajt do nadania. Kto i kiedy skasuje zgłoszenie przerwania TXD po wysłaniu tego bajtu? W obsłudze przerwania to nie nastąpi, więc przerwanie pozostanie zgłoszone i będzie obsługiwane na okrągło - patrz granica stron 137/138 aktualnej wersji (aa) doc2486.pdf Flaga przerwania...
Na ATMega644 oczywiście nie da się tego zrobić, chociażby z tego powodu, że bufor odbiornika jest jendobajtowy i odebrane znaki by się po prostu zgubiły. Natomiast z AVR da się coś takiego osiągnąć na XMEGA E5, gdy sprzęgniesz USART z EDMA w trybie wyszukiwania wzorców. Wtedy jest możliwość zgłoszenia przerwania po napotkaniu wzorca, który podałeś,...
usart przerwania przerwania usart atmega16 przerwania usart
lutować rurka miedzianych skrzyni biegów grande punto bascom inkey
Lokalizacja czujników poduszek powietrznych Honda Civic 2009 Problemy z domofonem Urmet 1702/2: Diagnostyka i rozwiązania