sznajder Napisano Marzec 8, 2011 Udostępnij Napisano Marzec 8, 2011 Witam posiadam taki oto kod. #include <avr/io.h> #define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) int main (void) { char ReceivedByte; UCSRB |= (1 << RXEN) | (1 << TXEN); // Turn on the transmission and reception circuitry UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register for (;;) // Loop forever { while ((UCSRA & (1 << RXC)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived" while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it UDR = ReceivedByte; // Echo back the received byte back to the computer } } Prosiłbym o sprawdzenie go pod kątem działania. Ma on odbierać bajt nadesłany przez usart i odesłać go z powrotem. Nie wiedzieć czemu na moim prototypowym układzie to nie działa. Jeżeli okaże się że kod jest dobry tzn że muszę poprawić układ. Może ktoś ma działający schemat połączenia mikrokontrolera z PC poprzez rs232 korzystając z układu MAX232? Będę wdzięczny za pomoc Cytuj Link do komentarza Share on other sites More sharing options...
RafI Marzec 8, 2011 Udostępnij Marzec 8, 2011 Nigdzie nie widzę zadeklarowanej częstotliwości F_CPU. Jest ona potrzebna do obliczania BAUD. Cytuj Link do komentarza Share on other sites More sharing options...
sznajder Marzec 8, 2011 Autor tematu Udostępnij Marzec 8, 2011 Częstotliwość jest podana w MakeFile przy pomocy którego kompilowany jest kod. Jeszcze jakieś pomysły? Cytuj Link do komentarza Share on other sites More sharing options...
RafI Marzec 8, 2011 Udostępnij Marzec 8, 2011 Ustaw pin na którym jest Rx jako wejście, a pin na którym jest Tx jako wyjście. Spróbuj zamienić zapis: while ((UCSRA & (1 << RXC)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived" while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it UDR = ReceivedByte; // Echo back the received byte back to the computer na: while (!(UCSRA & (1 << RXC))); // Do nothing until data have been recieved and is ready to be read from UDR ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived" while (!(UCSRA & (1 << UDRE))); // Do nothing until UDR is ready for more data to be written to it UDR = ReceivedByte; // Echo back the received byte back to the computer Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Karol R Kwiecień 17, 2011 Udostępnij Kwiecień 17, 2011 Również usiłowałem uruchomić ten program u siebie i o ile odpowiedź otrzymuję- o tyle w niczym nie przypomina ona wysyłanego znaku. Nie są one przypadkowe, tzn. na dany znak zawsze otrzymuję tę samą odpowiedź. Tyle tylko że dla 0 jest to myślnik, dla 1 - M itd. Atmega taktowana zewnętrznym oscylatorem 8MHz. Czego to może być wina ? Cytuj Link do komentarza Share on other sites More sharing options...
mactro Kwiecień 17, 2011 Udostępnij Kwiecień 17, 2011 Źle dobrane parametry transmisji (prędkość, bity stopu itp.) Cytuj Link do komentarza Share on other sites More sharing options...
Karol R Kwiecień 18, 2011 Udostępnij Kwiecień 18, 2011 Connect to this project via a serial terminal on your computer, using 8-bit, no parity 9600 baud communication settings and it will echo back anything you send to it. Moje ustawienia wyglądają następująco: Próbowałem zmieniać bity stopu i baud rate, zmiany są- ale cały czas nie odbieram tego co wysłałem. Korzystam z przejściówki profilec usb-rs232. Które parametry transmisji należałoby zmienić ? Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!