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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 2-ве Mega8 по UART, CV, Proteus и отсутствие осциллографа
B3v
сообщение Aug 5 2008, 23:08
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 20-01-08
Пользователь №: 34 252



Подскажите начинающему. Столкнулся с такой историей.
Инструментарий у меня: CodeVision, Proteus, программатор UNIPROF.
Осциллографа пока к сожалению нету, поэтому пользуюсь программным через звуковую.

В итоге мне нужно связать PC с Mega8 по RS485.
С налету ес-но не получилось.

Начал с того, что связал два MK по UART как на рис 1.

Прикрепленное изображение

рис.1 Паралельно с железом моделировал в Протеусе.

Для МК-1:
...............
...............
//char simvol;

while (1)
{
//Отправляем два символа в МК2
putchar('a');

delay_ms(10);

putchar('b');

//Ожидаем пока не придет 'c' от МК2
while (1)
{ //туповато, но думаю для экс-та пойдет
simvol=getchar();

if(simvol=='c')break;
}

// Для индикации прохода циклов просто поджигаем диод.
PORTC.5=1;

delay_ms(150);

//И тушим его
PORTC.5=0;

};
...............
...............

Для МК-2:
...............
...............
while (1)
{
//Ждем от МК1 'а'
while (1)
{
simvol=getchar();
if(simvol=='a')break;
}

//Ждем от МК1 'b'
while (1)
{
simvol=getchar();
if(simvol=='b')break;
}

//Поджигаем диод
PORTC.5=1;

delay_ms(15);

//Тушим
PORTC.5=0;

//Отправляем 'c' в МК1
putchar('c');

};
...............
...............

После включения все нормально: диоды перемигивают как и положено.

А на осцилограммах наблюдаю следующее:

Прикрепленное изображение

рис. 2. TxD МК1.

Прикрепленное изображение

рис. 3. TxD МК2

Т.е. через звуковую я вижу формы сигналов TTL.

А как же эпюры из Datasheet:
Прикрепленное изображение

рис. 4 Явно форма типа RS-232

Или в Протеусе. Форма тоже типа RS-232:

Прикрепленное изображение

рис. 5. hex-ы из текстов куски которых я показал выше.

Проясните пожалуйста, где правда. И почему через звуковую я вижу то что на рисунках 2 и 3.
Чудес ведь не бывает. Или я уже 01.gif .
Go to the top of the page
 
+Quote Post
bgc
сообщение Aug 6 2008, 02:51
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 30-07-06
Из: Москва
Пользователь №: 19 188



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


--------------------
Окружающий мир - не иссякающий источник сюрпризов!
Go to the top of the page
 
+Quote Post
B3v
сообщение Aug 6 2008, 07:57
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 20-01-08
Пользователь №: 34 252



Да, есть грех. Протеус схавал, а в железе там стоят по 510 Ом. На рис-х 2 и 3 амплитуды на самом деле одинаковые. Умоляю, не заставляйте признаться, что врет прога Soundcard Oszilloscope. Смотрел я ею и так и сяк, и двумя каналами, надо только сжимать развертку. Поверте на слово амплитуды одинаковые. Диоды перемигивали всю ночь без сбоя. Формы сигналов меня смущают.
Да и Sound Forg-ем захватывал:

Прикрепленное изображение

рис. 6. Это так сигналы от TxD процессоров выглядит в окне SoundForg. Т.е. тот же TTL.

Прикрепленное изображение

рис. 7. А так выглядит сигнал на Tx COM порта в том же SoundForg. Т.е. как по теории: "1"- низкий уровень, а "0" - высокий.

Может у кого есть возможность посмотреть осциллографом, или есть такой опыт. Буду очень произнателен.
С уважением Сергей.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 6 2008, 08:14
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Чё-то я не понял в чём проблема. Ну, инвертирует ваш "осцил" сигналы, чё ж с того?
Поменяйте проводки местами (из правой руки в левую, из левой в правую). В смысле "землю" и "сигнал".
Всё встанет на свои места.

Цитата(B3v @ Aug 6 2008, 11:57) *
рис. 7. А так выглядит сигнал на Tx COM порта в том же SoundForg. Т.е. как по теории: "1"- низкий уровень, а "0" - высокий.

На самом деле "высокий" в СОМ-порте это -12, "низкий" - +12В


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
B3v
сообщение Aug 6 2008, 09:40
Сообщение #5





Группа: Новичок
Сообщений: 7
Регистрация: 20-01-08
Пользователь №: 34 252



Цитата(MrYuran @ Aug 6 2008, 13:14) *
Чё-то я не понял в чём проблема. Ну, инвертирует ваш "осцил" сигналы, чё ж с того?
Поменяйте проводки местами (из правой руки в левую, из левой в правую). В смысле "землю" и "сигнал".
Всё встанет на свои места.
На самом деле "высокий" в СОМ-порте это -12, "низкий" - +12В

Может это было бы итак. Но а какже то, что на рис-х 6 и 7. Земля у всей схемы одна:

Прикрепленное изображение

рис. 8.

По поводу уровней меня в школе учили так:

Прикрепленное изображение

рис. 9.

Или я ошибаюсь?
С уважением.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 6 2008, 09:53
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646




Прикрепленное изображение

Ещё раз:
UART (TTL): Start->"0" (0B), STOP->"1" (+5B)
COM (RS-232): Start->"0" (+12B), STOP->"1" (-12B)

На осциле картинки UART и RS-232 выглядят инверсно. Что вы и наблюдаете. Но у вас ещё имеется общая инверсия обоих сигналов.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 6 2008, 09:58
Сообщение #7


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата(B3v @ Aug 6 2008, 13:40) *
Может это было бы итак. Но а какже то, что на рис-х 6 и 7. Земля у всей схемы одна:

Прикрепленное изображение

рис. 8.

А в чем проблема, в том что у вас осцилограммы в обратной полярности? Так вам сказали возможную причину, что ваша звуковая карта инвертирует сигнал, т.е. когда передачи нет, то на ТТЛ линиях должен быть высокий уровень. Менять полярность подключения я бы не стал, а просто имел бы ввиду что есть инверсия, у нормальных осцилографов есть специальная кнопка, для инверсного отображения сигнала, может вам поискать такую же в настройках вашей программы?
Цитата(B3v @ Aug 6 2008, 13:40) *
По поводу уровней меня в школе учили так:

Прикрепленное изображение

рис. 9.

Или я ошибаюсь?
С уважением.
Все правильно и выше вам именно это и сказали - низкий уровень это +12 на rs232.

Проблема то, я понял, у вас в том что не работает связь с ПК? 2 МК между собою общаются нормально?
Похоже проблема у вас в настройках скорости УАРТов, приведите ваш код инициализации УАРТ и на какой частоте работают ваши МК, частоту тактирования МК я имею ввиду(Внутренний RC, кварц, какой частоты)?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
B3v
сообщение Aug 6 2008, 10:19
Сообщение #8





Группа: Новичок
Сообщений: 7
Регистрация: 20-01-08
Пользователь №: 34 252



Цитата(MrYuran @ Aug 6 2008, 14:53) *

Прикрепленное изображение

Ещё раз:
UART (TTL): Start->"0" (0B), STOP->"1" (+5B)
COM (RS-232): Start->"0" (+12B), STOP->"1" (-12B)

На осциле картинки UART и RS-232 выглядят инверсно. Что вы и наблюдаете. Но у вас ещё имеется общая инверсия обоих сигналов.


Ага, так значит у МК UART все таки TTL. Спасибочки большое.

По исправлениям на рисунке. Я так понял Вы мне предлагаете посадить землю PC2 на Tx PC1, и собственно вход звуковой PC2 на землю PC1. Оно конечно, все в мире относительно, но пока не пойму в этом смысла, кроме одного wink.gif .

Я прошу прощения, надо отлучиться. Прибегу, заскочу сразу на тему.

С уважением Сергей.
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 6 2008, 11:30
Сообщение #9


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Исправленная картинка вам поможет лишь в том случае если нет соединений земли ПК и МК, а если вы задумаете подключить схему к ПК через RS232 то землю схемы придется соединить с землей ПК и тогда вход звуковой карты будет замкнут. В общем лучше оставьте как было и либо инвертируйте в голове, либо найдите как программно проинвертировать сигнал который выводится на экран. И вообще это несущественная проблема.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 6 2008, 11:34
Сообщение #10


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Вообще не раз уже слышал об этой проблеме (инверсия сигналов софтовыми осциллами), другая проблема - закрытый вход (обрезание частот <50-100Гц)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 6 2008, 11:49
Сообщение #11


кекс
******

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



А не в том ли проблема, что автор пытается UART подключить к COM порту напрямую.
Оттого ничего и не работает.

Да какая разница кто чего куда инвертирует, главное правильно согласовать интерфейсы.
Подключите UART MK через RS232 драйвер к RS232 COM порта и все у вас заработает.

RS485 - тоже нельзя подключить к RS232 без преобразователя, хотя бы потому что там 2 сигнальных линии и интерфейс симметричный (дифф. пара), а RS232 - 3 линии и это НЕ симметричный интерфейс (есть земляной провод).
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 6 2008, 12:11
Сообщение #12


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
А не в том ли проблема, что автор пытается UART подключить к COM порту напрямую.
Оттого ничего и не работает.
Судя по восклицанию автора про ТТЛ, вполне может быть smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
B3v
сообщение Aug 6 2008, 14:45
Сообщение #13





Группа: Новичок
Сообщений: 7
Регистрация: 20-01-08
Пользователь №: 34 252



Цитата(GDI @ Aug 6 2008, 14:58) *
А в чем проблема, в том что у вас осцилограммы в обратной полярности? Так вам сказали возможную причину, что ваша звуковая карта инвертирует сигнал, т.е. когда передачи нет, то на ТТЛ линиях должен быть высокий уровень. Менять полярность подключения я бы не стал, а просто имел бы ввиду что есть инверсия, у нормальных осцилографов есть специальная кнопка, для инверсного отображения сигнала, может вам поискать такую же в настройках вашей программы?
Все правильно и выше вам именно это и сказали - низкий уровень это +12 на rs232.

Проблема то, я понял, у вас в том что не работает связь с ПК? 2 МК между собою общаются нормально?
Похоже проблема у вас в настройках скорости УАРТов, приведите ваш код инициализации УАРТ и на какой частоте работают ваши МК, частоту тактирования МК я имею ввиду(Внутренний RC, кварц, какой частоты)?


Прошу прощения, надо было скоропостижно отлучиться.
Если позволите, по порядку:
1. "А в чем проблема, в том что у вас осцилограммы в обратной полярности? Так вам сказали возможную причину, что ваша звуковая карта инвертирует сигнал, т.е. когда передачи нет, то на ТТЛ линиях должен быть высокий уровень."
Я делал со звуковой следующий экс-т:
От PC1 передаю в цикле символы, скорость 2400, и захватываю посылки SoundForg-ем. Если кто не сталкивался - это звуковой редактор.
Схема измерения.
Прикрепленное изображение

рис. 10
При этом от SoundForg имею следующую картинку.
Прикрепленное изображение

рис. 11

С той же скоростью 2400 и примерно с той же скважностью посылаю символы по UART контроллера.
Не отсоединяя земляного контакта щупа я переношу его на TxD контроллера.
Схема измерения.
Прикрепленное изображение

рис. 12
При этом от SoundForg имею следующую картинку.
Прикрепленное изображение

рис. 13
Получается, "Так вам сказали возможную причину, что ваша звуковая карта инвертирует сигнал...", что при измерении на RS-232( рис. 11) звуковая не инвертирует. И тут же, при измерении на TxD(рис. 12) контроллера пошла инверсия на звуковой карте. Не менял ни каких настроек, просто перенес щуп и сделал захват. Хотя нет, дернул немного общую громкость звуковой. Поэтому амплитуды разные. Но думаю это не столь важно.
Пока, меня интересует вот что: на TxD контроллера форма должна быть как на рис. 13, или как на рис. 12, или еще как? С амплитудами понятно RS-232 (+12...-12), МК(+5...0).

2. "Проблема то, я понял, у вас в том что не работает связь с ПК?" 2 МК между собою общаются нормально?"
Да, Вы правы, есть такая проблема. Но если можно, об этом чуть позже. Я приведу и принципиалку и программы дам. Не хочу сразу зарыться и запутаться.

"2 МК между собою общаются нормально?" Нормально, уже наигрался с диодами.

"Похоже проблема у вас в настройках скорости УАРТов, приведите ваш код инициализации УАРТ и на какой частоте работают ваши МК, частоту тактирования МК я имею ввиду(Внутренний RC, кварц, какой частоты)?"
Скорости у РС и у МК практически одинаковые - 2400. Не 9600 или выше, потому как пользуюсь звуковой. Смотрел и двумя одновременно каналами, и делал захват SForgem на оба канала одновременно.

CKSEL -> 0100, т.е. 8Мгц от внутреннего RC.

Извольте код для экспиремента (все практически сгенерировано визардом CV):

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.2 Beta1 Standard
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com


Chip type : ATmega8
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>


#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

char simvol;

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 2400
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0xBF;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

//Светодиод - индикатор
DDRC.5=1;PORTC.5=0;


delay_ms(150);


while (1)
{
putchar('a');

delay_ms(10);

putchar('a');

while (1)
{
simvol=getchar();
if(simvol=='c')break;
}

PORTC.5=1;

delay_ms(15);

PORTC.5=0;

};
}


У второго контроллера все тоже, кроме :
..............................
.............................
while (1)
{
while (1)
{
simvol=getchar();
if(simvol=='a')break;
}

while (1)
{
simvol=getchar();
if(simvol=='b')break;
}


PORTC.5=1;

delay_ms(15);

PORTC.5=0;


putchar('c');

};
.....................................
.....................................

3. "А не в том ли проблема, что автор пытается UART подключить к COM порту напрямую.
Оттого ничего и не работает.

Да какая разница кто чего куда инвертирует, главное правильно согласовать интерфейсы.
Подключите UART MK через RS232 драйвер к RS232 COM порта и все у вас заработает.

RS485 - тоже нельзя подключить к RS232 без преобразователя, хотя бы потому что там 2 сигнальных линии и интерфейс симметричный (дифф. пара), а RS232 - 3 линии и это НЕ симметричный интерфейс (есть земляной провод)."


Я приведу пока функционалку. Схема известная (для меня пока на бумаге).

Прикрепленное изображение

рис. 14.
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 6 2008, 14:57
Сообщение #14


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



1. Все нормально на ваших рисунках, на выходе RS232 вы видите +12в между символами, что соответствует низкому уровню на линиях ТТЛ, т.е. у вас инверсия сигнала в обоих случаях.

2. код надо заключать в тэги [ code][ /code] только без пробелов после первых скобочек.

3. Это слишком общая схема и она ни о чем не говорит, покажите как вы конкретно подключали RS485на обоих концах, кстати, для начала я бы порекомендовал добиться работы МК с ПК по RS232 а потом вводить звено 485. Для пробы в 485 можно и не ставить оптронную развязку.

Кстати, знаете ли вы что 485й это плудуплекстный интерфейс и его направлением передачи надо дополнительно управлять в отличие от 232?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
bgc
сообщение Aug 6 2008, 15:22
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 30-07-06
Из: Москва
Пользователь №: 19 188



Интересно, но никто не обратил внимания, что автор передает подряд два разных байта, на осциллограмме в модели так и есть, а на осциллограмме через звуковую карту - байты не только инвертированы, они ОДИНАКОВЫЕ.

С инверсией все очевидно, софтовый осциллограф инвертирует сигналы:
на рис инвертированный сигнал RS232 - На самом деле в паузах -12. Стартовый бит +12.

"Ох дурят, нашего брата, ох дурят..." ошибка крайне простая, только мы рассматриваем все через мозг B3v и не можем увидать простого...

з.ы. пока писал пост, рисунок потерялся. Но смысл остался...


--------------------
Окружающий мир - не иссякающий источник сюрпризов!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:42
Рейтинг@Mail.ru


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