UCSRC i UBRRH to jeden rejestr. Jeśli zapisujesz do niego wartość z zerem na bicie 7 - to zapisujesz UBRRH; jeśli z jedynką - zapisujesz UCSRC. Przykład z katalogu właśnie to ilustruje. Zapisujesz wartość z zerem na b7 - i zapis idzie do UBRRH, następnie zapisujesz wartość zawierającą 1 << URSEL - i zapis idzie do UCSRC. Zwróć uwagę, że obie nazwy...
Przeanalizuj jeszcze raz inicjację usart z nastawieniem na : Accessing UBRRH / UCSRC Registers
Hej, napisalem cos takiego na ATm8515, fuse_high=0xd9, uP pracuje na 1MHz, transmisja ustawiania na 8N1, bez parzystosći, 19200, 9600 i za każdym razem komputer odbiera od uP przekłamaną w całości transmisję. Coś zmaściłem, ale co?? Skończyły mi się pomysły.. Z góry dzięki, migod usart.c --------------------------- static volatile u08* data; void usart_init(u16...
Włączyłeś przerwanie zgłaszane po opróżnieniu rejestru UDR, a nie masz nigdzie procedury jego obsługi. Musisz ją zdefiniować dyrektywą .org adres aby została umieszczona pod odpowiednim adresem w pamięci, który przypisany jest do wektora tego przerwania. Jeśli przerwań nie obsługujesz nie ustawiaj bitu UDRIE. Chodzi o to, że po przepisaniu danej z UDR...
Numer jest taki. Rejestry UBRRH i UCSRC są na tym samym adresie. Poniżej przedstawiam kawałek PDFa, jak w C uzyskać dostęp do tych rejestrów: Zapis: ... /* Set UBRRH to 2 */ UBRRH = 0x02; ... /* Set the USBS and the UCSZ1 bit to one, and */ /* the remaining bits to zero. */ UCSRC = (1<<URSEL)|(1<<U...
Mylisz rejestr z jego mapowaniem do przestrzeni adresowej. To są oczywiście dwa oddzielne rejestry, najstarszy bit określa, który z tych rejestrów jest aktualnie zmapowany do przestrzeni adresowej, czyli do którego z nich zostanie przesłanych pozostałych 7 bitów.
Przewertowałem dokumentacje procesora, forum i znalazłem takie rozwiązanie Ubrrl = &HFF '1200 dla kwarcu 14745600 'Ubrrl = &H7F '2400 dla kwarcu 14745600 'Ubrrl = 191 '4800 dla kwarcu 14745600 'Ubrrl = 95 '9600 dla kwarcu 14745600 Reset Ucsrc.7 'wybierz ubrrh zamiast ucsrc Ubrrh = 2 '1200 dla kwarcu 14745600 'Ubrrh = 1 '2400 dla kwarcu 14745600 'Ubrrh...
Co do pierwszego kodu, prawdopodobnie uart działa zbyt wolno - błąd jest tutaj: UCSRC = _BV(UCSZ0) | _BV(UCSZ1); //--- ustawienie ramki, kolejno: długosc slowa - 8bitów UCSRC |= _BV(USBS); //--- ilosc bitów stop - 2 UCSRC |= _BV(URSEL); //--- zapis/odczyt danych z/do UCSRC Nie ma dowolności kiedy co ustawić, ustawiać...
Rejestry UBRRH i UCSRC faktycznie mają ten sam adres i dostęp do nich jest realizowany następująco: Podczas zapisu o przeznaczeniu zapisywanej wartości decyduje ostatni 7 bit jeżeli =1 to zapis do UCSRC, jeżeli =0 to zapis do UBRRH Odczyt jest bardziej skomplikowany. Normalnie jeżeli odczytujesz z pod tego adresu to odczytasz wartość rejestru UBRRH,...
Po pierwsze - czy ustawiłeś prawidłowo fusebity, aby procesor pracował na zewnętrznym oscylatorze? Po drugie - w karcie katalogowej jest informacja, że rejestr UBRRH i UCSRR znajdują się pod tym samym adresem, więc instrukcją UCSRC|=_BV(UCSZ1)|_BV(UCSZ0&... wpisujesz tak naprawdę wartość do rejestru UBRRH! Aby wpisać ilość bitów danych...
Jest w Arduino IDE ... oryginalnie w IDE nie ma wsparcia dla Atemeg 16/32, trzeba szukać i dograć odpowiednie pliki z zewnątrz. A te, które są w internecie mają błędy. Trzeba poprawiać. W załączniku bootloader taki właśnie. U mnie działa na IDE 1.5.8 Instalacja dodatku: - plik ...\hardware\arduino\avr\boards.txt zastapić nowym z załącznika - utworzyć...
Witam, mam problem nie mogę ustawić zmiennych UBRRH UBRRL UCSRA UCSRC UCSRB tak abym miał partity odd ;/ dodam ze układ na 8N1 działa Kwarc 3686400Hz.. Moje ustawienie: UBRRH=0x00; UBRRL=0x19; UCSRA=0x00; UCSRC=0x66; UCSRB=0x98; Dzięki za pomoc
Wczoraj miałem pomieszane pliki i wstawiłem starą wersję z push. Dlaczego następuje mazanie? Przecież to co wstawiłem w mainie i tak zdejmuję w funkcji? Co do kolejność OlekM masz rację. Przecież UCSRC i UBRRH mają tą samą przestrzeń adresową, dlatego najpierw UCSRC z URSEL a ptem UBRRH. Ale dopiero po poludniu to sprawdze. Pozdrawiam.
A mógłbyś to jakoś opisać kodem ? [syntax=c]#define BAUD0 9600 //BaudRate (bps) #define MYUBRR0(F_CPU/16/BAUD0-1) //Przerwanie co 0.1s ISR(TIMER1_COMPA_vect) { uint8_t key; static uint8_t lkey=0; key = (PINC & (1<<3)); //przycisk NPN na PC3 if(!key && lkey) UDR='k'; //wyślik "k" jako znak, że wciśnięto przycisk lkey = key; } //przerwanie...
Zastanów się, czy inicjalizacja z użyciem "|=" jest poprawna. UCSRC i UBRRH w tym procesorze współdzielą adres. Zgodnie z notą pierwszy odczyt UCSRC w rzeczywistości zwróci UBRRH, tak więc UCSRC |= ( (1<<URSEL) | (0<<UCSZ1) | (0<<UCSZ0) | (1<<UCPOL) ); można inaczej zapisać jako: UCSRC...
Witam wszystkich, jestem początkującym programistą :cry: i o ile z LCD dałem sobie radę to z RS nie mogę w załączniku są zawarte moje zmagania. Po prześledzeniu symulacji zauważyłem, że po wprowadzeniu UCSRC wartość zapisana w UBRRH ulega zmianie. Proszę mi pomóc bo sam nie dam sobie rady.
Nie wpisujesz niczego do rejestru UCSRC. Brzmi to dziwnie, ale rejestr UCSRC i UBRRH są pod tym samym adresem, więc żeby wpisać coś do UCSRC trzeba wpisywać liczbę z ustawionym najwyższym bitem: UCSRC = 0b10000110; // 8 bit, NP, 1 bit stopu
Sprawdź taką zmianę: [syntax=c]UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<... Bitem URSEL wybierasz rejestr do którego zapisujesz (1=UCSRC,0=UBRRH) edit. dreamy był szybszy ;)
No dobra, problem chyba na pewno tkwi w zapisie do UBRRH i UCSRC. Chodzi o flagę URSEL. When the function writes to the UCSRC Register, the URSEL bit (MSB) must be set due to the sharing of I/O location by UBRRH and UCSRC.) (strona 138 ze specyfikacji). Tyle tylko, że poniższa modyfikacja problemu nie usuwa(choć teraz 'a' jest odbierane jako <0>r)...
Wczoraj z kolegą posiedzieliśmy i udało nam sie wychwycić kilka bugów, zarówno sprzętowych jak i softwarowych. Wieczorkiem udało mi sie nawiązać połączenie pomiędzy komputerem a sterownikiem (nie udało sie ustabilizować transmisji, ale przynajmniej od strony sprzętowej zadziałało tak jak trzeba - impulsy elektryczne o właściwych wartościach). Dziś zlokalizowałem...
Jeśli zapisujesz coś do UCSRC to zawsze bit URSEL musi być ustawiony. Poza tym niepotrzebnie obciążasz procesor obliczaniem zawartości rejestrów UBRRH i UBRRL. Jeśli zapisujesz coś do rejestru to zapisz to jednym rzutem, a nie rozbijasz to na naście linijek. Zapisy typu "UCSRC |= (0<<USBS);" nie mają sensu. Taka operacja nic nie zmienia: 0|0=0...
Mega 8, kwarc 14745600 i transmisja 1200 bez problemu. BAscom ze standardowymi komendami ni ebędzie tego potrafił. I to jest kolejne ograniczenie ale da sie je obejść. W nocie katalogowej do ustalania prędkości są dwa rejestry: (UBRRL i UBRRH). Bascom używa tylko UBRRL (dlatego że dostęp do UBRRH jest bardziej skomplikowany). To znaczy że transmisja...
No i chyba proste będzie rozwiązanie. Nie masz żadnej wartości w UBRRH, a gdy zapiszesz cokolwiek do UCSRC najprawdopodobniej w prawidłowy sposób będzie tam zapisane. Program wyświetla daną z pod adresu, a więc wyświetla UBRRH, ale UCSRC jest tak jakby pod nim, więc program tam zapisał wartość, ale jej nie pokazuje. Sprawdź po prostu czy transmisja...
Nie zgadzam się z Tobą! Według Twojego wzoru (błędnego to fakt) otrzymamy 104, taki błąd nie jest w stanie uniemożliwić transmisji co działo się w przypadku twojego kodu. To jedna sprawa. Druga, czytaj dokumentacje! W przypadku atmega8 adres rejestru UCSRC i UBRRH jest współdzielony, wybór dokonywany jest poprzez znacznik URSEL. Do czego zmierzam: w...
Owszem kompilator mi psikusa zrobił... a moze to <io/avr.h>? Adresy UBRRH i UCSRC są identyczne! Normalnie oniemiałem... Nawet widać to na zdjęciu które zamieściłem: w prawym dolnym rogu ekranu: UBRRH 0x20 (0x40), UCSRC 0x20 (0x40). Powaga, zupełnie zgłupiałem jak to zobaczyłem.. Czyli co, musze zmienić adres w <io/avr.h>? BTW. kompilator...
Tutaj masz kolejny błąd. Rejestry UBRRH i UCSRC współdzielą ten sam adres. Aby wpisać coś do rejestru UCSRC musisz więc ustawić bit URSEL, bo w innym przypadku nadpisujesz wartość UBRRH i prawdopodobnie masz źle skonfigurowaną prędkość transmisji. Powinno być:[syntax=c] UCSRC = (1<<URSEL) | (3 << UCSZ0);[/syntax]
Wklejasz nie pełny kod, zapuść tłumaczenie tego bitu ursel z pdf'a. ... To znaczy tyle że ten bit wybiera czy zapisując pod adres rejestru ucsrc zapisujemy tam czy (=0) zapisujemy do ubrrh. Domyślnie ten bit jest 1 i jeżeli tego nie zmienisz to zapis do rejestru ubrrh tak naprawdę zapisze do ucscr. Takich numerów w M8 jest chyba 4. The UBRRH Register...
Witam, poprawiłem to, jednak nic się nie zmieniło. Ciagle przesyła krzaki. Wartości rejestrów wg AVR Studio ładowane są poprawnie, jednak ciągle w momencie zapisu rejestru UCSRC on zapisuje UBRRh Pozdrawiam....
Kilka drobnych poprawek było jeszcze, ale już wszystko śmiga. Wywaliłem "1<<UCSZ2" bo faktycznie źle spojrzałem w note katalogową, a linie z ustawieniem predkości UBRR wstawiłem po UCSRC i juz UBRRH mi sie nie zmienia. Dzięki za pomoc a temat uważam za zamknięty.
Po prostu dlatego ze tworca BASCOMa nie zrobil takiej mozliwosci. Inaczej mozna to zrobic bardzo prosto: wpisujac nowa wartosc do rejestrow UBRRH I UBRRL (kolejnosc wpisywania jest wazna). Oczywiscie wpisywana wartosc trzeba wczesniej obliczyc bo w takim wypadku BASCOM juz jej sam nie obliczy. Rozumiem , Dzięki , poczytałem o dyrektywach i ich podziale...
W/w procku rejestry UCSRC i UBRRH współdzielą adres, rozróżnia się je poprzez najstarszy bit URSEL. Jak konfiguruje Uart'a: UCSR0A=0x00; UCSR0B=0x10; UCSR0C=0xA6; UBRR0H=0x00; UBRR0L=0x47; a potem symuluje w AVR Studio to on zamiast wpisywać do jednego danego rejestru wpisuje naraz do dwóch, zamiana miejscami wpisywania do rejestrów nie wnosi żadnych...
... I czy to ATmega 16,czy 32 to zawsze UCRSC==0x00 Chodzi Ci oczywiście o UCSRC A 'prawidłowa' odpowiedź jest tam, gdzie zazwyczaj. :D UBRRH/UCSRC read access http://obrazki.elektroda.pl/2145550400_1...
Jeśli chodzi o programowanie to sobie poradziłem. Rzeczywiście chodziło o to, że to zaprogramowania potrzebny jest jakiś zewn. kwarc. Mam natomiast roblem z działaniem układu. Ma sie on komunikować z komputerem za pośrednictwem RS232 - ale ciągle jest cisza. Jak sobie sprawdzam działanie programu w AVR studio to podczas inicjowania wszystkich rejestrów...
Witam Spróbuj zrobić tak jak jest w nocie nie poprzez zmienne a przez stałe. [syntax=c] #define UART_OSCYL 11059200// Clock Speed #define BAUD 9600 #define MYUBRR UART_OSCYL/16/BAUD-1 void uart_open1(unsigned long baudrate) { UBRRH=(unsigned char) (baudrate>>8); UBRRL=(unsigned char) (baudrate); UCSRB=0b00011000; // UCSRB=0x18; UCSRC=0b10000110; //...
Kryzys zażegnany. Zapomniałem podczas inicjalizacji ustawić bit URSEL, UCSRC = (0 << USBS) | (1 << UCSZ1) | (1 << UCSZ0) | (1 << UPM1) | (1 << URSEL); zresztą tak jak pisało w dokumentacji : "When the function writes to the UCSRC Register, the URSEL bit (MSB) must be set due to the sharing of I/O location by UBRRH and UCSRC"
...mowiac szczerze probuje na rozne sposoby.. Ty nie próbuj , tylko zapoznaj się z dokumentacją M16 , w części opisującej port szeregowy , bo to co "wyczyniasz" z rejestrami , przechodzi ludzkie pojęcie ;) ...ale czy sama konfiguracja polaczenia jest dobra? Fatalna :( UCSRC|=_BV(UCSZ1); //zapisujesz do UBRRH UCSRC|=_BV(UCSZ0); //zapisujesz...
Przed zapisem do UBRRH wyzeruj bit URSEL w rejestrze UCSRC.
Inicjalizuje rs'a w ten sposób: (Tak samo dla obu procków) Osobno z portami nic nie robie. unsigned int ubrr; ubrr = MYUBRR; while (!(UCSRA & (1<<UDRE))); UBRRL = (unsigned char) ubrr; // ustawienie UBRRL UBRRH = (unsigned char)(ubrr >> 8); // ustawienie UBRRH UCSRC = (1<<URSEL)|(3<<U...
Witam. Pocę się przy pisaniu w AtmelStudio 6. Mam problem z konfiguracją wspomnianego USART-a. Używam, a przynajmniej próbuję tym kodem: [syntax=c]#include <util/setbaud.h> void USART_Init(void) { UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; UCSRC=(1<<URSEL)|(1<<UCSZ1)|... UCSRB=(1<<RXEN)|(1<<TXEN); }[/syntax]...
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
problem kolejny w jaki sposób poprawnie skonfigurować uart ?? w chwili obecnej jest tak: ;UART ;baudrate - 9600bps ldi temp,0 out ubrrh,temp ldi temp,103 out ubrrl , temp ;aktywacja RXD ldi temp,(1<<rxen):<włą... odbiornika out ucsrb,temp ldi temp,(1<<UCSZ0)|(1<... :<-8 bitów danych out...
Witam, Napisałem program do obsługi USART-a, ale nie chce on poprawnie wysyłać znaków. Atmega8A, 8MHz-kwarc, 19200. W kodzie pokazałem problemy: [syntax=c] #include <string.h> #include <avr/io.h> #include <stdlib.h> void uart_puts(char *s); int main(void) { // zapis rejestrów USART UCSRA= 0; UCSRB=0x18; UCSRC=0x86; UBRRH=0; UBRRL=25;...
proponuję zrobić najprościej jak się da #define F_OSCILATOR 8000000 #define MYBOD_RATE 9600 #define UBRR_number (F_OSCILATOR/(16ul*MYBOD_RATE... int main(void ) { UBRRL =0xFF & UBRR_number; UBRRH = 0x7F & (UBRR_number>>8); UCSRB = (1<<RXEN)|(1<<TX... /* Set frame format:...
W atmedze8 aby wpisać coś do UCSRC trzeba dodać (1<<URSEL), inaczej całość zostanie wpisana do UBRRH.
Nieprawidłowy zapis.Kod który zacytowałem wyżej , powoduje zapis do rejestru UBRRH.Poczytaj o bicie URSEL. Piotrek
Witam, chciałbym opanować komunikowanie się mikrokontrolera z komputerem za pomocą UART przez FT232. Nie wiem dlaczego winavr nie rozpoznaje makrodefinicji UBRRH_VALUE, UBRRL_VALUE, chociaż zdefiniowałem w kodzie Dodano po 19 tutaj jeszcze błąd: > "make.exe" all -------- begin -------- avr-gcc (GCC) 4.1.2 (WinAVR 20070525) Copyright (C) 2006 Free...
Nie no zaraz zaraz. RX uC to jest to co odbiera dane, łączysz to bezpośrednio z TX telefonu ponieważ telefon i tak nie da więcej niż 3,3V a uC działa na 5V. TX uC to jest to co nadaje dane, i tutaj wychodzi sygnał 5V czego telefon nie przyjmie. Skoro układ z diodą nie działa najlepiej, użyj dzielnika napięcia szeregowo 2,4k, potem 2,7k do masy. Co do...
mega 16 juz działa sprawnie:) natomiast z tiny2313 mam klopot bo rejestry mam ustawione identycznie chodz nie ma on najstarszych bitow z UCRSC oraz UBRRH ale wgranie do nich czegokolwiek raczej nie zaszkodzi bo maja atrybut only read moje rejestry UCSRB = 0x1c; UCSRA = 0x00; UBRRH = 0x00; UBRRL = 0x03; UCSRC = 0x86; UDR odczytuje mi jako 0xff a wysyłam...
Twoja inicjalizacja Uarta wygląda ubogo. Spróbuj z taką: void UART_init(void) { // ustaw prędkość transmisji UBRRH = (unsigned char)(UART_CONST >> 8); UBRRL = (unsigned char)(UART_CONST & 0xFF); // załącz odbiornik i nadajnik UCSRB = _BV(RXEN)|_BV(TXEN)|_BV&... // ustalenie...
dołożyłem do gotowego programu zmienna nadaj #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 PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)...
(at)ElektrodaBot 1. wytłumacz mi to: UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; UCSRB = (1<<RXEN)|(1<<TX... UCSRC = (1<<URSEL)|(3<<U... [/syntax] 2. Jak działa szczegółowo to połączenie bluetooth jeśli chodzi o algorytm?
Dziękuje wszystkim za zainteresowanie. Myślę, że obsługa LCD nie jest tutaj problemem. Poprawiłem program do takiej postaci: Dodano po 12 Zmieniłem taktowanie na 8MHz i dioda miga szybciej ( ale nadal widzę zmiany stanu, ok 15 razy na sekundę). Zauważyłem jednak, że nie ma znaczenia jaką prędkość ustawię ( tzn jaka wartość wpiszę do UBRRL) to i tak...
Stworzyłąem sobie urządznie które ma gadać z Pecetem za pośrednictewem RS 232. Napisałem prosty program, zaprogramowałem procka, ale cały czas jest cisza. Sparwdzałem połączenia, poziomy napięć na max 232 - wszytsko się zgadza. Wszystko wskazuje że musi byc coś nie tak z kodem programu. Jest jedna rzecz , która nie daje mi spokoju. Otóż jak symuluje...
witam Zaczynam z atmega128 i na wstępie mam problem z uart avrstudio i asembler problem mam mianowicie z dostępem a raczej z wpisem do rejestrów UBRRH UCSRC z tego do czego doszedłem po paru godzinach to to ze avrstudio pokazuje mi te rejestry jako NA . Dodam ze fusebit jest wyłaczony M103 może ktoś mógł by mi to jakoś objaśnić bo nie czaje jak się...
Oto jeden z kodów który wymodziliśmy: program testing; var received_byte : byte; channel : byte; procedure Recived; org URXCaddr; //Procedura obsługująca odbieranie bajtu begin inc (channel); if UCSRB.FE = 1 then channel := 0; received_byte := UDR; if channel = 2 then PORTA := not received_byte; end; begin UBRRH := $00;...
Nie masz racji kolego. Błąd był bardzo trudny do uchwycenia. Na początku nie myślałem że głównym warunkiem zaistnienia tego błedu jest umieszczenie tych struktur lokalnie.Myślałem że problem dotyczy samej struktury, jej użycia, jej deklaracji itp. CO więcej , nie myślałem że błąd ten zależy też od istnienia innych funkcji i zmiennych. Zresztą wkleję...
printf w C jest bardzo rozbudowaną funkcją, która ma duży aparat formatowania tego informacji wyściowej (ilość znaków, precuzja w float, i kupa innych...). Jednak bardzo rzadko wykorzystuje się te możliwości. Niektóre kompilatory pozwalają na wyłączanie pewnych lelmentów printf-a. Więc ten sam kod skompilowany w Codevision AVR zajmuje tylko 424B. /***************************************...
Po długiej przerwie z rs232 wziąłem się do pracy i udało mi się odebrać z atmegi to co oczekiwałem. Oto program: [syntax=c] #include <avr/io.h> #define FOSC 1000000 // Clock Speed #define BAUD 4800 #define MY_UBRR FOSC/16/BAUD-1 void USART_Init( unsigned int ubrr) { // *** Set baud rate // UBRR - Baud Rate Register UBRRH = (unsigned char)(ubrr>>8);...
proponuje cos takiego: #include <avr/io.h> #include <avr/delay.h> #include "io.h" void USART_Init( unsigned int baud ) { //ustawienie portu DDRD &= 0xFE ; DDRD |= 0x02 ; PORTD |= 0x03 ; /*set baudrate*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /*enable receiver and transmitter*/ UCSRB = (1<<RXEN)|(1<<TXEN);...
Witam Mam problem z UART'em na Atmega16. Po ustawieniu takich wartości: UBRRH=0; UBRRL=0x19; UCSRC=0x86; UCSRB=0x18; pin TxD jest cały czas w stanie wysokim, a na RxD są jakieś wahania napięcia, dioda podłączona do RxD cały czas mruga:/ Trzeba jakiś opornik pullup? Próbowałem już różnych ustawień ale cały czas dzieje się to samo. Wie ktoś co to może...
Masz błąd w funkcji usart_init(). Brakuje Ci ustawień starszegi bajtu danych UBBRH oraz jednej najważnejszej rzeczy nie ustawiłeś ramki danych tzn bitów stopu, kontroli parzystości oraz wielkości ramki :) Funkcja usart_init() powinna wyglądać mniejwięcej tak: void USART_Init() { /* Ustawianie prędkości*/ UBRRH = (unsigned char)(UART_CONST...
Co się tyczy odczytu UCSRA: "Doing a read access to the UBRRH or the UCSRC Register is a more complex operation. However, in most applications, it is rarely necessary to read any of these registers. The read access is controlled by a timed sequence. Reading the I/O location once returns the UBRRH Register contents. If the register location was read...
Napewno masz ustawiony pin jako wyjscie? przecież tam wtedy jest tylko do wyboru stan niski albo wysoki, bez żadnego wysyłania. Co tu dużo mówić - sprawdzałem nawet bez maxa na konwerterze z tranzystorów i kondensatorem i tez bez problemów 115200. Mniejszego rezonatora niz ~11MHz bo nie mam "kompatybilnego" z rs'em w domu - tak też bym spróbował. ldi...
aktualizacja nie pomoże. Kompilatr w sumie wszystko napisał. zrób tak: UCSRC = (3<<UCSZ0); i powinno działać. Przecież ja napisałem dokładnie to samo, tylko u mnie widać które bity są ustawione. carkar spróbuj tego: #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <string.h> #define F_CPU 12000000UL...
Programowo nie da się jej zmienić....... Weź chłopie daj wszystko jak było, tylko BAUD daj 4800 i sprawdź, czy przy takiej prędkości działa #define F_CPU 1000000ul #include <avr/io.h> #include <util/delay.h> #include <avr/signal.h> #define FOSC 1000000 #define CZYT 50 #define BAUD 4800 #define MYUBRR FOSC/16/BAUD-1 void USART_Init(...
Sugerując się tym tematem http://www.elektroda.pl/rtvforum/topic13... Napisałem prostą obsługę rs485 dla dwóch mega16 jeden to master drugi slave. Niestety nic się nie dzieje błąd tkwi w kodzie lub połączeniu na płytce albo w obu. Master: #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> #include <stdio.h>...
Witajcie Postanowiłem pobawić się RS232. Używam do tego przejściówki USB->FT232->RS232. Atmega8 ustawiona: 8MHz Baud: 9600 UBBR: 51 Po przeczytaniu Datasheet i innych tutków napisałem coś takiego: [syntax=c]#include <avr/io.h> #include <inttypes.h> void USARTInit(uint16_t ubrr_value) { UBRRL = ubrr_value; UBRRH = (ubrr_value>>8);...
Witam To jest moj kod void RS_Init(void) { UBRRH=0; UBRRL=16; UCSRC=0x86; UCSRB=0x18; } uint8_t RS_Read(void) { while(!(UCSRA & (1 << RXC))); uint8_t b = UDR; if(b == '\r') b = '\n'; return b; } void RS_Write(uint8_t c) { if(c == '\n') RS_Write('\r');...
Witam, Wcześniej bawiłem się na Atmega8. Wszystko działało pięknie, na LCD wyświetlało się wszystko bardzo dobrze. Po zmianie procesora na Atmega32 coś się psuje z USART. Moja konfiguracja to 8MHz, prędkość 9600. Na wyświetlaczu dostaje dziwne krzaki. Zwykłe wyświetlanie działa bez problemu. Tak wygląda mój kod: [syntax=c] char USART_Read() { while(!(UCSRA...
Witam. Staram się aby AtTiny2313 było odbiornikiem. Napisałem program z użyciem przerwań i problem jest taki, że nie działa. Nie mam bladego pojęcia co jest grane, ogarniałem notę producenta i jestem w totalnej kropce. Oto kod. Czy możecie spojrzeć swoim okiem i powiedzieć co może być nie tak? [syntax=c]void USART_Init(void) { UBRRL=(uint8_t)UBRRVAL;...
Witam po dość długim czasie. Nie miałem zbytnio czasu żeby zająć się tym uartem. Jak do tej pory nie znalazłem żadnego kodu który kompilował by się bez problemów. Oprucz tego: #include <avr/io.h> #include <inttypes.h> void USARTInit(uint16_t ubrr_value) { UBRRL = ubrr_value; UBRRH = (ubrr_value>>8); UCSRC=(1<<URSEL)|(1<...
Tak wygląda mój kod. [syntax=c] volatile uint8_t sekunda = 0; char USART_Read() { while(!(UCSRA & (1<<RXC))) ; return UDR; } int main ( void ) { TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TIMSK |= (1<<TOIE0); sei(); lcd_init(); UCSRB |= (1 << RXEN ) | (1 << TXEN ); UCSRC |= (1 << URSEL...
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>...
Napisałem taki prosty programik , atmegE mam połączoną z komputerem (max232, adapter bluetooth, ) , na komputerze jak odczytuje port to mi wyskakują jakieś krzaczki , używam jakiś terminal , ustawiam boud rate co może być nie tak ? .equ RS=51 //4MHz ,4800 .CSEG .include "m8def.inc" .def zero=r2 .def tmp1=r16 .def Dana=r19 ;///////////////////////////////////////...
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...
Zbudowałem tą przejściówkę i pojawił się pewien problem, gdy ustawiam prędkość transmisji na amtedze8 na 9600 to poprawny dobór w terminalu mam na Baud 600. Zaznaczam że w przejściówce:Atmega88, 12Mhz kwarc, dzielnik zegara wyłączony. W nadajniku Atmega8, kwarc 16Mhz. Poniżej fragment kodu, inicjalizacja i definicje z nadajnika: #define F_CPU 16000000...
Kod działa OK dla 8MHz, 16MHz, a dla 20 trafia w osobliwość i się załamuje. Po zamianie zgodnie PDF: [syntax=c]void UART::Init(uint16_t baudrate) { //UBRRH = (uint8_t)(baudrate>>8); //UBRRL = (uint8_t)baudrate; //UBRRH = (uint8_t)(baudrate>>8); UBRRL = 129; UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1<<URSEL)|(1<<USBS)|(3<&...
Z datasheetów wynika ze daje sie 1u i 10u na zasilanie. to jest datasheet dla 232 http://www.datasheetcatalog.com/datashee... a to dla 232N http://pdf1.alldatasheet.com/datasheet-p... .Zaprogramuje i sprawdzę , może jednak chodzi. Dodano po 5 Niestety nie działa. Czy u was dzieje się tak z MAX232 jak...
Prawie że na kolanie napisane: #include <avr/io.h> #include <avr/interrupt.h> #define USART_BAUDRATE 57600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) // maksymalna liczba znaków polecenia #define UART_MAXBUFF 16 // bufor znaków polecenia (UART_MAXBUFF znaków + jeden pod znak zero)...
Jak odwróciłem polaryzacje ? USBS służy chyba do ustawiania czy ma być 1 bit spotu czy 2. Po za tym czy przypadkiem nie dawanie go w ogóle w formule a wpisanie przez ~_BV to nie to samo ? Popoprawiałem resztę i w tej chwili to wygląda tak: ... unsigned int znak=2; int *wektor = &znak; unsigned int i; void Init_RS232(void){ UBRRH = (unsigned...
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...
To jest program pod ATmega32 ale powinien dzialac #include <avr/io.h> #include <stdlib.h> #define F_CPU 8000000 // 8MHz zegar procesora #define CYCLES_PER_US ((F_CPU+500000)/1000000) // cpu cycles per microsecond // #define UART_BAUD 19200ul //prędkość transmisji w bodach (tu 19200 bodów) #define UART_CONST (F_CPU/(16ul*UART_BAUD)-1...
1. Powinieneś się zdecydować, albo obsługujesz odbiór w przerwaniu, albo w procedurze rec() . Obie metody na raz powodują, że procesor będzie wisiał cały czas w procedurze rec() ( RXC będzie zawsze wyzerowane po wyjściu z przerwania), 2. Następna sprawa - nie używa się już #include <avr/signal.h> , tym bardziej jednocześnie z #include <avr/interrupt.h>...
O co chodzi z tym znikającym kodem ?: void UART_init(unsigned int ubrr) // inicjalizacja UArta { UBRRH = (unsigned char) (ubrr>>8); // ustawienie prędkości transmisji UBRRL = (unsigned char)ubrr; UCSRB = (1<< UCSRC = (0<<<< } To samo stało się w poście Light-I [url=http://www.elektroda.pl/rtvforum/vi...
Witam. Nigdy nie korzystałem z tej funkcji a teraz zaszła taka potrzeba i pojawił sie problem. Mianowicie program nie wysyła tekstu powyżej jednej litery przez uarta. Za to jesli wysyłam tylko jedną, jest transmitowana bez problemu. int uart_putc (char c); int uart_getc (void); #include <avr/io.h> #include <string.h> #include...
Witam szanownych Kolegów, Natknąłem się na problem, z którym wojuję już dłuższą chwilę. Mimo poszukiwań w obszernych zasobach naszego forum niestety nie udało mi się odnaleźć odpowiedzi lub podpowiedzi odnośnie mojego problemu (być może źle szukam). Nabyłem takie oto moduły: http://electropark.pl/moduly-komunikacji...
Pamiętaj jeszcze o sei(); no i to co pisałem -- #include ... Powinno działać. Oczywiście kompilator WinAVR? --- o i napisz jeszcze w UCSRC zamiast (3<<UCSZ0) troche przejrzyściej (jak dla mnie) czyli: (1<<UCSZ1) | (1<<UCSZ0) od razu widać że te bity są ustawione i własnie one ustawiają 8-bitową transmisję. -- zmień sobie na 1 bit stopu,...
Skąd wziąłeś taki sposób: When doing a write access of this I/O location, the high bit of the value written, the USART Register Select (URSEL) bit, controls which one of the two registers that will be written. If URSEL is zero during a write operation, the UBRRH value will be updated. If URSEL is one, the UCSRC setting will be updated. Podkreślone słowo...
Funkcja wysyłania działa mi dobrze. Funkcja odbierania niby dioda mignie jak coś odbierze, ale czy działa prawidłowo to nie wiem. W każdym razie gdy z PC wyślę coś dioda potwierdzi, że coś odebrałem, ale gdy wyśle to z powrotem to nic nie otrzymuje. Kod programu: rs232.h [syntax=c]#ifndef RS232_H #define RS232_H #ifndef F_CPU #define F_CPU 1000000UL...
Dziekuje za pomoc. Czyli mam to wrzucic najlepiej w sama inicjacje USART? czyli: void UART_init(unsigned int ubrr) { UBRRH = (unsigned char) (ubrr>>8); UBRRL = (unsigned char) ubrr; // UCSRB = (1<<RXEN)|(1<<TX... *** To zanegować ?? UCSRC = (1<<URSEL)|(3<<U...
Witam Oto mój problem: napisałem program do obsługi rs232 ale jak chce wysłać cokolwiek to zawsze odbiera 00 (testowanie w brays terminal). Dzieki za każda pomoc. //-------Konfiguracja interfjesu rs232--------------------- UBRRH=((czestotliwosc/(16*pr... UBRRL=(czestotliwosc/(16*predkos...
Hej Mam problem z uruchomieniem transmisji szeregowej. Na moje oko cos jest nie tak w miejscu w którym sprawdzam czy UDR jest pusty. Jeżeli zrobię programową obsługę i własny znacznik stanu tego bufora to wszystko działa. Może ktoś zauważy co jest nie tak. Poniżej kod: void USART_init() { UBRRH = 0; UBRRL = 103; //przy 16Mhz daje to 9600bps UCSRC =...
Sprawdziłem częstotliwości i zmieniłem swój kod tak jak mówiłeś i jest taki problem że wysyła po RS232 ale jakieś takie znaki inne niż ja chcę. http://obrazki.elektroda.pl/2363333400_1... ][/tex]
Ja tak inicjalizowałem tinego: UCSRC = 1<<UCSZ1 | 1<<UCSZ0; UCSRB = (1<<RXCIE)|(1<<T... // 8 Databits, receive and transmit enabled, receive complete interrupt enabled #define F_CPU 11059200 #define BAUD 9600 #include <util/setbaud.h> UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; Spróbuj...
Witam naskrobalem taki oto program ktory w domysle ma odbierac z btm222 wartosc 1 i uruchamiac wyjscie pc7 do sterowania tranzystorem. hardware to atmega32 , uart to 19200 , 8 bitow danych , jeden stopu bez parzystosci [syntax=c]#include <avr/io.h> #define PRZEK_PIN (1<<PC7) #define PRZEK_ON PORTC &= ~PRZEK_PIN #define PRZEK_OFF PORTC...
Witam, Główną przyczyną jak mi się wydaje była funkcja wyświetlająca tekst na ekranie. Z takim kodem dane są odczytywane prawidłowo: $GPGGA ? Chcę zrobić odczyt od łańcucha $GPGGA aż do 14 znalezionego przecinka po $GPGGA?
Problem stanowił ft232, po wymianie na inny wszystko zaczęło działać. Postanowiłem jednak odświeżyć temat ponieważ napotkałem się na jeszcze jeden problem. Przy wysyłaniu jakiegoś kilka razy jakiegoś ciągu znaków np: "dioda" Odbiór jest następujący (zarówno w VC# jak i w RealTerm). dioda dioda dddddddddioda dioda dioda dioda ddddddddddddiodadd tak wiec...
Kod inicjacji kamerki: USART_init(baud(19200)); Funkcja USART_init: void USART_init(int baudrate) { UBRRH = (unsigned char)(baudrate>>8); UBRRL = (unsigned char)baudrate; UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (3 << UCSZ0) | (1 << USBS);...
Najlepszy manual to dokumentacja megi32 dostępna bezpośrednio u atmela na stronie. Tak szybko patrząc, at90s2313 ma rejestry UDR/UCR/USR, ale tam jest prosty UART. Mega32 posiada USART, który posiada więcej rejestrów, które dostępne są poprzez UDR, UCSR void UART_init(void) { // ustaw prędkość transmisji UBRRH = (unsigned char)(UART_CONST...
Witam! według noty katalogowej ATmega8 ustawienie rejestrów aby włączyć uart wykonywane jest następująco: #define USART_BAUD 19200 #define USART_CONST (F_CPU/(16ul*USART_BAUD)-1... void init () { UBRRH = (unsigned char)(USART_CONST>>8); UBRRL = (unsigned char)USART_CONST; UCSRB = (1<<TXEN)...
scania panel ogrzewania instrukcja klawiatury laptopa yamaha amplituner wyłączać
ładowarka action naprawa potencjometru
Zwiększenie obrotów wirowania w pralkach Candy Paski informacyjne na telewizorze: EPG i OSD