Skocz do zawartości

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


sznajder

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 do komentarza
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 do komentarza
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

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 do komentarza
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 do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.