A gdzie konfiguracja DDR dla portu B?
Przerwania co 4ms nie powinny mieć wpływu na ICP, na OW też nie, bo sekcje krytyczne czasowo zamykasz w bloki atomowe (cli/sei). Jedyne co się może stać to nieznaczne opóźnienie reakcji na przerwanie spowodowane jego blokowaniem. Jeśli jednak przerabiasz płytkę to pomyśl o tym wykorzystaniu USART.
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...
Jeśli wysylasz male porcje danych i rzadko mozesz zastosowac takie roziwazanie. W inym przypadku proponuje wykorzystac przerwania i zrobic jakis buforek nadawczy/odbiorczy.
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...
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...
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...
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...
Rozwiązanie było proste! Wystarczyło dopisać sei(); w funkcji obsługującej przerwanie USART Ciekawe jak sprawa będzie wyglądać gdy podłącze drugi enkoder (po potrzebuje dwóch)?
O jaką różnicę koledze chodzi?. O fakt, że dla zwykłych (blokujących inne przerwania) przerwań wykonanie instrukcji w kodzie przerwania, a wykonanie ich w pętli głównej na podstawie ustawionej flagi to praktycznie to samo?. Mniej więcej właśnie o to. Tak czy siak mamy niepodzielny fragment kodu blokujący inne "procesy". Co innego gdyby to rozbić na...
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...
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...
Program ma wysyłać "powitanie" na port szeregowy. Kompilowany przy pomocy Winavr + avr studio(w najnowszych dostępnych wersjach). Bez optymalizacji wysyła "Witam" ale tylko raz, a powinien dwa razy. Po włączeniu optymalizacji nie wysyła nic. Gdy robiłem transmisję przez polling wszystko było ok. Przerwanie włącza makro TXON; . Dzięki Plik iom16.h /*...
Męczę się nad tym od jakiegoś czasu i nie mogę sobie z tym poradzić. Próbuję połączyć ze sobą te dwa kontrolery. Zacząłem od skonfigurowania Atmegi16 do odbioru i połączenia jej z HyperTerminal. Najgorsze jest to że jakiś rok temu zrobiłem to bez problemu a dziś za żadne skarby mi nie wychodzi. Programik raczej prosty: #include<avr/io.h> #include<avr/interrupt.h>...
temp powinno być volatile. Inaczej się optymalizuje w pętli głównej, spójrz na wygenerowany kod asemblerowy. Dodano po 1 Zarówno "temp" jak i "i" powinny być volatile. i nie musi. Jest wykorzystywane tylko w przerwaniu. Za to powinno być zadeklarowane jako static w funkcji obsługi przerwania. Dzięki za szybką odpowiedź, ale to chyba nie jest problemem......
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...
No to zaczynamy po raz kolejny. Coś takiego jak stworzyłeś to niestety za szybko nie będzie działać. Mega z kwarcem rs 14 z groszami działa naprawdę szybko i można zrobić bardzo dużo w jedna sekundę. Do odbierania i wysyłania danych można sobie napisać własną procedurę - nawet w bascomie i jest ona sporo szybsza i działa rewelacyjnie. Deklarujemy przerwania...
Mam problem otóż wpisując w hyper terminalu 'n' procek tego nie wykrywa zapaleniem diody na porcie D7 połączenie jest bo jeśli zrobie tak: SIGNAL(SIG_UART_RECV) { sbi(PORTD,7); } to dioda zapala się. kwarc jest 16MHz czyli UBRR = 25(UBRRH =0x00, UBRRL =0x19) dla 38,4Kbaud #include <avr\io.h> #include <avr\interrupt.h> #include <avr\signal.h>...
Moduł USI umożliwia prowadzenie transmisji poprzez interfejsy szeregowe I2C lub SPI. I to bedzie najlepsze rozwiazanie Mega16(I2C)<->Tiny(USI). Resztę pdf'ka Ci powie. Dodano po 8 a opóźnienia można zminimalizować robiąc komunikacje na przerwaniach o tych modułów.
Witam. Chce zrobic transmisje szeregowa usart miedzy dwoma stmega 16 z predkoscia taktowania lini 250kbitsow. Z obliczen wyszlo mi ze UBRR dla Q16mhz bedzie rowne 4 :), a dla Q= 8mhz bedzie rowne 8 :) . Ale to jeden z mniejszych problemow.... Jak w srodowisku IAR(ktore jest naprawde niedoceniane, wersja free do 4kb kodu) napisac funkcje realizujace...
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. Mam mały problemik z UARTem . Mianowicie wszystko dziala ladnie , wysylanie i odbieranie znakow. Problem powstaje w momencie gdy wlacze przerwanie od zakonczenia nadawania (TXC: USART Transmit Complete ). Wowczas po wyslaniu jakiegokolwiek znaku z mikroprocesora mikroprocesor sie restartuje. Uklad to ATmega16, kwarc 16Mhz, predkosc transmisji...
Po tej zmianie zrobiłeś bardzo niebezpieczny algorytm polegający na czekaniu w przerwaniu na odbiór znaku z USART. Zdefiniowałeś funkcję USART_Receive() z while() w środku i używasz jej nawet 2 razy pod rząd w przerwaniu. To zaprzeczenie istoty przerwań i potencjalne miejsce powstawania błędów. Mam propozycję. Narysuj algorytm tego co chcesz osiągnąć,...
Witam Próbuję odebrać na komputerze (w programie bray terminal) dane, tzn. konkretnie temperaturę z termometru LM35. Niestety mam problem z odbiorem danych w przerwaniu od UART-u. Poniżej przedstawiam kod programu: [syntax=c] /* Wysyłanie do komputera wartości temperatury interfejsem USART mikrokontrolera */ /* LM35 -> PA0 */ /* ATMega16, f=16MHz...
jestem tylko trochę bliższy prawdy. Ciekawy jestem czy dobrze myślę. Ale mam też dużo niejasności. Czyli tak: 1.Zezwalam na globalne przerwania. 2. Ustawiam prędkość w TWBR 3. Ustawiam w TWCR: TWEN - odpalenie sprzętu TWIE - odblokowanie przerwania sprzetu Do tej pory chyba na razie nic się nie dzieje. 4. Ustawiam w TWCR TWSTA Czy w tym momencie generowany...
Znaki \r, \n, \" itd. są określone w specyfikacji języka c i jeśli taki znak występuje w stringu ujęty w cudzysłów to kompilator automatycznie zamienia go na daną wartość w kodzie szesnastkowym. Pokaż funkcję usartSendString razem z przerwaniem od Tx (jeśli wysyłasz używając przerwań). Może tam masz błąd. Może nie wysyłasz ostatniego znaku ze stringu...
Ok, uporałem się jakoś z tym projektem, tak że wreszcie działa. W końcu użyłem tego gotowego przykładu: http://mikrokontrolery.blogspot.com/2011... i jakoś "ręcznie" dodałem biblioteki ASF od TWI. Było kilka niezgodności, ale się z tym uporałem. Tak więc program działa i wymienia dane z kompem. Mam...
Ojej... rzeczywiście strasznie głupi błąd. Po prawdzie kod był pisany na szybko i nawet nie przyszło mi do głowy że to może być wina umieszczenia całej funkcji w przerwaniu. Dzięki wielkie Panowie :D. Wrzucam kod, być może komuś się kiedyś przyda. [syntax=c]#include <avr/io.h> #define F_CPU 16000000 #include <util/delay.h> #include <avr/interrupt.h>...
Prosty program na AVRStudio : #include <m16def.inc> ; Prohibits use of non-implemented instructions (ATmega16) .dseg .org SRAM_START .cseg ;—————R...
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...
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...
A nota katalogowa przeczytana ? ;) (USART»Accessing UBRRH/UCSRC Registers»Read Access) - s. 160/161 Trzeba 2 razy czytać, cykl zegarowy po cyklu (przerwania trzeba wykluczyć na czas odczytu), aby odczytać zawartość UCSRC . Przykład w asm i C w tabelce na s. 161. Pozdrawiam, Light'I
gdzie w ogóle main tutaj? Dodano po 49 Do zliczenia czasu powinieneś zastosować przerwanie timera.
Proponuję użyć przerwań, będzie to działało jak trzeba. Z tego co pamiętam to w tym procesorze jest przerwanie odpowiedzialne za odebranie danych po UART. Wtedy robisz obsługę przerwania i w niej odsyłająsz to co dostałeś albo zapisujesz do zmiennej, ustawiasz flagę i w pętli głównej sprawdzasz czy coś przyszło, jak przyszło to odsyłasz.
witajcie fachowcy... po przesiadce na wyższy uC dostałem wiecej potrzebnych mi przerwań i bonus (czytaj problem) a polega on na raczej mojej nieumiejetności zablokowania tego jednego przerwania nie blokując innych. mieszam w tych wszystkich dziwnych znacznikach i nic. w tle działają sobie dwa usart'y a na int2 jest klawiatura, i musi byc na int2, lecz...
Zainstalowałem AVR Studio4 i lecę od początku z google i pdf na temat ASM i AVR Powiedzcie chociaż czy w dobrym kierunku zmierzam? Bo jak w złym to odpuszczam i daje sobie spokój, pobawię się migającymi diodami w Bascomie. Tam gdzie nie ma komentarza to nie wiem co to znaczy i co robi ale było w pdf lub innych opisach, jeżeli ktoś może mi wyjaśnić instrukcje...
Witam. Mam taki problem. Próbuję skomunikować ze sobą dwa uC. Docelowo będą one skomunikowane po RS485, ale teraz w fazie testów próbuję je połączyć normalnie po UARCie. Skrosowałem TXD i RXD dwóch Atmeg. Wysyłam z Atmega162 znak 0x3A, natomiast na Atmedze32 włącza się przerwanie od odebrania (dioda niezależna od znaku odebranego się zapala ) ale nie...
Przykład obsługi przerwania od przycisku poziomem niskim: [syntax=c] //**************************************... // // File Name: 'main.c' // Title : AVR DDS2 signal generator // Author : Scienceprog.com - Copyright (C) 2008 // Created : 2008-03-09 // Revised : 2008-03-09 // Version : 2.0 // Target MCU: Atmel AVR...
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...
nie wiem czy dobrze myślę, ale to nie ma szans działać, bo procesor jednocześnie nie nadaje i odbiera... Ma szanse działać ;) zapewniam cię. Tylko trzeba to dobrze oprogramować. Wprawdzie sam kiedyś tak myślałem ale ostatnio aż się zdziwiłem że kody wygenerowane w podczerwieni z diody IR (za pomocą zresztą programu z PC'ta, który przez USART wysyłał...
Dobry pomysł z tym blokowaniem przerwań w pozostałych ISR a odblokowywaniu dopiero w ISR licznika 0. :) Zaoszczędzić to może nieoczekiwanych problemów w przyszłości. Przerobiłem trochę program (głównie ISR od licznika 0). Co dziwne myślę że jest to samo co było tylko napisane w inny sposób... ALE DZIAŁA :). Wpisując jakąś wartość do tablicy (gdzie 125=1ms....187=1,5ms....250=2ms)...
Wg noty procesora zrobilem ponizszy kod do komunikacji: #define FOSC 12000000 #define BAUD 19200 #define MYUBRR (FOSC/16*BAUD)-1 unsigned long int licznik=0, licz=0, stan_licz=0; unsigned short int sekunda=0; unsigned char tekst[16], buf_zlicz[2], zliczanie=0;//, temp=0; void USART_Init( unsigned int ubrr ) { /*...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
Witam, mam takie pytanie - bo napisałem sobie kilka że tak powiem własnych funkcji i procedur do obsługi różnych modułów procka ale dla przykładu weźmy moduł UART. Napisałem sobie całą obsługę na przerwaniach lub bez w zależności od parametrów. Także opcjonalnie obsługę z przerwaniami i bez czy RS485. I wszystko działa ślicznie ale głównie wtedy gdy...
Na początku pliku port.h masz #define __AVR_ATmega168__ i to determinuje jaka zawartość pliku jest dostępna. A tak nie powinno być. Robisz projekt, w opcjach projektu (ATMEL STUDIO lub ECLIPSE) wskazujesz docelowy uC np. Atmega16 i po tym wyborze jest dostępna zawartość dla wybranego uC. Wybierzesz inny uC to wszystko zmienia się pod ten inny. A Ty...
Kończę właśnie mojego Hexapoda. Rozbudowuje komunikację pomiędzy dwoma atmega16. Jeden to sterownik serw a drugi oblicza kinematykę i struje wyświetlaczem LCD. Otóż problem polega na tym że transmisja jest pełna błędów. Uśredniając to co 5-6 transmisja jest prawidłowa. Ustawienia USARTu: UBRRL=0x33; UBRRH=0; //ustawienie prędkości transmisji dla 9600...
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......
Nie wiem jaki to uP ale np. dla ATmega16 wygląda to tak: Włączasz przerwanie: UCSRB|=(1<<TXCIE); sei(); //dostępne globalne przerwania A tu jest podprogram obsługi przerwania: ISR(USART_TXC_vect) { cbi(PORTB, PB2); //0 na pinie PB2 } aha i jeszcze musisz włączyć bibliotekę: #include <avr/interrupt.h>...
Rozwiązanie jest proste - stosować _delay_us z <util\delay.h>. Przy 1MHz co prawda można minimalnie mieć 3us opóźnienie, ale w tym przypadku jest to bez znaczenia. A BTW, dziwię się po co tak komplikować prostą sprawę jaką jest obsługa 1-w, skoro nawet w notach aplikacyjnych Atmela pokazane jest jak to zrobić na USART, bez jakichkolwiek opóźnień,...
O, i taka krytyka jest mi wlasnie potrzebna ;) Dzieki za uwagi :) Manuala sobie postudiuje ale najpierw musze sobie znalezc w pdf-ie zeby moc wydrukowac bo z html-a nie bardzo sie chce czlowiekowi uczyc. Co do typow - rzeczywiscie - nie pomyslalem o tym :) I nie sadzilem, ze jest inna funkcja zmieniajaca osobno inne typy int :) Co do odmierzania czasu...
nie chcialem wklejac calego kodu dla uC :), wybralem tylko ta czesc co mi nie dziala oto calosc uC: #include <avr/io.h> #include <avr/signal.h> #include "uart.h" #include "SPI.c" #include "twiradzio.c" #define MUX_ON PORTB |= 0x02//ustawia 1 na pinie #define MUX_OFF PORTB &= 0xFD//ustawia 0 na pinie #define...
Witam, w poniższym programie występują niepożądane resety, sprawdzałem już wartość rejestru MCUCSR i tuż po resecie ma wartość 0 czyli jest to reset programowy. zorientowałem się, że źródłem jest wywołanie instrukcji odpowiadającej za przerwanie komparatora analogowego (w oknie disassembly adres 0x00000020), które jest wyłączone... nie wiem co powoduje...
np tak: źródło jest wygenerowanie automatycznie przez Codevision ale jak się przyjżysz to załapiesz o co chodzi :) i będzie to dla ciebie jakaś pomoc dla własnych modyfikacji #include <mega32.h> #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define...
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...
Witam Port mikrokontrolera RS232 z komputerem działa w obie strony, czyli uC wysyła mi ramkę, jeżeli w Hyperterminalu wcisnę przycisk to wywoływane jest przerwanie USART0_RXC. Z telefonem niestety komunikacja jest tylko w jedną stronę czyli uC wysyła, ale nie dostaje odpowiedzi. Wysyłane ramki są prawidłowe, bo wysyłając je z Visual Studio telefon od...
Ponizej przedstawiam swoj kod: #include <avr/io.h> #define F_CPU 16000000UL #include <util/delay.h> #include <avr/interrupt.h> //#include <avr/iom16.h> #include "lcd.h" #include "usart.h" #define Timer2_start TCNT2 = 0x63; TCCR2 = 0x07; //0x63 - poczatkowa 99, preskaler 1024 0x07 #define Timer2_stop TCCR2...
1. Najpierw przczepie się do PuTTY - nie jest to najlepszy terminal do prac debuggerskich... 2. Co dokładnie robi funkcja USART_TX( ) ? 3. Zdecyduj się na czym chcesz pracować - na indeksie tablicy, czy na wskaźniku? 4. Nigdy nie rób czegoś takiego jak "pierwszy bajt w pętli głównej a reszta w przerwaniu". Albo wysyłasz wszystko z pętli głównej poll-ując...
Witam, od jakiegoś czasu próbuję rozwiązać problem odbierania kodu RC5 przez avr'ka. Ponieważ nie jestem do końca pewny zbudowałem (a raczej zaprogramowałem) prosty nadajnik tego kodu. Tak wygląda kod odbiornika: [syntax=c] #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/io.h> #include <stdint.h>...
Witam Na wstępie powiem że nie jestem ekspertem w C. Pisze programik działający na Atmedze16. Mam dwa dwa układy Ram i RTC i muszę się z nimi dogadać przez SPI. I się nie dogaduje. Zeby zapisać cos i odczytać z Ramu muszę zapisać (dla zapisu) kod rozkazu - 8 bitów, adres komórki zapisywanej - 24 bity i dane - 8 bitów. Przy odczycie analogicznie rozkaz,...
Witam! Próbuję poradzić sobie z zapisem i odczytem zmiennej z EEPROM'u. Gdy po zapisaniu do pamięci zmiennej resetuję procka przy użyciu programatora to jest ona prawidłowo odczytywana. Gdy natomiast odłączę zasilanie to niestety procek odczytuje mi inną wartość. Ta źle odczytana wartość równa jest '1' czyli takiej wartości jaką wpisuję do EEpromu w...
Witam Napisałem na podstawie kursu http://mikrokontrolery.blogspot.com/2011... program na uC Atmega16 mierzący napięcie ,lekko go modyfikując ,żeby wynik pomiaru zamiast na LCD został wysłany przez UART/USART do AVRTV na uC Atmega8 . Obsługę UART znalazłem tu http://www.forbot.pl/forum/topics49/c-ua...
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.
Pozwoliłem sobie uczytelnić kod dla pokazania jak można sobie ułatwić pisanie kodu - zmieniamy w jednym miejscu, a zmiany są uwzględniane w całym kodzie... Daje to bezbolesną możliwość dowolnego przepięcia linii sygnałowych pod inne wyprowadzenia µC przy minimalnych zmianach w kodzie (podobnie jak w językach wyższego poziomu). #include <m16def.inc>...
Witam, Podłączyłem port RX i TX USART'a w jedną linie - czyli nadaję i odbieram za pomocą jednej lini (1-Wire) Teraz proszę o podpowiedz, używam przerwania i bufora 8 bajtowego do odbioru i nadawania i teraz nie wiem co zablokować by wysyłając nie dostać echa z RX'a? Próbowałem wyłączyć przed wysłaniem możliwość odbioru RXEN i wysłać, ale gdy włączyłem...
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...
Od jakiegos czasu mam dziwny problem z wyswietlaczem. Ponizej podaje kod zrodlowy: lcd.h // Definicje dotyczace LCD #define LCD PORTC //port z LCD #define RS 0 // wybor rejestru #define RW 2 // 1 - odczyt; 0 - zapis #define E 3 // sygnal zezwalajacy (enable) #define SET_E LCD |= _BV(E) #define CLR_E LCD &= ~_BV(E) #define...
Witam. Mam taki problem, gdyż chciałbym ogarnąć komunikację poprzez UART między dwoma mikro. Mam dwa uC: Atmegę 16, która działa jako master oraz Atmegę 88 jako Slave (na której będzie termometr, z którego będę odczytywał dane). Programy, definicje wyglądają następująco: plik RS485.h #indef RS_INT_H #define RS_INT_H //rozmiar buforów nadawania i odbierania...
Witam Problem jak w temacie, przy próbie wysłania znaku z terminala do atmegi, program się zawiesza. [syntax=c]#define BAUD 2400 #define MYUBRR F_CPU/BAUD/16-1 #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile unsigned char odb_flaga =0;//flaga informująca main o odebraniu liczby...
Może to nie robi problemu ale wykonywanie w przerwaniu transmisji usarta to chyba przegięcie. Przecież on ma swoje przerwanie a tak to niepotrzebnie zatrzymuje kolejkę przerwań i może coś pominąć.
Witam kolegów, mam dość dziwny kłopot. Poniższy program zawiera jedynie procedury służące do komunikacji Atmega16 z PC. Jest tu obsługa wejściowego i wyjsciowego bufora kołowego o pojemności 255znaków. Pętla główna jest w zasadzie pusta. W celu przetestowania każdy przychodzacy znak jest dodawany do bufora wyjściowego i odsyłany (echo). Program testuje...
char c; int a=0; ISR(USART_RX_vect) { c = UDR; a = 1; } Zmienne c oraz a isnieja tylko w przerwaniu. Po zakonczeniu przerwania giną... Aby przerwanie moglo ingerowac w zmienne globalne: volatile char c; volatile int a;
super, okazalo sie ze telefon sie przywiesil...dlatego nie chcial wspolpracowac.. teraz dzialal,z poprzednim kodem tez..eh.... nadal jednak jest problem z odbiorem... dzieki zumek,doksztalciles mnie troche :) mimo _BV(RXEN) | (1<< RXCIE) i sei(); przerwanie tak jakby wogole nie wystepuje... :/ SIGNAL(SIG_UART_RECV) { char znak; znak=UDR; dana(0x41);...
Poprawiłem tytuł na bardziej zgodny z regulaminem p. 3.1.15. LordBlick Mam problem z ustawianiem czasu i daty na mojej płytce testowej na której umieściłem układ zegara DS1307 na Atmega 16. Nie wiem jak to zrobić w c.proszę o pomoc i przykłady dołączone do działającego programu zegara ale wyświetlającego mi po wgraniu wcześniej zdefiniowany czas i...
Witajcie Mam problem. Zrobiłem układ który wysyła do wyświetlacza TFT dane za pomocą funkcji opisanej w datascheet Atmegi16. Działa super: void USART_Transmit( unsigned int data ) { while ( !( UCSRA & (1<<UDRE))); UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) UCSRB |= (1<<TXB8); UDR = data; } zrobiłem też odbiór i tu się zaczynają...
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...
Dlaczego podczas odczytu I2C nie będą uwzględniane przerwania? Ja ich na ten czas nie wyłączam, chyba że robi się to sprzętowo. Sam fakt, iż robisz to w obsłudze przerwania, powoduje, że obsługa pozostałych przerwań jest minimalnie opóźniona (stąd obsługa przerwań powinna być błyskawiczna i przekazywać istotne dane do przeliczenia w pętli głównej)...
zatem tak procesor atmega16, zaprogramowałem atmege na pomiar ciągły i mam bardzo dziwny problem, atmega połączona przez UART do komputera, zczytywanie w labview. tam trzeba ustawić takie coś jak delay before raad(ms), w kodzie na atmedze ustawiłem _delay(100), w programie tez, i mam bardzo dziwny problem, nic nie jest podpięte do przetwornika, powinna...
Zgadzam się z kolega rpal. Zdarza mi się popełniać konstrukcje w których wykorzystuję 2 x UART, najczęściej właśnie na ATmega162. Spokojnie można zrobić oprogramowanie nawet szybkich transmisji (rzędu 460kbps i więcej, zależnie od zastosowanej częstotliwości zegara), bez ryzyka utraty danych. Odbiór robisz na przerwaniach, w procedurze obsługującej...
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...
Witam, Przeczytałem wiele stron z podobną tematyką, próbowałem wielu różnych algorytmów, jednak nie udało mi się osiągnąć tego co chciałem. Założenie: Komunikacja aplikacji napisanej w visual c++ 2010 express z atmega16/32. 1. Wysyłka 5 liczb z komputera: (parametr1, parametr2, parametr3, parametr4, parametr5) na atmegę. Sprawa wydawałoby się prosta,...
Witajcie! Mam podstawy do tego aby sądzić, że uzyskanie milimetrowej dokładności w mierzeniu odległości przy pomocy ultradźwięków to fikcja. Przy odseparowanym nadajniku i odbiorniku, gdy wysyłam paczki 5 impulsów sygnału 40kHz co równe odstępy czasu, odbieram, w zależności od odległości interwały różniące się od siebie o 25us czyli dokładnie tyle ile...
Chyba raczej powinno wyglądać to tak: SIGNAL (SIG_USART1_RECV) { // USART RX interrupt tu treść procedury } No i przy inicjacji ustawiłbym też ucsr1c i wywaliłbym loop_until_bit_is_set(UCSR1A,UDRE1); U mnie z tymi uwagami działa.
No to po tygodniu znów witam :) Po godzinach zgłębiania stron dokumentacji oraz zapoznawania się ze wszelakimi opiniami jak to się robi pojawiła się lista kolejnych pytań. Ale najpierw to co już mam. Mikrokontroler - ATmega162. Dlaczego ?? W kwestii mikrokontrolera to na prawdę nie wiedziałem czym się kierować....ale wybrałem taki który ma 16k pamięci...
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 :) Jako ze jest duzo pytan na forum na ktore odpowiedz padla, postanowilem ze zbiore choc troche postow do kupy, tematy dotycza glownie AVR, bo z ARMow jeszcze nie czuje sie na tyle na silach zeby robic FAQa ;) Mam nadzieje ze sie komus przyda :) Niby FAQ jest, ale dla mnie jakoś malo czytelny i chyba nikt go juz nawet nie aktualizuje ;) Jesli...
Eh, opornie to idzie. Próbuję obsłużyć przerwanie. Że tak powiem - moje pierwsze w życiu :P Póki co nie idzie za bardzo. Przypuszczam, że coś źle robię z ustawieniami pamięci (.org coś tam). W każdym razie - mam podłączony klawisz do pinu INT0 (ATmega16). Program ogólnie komunikuje się z Delphi, ale chciałem, aby przy naciśnięciu tego klawisza wyszło...
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...
Wracając do tematu - autora jednak zachęcam do wykorzystania USART/SPI. Wbrew temu co napisałeś timingi dzięki temu są lepsze. Zauważ, że softwarowe generowanie przebiegu wymaga zablokowania lub niekorzystania z przerwań. Teraz pomyśl jak pogodzisz niezakłócone sterowanie diodami np. z transmisją USART? Jeśli nie wykorzystasz do tego przerwań lub je...
Witam Mam program który używa USART, ponieważ potrzebowałem jeszcze jednego portu UART, dołożyłem softwerowego UARTA i tu zaczeły się problemy z watchdogiem. Ustawienia watchdoga sa takie że robi restert jesli nie bedzie jego zerowania po około 2s, dopóki nie dodałem softwerowego uarta wszytsko było ok, ale po jego dodaniu reset procka nastepuje już...
Witam Posiadam Atmega162. Piszę w AVR studio 4 - ASM. Programator to USBasp, programowanie za pomocą mkAVR Programuję oba usarty tak samo aby przekazywał z RXD0 na TXD1 natomiast RXD1 na TXD0. Tak wiem że to bez sensu ale taki chcę omówić z wami przykład. Pytanie brzmi dlaczego dane przechodzą z RXD0 na TXD1 natomiast z RXD1 na RXD0 nie. Jest to wykonane...
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 Zastanawiam się dlaczego program "nie wchodzi" do przerwania po wysłaniu bajtu po rs232. Kod przerwania: [syntax=c] ISR(USART_TXC_vect){ PORT_LED = 255; while(1); } [/syntax] Funkcja inicjująca UART: [syntax=c] void InitUART(int baudrate) { // Enable 2x speed UCSRA = (1<<U2X); // Set baudrate UBRRH = (unsigned char) (baudrate>>8);...
Witam Zrobiłem komunikację pomiędzy dwoma Atmegami16 po I2C. Jeden pełni rolę slave, drugi mastera. Poniżej zamieszczam program slave (ze względu na to że program jest rozbudowany o odczyt z wykorzystaniem przerwania przetwornika ADC oraz obsługę wyświetlacza z nokii zamieszczam tylko częśc dotyczącą I2C): [syntax=c] //pliki nagłówkowe #include <avr/io.h>...
Mam program, w którym uruchamiam przerwanie z pinu ICP. I wszystko działa jak należy, program jest przetestowany. Postanowiłem połączyć go z programem do obsługi karty pamięci pobranym z //**************************************... // **** MAIN routine FOR Interfacing microSD/SDHC CARD **** //**************************************...
Witam Porwałem się na robienie własnego sterownika co i stanąłem w martwym punkcie. Mianowicie sterownik składa się z 2 płytek na których są Atmegi 16 taktowane zewnętrznym kwarcem 11.059200 + kwarc zegarkowy jeden układ odpowiedzialny za odczyt temperatur regulację fazową wentylatora oraz sterowanie elektrozaworami a drugi obsługa wyświetlacza graficznego...
przerwanie usart atmega16 usart stm32 usart przerwanie
wieczna bateria siemens micromaster sprężyna siłownika krups
Falowanie obrotów Audi A3 8L 1.6 AVU po wyłączeniu klimatyzacji Dane techniczne lodówki Whirlpool 947/H