... prawda? Prawda ;) .... ale właśnie "rozmawianie" z modemami tak w ogóle to dokładnie przykład o którym ja wspominałem wyżej. To nie jest przesył danych binarnych. Więc jakby nie patrzeć np dla mnie ulubiony sposób porozumiewania się. Owszem - trzeba się tego nauczyć i przygotować sobie kilka wariantów analizy nadchodzących ramek z modemu. W sumie...
Kiedy leci pytanie i Atmega ma przerwanie od USART... Pokaż lepiej jak to wygląda. Handler obsługi USART. Od zboczy też by się przydał, a najlepiej cały kod.
Czy mógłbym jakoś je poprawić aby nie przerywało przerwania USART? Z pewnością.
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...
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ę.
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?...
sei nie ma nic do priorytetu przerwań - to po prostu instrukcja włączająca przerwania.
Przeczytaj najpierw ze zrozumieniem dokumentację uC. Dodatkowo: po co pętla while w przerwaniu?
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...
USART na przerwaniu od odbioru, a przycisk na przerwaniu zegarowym co 1/10s.
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?
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...
to od razu w tym przerwaniu zapisuj dane do bufora i je analizuj.
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...
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...
Zmień vector przerwania na ISR(USART_RX_vect)
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.
Ja bym napisał tak, jak w załaczeniu. Zmieniając wartość dla zmiennej Czas_led , można zmieniać czas świecenia ledki.
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...
W dziele Transmisja danych znajdziesz przykład USART na przerwaniach z buforem: http://mikrokontrolery.blogspot.com/p/sp...
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...
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.
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...
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.
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.
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...
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.
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...
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...
A może poczekałbyś na wysłanie znaku? Tak patrząc odbierasz w przerwaniu po co więc ta pętla for? a jeśli już to od odczytaniu UDR czekaj na odebranie nowego znaku. Skoro chcesz wysyłać komendy ramką odczekać w przerwaniu na 5 znak ramki i dopiero sprawdzaj komendę.
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ż...
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...
Jakbyś nie kombinował to UART zmieści na raz 3 bajty reszta sie nadpisze. Odsyłam do lektury noty katalogowej tam dowiesz się czemu :) Koledzy radzą użyć przerwań do odczytu i to najlepszy pomysł jaki można podsunąć.
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) |...
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ć...
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...
UCR = 1 << TXEN | 1 << RXEN | 1 << RXCIE; sei(); Musisz tylko dorzucić bit odpowiadający za generowanie przerwań, no i włączyć przerwania. W zależności od kompilatora działa różnie UCSRB = 1<<RXCIE | 1<<TXCIE | 1<<RXEN; sei(); albo to, albo to pozdrawiam
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...
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 ;)
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...
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...
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...
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...
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 ; }
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...
Jeśli wysylasz male porcje danych i rzadko mozesz zastosowac takie roziwazanie. W inym przypadku proponuje wykorzystac przerwania i zrobic jakis buforek nadawczy/odbiorczy.
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...
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...
... 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...
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. Do Atmegi mam podłączony enkoder z drukarki na INT0 (obsługuje przerwanie). oraz rs232 , który komunikuje się z aplikacją na PC(też przerwanie). Opcja pierwsza: czytam dane z enkodera manualnie : mam o programie guzik "daj dane". Gdy kręcę enkoderem jak szalony to w lewo to w prawo a potem wciskam guzik "daj dane" to dostaje to co trzeba - znaczy...
problem leży w odbieraniu bajtu Masz całkowita rację, używasz kodu blokującego (_delay_ms()), który powoduje, ze raczej się nie wstrzelisz w tą chwilę, kiedy wysyłany jest z PC upragniony bajt. Zgadza się, ma rację, ale ty, szanowny lordzie ;) racji nie masz, bo przecież pokazana funkcja USART_ReceiveByte czeka do skutku aż bajt zostanie odebrany,...
Oczywiście jest tak jak kolega mówi winne są USART_putstr("Rejestr: "); USART_putint(wynik,16); ponieważ nie masz zadnego buforowania i korzystasz z pollingu a nie przerwan znaki odbierane podcas wykonywania tych funkcji przepadają ( to jest 2 linie) musisz wrzucic te odebrane znaki do jakichś zmiennych a wysyłać/wyswietlac dopiero po zakonczeniu całej...
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...
Witam. Od 3 dni siedzę już nad programowym PWM. Wykorzystuję do tego przerwanie na timerze, ale coś nie działa tak jak powinno otóż jak nie mam ustawionego stanu 1 na ostatnim bicie portu to PWM dziwnie się zachowuje. //Includes #include "avr/io.h" #include "inttypes.h" #include "stdio.h" #include "util/delay.h"...
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...
Witam! Mam dokładnie taki sam problem jak kolega 12345adrian . Jakie jest wyjście z tej opresji? Pozdrawiam, Łukasz. P.S. Jak bedzie trzeba to podam kod żródłowy :D Dodano po 3 Oto kod źródłowy: .include "m128def.inc" ;wektory przerwan .org $0000 jmp reset .org $0024 jmp USART0_RXC ; USART0 RX Complete Handler .org $0028 jmp USART0_TXC ; USART0...
No właśnie takiego czekania w pętli chciałem uniknąć. Tą funkcję spełnia przerwanie: Zła nazwa przerwania, powinno być USART_UDRE_vect: http://www.nongnu.org/avr-libc/user-manu... Naprawdę nie było żadnych ostrzeżeń przy kompilacji ? No własnie też taką dałem nazwe przerwania i wtedy wywalało mi błędy przy kompilacji. Więc...
"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...
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ę,...
Za bardzo nie jestem praktykiem w C (w asm nie muszę się zastanawiać nad winą kompilatora, jak coś nie działa to tylko z mojego powodu... :}), ale widzę, że miksujesz starą nomenklaturę nazewnictwa obsługi przerwań i nową : http://www.nongnu.org/avr-libc/user-manu... Od nieczytelnego makra _BV proponuję też odejść i używać...
proponuje Ci jednak spradzic ten kod, zmienaijac tylko albo szybko procka w makefile, albo tu w kodzie, po wysalniu jakiegos znaku powineienes dostac odpowiedz w postaci jedynki. Jak to nie działa, to masz pewność że to nie wina kodu. #include <avr/io.h> // dostęp do rejestrów #include <util/delay.h> #include <avr/interrupt.h> #include...
Więc tak. Pierwsza ciekawostka która wyszła, to jakiś kłopot z układem watchdog, więc go wyłączyłem aby sprawdzić czy to jedyny błąd. Wszystko działa elegancko do momentu gdy program zaczyna generować instrukcje dla odbiornika - w tym miejscu nagle uaktywnia się przerwanie 'STOP' (co pokrywa się z zachowaniem całości w praktyce), a uK utyka w martwej...
Robak użyłem Twoich funkci ale dalej nie działa.Prosze Cie jeszcze o podpowiedz co jeszcze jest źle. Z góry dziękuje #include <avr/io.h> // dostęp do rejestrów #include<avr/interrupt.h> #define F_CPU 8000000ul // częstotliwość zegara w Hz #include<util/delay.h> #define cbi(sfr, b) (sfr &= ~(1<<b))...
Póki co próbuje na Atmega32 bo taki mam zestaw Wymień na Mega324. Jak dla mnie, najważniejsze różnice to: - przerwania od każdego GPIO - przerwania od WDG Jak pamiętam max taktowanie to 20MHz a nie 16. Skoro to zestaw to pewnie procek w DIP a M324 to odpowiednik pip-pin Mega324. Inną ceną zaletą tej serii jest duża ilość RAM (u większego brata Mega1284...
Wszystkim czujnikom chcę wydać komendę konwersji a następnie po 10 sekundach chcę odczytać wszystkie 15szt, wydać polecenie konwersji odczyt po 10s i tak w kółko. Jednak moja ATMega ma wiele innych rzeczy do roboty w głównej pętli i nie chcę aby odczyty temperatur zajmowały jej sekundę czy dwie z tych 10s. Obecnie na 15szt LM35 i wewnętrznym ADC uzyskałem...
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:...
Porada maciej_333 zadziałała, odbiera i wysyła. Skoro już to mam, zajmę się przerwaniami. Temat do zamknięcia i dziękuję za szybką odpowiedź :) Wychodzi na to, że lepiej czytać dokumentację. Właśnie na jej podstawie to napisałem. Wysyłanie i odbiór z kolei skopiowałem z pewnego mojego programu dla ATTINY2313. Wystarczyło zmienić nazwy rejestrów. Dlaczego...
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...
(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/...
Witam. Mam pytanie odnośnie USARTu w ATMega 8. Mam połączone dwie ATMegi. Z pierwszej wysyłam jedna po drugiej kilka danych. Druga te dane odbiera. Moje pytanie jest następujące. Czy istnieje taka możliwość aby druga ATMega, zajęta obsługą innych procedur, nie zdążyła odebrać przysyłanych danych i któreś z tych danych zostały utracone (nadpisane w buforze...
Wydaje mi się , że funkcja wysyłająca znak na LCD jest zbyt czasochłonna i poprostu gubisz część znaków wysłanych przez telefon.Spróbuj zapisać je do tablicy , a potem wyświetlić na LCD , pamiętając o pominięciu znaków o kodach < niż np. 0x20.Najpewniejszym wyjściem z sytuacji , jest jednak bufor FIFO , zaimplementowany w procedurze obsługi przerwania...
Myślę że nie tędy droga... Wiadomo, częstotliwość się zmienia w z napięciem, ale przerwanie i tak powinno się pokazać. Nie wiem jak masz skonfigurowany UART, ale jak masz standardowo, czyli jeden bit startu i bez parzystości, to przerwania powinny się pojawiać, nawet jak by były różnice w MHz. Czy układ jak teraz zasilisz z powrotem 5V to działa poprawnie?...
Może i naprostuje, o ile przetłumaczysz na polski poniższe zdania: "W terminalu działa. Uart1 ma za zadanie wysłać odebraną wartość z UART0 do aplikacji PC, obecnie terminala." To, jak używasz przerwań, kompletnie nie ma sensu - wyrzuć te przerwania i zrób odbiór danych z aktywnym oczekiwaniem. Inicjowanie UART jest skopane, ale zapewne jakimś cudem...
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...
Kiedy jesteś w przerwaniu to inne przerwanie raczej Ci nie grozi. Wiesz że Charmatch jest rozwinięciem przerwania od USART. Bascom wie jakie rejestry użyje do obsługi kazdego, jednego znaku, ale nie wie jakich użyjesz w dokładanych Seriallcharmatch. Dlatego proponują Pushall i potem Popall. ....Ty zaś po tym jak już zdjąłeś wszystkie rejestry ze stosu...
Witam Właśnie zaczynam pisanie programu do sterownika. Jako że jest to jeden z moich pierwszych programów w C to już potrzebuję pomocy.. Dodam że oczywiście nie chcę żadnych gotowców bo się w ten sposób niczego nie nauczę ale. Pierwszy problem związany jest z wykrywaniem zewnętrznych przerwań. Otóż pod piny obsługujące wykrywanie zewnętrznych przerwań...
Witam, Próbuję korzystać z biblioteki Peter Fleury do obsługi usart-u, której listing znajduje się poniżej: PLIK uart.c /***************************************... Title: Interrupt UART library with receive/transmit circular buffers Author: Peter Fleury <pfleury(at)gmx.ch> http://jump.to/fleury File:...
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ę....
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...
Błąd transmisji na poziomie 0.2% to jest bardzo mały błąd. Transmisja będzie śmigać super. Jeśłi chodzi o przerwania od UARTA i Timera to są one zamiennie - to znaczy że jeśli procek obsługuje przerwanie od Tmiera to w tym czasie blokuje inne przerwania które czekają w kolejce. Dlatego jeśli Twoje przerwanie od Timera jest takie długie to może być problem....
Niemniej ten błąd jest taki sam dla każdego kolejnego pomiaru przez co odejmuje się on i otrzymujesz dokładne wskazania O ile nie ma uruchomionych innych przerwań. Nawet, jak te inne przerwania zrobi o "niższym priorytecie" to i tak mogą wystąpić w tym samym czasie lub te "niższe" trochę wcześniej niż przerwanie np PCINT. To może spowodować konieczność...
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...
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......
Dodatkowo radziłbym korzystać z przerwania USART_RXC_vect niż z funkcji UART_Recieve(), ponieważ z własnego doświadczenia wiem że sprawia problemy. CO do timera, np. tutaj http://ppelczynski.swspiz.pl/userfiles/f... i oczywiście w datasheecie atmegi masz ustawienia timera i lekkie wprowadzenie w temat. Ogólnie możesz inicjować timer gdy zaczynasz...
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, 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...
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...
Nie znam tego kompilatora ale skoro to działało na ATmega8 to tylko się w 128 zmieniły adresy rejestrów oraz wektorów przerwań. Sprawdź to a najlepiej zobacz w listingu czy jest właściwie umieszczony wektor przerwania.
Jak np mam kilka innych procedur które zabierają dużo czasu. Np pomiar ds18b20 albo wyświetlanie na LCD a chciałbym je wykonywać co pewien ściśle określony czas. Wariantów masz co niemiara: Chcesz czytac ADC co jakis czas to w timerze wyzwalasz tylok pierwsza konwersje reszte robisz w przerwiniu ADC, anolicznie i2c lub usart. Jak masz procedury, ktore...
witam, o ile poradziłem sobie odbiorem w przerwaniu to nie mogę zmusić ATmegi168 do wysyłania tablicy charów w przerwaniu. stosując pooling działa: [syntax=c] for(int i=0; i<10; i++) USART_Transmit(buff[i]); [/syntax] jak uzyskać ten sam efekt stosując przerwanie: [syntax=c] ISR(USART_TX_vect) [/syntax] i jeszcze funkcja inicjalizująca USART: [syntax=c]...
Od paru dni walczę z komunikacją telefon Sony Xperia X10 mini pro + Atmega162 poprzez BTM112. Na telefonie mam aplikacje BlueTerm. Nawiązuje bez problemu połączenie z Bluetooth. I właśnie bo nawiązaniu połączenia wchodzi mi w przerwanie że procek coś odebrał bo mruga mi dioda. Następnie gdy przyciskam przyciski w telefonie znowu mi murga w procku dioda...
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...
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ć...
usart przerwania przerwania usart atmega16 przerwania usart
ekspres delonghi uszkodzony spieniacz zasilacz napiecie kondensator instrukcja lodówek polar
wzmacniacz audio oscyloskop hantek
Sterowniki do ekranu PSP 1004 na Raspberry Pi Adaptacja skrzyni SensoDrive w Citroenie C2 1.6 VTR