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

Пытаюсь передать на комп информацию, а передаются какие-то непонятные символы. С железом вроде все нормально. Спаяно правильно. Прием передача рааботает. На компе использую прогу RS 232 Pro, но пробовал и другие тоже самое. Помогите пожалуйста разобраться в чем причина. Проц мега16, кварц 4 МГц.

Вот прога:

 

#include <mega16.h>

 

// Standard Input/Output functions

#include <stdio.h>

#include <delay.h>

// Declare your global variables here

 

void main(void)

{

PORTA=0xFF;

DDRA=0x00;

 

PORTB=0xFF;

DDRB=0x00;

 

PORTC=0x00;

DDRC=0xFF;

 

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: Off

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud rate: 9600

UCSRA=0x00;

UCSRB=0x08;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

 

for (;;)

{

putsf("RT000");

delay_ms(500);

};

}

Поделиться сообщением


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

Возможные причины:

1. в терминалке на ПК установлены другие параметры

2. Неправильно прошиты FUSES, из-за чего AVR работает не на 4 МГц => скорость не 9600

Поделиться сообщением


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

по программной части вроде бы все верно.

тут только сомнения относительно putsf().

попробуйте, для начала отправлять просто константу.

 

void main(void)
{
...
   for (;;)
   {
      UDR = 'R';
      delay_ms( .. );
   }
}

Поделиться сообщением


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

Пробовал отправлять константу, тот же самый результат. У меня с ком портом связь через MAX 232, может быть это из-за того что микросхема инвертит выход, и как тогда с этим побороться, еще раз пропустить через нее сигнал??? или как то программно????

Поделиться сообщением


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

макс232 инвертит инвертированную логику, чтобы её мог комп понимать.

т.е. на микроконтроллере:

"1"=0 В

"0"=3.3 В

на компе:

"1"=9 (12) В

"0"=0 В

Поделиться сообщением


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

А что нужно делать в данном случае. я проверяю в протеусе после контроллера все нормально, читаемые символы, после MAX 232 чушь какая-то.

Поделиться сообщением


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

А что нужно делать в данном случае. я проверяю в протеусе после контроллера все нормально, читаемые символы, после MAX 232 чушь какая-то.

Почитайте стандарт на RS232, какие логические уровни приняты для передачи на линии... :)

Поделиться сообщением


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

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

Поделиться сообщением


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

А что именно Вы видите на приемном конце? Есть ли какая нибудь закономерность между тем, что посылаете, и тем, что ловите?

Поделиться сообщением


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

Вот прога

 

#include <mega16.h>

 

// Standard Input/Output functions

#include <stdio.h>

#include <delay.h>

// Declare your global variables here

 

void main(void)

{

PORTA=0xFF;

DDRA=0x00;

 

PORTB=0xFF;

DDRB=0x00;

 

PORTC=0x00;

DDRC=0xFF;

 

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: Off

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud rate: 9600

UCSRA=0x00;

UCSRB=0x08;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

 

for (;;)

{

 

while (!(UCSRA.5));

 

UDR = ('1');

 

delay_ms(5);

 

};

}

 

Терминал RS232Pro

 

Это в ASCII

 

12:46:38> xяЂ

12:46:38> xяЂ

12:46:38> xяЂ

12:46:38> xяЂ

12:46:38> xяЂ

12:46:39> xяЂ

12:46:39> xяЂ

 

Это в HEX

 

12:47:52> 78 00 FF 80

12:47:52> 00

12:47:52> 78 00 FF 80

12:47:52> 00

12:47:52> 78 00 FF 80

12:47:52> 00

12:47:52> 78 00 FF 80

12:47:52> 00

Поделиться сообщением


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

Преобразователи типа: max232 ничего к передаваемой последовательности не добавляют/урезают. В этом случае единственное, что Вы не понимаете внешней вид посылки на линии RS232 (логические уровни, kay сегодня Вам их уже разъяснял). Так же у Вас может быть в схеме одно излишнее инвертирование (или 'не доинвертирование') , которое даст эффект изменения кода (к стати приемники и передатчики max232 с инвертированием)...

Так же при возникновении таких ошибок приемник и передатчик могут иметь разные настройки (скорость передачи, длина посылки, паритеты, стоп-биты...)

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

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...