реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> USART на ATMega 16, На комп выдает непонятные символы
ILYCHOFF
сообщение Feb 3 2006, 13:32
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Пытаюсь передать на комп информацию, а передаются какие-то непонятные символы. С железом вроде все нормально. Спаяно правильно. Прием передача рааботает. На компе использую прогу 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);
};
}
Go to the top of the page
 
+Quote Post
kay
сообщение Feb 3 2006, 14:25
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-06-05
Пользователь №: 5 781



могу и ошибаться, но настроен ли дефолтный выход на usart?
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Feb 3 2006, 14:35
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



какой выход дефолтный???
Go to the top of the page
 
+Quote Post
ilya514
сообщение Feb 3 2006, 14:40
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 29-11-05
Пользователь №: 11 546



У меня та же самая проблема, только с Atmega8
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Feb 3 2006, 14:44
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



И как ее устранить я уже чего только не пробовал...
Go to the top of the page
 
+Quote Post
Harvester
сообщение Feb 3 2006, 15:01
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Возможные причины:
1. в терминалке на ПК установлены другие параметры
2. Неправильно прошиты FUSES, из-за чего AVR работает не на 4 МГц => скорость не 9600


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 3 2006, 18:15
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



по программной части вроде бы все верно.
тут только сомнения относительно putsf().
попробуйте, для начала отправлять просто константу.

Код
void main(void)
{
...
   for (;;)
   {
      UDR = 'R';
      delay_ms( .. );
   }
}
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Feb 6 2006, 06:28
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Пробовал отправлять константу, тот же самый результат. У меня с ком портом связь через MAX 232, может быть это из-за того что микросхема инвертит выход, и как тогда с этим побороться, еще раз пропустить через нее сигнал??? или как то программно????
Go to the top of the page
 
+Quote Post
kay
сообщение Feb 6 2006, 06:36
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-06-05
Пользователь №: 5 781



макс232 инвертит инвертированную логику, чтобы её мог комп понимать.
т.е. на микроконтроллере:
"1"=0 В
"0"=3.3 В
на компе:
"1"=9 (12) В
"0"=0 В
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Feb 6 2006, 06:53
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



А что нужно делать в данном случае. я проверяю в протеусе после контроллера все нормально, читаемые символы, после MAX 232 чушь какая-то.
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 6 2006, 07:16
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(ILYCHOFF @ Feb 6 2006, 09:53) *
А что нужно делать в данном случае. я проверяю в протеусе после контроллера все нормально, читаемые символы, после MAX 232 чушь какая-то.

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


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Feb 6 2006, 09:17
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Я не могу понять что я делаю не так, объясните неграмотному... уже все перепробовал наверняка кто-то уже это делал поделитесь рабочей схемой...плиз...
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Feb 6 2006, 09:35
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



А что именно Вы видите на приемном конце? Есть ли какая нибудь закономерность между тем, что посылаете, и тем, что ловите?
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Feb 6 2006, 09:54
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Вот прога

#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
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 6 2006, 10:05
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



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

Сообщение отредактировал BVU - Feb 6 2006, 10:09


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 23:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016