Цитата(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.comChip 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.