Например TDA7294

Форум РадиоКот • Просмотр темы - "Странные дела" с Atmega640-16AU.
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Чт май 06, 2021 10:43:12

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Пн ноя 18, 2019 16:06:05 
Родился

Зарегистрирован: Пн сен 09, 2019 11:50:42
Сообщений: 16
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Всем добрый вечер!

В одном из своих проектов использую микроконтроллер Atmega640-16AU, и у меня с ним возникли некоторые сложности. Обо всём по порядку:

1) Первая проблема связана с UART. Чтобы его проверить, я решил написать небольшой код, который раз в пять секунд будет отсылать на ПК некоторое значение. Код приведён ниже:

Код:
#define F_CPU 8000000UL

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

void uart3_send(uint8_t byte);

void uart3_send(uint8_t byte)
{
   while(!(UCSR3A & (1<<UDRE3)));
   UDR3 = byte;
}

int main(void)
{   
   UBRR3H = 0;   
   UBRR3L = 51;                                                                                  //Скорость 19200
   UCSR3B |= (1<<RXCIE3)|(1<<TXCIE3)|(1<<RXEN3)|(1<<TXEN3);    //Приём и передача разрешены, прерывания включены
   UCSR3C |= (1<<UCSZ30)|(1<<UCSZ31);
   UCSR3A |= (1<<U2X3);
   
   sei();
   
    while (1)
    {
      uart3_send(0x02);
      _delay_ms(5000);
    }
}


Скорость - 19200 бод, приём и передача разрешены, прерывания - тоже. Между МК и ПК - переходник USB -> UART с одного известного китайского сайта. Результат: в программе Terminal v1.9b я не вижу того, что ожидается. Я вижу бесконечные потоки значения 0xBF, и тут вскрывается вторая проблема.

2) Почему-то не работает _delay_ms(). То есть, на ПК я получаю символ не раз в пять секунд, а непрерывно, отчего принимающая программа просто виснет.

Вследствие этого, у меня есть следующие вопросы:

Почему значение приходит с ошибкой? На мой взгляд, всё инициализировано правильно. На более младших микросхемах Atmel я делал всё то же самое, и всё было нормально. Есть подозрения, что проблемы с ошибкой передачи и неработающей задержкой кроются в тактовой частоте внутреннего генератора, но я сомневаюсь: в даташите к микроконтроллеру сказано, что стандартная заводская частота внутреннего генератора - 8MHz (я только отключил фьюз делителя частоты LOW.CKDIV8, это можно увидеть на скриншоте). Или, может быть, сам переходник может "шалить"? Буду благодарен любым советам и разъяснениям моих ошибок, так как конкретно с этим микроконтроллером я работаю впервые. Спасибо.


Вложения:
Fuses.jpg [46.69 KiB]
Скачиваний: 208
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Пн ноя 18, 2019 17:13:34 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2642
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Selivanov_Sasha писал(а):
UCSR3B |= (1<<RXCIE3)|(1<<TXCIE3)|(1<<RXEN3)|(1<<TXEN3); //Приём и передача разрешены, прерывания включены
А обработчик прерывания есть?

Добавлено after 2 minutes 46 seconds:
Selivanov_Sasha писал(а):
Или, может быть, сам переходник может "шалить"?
Соедините Tx Rx и отправте что нибудь с терминала, это же должно придти обратно.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc

Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Пн ноя 18, 2019 17:20:11 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 456
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3715
Рейтинг сообщения: 0
так в Протеусе работает:
Код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

void uart3_send(uint8_t byte)
{
   while ((UCSR3A & (1<<UDRE0))==0);
   UDR3 = byte;
}

int main(void)
{
UCSR3B=(1<<RXEN3) | (1<<TXEN3);
UCSR3C=(1<<UCSZ31) | (1<<UCSZ30);
UBRR3H=0x00;
UBRR3L=0x19;

    while (1)
    {
      uart3_send(0x02);
      _delay_ms(500);
    }
}


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Вт ноя 19, 2019 09:05:29 
Родился

Зарегистрирован: Пн сен 09, 2019 11:50:42
Сообщений: 16
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Z_h_e писал(а):
А обработчик прерывания есть?

Нет, обработчики прерывания я не писал, т.к. принимать данные с пк не собираюсь, а выполнять что-то на стороне МК после отправки - тоже. Хотя да, смысл их разрешать в таком случае.

Z_h_e писал(а):
Соедините Tx Rx и отправте что нибудь с терминала, это же должно придти обратно.

С этим всё нормально.

oleg110592 писал(а):
 while ((UCSR3A & (1<<UDRE0))==0);

Я только UDRE0 на UDRE3 заменил, и знаете, всё работает. Сначала МК выдавал какую-то ерунду, но потом всё пришло в норму. Задержки тоже стали работать. В чём была проблема - ума не приложу, хотя мне постоянно говорят, что "чудес не бывает".

Спасибо за помощь.


Вернуться наверх
 
Обновленный ассортимент тактовых кнопок Omron!

Компэл предлагает обновленный ассортимент миниатюрных тактовых кнопок производства компании Omron, который включает в себя разнообразные решения как для стандартных условий, так и для применения в условиях повышенной влажности.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Вт ноя 19, 2019 10:27:20 
Мудрый кот

Карма: 18
Рейтинг сообщений: 506
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1855
Рейтинг сообщения: 0
Цитата:
Нет, обработчики прерывания я не писал, т.к. принимать данные с пк не собираюсь, а выполнять что-то на стороне МК после отправки - тоже. Хотя да, смысл их разрешать в таком случае.

Так делать не стоит. Если включили прерывание - сделайте его обработчик. Хотя бы пустой. Потому что прерываний без обработчика компилятор создаст прыжок на __bad_interrupt, где будет rjmp 0x0, т.е. прыжок к нулевому адресу, что равнозначно софтварному сбросу МК. И программа у вас начинает работать сначала после каждого прерывания.


Вернуться наверх
 
Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Вс ноя 24, 2019 08:34:35 
Вымогатель припоя

Карма: 7
Рейтинг сообщений: 37
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 500
Рейтинг сообщения: 0
Все __bad_interrupt легко меняются на заглушки.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Вс ноя 24, 2019 11:39:20 
Мудрый кот

Карма: 18
Рейтинг сообщений: 506
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1855
Рейтинг сообщения: 0
Понятное дело, но ТС этого не сделал. Я соб-но об этом и писал. Хотя б пустую функцию создать и всё. Или не включать прерывание, что правильнее, раз оно не нужно.


Вернуться наверх
 


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

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


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

Сейчас этот форум просматривают: caha200762, Jack_A и гости: 5


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

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


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