Форум РадиоКот https://radiokot.ru/forum/ |
|
Работа с UART на AVR, регистры https://radiokot.ru/forum/viewtopic.php?f=62&t=186836 |
Страница 1 из 1 |
Автор: | AngelicQuasar [ Ср фев 08, 2023 19:11:21 ] |
Заголовок сообщения: | Работа с UART на AVR, регистры |
Я хочу разобраться, как работает UART в AVR и научиться его применять. Для этого я написал такой код, который использует регистры: Код: #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> void uart_init() { UBRR0H = 0; UBRR0L = 129; UCSR0A=0b00000000; UCSR0B=0b00011000; UCSR0C=0b10000110; } void uart_send(unsigned char c) { while (!(UCSR0A & (1 << UDRE0))) {} UDR0 = c; } void uart_send_str(const unsigned char *s) { while (*s != 0) { uart_send(*s++); } } int main(void) { uart_init(); while (1) { uart_send_str("Hello!"); _delay_ms(500); } } Проблема в том, что когда я принимаю данные на компьютере при помощи монитора Arduino IDE, то в консоль приходит мусор вместо строчки "hello". Что я сделал не так? Почему мусор? |
Автор: | veso74 [ Ср фев 08, 2023 20:39:00 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
На какую скорость bps предполагаете, что запрограммировали UART? |
Автор: | AngelicQuasar [ Ср фев 08, 2023 21:11:41 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
На какую скорость bps предполагаете, что запрограммировали UART? Скорость 9600, стандартная. |
Автор: | veso74 [ Ср фев 08, 2023 21:19:43 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
В помощь: Код: #define F_CPU 8000000
#define BAUD 9600 #define RATE ((F_CPU / 16 / BAUD) - 1) UBRRH |= (RATE >> 8); UBRRL |= RATE; |
Автор: | AngelicQuasar [ Ср фев 08, 2023 21:28:39 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
В помощь: Код: #define F_CPU 8000000 #define BAUD 9600 #define RATE ((F_CPU / 16 / BAUD) - 1) UBRRH |= (RATE >> 8); UBRRL |= RATE; Все равно печатаются такие символы: Р)ббщяР)ббщяР)ббщяР) Программирую AVR ATmega 328p Код: #define F_CPU 20000000UL #define BAUD 9600 #define RATE ((F_CPU / 16 / BAUD) - 1) #include <avr/io.h> #include <util/delay.h> void uart_init() { UBRR0H |= RATE >> 8; UBRR0L |= RATE; UCSR0A = 0b00000000; UCSR0B = (1 << RXEN0) | (1 << TXEN0); // 0b00011000; UCSR0C = 0b10000110; } void uart_send(char c) { while (!(UCSR0A & (1 << UDRE0))) {} UDR0 = c; } char uart_receive(void) { return ((UCSR0A >> RXC0) & 1) ? UDR0 : 0; } void uart_send_str(const char *s) { while (*s != 0) { uart_send(*s++); } } int main(void) { uart_init(); while (1) { uart_send_str("hello"); _delay_ms(500); char c = uart_receive(); _delay_ms(500); } } Кстати, почему здесь регистры названы не как в книге Ревича (UDR, UBRR и т.д.), а с нулем на конце? |
Автор: | veso74 [ Ср фев 08, 2023 21:38:57 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
В качестве рекомендации: следите информацией в pdf-ом. Подробности о выбранном режиме есть, смотрите коэффициенты в pdf. Asynchronous normal mode (U2Xn = 0), Asynchronous double speed mode (U2Xn = 1), Synchronous master mode Установлены ли фюзы для этой F_CPU? (или они по умолчанию). |
Автор: | AngelicQuasar [ Ср фев 08, 2023 21:53:49 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
В качестве рекомендации: следите информацией в pdf-ом. Подробности о выбранном режиме есть, смотрите коэффициенты в pdf. Asynchronous normal mode (U2Xn = 0), Asynchronous double speed mode (U2Xn = 1), Synchronous master mode Установлены ли фюзы для этой F_CPU? (или они по умолчанию). pdf это даташит? |
Автор: | VNS [ Чт фев 09, 2023 00:03:31 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
Тестовая прошивка для проверки работы USART ATmega328P и терминалки ПК… МК тактируется на частоте 8 МГц от внутреннего генератора… если прижать вывод РВ1 к GND то МК будет слать по UART шесть байт (ASCII = Hello!), через каждые две секунды… (9600, данные 8, паритет N, стоп бит 1.) Вложение:
|
Автор: | Starichok51 [ Чт фев 09, 2023 09:57:02 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
ему не хекс нужно, а исходник дать, чтобы видел, как нужно правильно делать. |
Автор: | AngelicQuasar [ Чт фев 09, 2023 10:20:04 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
А каким компилятором лучше компилировать проекты? Я пишу в Michrochip Studio, там GCC и нет которых макросов и констант (например, _BV, который есть во многих примерах) и константы многие там названы по-другому. |
Автор: | veso74 [ Чт фев 09, 2023 10:20:12 ] | |||
Заголовок сообщения: | Re: Работа с UART на AVR, регистры | |||
AngelicQuasar, с 16 MHz, через Arduino Serial, ваш код работает. Наверное вам нужно настроить программу для визуализации.
|
Автор: | VNS [ Чт фев 09, 2023 16:43:58 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
ему не хекс нужно, а исходник дать Я не пишу на Си… мой исходник для него как текст на китайском… без перевода не поймёт… а прошивка позволит понять работает ли аппаратная часть или нет… если всё заработает, то аппаратная часть со стороны железа выполнена верно и тогда останется разобраться только лишь с программной частью… ну а примеры на Си есть в даташите (параграф 24 USART). https://static.chipdip.ru/lib/549/DOC001549488.pdf |
Автор: | AngelicQuasar [ Чт фев 09, 2023 17:46:35 ] |
Заголовок сообщения: | Re: Работа с UART на AVR, регистры |
Проблема решена. Дело было в том, что я нагуглил, что частота МК ATmega 328p 20 МГц и прописал в исходнике ее, а на самом деле частота была 16 МГц. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |