co oznacz U2X = 0 , U2X = 1 ?? To też jest w pdf'ie. U2X to bit w rejestrze UCSRA. Bit odpowiedzialny za dwukrotne zwiększenie prędkości komunikacji.
No to ja tu widzę jeszcze taki dinks: W kodzie masz napisane, że prędkość transmisji to 9600. Zakładam, że mimo wszystko zostałeś przy zegarze procka 1MHz. Z tego zaś wynika, że jeśli do UBRRL wstawiasz 12, to twoja prędkość to nie 9600 a 4800. Drugą opcją jest to, że musisz załączyć bit U2X w rejestrze UCSRA (wtedy będzie 9600).
... ale wtedy musisz mieć pewność, że obsłużysz to przed pojawieniem się kolejnej sytuacji ustawienia flagi przerwania. Oczywiście TIFR to tylko przykład, bo flagi są także w innych rejestrach, np. TXC w UCSRA.
Rezystory muszą mieć wypadkową rezystancję około 120 Ω. Co daje 390Ω dla każdego rezystora. Nie jest konieczna masa, zegar RC procesora też może być. Należy zwracać uwagę na odczyt błędu ramki (rejestr UCSRA) przed odczytem z UDR. Oczywiście kod CRC jest niezbędny. Topologia gwiazdy, którą przedstawiłeś, raczej nie jest poprawna. Na początek...
zmieniło się to wtedy gdy we wtczyce odpiąłeś mase, a dałeś zamiast baterii zasilanie tak ? i w urządzeniu wykorzystujesz ten drugi program co podałeś tak ? a cóz to jest? 'Ubrr = 207 '4800 bps przy U2X=0 'Ubrr = 51 '19200 bps przy U2X=0 'Ucsra = &B00100000 'rejestr UCSRA 'Ucsrb = &B10011000 'Ucsrc = &B10000110 Czy ten drugi program korzysta ze sprzętowego...
Proponowałbym sprawdzać bit UDRE w rejestrze UCSRA, tak jak zaleca DataSheet na stronie 122
Co do wysyłania to myślę użyć tej funkcji: void wyslij (char c) { while(!( UCSRA & _BV(UDRE) )) ; UDR = c; } którą wywołałbym tak: wyslij(zmienna); gdzie zmienna to jakis tam odebrany wczzesniej znak. Teraz zastanawiam się jak przerobić funkcję odbierajaca znaki: char odbierz (void) { loop_until_bit_is_set(USR,RXC);....
Witam ! Czy ktoś mógłby podsunąć mi pomysł jak wykryć odłączenie urządzenia (telefonu) od portu szeregowego RS232 ? Próbuję sposobu: wysłać do tel. jakąś komendę, poczekać chwile i sprawdzić flage RXC z rejestru UCSRA - taki sygnał że rejestr UDR nie odebrał żadnego nowego bajtu, czyli że telefon jest odłączony.. Niestety nie do końca chce to działać...
Procedura "USART_Transmit" wykorzystuje sprzętowego USARTa ATmegi8. Działa ona w ten sposób, że najpierw sprawdza czy bufor w którym przechowywane są dane do transmisji jest pusty. Jeżeli nie jest pusty to czeka na jego wyczyszczenie, gdy stwierdza, że jest już pusty to wpisuje dana którą przekazujesz jako parametr do rejestru UDR, i transmisja odbywa...
Z tego co się tym bawiłem, to nie dostrzegłem, żeby w AVRach można było jakoś odczytać wartość bitu parzystości. Można odczytać z rejestru UCSRA bit PE, który mówi o błędzie parzystości przy transmisji. To tyle, co ja wiem.
Przerwanie od odbiornika jest wywoływane w momencie kiedy dana jest gotowa w rejestrze, więc ta pętla do while jest niepotrzebna (zresztą ona jest wręcz nie wskazana bo wydłuża obsługę przerwania o nie wiadomo ile czasu). Poza tym proponuję jeszcze w M8 sprawdzac rejestr UCSRA, w nim są zgłoszone ewentualne błędy (szczegóły w manualu). Poniżej działająca...
A czym ustawiasz rejestr UCSRA = ? . W nim jest bit odpowiedzialny za podwojenie prędkości usarta.
Nic, po prostu koledzy mają problemy z interpretacją kodu. Zapewne dla nich loop_until_bit_is_set(UCSRA,UDRE)... to ustawienie bitu UDRE w rejestrze UCSRA, a nie czekanie dopóki w/w bit jest ustawiony. Oczywiście UDR=ch; nie powoduje wysłania żadnych danych przez UART.
Przesyłaj ciąg aż do napotkania znaku o kodzie 0x00 czyli końca ciągu: void send_txt(char *text) { while(*text != 0) { UDR = *text; _delay_ms(100); text++; } } A wysłanie znaku lepiej sprawdzić poprzez flage UDRE (USART Data Register Empty) z rejestru UCSRA. Jeżeli jest ustawiona to można do rejestru UDR wpisywać...
Aby przyspieszyć komunikację po uarcie: - włącz bit u2x w rejestrze ucsra - przesyłaj dane w formacie Hex a nie bin. Zmniejszysz ilość przesyłanych znaków. Aby przyspieszyć działanie programu: - przenieś konwersję adc na przerwania. W momencie oczekiwania na koniec konwersji będziesz wysyłać dane po uarcie. Mam nadzieję że pomogłem.
Chciałem obserwować stan bitu TXC w rejestrze UCSRA, ponieważ program zatrzymywał mi się na: loop_until_bit_is_set(UCSRA,TXC)... ale właśnie do mnie dotarło, że ten warunek powinien być sprawdzany po wysłaniu, a nie przed. Chociaż i tak dobrze było by móc sprawdzić stan dowolnego bitu w dowolnym rejestrze i wyświetlić go na LCD.
Wrzuciłem te procedury do watomierz.c i wyskoczyły błędy Usuwam procedury i wszystko OK Bo te procedury są przeznaczone dla innego typu procesora. AT90S2313 nie ma takich rejestrów jak UCSRA czy UBRRL.
Dawno nie zajmowałem się AVRami, ale z tego co pamiętam, przed każdą operacją transmisji znaku poprzez USART należy skasować bit TXC z rejestru UCSRA. W przypadku, gdy używasz przerwań bit ten jest kasowany automatycznie w trakcie wywoływania obsługi przerwania od zakończonej transmisji. W Twoim przypadku, aby manualnie wykasować ten bit, należy ustawić...
Problem rozwiązałem, choć nie do końca rozumiem. Ustawiłem bit URSEL w rejestrze UCSRC. Teraz działa jak należy, tzn. przy prędkości 9600bps wysyła kilkaset liczb na sekundę. Doczytałem, że ten bit służy do wyboru rejestru UCSRA lub UBRRH. Czy ktoś mógłby mi wyjaśnić na chłopski rozum, do czego służy ten bit?? Bo w tym momencie program działa, ale sam...
"Usart Transmit Complete" w rejestrze UCSRA i może w pętli while oczekiwać na jej ustawienie i dopiero przełączać kierunek. int USART_Transmit( unsigned char data ) { PORTB|=_BV(2); waitms(1); //dla pewności, że max485 się przełączy while ( !( UCSRA & (1<<UDRE)) ); UDR = data; while (bit_is_clear(UCSRA,TXC))...
Pokaż schemat połączeń tego układu, bo rozpisanie w dziedzinie czasu tego co wysyłasz i tego co odbierasz pokazuje, że chyba masz odwrotną polaryzację sygnału i nieznacznie rozjechaną prędkość. Od strony programowej widzę tylko brak inicjacji wartości rejestru UCSRA i kilka drobnych błędów, które nie powinny wpływać na pracę. Np. ubrr_value>>16 jest...
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...
Witam, Mam problem z procesorem ATMega8 oraz transmisja uart. Skopiowałem z datasheet'a kod pozwalający wysyłać dane za pomocą rs232. Kłopot jest w tym, że nie jest ustawiana flaga UDRE, oznaczająca wolny bufor nadawania przez co wchodzi w nieskończoną pętlę. Pytanie: DLACZEGO?? Testowałem na dwóch komputerach w GCC i ASM i zawsze to samo. Jakieś sugestie...
(...) if(odb_flaga) {at_komenda_sprawdz();}... } } Kod robi takie błędy --> Na początku sam wykonuje case 0, po nim mogę wprowadzić case 0 jeszcze raz po czym pętla się kończy a chciałem mieć możliwość nieskończonego wybierania klawiszy . Case 1 nie chce działać Na podstawie podanego fragmentu kodu trudno dokładnie...
witam! Czy udało się komuś odpalić USART-a przy wewnętrznym zegarze 1MHz? Procek mega8535. U mnie wysyła śmieci, a według datasheet'a max błąd dopasowania częstotliwości wynosi 0.2%*, czyli nie powinno być źle... Używam terminala "Bray'a", który umożliwia ustawienie dowolnej prędkości transmisji - "przeskanowałem" od 6.500 do 11.000 b/s z krokiem co...
Mój problem polega na tym, że atmega ma otrzymać polecenie w trakcie wykonywania pętli, wysyłam więc 100 razy jedną liczbę w każdym cyklu pętli sprawdzając stan linii RX. Mógłbyś wyjaśnić w jakim celu wysyłasz 100 razy to samo. Gdy program wychwyci zmiany na RX robi goto do funkcji odczytującej jedną ze 100 wysłanych identycznych liczb Nie bardzo rozumiem...
Podejrzewam odjazd częstotliwości wbudowanego oscylatora ATmega w górę. Możesz to zweryfikować wstawiając po UDR=command[i]; Jakieś opóźnienie rzędu ok. milisekundy. To jest za to zbędne (drugi raz, po załadowaniu rejestru UDR): while(!(UCSRA&(1<<UDRE))); A jeżeli wstawienie tego pomaga, to by wskazywało na objaw, o którym piszę. Procedury...
Możliwe że te rejestry powinny się nazywać "UCSR0A" i "UDR0". EDIT. Uprzedzili mnie :D
Teraz udczyt masz jak zwykle dwie możliwość pulling i przerwania - pulling jest prościutki unsigned char USART_Receive( void ) { /* Testujesz flagę RXC w rejestrze UCSRA */ while ( !(UCSRA & (1<<RXC)) ) ; /* I czytasz z UDR jak w SBUF w 51*/ return UDR; } a teraz z przerwaniami :) Tutaj podobnie jak...
Raczej nie nastepuje to za szybko bo mam w kodzie out udr, r20 aaa: sbis ucsra, udre rjmp aaa cbi portd, 4 i cbi pord, 4 wykonywane jest dopiero po wysłaniu bajtu, który znajduje się w r20, dopóki bajt jest wysyłany program skacze od aaa: do rjmp aaa poniewaz bit udre w rejestrze ucsra jest ustawiany dopiero gdy bufor nadawczy jest opróżniony i nadawanie...
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;...
Witam, męczę się już dłuższy czas nad oprogramowaniem sterownika własnej roboty do kamery. Kamera przyjmuje komendy po protokole VISCA. Baud rate 9600; 8 bit słowo; parity none; 1 bit stopu. Napisałem program wysyłający odpowiednią komendę po wciśnięciu odpowiedniego przycisku, ale reakcji kamery nie było żadnej, więc postanowiłem podłączyć się pod...
Hmm...zainstalowalem sobie go ale w sumie nic wiecej ciekawego mi nie podaje. Za to po probach znalazlem, ze komunikacje mam raczej prawidlowa, bo: USART_Transmit('b'); spowoduje wyslanie mi literki b na terminal, wiec wszystko chyba gra z komunikacja, teraz tylko co zrobic, by mi prawidlowo wyslal wartosc zmiennej ? Dodano po 1 No dobra, juz...
Witam, Chciałem skomunikować ATmege128 z komputerem PC. Korzystając z manuala do tego kontrolera uzyskałem funkcję inicjalizującą: void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame...
Najpierw spróbuj może dodać: ...ale jak ustawię ręcznie bit UDRE w UCSRA który oznacza że bufor jest pusty, także nic się nie wysyła. To nie jest argument. Flag przerwań w AVR generalnie nie da się ustawiać programowo, niektóre można tylko wyzerować. Akurat UDRE można wyzerować tylko poprzez wpisanie bajtu danych do rejestru UDR, flaga ustawiana jest...
Jak ja skasowac? I czy w tedy nie odbierze mi tylko raz? Chcialem w kółko odbierać. Zle mi sie przedtem skopiowal kod odbioru, poprawnie jest taki: while ( !(UCSRA & (1<<RXC)) ); pomiar=UDR; utoa(pomiar,bufor,10); write_text(bufor); waitms(40); write_command(0x01); UCSRA=0; Oczywisci...
Mam ciekawy problem. Chciałem aby przerwania od UARTA były INTERRUPT. Nie można jednak tego zrobić, bo flaga przerwania jest kasowana po operacji na UDR a nie powejściu w IRQ tak jak np w przypadku timerów.Gdy zadeklaruje sie więc przerwanie INTERRUPT to natąpi przepełnienie stosu. W konsekwencji trzeba użyć przerwania SIGNAL, w nim wykonać operację...
myslalem ze : loop_until_bit_is_set(UCSRA,TXC); " Instrukcja UDR=c umieszcza w rejestrze UDR znak do wysłania. Instrukcja loop_until_bit_is_set(USRA,TXC) powoduje oczekiwanie programu na koniec transmisji znaku. Instrukcja sbi(USRA,TXC) ustawia znacznik TXC w rejestrze USR aby można było sprawdzać kolejny wysyłany bajt." a: UCSRC|=_BV(UCSZ1); UCSRC|=_BV(UCSZ0);...
Witam! Próbuję uruchomić UARTA w trybie asynchronicznym w asemblerze. Debbuguję program i po wykonaniu linii: out UCSRC, R16 zmienia mi się stan rejestru UBRRH z 0x00 na 0x26. Pytanie - dlaczego? Poniżej strzępki moich asemblerowskich myśli :) .INCLUDE "tn2313def.inc" ; kwarc 8MHz .equ BAUD=51 ;predkosc transmisji szeregowej 9600bps .list...
Witam! Bardzo rzadko wysyłam posta z pytaniem na elektrodę, zazwyczaj sam znajduję odpowiedź, lecz tym razem stanęłem w miejscu. Próbuję zaprogramować uC ATmega 8 żeby poprzez rs232 komunikował się z komputerem, za pomocą USART. Podłączyłem maxa232 zgodnie z datasheetem, program wygląda następująco: .INCLUDE "m8def.inc" ;czesc systemowa 1MHz...
#include <avr/signal.h> Wywal, nowa wersja gcc dla avr wymaga juz tylko <avr/interrupt.h> Zresztą, dwie poniższe funkcje w ogóle nie korzystaja z przerwań, więc możesz się pozbyć handlerów (SIGNAL(...){}) i uaktywniania przerwań (UCSRB = (1 << RXCIE) | (1 << TXCIE);) zresztą cały ten fragment jest źle. UCSRB = 1 << TXEN;//...
no wiec z ta kolejnością wysyłanych danych to jest w porządku (tej konkretnej kolejnosci wymaga ramka) kod funkcji zamieszczam : void USART_putchar(char c) // wysyła znak c na USART { UDR = c; // wpisz c do rejestru UDR loop_until_bit_is_set(UCSRA,TXC)... // czekaj na zakończenie transmisji SET(UCSRA,TXC); // ustaw bit TXC...
Jak pojawiaja sie krzaczki to jest problem z predkoscia. W jakim programie piszesz? Jaki masz kwarc? Dodano po 11 Zobacz czy dziala Ci to: // Sterownie diodą LED podłączoną do dowolnej linii mikrokontrolera // za pomocą dowolnego znaku odebranego z portu szeregowego // mikrokontrolera i wysyłanie jej stanu na port szeregowy #include <avr/io.h>...
Proszę spróbować następującej sekwencji uruchamiającej UART. Na symulatorze zachowuje się ona "lepiej". Oryginalna wersja traciła wpis w rejestrze UCSRC. UART_init: cli ;UBRRH ldi tmp,0x0 out UBRRH,tmp ;UBRRL ldi tmp,0xC out UBRRL,tmp ;UCSRA ldi tmp,0x0 out UCSRA,tmp ;UCSRB ldi tmp,(1<<TXEN) out UCSRB,tmp ;UCSRC ldi tmp,(1<<URSEL)|(1<&...
W C używałem tych samych funkcji do Mega2560 ... Skoro tak, pewnie kolega wie lepiej ode mnie czy te 4 rejestry wystarczą ;) W dokumentacji w sumie też więcej nie piszą. Ale czasem można coś przeoczyć. . Praktycznie wszystkie AVRmega mają takie same rejestry i tą sama obsługę wszystkich USART. Wyjątek stanowi nieprodukowany Mega161, produkowany nadal...
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...
Skomentuję ten twój kod. #include <avr/io.h> // dostęp do rejestrów #include <util/delay.h> #include <avr\sfr_defs.h> #include <avr\interrupt.h> #include <avr/interrupt.h> #include <avr/signal.h> #define F_CPU 16000000 //częstotliwość zegara w Hz #define UART_BAUD 19200UL //prędkość transmisji #define UART_CONST (F_CPU/(16ul*UART_BAUD)-1...
Dziękuje bardzo - działa. Zastanawia mnie jedno - w swoim programie używam funkcji sbis UCSRA, UDRE czyli skip if bit in register is set w przypadku UDRE przez ustawienie rozumie sie przypisanie 0. Z tego wynika że sbis nie sprawdza czy jest tam jedynka, ale sprawdza czy jest na swój sposób ustawiony (w niektórych rejestrach może to być 0, w niektórych...
Witam ! Założenia kodu: - port B ustawiony jako wyjście; - dane odebrane z portu szeregowego są przesyłane na port B - stan portu B jest z powrotem wysyłany za pośrednictwem portu szeregowego #include<avr/io.h> #include<util/delay.h> #include<avr/signal.h> #include<avr/interrupt.h> void InitUSART(void) { UBRRH =...
Witam Mam problem z ultradźwiękowym miernikiem odległości na atmedze8. Generacja częstotliwości przebiega prawidłowo, na odbiorniku za torem wzmacniaczy otrzymuję widoczny syglał odbity od przeszkody. Błędy pojawiają się przy komparacji sygnału z napięciem referencyjnym. Wynik jest bardzo niedokładny, ponadto od drugiego bądź trzeciego pomiaru procesor...
Mam taki kod jak niżej. Chcę odczytać ekspander po SPI i wysłać jego wartość na PC przez uart. No i jak nic nie jest podłączone do Atmegi, atmega wysyła albo wartość 0xFF albo 0xf8 rejestru SPDR. Dlaczego? Czy czasem rejestr SPDR nie powinien być pusty (wartość 0x00) przy odbiorze danej z niepodłączonego pinu MISO, MOSI, SCK czy CS? Czy podłącze MCP...
Witam, buduję model pojazdu gąsienicowego sterowanego za pomocą telefonu z systemem android po przez moduł BTM222. Od dłuższego czasu próbuję uzyskać reakcję ze strony atmegi lecz bezskutecznie. Wyprowadzenia PORTC 0-3 podłączone są pod mostek h L298n. Aplikacja łączy się z modułem lecz przy wysłaniu komendy miga tylko dioda DATA przy BTM. Podejrzewam,...
No cóż, jak dla mnie to 2 sprawy do przerobienia : 1. Pomiar czasu na Timer0 - jakaś parka bajtów w SRAM, służąca za licznik, który co przerwanie zmniejsza swoją wartość do zera, ale się nie przekręca. Jak chcemy zmierzyć czas, to cli, zapis licznika, sei i już tylko sprawdzamy czy licznik jest wyzerowany, a w międzyczasie program może wyskoczyc do...
Witam Bardziej profesjonalnie jest wszystkie układy potraktować jako slave . Każdy słucha i czeka na przerwanie z uarta , jak je otrzymuje odbiera zawartość z udr porównuje i albo odbiera dalej albo ignoruje i czeka na kolejny adres . Atmel wyposażył układy w tryb multimaster ,który się do tego świetnie nadaje i warto o nim przeczytać w dokumentacji...
1. Nie pamiętam rejestrów AVR ale zakładając, że twój timer działa to funkcja powinna poinformować środowisko jaki jest status operacji a czas timeoutu powinien być ustawiany w funkcji Przy okazji włóż trochę wysiłku w formatowanie kodu - bo tego się nie da oglądać., [syntax=c]#define UART_TIMEOUT 1 #define UART_OK 0 uint8_t UART_receive(uint_t *data,...
Pozwolę sobie zauważyć, że: USART_Receive() sprawdzi, czy flaga RXC jest ustawiona i - jeśli nie - zakończy działanie, zwracając właściwie trudno mi określić co. Trudno określić, bo funkcja zwraca niezainicjowaną zmienną, której - w przypadku, gdy RXC=0 - nie przypisujesz żadnej wartości. Nie wiem też co z tym kodem zrobi optymalizacja. W zasadzie definiowanie...
The TXCn Flag can be used to check that the Transmitter has completed all transfers A sprawdzasz The UDREn Flag indicates if the transmit buffer (UDRn) is ready to receive new data.
tutaj masz dobry kod na atmege8: (atmega48, 88, 168 troche sie różni rejestrami i są bardziej kłopotliwe ale to tylko kwestia podmiany nazw): Odbieranie koniecznie w przerwaniu!! jak dla mnie tylko taki sposób ma prawo bytu :) SIGNAL (SIG_UART_RECV) { odebranyZnak = UDR; .... <--- tu robisz sobie z tym znakiem co chcesz } Funkcje...
Znalazłem dwa problemy: 1. Ten program nie ma prawa działać, bo instrukcją sbis UCSRA, RXC pomijasz odbieranie znaku z UDR, kiedy jest zapalona flaga RXC! Nigdy nie odbierzesz niczego. Zamień instrukcję sbis na sbic. Pomijam już, że nie inicjujesz rejestrów USART-a, nie ustawiasz szybkości transmisji, ani nie włączasz odbiornika. 2. Symulator v1 nie...
Witam. Mam problem z podłączeniem atmegi z komputerem przez rs232. Nie wiem gdzie popełniam błąd w połączeniu czy w programie. Podłączałem bezpośrednio 3 pin pod pod Rx, 2 pod Tx, a 5 pod masę uC. Podłączałem tez według schematu [url=]http://blog.topgun.kiev.ua/wp-cont... lecz dostaje w odpowiedzi krzaczki, <0>, bądź...
A Wie ktoś może, czy jest jakiś rejestr, albo coś co pozwoliłoby mi uzyskać wynik zbliżony do Serial.available w arduino? Przeciez juz to sprawdzasz. W funkcji USARTReadChar czekasz w petli while do momentu as jakies dane nie pojawia sie w buforze. Rownie dobrze mozesz sprawdic to tylko raz i zwrócic wynik. [syntax=c] /* Funkcja zwróci 0 jeśli znak...
Jeśli zapisujesz coś do rejestru to zapisz to jednym rzutem Święta prawda. To i ostatnie zdanie nasunęło mi trop, który przybliża mnie do rozwiązania. Teraz funkcja wygląda tak: [syntax=c] void UART_init(bool RX,bool TX) { UCSRA = 0b00000000; UCSRB = 0b00000000; UCSRC = 0b10100110; if(RX) { UCSRB |= (1<<RXEN); } if(TX) { UCSRB |= (1<<TXEN);...
na jakiej diodzie???? tzn gdzie ją dałeś? ;) ja uzyskiwałem przy takim układzie prędkości transmisji 115200 przy kwarcu 11.059.200 Hz. Schemat połączeń uC z SN75176 mam dokładnie taki jak ty, poza tym że tylko 1 rezystor 120R. A tak nawiasem mówiąc - o jakim czsie przełączania mówisz? przecież przed wysłaniem ustawiasz stan wysoki i po zakończeniu wysyłania...
tak to robisz? #define USART_BAUDRATE(br, fosc) (fosc/8/br-1) UBRRH = (unsigned char) (baud_divider >> 8); UBRRL = (unsigned char) (baud_divider); // USART setup UCSRA = _BV(U2X); // U2X enabled UCSRC = _BV(UCSZ1) | _BV(UCSZ0); // Access UCSRC, Asyncronous 8N1 UCSRB = _BV(RXCIE)...
witam mam problem z kompilacją kodu na atmege16, Program służy do wysyłania znaków z atmegi16 przez UART na komputer z użyciem standardowych funkcji typu puts, printf itd. Kompilator avr-gcc (WinAVR 20100110) 4.3.3 //---------------------------harddef.h #ifndef HARDDEF_H_INCLUDED #define HARDDEF_H_INCLUDED #define DEF_BAUD 4800 #endif //HARDDEF_H_INCLUDED...
Witajcie mam następujący problem, mam prosty program do wysyłania 1 oraz 0 w odstępie co sekundę. Jednak zamiast tego są jakieś krzaki. Moje pytanie w czym może leżeć problem, załączam kod, oraz wygląd na terminalu, kolejne pytanie to czy muszę programować fuse bity do odpowiedniego działania UARTA czy to właśnie przez to jest problem, oraz co się mogło...
A mógłbyś mi jeszcze pomó w takim czyms? ; Mam problem. Pisze program do komunikacji przez port UART, żeby móc wysyłać tekst i odbierac. Niestety coś mi to nie dziala. Kopiluje sie z jednym warningiem. Kod wygląda tak : #include <avr/io.h> // dostęp do rejestrów #include <avr/pgmspace.h> #include "uart.h" // Zmieniając poniższe definicje...
Witam, mam taki projekt do zrobienia w którym muszę miedzy innymi wysłać informacje z ATMEGI-8 do komputera. Napisałam krótki program który powinien wysyłać co 5 sekund znak '5' przez TxD procesora: #include <avr/io.h> #include <util/delay.h> #define F_CPU 1000000 //częstotliwość zegara w Hz #define UART_BAUD600 //prędkość transmisji #define...
Makra usunięte w inicie wpisałem UBRRL=25, bo kompilator nie widział rejestru UBRR. żadnych zmian. Próbowałem również użyć zewnętrzny kwarc 7,3728 MHz żeby uzyskać 0% błędu w usart przy ubrr = 23, ale dalej to samo 30 znaków/sekundę. Doszedłem do tego że praktycznie całe opóźnienie powodowane jest przez linijkę: while ((UCSRA & (1 << UDRE))...
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...
spr cos takiego ;) niemasz wogole funkcji main, a te ustawienia uarta niesa wogole w zadneg funkcji. oczywiscie plik makefile masz poprawnie stworzony, odpowiedni procek i predkosc etc? jezeli nie to nie dziw sie ze kompilator nie wie skad ma wziac nazwy rejestrow skoro nie podales mu z jakiego uC one są #include <avr/io.h> //nadawanie pojedynczego...
panowie chce polaczyć zasilacz (sterowany mikrokontrolerem ATMega) z komputerem przez złacze RS232. działałby na zasadzie wysylania z komputera odpowiednich kodów w ASCII a mikrokontroler by sobie je odpowiednio dekodował i ustawiał według tego napiecie czy prąd ew. wysyłał aktualne wartości na komputer. tyle że nie do końca rozumiem sposob obsługi...
Faktycznie, zaszła pomyłka we wzorze ale już poprawiłem no i obliczyłem wartość też ręcznie żeby się upewnić i zgadza się z tą wartością z tabeli. Ale niestety nadal coś jest źle bo nie działa.. http://obrazki.elektroda.pl/4108967200_1... zmienilem boud na 9600 i ustawielm port COM8. Lewy dolny rog w terminalu wskazuje ze parametry transmisji...
Witam !! Po pierwsze to widać, że nadal nie chciało Ci się zajrzeć do dokumentacji kompilatora. Nie znam tego dziwactwa, którego używasz więc może mi je przyślij. Po drugie to nie widze w Twoim programie abyś inicjował uart'a, nie ustawiasz transmisji ani nawet prędkości. Minimalna formuła na np: ATMega 128 wygląda tak: UCSR0A=0x00;//zeruje rejestry...
Pokaż program po zmianach. [syntax=c] /* BAUD RATE: 9600 */ #include <avr/io.h> // Załaduj bibliotekę input/output #include <util/delay.h> // Załaduj bibliotekę opóźnień #include <avr/interrupt.h> // Załaduj bibliotekę obsługi przerwań #include "ioinit.h" // Załaduj bilbiotekę zew. (do ustawienia portów ATMega 8) #include "uart.h"...
Witam wszystkich Elektrodowiczów! Mam mikrokontroler ATtin2313, który pracuje na wewnętrznym oscylatorze 8 MHz (bez dzielnika CLK=8) . Chcę na nim zrobić transmisję szeregową po USARTcie w trybie normalnym asynchronicznym (U2X = 0) , z 1 bitem stopu i 8 bitami danych. Wcześniej robiłem transmisję na USARTcie, ale na ATmega8 i działało - tu nie chce....
U mnie też pojawia się czasami efekt "pamięci" który opisałeś powyżej. Kiedyś AVRStudio działało dużo stabilnieji i nie wywalało mi się kilka razy dziennie... chyba to wina windowsa i autoupdate, a może Jtaga... w każdym razie staraj się unikać używania symboli funkcji arytmetycznych czy logicznych. Zastąp OR wyrażeniem ORR albo _OR czy też OR_ i po...
Witam ! Mam taki programik napisany w Avr-gcc. #include <avr/io.h> #include <inttypes.h> //alternatywne typy zmiennych #include <avr/pgmspace.h>//adresowanie zmiennych w obszarze programu #include <avr/interrupt.h>//obsługa przerwań #include <util/delay.h> #include "ffft.h" //funkcje Fouriera #include "usart.c"...
Mam trudność gry próbuje zaktualizować stany bitów w poszczególnych rejestrach. W ten sposób że pierwsze wysyłam przez spi do układu ade7758, 8-bitowa wartość rejestru, a następny bajt, to aktualizacja poszczególnych bitów. W programie powinno mi zwrócić wartość taką jaki dany rejestr miał zaktualizowane a dostaję inne wartości niż powinienem. niżej...
Prosze o pomoc Jak zmienić ten kod programu by po naciśnięciu konkretnego klawisza klawiatury np. klawisz 'a' ma zaświecić diodę, klawisz 'b' ma zgasić diode. Po naciśnięciu innych klawiszy dioda ma niereagować #include <avr/io.h> // dostęp do rejestrów // Zmieniając poniższe definicje można dostosować program do potrzeb #define F_CPU 16000000ul...
Ponieważ jest to mój pierwszy post chciałbym wszystkich serdecznie powitać :). Mój problem polega na tym, że nie mogę ustawić połączenia uC <-> PC z Atmegą 128. Przy AT16 wszystko jest w porządku, a ze 128 wyświetla mi nieprawidłowe znaki w Terminalu. Przy transmisji dioda się świeci i i wszystko poza tym działa jak powinno. #include <avr/io.h>...
Problem podobny, więc zapytam w tym temacie. Poniżej znajduje się kod programu do wysyłania danych przez USART do PC (przejściówka USB na układzie FT232RL). Wysyłanie jednego znaku z wykorzystaniem funkcji USART_TransmitChar działa tak jak powinno, problem pojawia się z funkcją USART_TransmitString. #include <avr/io.h> #include <util/delay.h>...
jestem amatorem(poczatkujacym), prosze o wyrozumialosc musze zmodyfikowac program aby uzyskac -obsługę przycisków w ten sposób, aby w oknie terminala ukazywał się komunikat z numerem wciśniętego przycisku -efekty świetlne polegające na sekwencjach migania diod LED (disco ;-)), przy czym wybór sekwencji odbywałby się poprzez wysłanie z terminala numeru...
Witam mam taki programik do odczytu ROM CODE czyjnika ds18b20: [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include "ds18b20.h" /* Prędkość transmisji 2400 */ #define BAUD 2400 #define MYUBRR F_CPU/BAUD/16-1 /* Inicjuje port szeregowy AVRa */ void USART_init(unsigned int myubrr) { /* Ustala prędkość transmisji...
Nie jest mozliwe wysylanie 2 bitow stopu i 9 bitow danych. Ustaw standardowo 8 bitow danych i 1 bit stopu. To w zasadzie nie robi różnicy , czy ustawimy 1 czy 2 bity stopu , bo przy ramce 9-bit , zostanie wygenerowany tylko 1 bit stopu. grzesio14 Nie działa Ci transmisja 9-bit , bo takowej nie ustawiasz. Popatrz: ;*** USART tryb 9-bit *** .include...
Proszę bardzo: [syntax=c] void USART_Init(void) { UCSRC = (1<<URSEL)|(1<<UPM1)|(1<&... // URSEL = 1 - korzystanie z rejestru UCSRC // UPM1 = 1 even parity // UCSZ1 = 1 i UCSZ0 = 0 8 bitowa transmisja UBRRL = 103; // 9600b/s przy F_CPU 16Mhz UCSRB = (1<<RXEN)|(1<<TXEN)|(1<&l... } void nadaj(char...
Witam. Mam problem z połączeniem się z ATmegą 2561. Wcześniej wszystko chodziło dobrze do czasu aż wgrałem poprzez avr studio program do obsługi USART0. Użyłem do tego programatora USBisp z wgranym STK500v2. Nie ustawiałem żadnych Fusebitów (domyślne AVR Studio). Teraz nie mogę się połączyć z nim w żaden sposób. Próbowałem również przez ISPProg i STK200....
Pod koniec procedury obsługi przerwania SIG_UART_DATA po opróżnieniu bufora nadawczego chciałbym wywołać przerwanie SIG_UART_TRANS aby zmienić stan sygnału DE dla układu MAX485. W/g datasheet'u wystarczy ustawić bit TXCIE dla rejestru UCSRB aby spowodować wywołanie tego przerwania. Writing this bit to one enables interrupt on the TXC Flag. A USART Transmit...
Witam ! Dalej walczę z komunikacją uart i dokładam kolejne klocki. Obecnie chciałem nauczyć się korzystać z przerwań. Napisałem następujący program. Do atmegi mówię przez program minicom. Chciałem, żeby przy każdym odebraniu czegoś po uart zapalił diodę, poczekał i ją zgasił. Niestety dioda się tylko zapala i nigdy nie gaśnie ... nie wiem dlaczego -...
przepraszam //Najpierw musisz ustawić odpowiednie parametry //np tak Kod: //unsigned char odebrane; //zmienna globalna - definujemy ja przed wszyskimi funkcjami unsigned - oznacza ze przyjmuje warotsc od 0 do 255 unsigned char zmienna; #include <avr\sfr_defs.h> //pozwala sterowac bitami code::blocks #include <avr\io.h> //wejscia_wyjscia...
Dzięki za odpowiedź. Znalazłem ciekawy poradnik odnośnie konfiguracji SPI na Attiny. W nocie katalogowej podpisy "MISO" i "MOSI" dotyczą ISP, a nie SPI. Bazując na poradniku i poradach paw789 obecnie mam taki kod: [syntax=c]#define FOSC 16000000 // Clock Speed #define BAUD 9600 // ustawienie predkosci wysylania bitow #define MYUBRR FOSC/16/BAUD-1 #define...
Proponuję uprościć kod do minimum, i skupić się na zegarze. Można albo użyć zewn. sygnału, ale wymaga to tyle samo pracy co przylutowanie kwarcu na pająka, a jest o tyle ryzykowne, że jak nie coś nie zadziała, to nie przeprogramujesz już układu. Z jakiego napięcia zasilasz układ? Wewn. oscylator jest kalibrowany pod 5V, jeżeli masz mniej, to zamiast...
Witam, może mi ktoś powiedzieć co w tym kodzie jest nie tak? Kod jest prosty-uczę się USART. Pierwszy znak jaki przyjdzie na RS232 wyświetla się na diodach. (Jedynie, że to jest 0B10000000 to jeszcze kolejny). Tylko, że zawsze mi diody gasną(0xFF). Z komputera nadaje za pomocą programu #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h>...
Witam, czy moglby ktos sprawdzic mi czy taki program powinien zadziałac i co robie zle ze nie działa #include <avr/io.h> #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #define FOSC 8000000ul // // Clock Speed #define BAUD...
W zasadzie po komendzie tryb, procek znajduje sie w petli oczekiwania na znak w buforze odbiorczym. Wowczas ma prawo nie reagowac na przyciski. Po odbiorze znaku powinien wrocic do petli glownej po konwersji itoa. W twojej procedurze Usart_Recive pozbylbym sie itoa i wrzucil ja do glownej petli za Usart_Recive lub tez zdeklarowal w Usart_Recive dodatkowa...
Witam, chciałbym prosić o pomoc w rozwiązaniu problemu. Korzystając z programu HyperTerminal wysyłam do uC cyfry 1 i 2, które mają odpowiednio kody ASCII 0x31 i 0x32. Odebranie "jedynki" powinno zapalić diodę podłączoną do portu PB.0 a odebranie "dwójki" powinno zapalić diodę podłączoną do portu PB.1. Z uwagi na to że żadna z diód nie zapalała się dodałem...
Program był pisany w C++ Buliderze ja posiadam inny program który wyrzuca błędy z braku bibliotek...A program dostałem już skompilowany... A może zamiast zmieniać parametry w programie zmienie w mikrokontrolerze??Poniżej znajduje sie cały wsad do mikrokontrolera ale akurat Assembera nie rozumiem całkowicie co i gdzie należy wpisać aby zimienić transmisje...
Witam pin RxD powienien być ustawiony jako wejscie w rejestrze DDRD.0=0 ustawiony jako wejscie i PORTD.0 =1 podciagamy do gory inicjacja powinna być tak jesli coś u Ciebie jest inaczej sprawdz takie ustawienia void port_init(void) { PORTD = 0x03; DDRD = 0x02; } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0,2%) void uart0_init(void)...
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...
Witam, mam problem związany z komunikacją PC z uC a tak naprawdę wydawaniem poleceń(sterowaniem) uC spod PC. Poniżej zamieszczam kod, który działa pod uC. Niestety gdy wyślę z aplikacji w C# wartość 128 następuje wejście do case 128 wysłanie wartości PIND0 lecz po przejściu całej pętli while program zatrzymuje się (czeka) na warunku bit=odbierz(); Jak...
rejestr modbus chrome rejestr rejestr assembler
piosenka radia yamaha filtr paliwo odzyskanie certyfikatów
Giełda komputerowa na Batorego - aktualności i godziny otwarcia Jak dostać się pod bęben pralki Amica? Instrukcja demontażu