Skocz do zawartości

[C][USART] Wysyłanie z powrotem odebranego bajtu


Pomocna odpowiedź

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

Link to post
Share on other sites

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 
Link to post
Share on other sites

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 ?

Link to post
Share on other sites
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:

IMG_4dac0f48892de7013.jpg

IMG_4dac13638e29c422.png

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ć ?

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.