Доброго всем времени суток!
Собрал вот такую схему.
Комп (terminal 1.9) -› FT232 -› ADM485 -› UTP 5e (~10метров) -› ADM485 -› Mega8
В Меге залита проша, которая на любой принятый байт отвечает ОК.
Прошивка Меги
Код:
|
///////////////////// MAIN.C /////////////////////
#define LED1 4
#define LED2 5
#define send 3
#define LED_PORT PORTD
#define LED_DDR DDRD
#include ‹ioavr.h›
#include "lcd_lib.h"
#include "usart.h"
#include ‹intrinsics.h›
int main( void )
{
unsigned char sym;
LED_PORT = 0x00;
USART_Init();
__enable_interrupt();
while(1){
sym = USART_GetChar(); //читаем буфер
if (sym){ //если что-то приняли, то
LED_PORT = LED_PORT | 1‹‹LED2; // включение светодиодика передачи
LED_PORT = LED_PORT | 1‹‹send; // переключение ADM на передачу
__delay_cycles(10000000);
USART_SendChar('O'); //отвечаем компу "Ok "
USART_SendChar('k');
__delay_cycles(10000000);
LED_PORT=LED_PORT & ~(1‹‹send); // переключение ADM на прием
LED_PORT=LED_PORT & ~(1‹‹LED2); // выключение светика
}
///////////////////// отдельный файл USART.C /////////////////////
#include "usart.h"
#include ‹intrinsics.h›
#define LED1 4
#define LED2 5
#define send 3
#define LED_PORT PORTD
#define LED_DDR DDRD
//однобайтный буфер
volatile unsigned char usartRxBuf = 0;
//инициализация usart`a
void USART_Init(void)
{
UBRRH = 0;
UBRRL = 102; //скорость обмена 9600 бод при 16MHz
UCSRB = (1‹‹RXCIE)|(1‹‹RXEN)|(1‹‹TXEN); //разр. прерыв при приеме, разр приема, разр передачи.
UCSRC = (1‹‹URSEL)|(1‹‹UCSZ1)|(1‹‹UCSZ0); //размер слова 8 разрядов
}
//отправка символа по usart`у
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1‹‹UDRE)));
UDR = sym;
}
//чтение буфера
__monitor unsigned char USART_GetChar(void)
{
unsigned char tmp = usartRxBuf;
usartRxBuf = 0;
return tmp;
}
//прием символа по usart`у в буфер
#pragma vector=USART_RXC_vect
__interrupt void usart_rxc_my(void)
{
LED_PORT = LED_PORT | 1‹‹LED1;
usartRxBuf = UDR;
} |
Не могу никак понять почему приемо-передача идет так плохо. На сотню отправленных пакетов, дай бог придет один ответ. (внизу окошка, Rx и Tx)
Пробовал играться с подтяжкой линии. Если подключать 5 кОм, то начинается подмешиваться "мусор, а при 10 кОм или 510 Ом мусора нет.
Наличие терминатора со стороны Меги роли не играет. При подключении терминатора со стороны FT232, на каждую посылку получаю ответ: ‹0› . Ну и иногда: Ок
Пробовал с Меги слать посылки, числа 1-255. Ни одного пропущенного не было. А вот с компа до меги почему-то очень плохо идут.
Принципиальная схема
Сверху, платка подключаемая к компу. Не обращайте внимание на большое кол-во деталей, там еще одновременно и программатор МС.
Снизу, схема собранная на макетке.
Помоги советом, пожалуйста! В какую сторону хоть искать...