Например TDA7294

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



Текущее время: Вс окт 25, 2020 23:16:48

Часовой пояс: 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]
Скачиваний: 168
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: "Странные дела" с Atmega640-16AU.
СообщениеДобавлено: Пн ноя 18, 2019 17:13:34 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2637
Откуда: г. Чайковский
Рейтинг сообщения: 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/quote

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

Карма: 31
Рейтинг сообщений: 416
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3488
Рейтинг сообщения: 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 + Шестое юбилейное мероприятие в процессе
Не в сети
 Заголовок сообщения: 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 заменил, и знаете, всё работает. Сначала МК выдавал какую-то ерунду, но потом всё пришло в норму. Задержки тоже стали работать. В чём была проблема - ума не приложу, хотя мне постоянно говорят, что "чудес не бывает".

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


Вернуться наверх
 
Как сократить время вычислений и освободить ресурсы центрального процессора?

Цифровые фильтры применяются в системах цифровой обработки сигналов (ЦОС) для решения двух основных задач: разделения и восстановления сигналов. Такие задачи могут решаться программными и аппаратными методами. Для их решения удобно использовать аппаратный цифровой фильтр FMAC, входящий в состав микроконтроллеров семейства STM32G4.

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

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

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


Вернуться наверх
 
STM32L562E-DK – первая отладочная платформа ST на ядре ARM Cortex-M33

STMicroelectronics представляет демонстрационно-отладочную платформу на базе ядра Cortex-M33 – STM32L562E-DK. Данная платформа основана на микроконтроллере нового семейства – STM32L5. STM32L562E-DK позволяет разработчику в полной мере раскрыть и опробовать новые возможности микроконтроллеров STM32L5 с тщательно проработанным функционалом для обеспечения высокого уровня безопасности и защиты.

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

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


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


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

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


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


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

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


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

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


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

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


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