Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с UART на AVR, регистры
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 11:34:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 19:11:21 
Родился

Зарегистрирован: Ср фев 08, 2023 01:13:37
Сообщений: 11
Рейтинг сообщения: 0
Я хочу разобраться, как работает 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". Что я сделал не так? Почему мусор?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 20:39:00 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 288
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1200
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
На какую скорость bps предполагаете, что запрограммировали UART?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 21:11:41 
Родился

Зарегистрирован: Ср фев 08, 2023 01:13:37
Сообщений: 11
Рейтинг сообщения: 0
На какую скорость bps предполагаете, что запрограммировали UART?

Скорость 9600, стандартная.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 21:19:43 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 288
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1200
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
В помощь:
Код:
#define F_CPU 8000000
#define BAUD 9600
#define RATE ((F_CPU / 16 / BAUD) - 1)

UBRRH |= (RATE >> 8);
UBRRL |= RATE;


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 21:28:39 
Родился

Зарегистрирован: Ср фев 08, 2023 01:13:37
Сообщений: 11
Рейтинг сообщения: 0
В помощь:
Код:
#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 и т.д.), а с нулем на конце?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 21:38:57 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 288
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1200
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
В качестве рекомендации: следите информацией в pdf-ом.
Подробности о выбранном режиме есть, смотрите коэффициенты в pdf.
Asynchronous normal mode (U2Xn = 0), Asynchronous double speed mode (U2Xn = 1), Synchronous master mode

Установлены ли фюзы для этой F_CPU? (или они по умолчанию).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Ср фев 08, 2023 21:53:49 
Родился

Зарегистрирован: Ср фев 08, 2023 01:13:37
Сообщений: 11
Рейтинг сообщения: 0
В качестве рекомендации: следите информацией в pdf-ом.
Подробности о выбранном режиме есть, смотрите коэффициенты в pdf.
Asynchronous normal mode (U2Xn = 0), Asynchronous double speed mode (U2Xn = 1), Synchronous master mode

Установлены ли фюзы для этой F_CPU? (или они по умолчанию).


pdf это даташит?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Чт фев 09, 2023 00:03:31 
Это не хвост, это антенна

Карма: 15
Рейтинг сообщений: 177
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1326
Откуда: Тюмень
Рейтинг сообщения: 0
Тестовая прошивка для проверки работы USART ATmega328P и терминалки ПК… МК тактируется на частоте 8 МГц от внутреннего генератора… если прижать вывод РВ1 к GND то МК будет слать по UART шесть байт (ASCII = Hello!), через каждые две секунды…
(9600, данные 8, паритет N, стоп бит 1.)
Вложение:
test UART.hex [942 байт]
Скачиваний: 36


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Чт фев 09, 2023 09:57:02 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2800
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18030
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
ему не хекс нужно, а исходник дать, чтобы видел, как нужно правильно делать.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Чт фев 09, 2023 10:20:04 
Родился

Зарегистрирован: Ср фев 08, 2023 01:13:37
Сообщений: 11
Рейтинг сообщения: 0
А каким компилятором лучше компилировать проекты? Я пишу в Michrochip Studio, там GCC и нет которых макросов и констант (например, _BV, который есть во многих примерах) и константы многие там названы по-другому.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Чт фев 09, 2023 10:20:12 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 288
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1200
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
AngelicQuasar, с 16 MHz, через Arduino Serial, ваш код работает. Наверное вам нужно настроить программу для визуализации.


Вложения:
uart.zip [501 байт]
Скачиваний: 42
Untitled-1.jpg [122.21 KiB]
Скачиваний: 45
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Чт фев 09, 2023 16:43:58 
Это не хвост, это антенна

Карма: 15
Рейтинг сообщений: 177
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1326
Откуда: Тюмень
Рейтинг сообщения: 0
ему не хекс нужно, а исходник дать

Я не пишу на Си… мой исходник для него как текст на китайском… без перевода не поймёт… а прошивка позволит понять работает ли аппаратная часть или нет… если всё заработает, то аппаратная часть со стороны железа выполнена верно и тогда останется разобраться только лишь с программной частью… ну а примеры на Си есть в даташите (параграф 24 USART).
https://static.chipdip.ru/lib/549/DOC001549488.pdf


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART на AVR, регистры
СообщениеДобавлено: Чт фев 09, 2023 17:46:35 
Родился

Зарегистрирован: Ср фев 08, 2023 01:13:37
Сообщений: 11
Рейтинг сообщения: 0
Проблема решена. Дело было в том, что я нагуглил, что частота МК ATmega 328p 20 МГц и прописал в исходнике ее, а на самом деле частота была 16 МГц.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y