Skocz do zawartości

Atmega328 - USART nie wysyła danych do PC.


dejmieno

Pomocna odpowiedź

Cześć,

Mam problem z wysłaniem danych do PC poprzez moduł USART. Korzystam z konvertera USB - TTL.

Podłączenie:

GND - do masy

RXD - do pinu PD1 mikrokontrolera (TXD)

F_CPU=16000000

Korzystam z programu TerraTerm i na konsoli nie pojawiają się żadne dane. Gdy wpisuję coś do konsoli to miga dioda TRANSMIT na konwerterze. Niesetety dane z kontrolera nie są wysyłane.

Czy ktoś wie gdzie może być problem?

Z góry dziękuję za pomoc.

Kod poniżej:

#include <avr/io.h>
#include <util/delay.h>

void uart_9600()
{
#define BAUD 9600
#include <util/setbaud.h>
UBRR0L = UBRRL_VALUE;
UBRR0H = UBRRH_VALUE;

#if USE_2X
UCSR0A |= 1 << U2X0;
#else
UCSR0A &= ~(1 << U2X0);
#endif
}

void usart_init()
{
uart_9600();
UCSR0C |= UCSZ00 | UCSZ01;
UCSR0B |= TXEN0;
}

void usart_send(uint8_t data)
{
while(!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}

int main(void)
{
usart_init();

while (1)
{
	usart_send(123);
}
}
Link do komentarza
Share on other sites

Aktualnie program nie widzi i w ogóle portu. Innym razem przy innej konfiguracji program widział port jednak na konsoli nie pojawiały się żadne dane.

Czy ktoś wie gdzie może być problem?

Mieszasz dwa problemy, zupełnie niepotrzebnie.

Pierwszy to wykrywanie dongla przez komputer - najpierw to rozwiąż.

Potencjalne źródła? Może problem ze sterownikami, może uszkodzony dongiel, może coś innego. Ciężko powiedzieć.

Dopiero jak będziesz miał niezawodnie działający konwerter (tzn. wykrywany przez system), to zacznij uruchamiać Twój program.

Link do komentarza
Share on other sites

Poprawiłem post jakieś 5 minut temu 😉. Problem z wykrywaniem został rozwiązany.

Tak jak pisałem wyżej, dane nie pojawiają się na konsoli. Podczas wpisywania wartości do konsoli na konwerterze świeci się lampka TRANSMIT. Niestety lampka RECEIVE się nie świeci.

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

Ehhh ale gafa... Dzięki teraz działa. Nie wiem jak mogłem to przeoczyć.

Tak, przy okazji jak na postawie wartości w rejestrze UBRR0 obliczyć długość trwania bitu?

Czytam książkę "Język C dla mikrokontrolerów AVR" i tam autor podaje przykład na sterowanie diodami WS2812 poprzez UART.

UBRR0=49;  //Dla 16 MHz daje to czas trwania bitu równy 6,25 us, a bajtu 50 us

Ale skąd taka wartość? Jak on to obliczył? Chciał uzyskać baud rate na poziomie 160000, alewedług kalkulatorów na internecie żeby uzyskać taki baud rate należy ustawić rejestr UBBR0 na 5.

Link do komentarza
Share on other sites

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.