Например TDA7294

Форум РадиоКот • Просмотр темы - Искажения данных при интеграции ATMEGA и MAX232
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт ноя 18, 2025 13:02:10

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


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



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Искажения данных при интеграции ATMEGA и MAX232
СообщениеДобавлено: Вт сен 13, 2011 15:31:58 
Родился

Зарегистрирован: Вт сен 13, 2011 15:26:12
Сообщений: 16
Рейтинг сообщения: 0
Добрый день!
Проблема, похоже в схеме, а не с ПО и не с протоколом, так что тему создал в этом разделе, а не в разделе "Интеграция с ПК".

Надо передавать данные на МК atmega16 через COM порт компьютера(!!!USB НЕ ПРЕДЛАГАТЬ, надо именно через COM)
Вот схема и код WinAVR:

Изображение

Код:
#define FOSC  4000000UL  //
#define F_CPU FOSC

#define BAUD 9600L //Скорость порта
#define UBRRVAL FOSC/16/BAUD-1

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

int counter = 0; //счётчик для изменения режима
void USART_Transmit( unsigned char data )
{
   while (!(UCSRA&(1<<UDRE))){}; //wait for empty transmit buffer
   UDR=data ; //send number to USART
}

void writeBr()
{
   USART_Transmit(0x0d);//переход в начало строки
   USART_Transmit(0x0a);//переход на новую строку
}

void writeInputPrompt()
{
   writeBr();
   USART_Transmit('m');
   USART_Transmit('2');
   USART_Transmit(0x20);
   USART_Transmit(0x23);
   USART_Transmit(0x3a);
   USART_Transmit(0x20);
}

ISR(USART_RXC_vect)
{
   cli();
   int b;
   b = UDR;

   USART_Transmit(0x20);
   USART_Transmit('-');
   USART_Transmit(0x20);
   USART_Transmit(b+1); //следующий символ
   if (--counter > 0)
      writeInputPrompt();
   else
      writeBr();
   sei();
}

int main(void)
{
   //Set baud rate
   UBRRL=UBRRVAL;      //low byte
   UBRRH = (unsigned char)(UBRRVAL>>8); //hi byte
   //Set data frame format: asynchronous mode,no parity, 1 stop bit, 8 bit size
   UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|
   (0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);   
   //Enable Transmitter and Receiver
   UCSRB=(1<<RXEN)|(1<<TXEN);
   UCSRB |= (1<<RXCIE); //разрешениепрерывания по завершению приема
   
   while(1)
      {
         while (counter < 3)
         {
            USART_Transmit('m');
            USART_Transmit('1');
            USART_Transmit(0x20);
            _delay_ms(1500);   //long delay
            counter++;
         }

         writeInputPrompt();
         sei();
         
         while (counter > 0)
         {
            
         }
         cli();
      }
   return 0;
}   


Проект во вложении.

Проблема: при моделировании в Proteus на COM порт выдаются и принимаются искажённые данные.

До max232 на терминале VT1 всё выглядит отлично. На VT2 и в программу, подключённую к COM порту, выдаются искажённые данные(одинаковые и на VT2 и в программе). В даташите max232 про конденсаторы написано, что должны быть 1,0μF, как понимаю это 1x10[sup]-6[/sup]F или 1000х10[sup]-9[/sup]F. Хотя не заметил, чтобы протеус менял результаты при изменении емкости конденсаторов.

Подскажите в чём ошибка.

P.S. К COM порту подключаю программу Terminal v1.6b(ссылка)
P.P.S. Порты к которым подключены протеус и терминал должны быть соединены нуль-модемным кабелем. Использую виртуальные, созданные com0com v2.2.2.0(ссылка).


Вложения:
AVR16.zip [59.04 KiB]
Скачиваний: 163
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Искажения данных при интеграции ATMEGA и MAX232
СообщениеДобавлено: Вт сен 13, 2011 22:10:10 
Мудрый кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 21
Зарегистрирован: Чт авг 21, 2008 22:03:30
Сообщений: 1733
Откуда: Одесса(Украина)
Рейтинг сообщения: 0
Добрый день!
Причина вашей проблемы крайне проста: микросхема max232 инвертирует сигнал. Тоесть уровню +5 волт (логической единице) на входе соответствует напряжение -12 вольт на выходе. Терминал шпротеуса, ровно как и его "внешний порт" воспринимают -12 вольт как логический ноль, хотя это есть неверно, как вы поняли.
Решение также просто: Необходимо подключить "внешний порт" до 232-й.. Или покопаться в настройках этого порта и терминала: там должно быть что-то вроде "invert levels"
Не беспокойтесь: в нормальном СОМ порте уровню -12 вольт соответствует логическая единица. В железе ваша схема работать будет.

_________________
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Искажения данных при интеграции ATMEGA и MAX232
СообщениеДобавлено: Вт сен 13, 2011 23:59:24 
Родился

Зарегистрирован: Вт сен 13, 2011 15:26:12
Сообщений: 16
Рейтинг сообщения: 0
РадиоЛоматель писал(а):
Добрый день!
Причина вашей проблемы крайне проста: микросхема max232 инвертирует сигнал. Тоесть уровню +5 волт (логической единице) на входе соответствует напряжение -12 вольт на выходе. Терминал шпротеуса, ровно как и его "внешний порт" воспринимают -12 вольт как логический ноль, хотя это есть неверно, как вы поняли.
Решение также просто: Необходимо подключить "внешний порт" до 232-й.. Или покопаться в настройках этого порта и терминала: там должно быть что-то вроде "invert levels"
Не беспокойтесь: в нормальном СОМ порте уровню -12 вольт соответствует логическая единица. В железе ваша схема работать будет.


Благодарю. Подключил "внешний порт" до max232, данные стали передаваться нормально. Теперь долго не вернусь к микроконтроллеру - ближайшее время буду писать PC программу для взаимодействия с ним.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3 ] 

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


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

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


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

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


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