Перейти к содержанию

ATtiny2313 + UART + симуляция в Proteus


MikeHolsten

Рекомендуемые сообщения

Приветствую. Прошу помочь с локализацией проблемы отладки проекта.

Проект такой: управление аналоговым мультиплексором посредством UART и Attiny2313 (некое ПО на компьютере посылает в COM-порт цифру (char) от 1 до 8, в зависимости от этой полученной цифры МК передаёт логические уровни на аналоговый мультиплексор для выбора канала).

Код писался в AtmelStudio7, отладка в Proteus.

#define F_CPU 7372800L

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

#define BIT0 0
#define BIT1 1
#define BIT2 2
#define OUT_PORT PORTB
#define OUT_DDR DDRB

char usart_char_in(void)
{
   while (!(UCSRA & (1 << RXC)));
   return UDR;
}

int main(void)
{
   volatile unsigned char datain;
   
   #define XTAL 7372800L
   #define baudrate 9600L
   #define bauddivider (XTAL/(16*baudrate)-1)
   #define HI(x) ((x)>>8)
   #define LO(x) ((x)& 0xFF)
   
   UBRRL = LO(bauddivider);
   UBRRH = HI(bauddivider);
   UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
   UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
   UCSRC=(0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
   
   OUT_DDR = (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
   
   datain = usart_char_in();
   
   while(1)
   {
      _delay_ms(1000);
      datain = usart_char_in();
         switch(datain)
         {
         case '1': OUT_PORT = (0<<BIT0) | (0<<BIT1) | (0<<BIT2);   break;
         case '2': OUT_PORT = (1<<BIT0) | (0<<BIT1) | (0<<BIT2);   break;
         case '3': OUT_PORT = (0<<BIT0) | (1<<BIT1) | (0<<BIT2);   break;
         case '4': OUT_PORT = (1<<BIT0) | (1<<BIT1) | (0<<BIT2);   break;
         case '5': OUT_PORT = (0<<BIT0) | (0<<BIT1) | (1<<BIT2);   break;
         case '6': OUT_PORT = (1<<BIT0) | (0<<BIT1) | (1<<BIT2);   break;
         case '7': OUT_PORT = (0<<BIT0) | (1<<BIT1) | (1<<BIT2);   break;
         case '8': OUT_PORT = (1<<BIT0) | (1<<BIT1) | (1<<BIT2);   break;
         default: break;
         }   
   }
}

Screenshot_107.png.cca296462db58199db7baa4226729a27.png

И собственно проблема: не удается сэмулировать в протеусе, как только я начинаю посылать через VirtualTerminal некую цифру, в логи вываливаются тонны сообщений RX Frame Error и Data overrun:

Screenshot_106.png.0f491977b34f8c2a6aade1cc050cb1b6.png

В результате получается что МК ничего не считывает с UART, ну и как следствие на выходе ничего не появляется.

Видел, что с похожим люди сталкивались, но мне пока ничего не помогло (пробовал менять частоту и тип кварца (внутр./внешн.), пробовал другой принцип опроса (вешал получение байта на прерывание по RXC) - эффект один и тот же).

Заранее благодарен.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

6 минут назад, skripach сказал:

В протеус uart-терминал подключи напрямую к avr( мимо max232) TX->RX, RX->TX.

да, так работает, спасибо. т.е. это какой-то глюк протеуса в симуляции макса?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

10 минут назад, skripach сказал:

Это не глюк!!!

хочеш разобраться - узнай как работает MAX232.

буду очень благодарен, если укажете, какой именно момент в подключении через макса я упустил.

Ссылка на комментарий
Поделиться на другие сайты

Важнее даже другое. В чем отличие между UART и RS232? Кто из них используется в контроллере, кто в компьютере, а кто в MAX232?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Микроконтроллер использует логику "прямую", т.е. лог.1 - это высокий уровень, а лог. 0 - это низкий. RS232 - это физический интерфейс, в котором лог. 1 соответствует -9...12 вольт (точное значение по стандарту не помню, но фишка в том, что оно ОТРИЦАТЕЛЬНОЕ), а лог. 0 соответствует +9...12 вольт...

Поэтому MAX232 вам портит общение с терминалом, т.к. терминал так же работает в "прямой" логике.

Чтобы не было проблем, вам надо имитировать "линию связи по RS232", т.е. терминал соединить с MAX232, выходы этого MAX-а подать на другой MAX232, а уж со второго - на МК.

Гораздо проще, как вам уже советовали, не симулировать MAX232 вообще, подключая терминал напрямую к МК.

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...