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.
Ustawiam bitrate na 9600 bps (na początek bez szaleństw) i wartość rejestru UBRR wychodzi mi 51 (dokładnie to 51,083) z błędem o wartości 0,16 % (obliczenia wg wzoru w tabeli 48 na 113 stronie dokumentacji). Potwierdza się to z danymi w tabeli 56 na stronie 134 (przykłady ustawień wartości rejestru UBRR). Zatem wartość dla rejestru UBRRH = 0, a dla rejestru UBRRL = 51 ( (51)DEC = (0000 0000 0011 0011)BIN ). Pomimo ustawienia poprawnych wartości w rejestrze ustawień zegara USARTa, mikrokontroler nic nie wysyła po magistrali. Poniżej załączam pełny kod źródłowy:
Kod jest w zasadzie cały zasięgnięty z dokumentacji miokrokontrolera (str. 116 i str. 118), dlatego też nie wiem co zrobiłem źle.
Układ zasilam z programatora USBasp i jak dotychczas ta forma zasilania przy nie dużym wysiłku mikrokontrolera się sprawdzała. Czy trzeba zrobić pull-up (przez resyztor np. 10 kΩ) linii TxD USARTa do napięcia zasilania +5 V?
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.
Ustawiam bitrate na 9600 bps (na początek bez szaleństw) i wartość rejestru UBRR wychodzi mi 51 (dokładnie to 51,083) z błędem o wartości 0,16 % (obliczenia wg wzoru w tabeli 48 na 113 stronie dokumentacji). Potwierdza się to z danymi w tabeli 56 na stronie 134 (przykłady ustawień wartości rejestru UBRR). Zatem wartość dla rejestru UBRRH = 0, a dla rejestru UBRRL = 51 ( (51)DEC = (0000 0000 0011 0011)BIN ). Pomimo ustawienia poprawnych wartości w rejestrze ustawień zegara USARTa, mikrokontroler nic nie wysyła po magistrali. Poniżej załączam pełny kod źródłowy:
Kod: C / C++
Kod jest w zasadzie cały zasięgnięty z dokumentacji miokrokontrolera (str. 116 i str. 118), dlatego też nie wiem co zrobiłem źle.
Układ zasilam z programatora USBasp i jak dotychczas ta forma zasilania przy nie dużym wysiłku mikrokontrolera się sprawdzała. Czy trzeba zrobić pull-up (przez resyztor np. 10 kΩ) linii TxD USARTa do napięcia zasilania +5 V?