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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> RS-232, не передает обратно в компьютер
AnKing
сообщение Oct 13 2010, 21:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



На дисплее последовательно отображаются непонятные рандомные символы,вводя чтонить в гипертерминале отображается что-то определенное, но не совпадающее с тем что на кнопках... ввожу 1 - отображается 7 и тут же исчезает...
но это все работает только когда к контроллеру поделючен провод передачи
как только включаю провод на прием - контроллер замирает, на дисплее ничего не отображается... в гипертерминал ничего не отправляется... что это может быть?

Код
#include <mega48.h>

// Alphanumeric LCD Module functions
#include <alcd.h>

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

#include <delay.h>


#define LCD_CHARS_LINE 16

// Bit definitions from the USART control registers
#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)

// Specify that a new putchar function will be used instead of the one from stdio.h
#define _ALTERNATE_PUTCHAR_


// Specify the output types
#define USART0 0
#define LCD 2

// This variable will specify to which peripheral the output of putchar will be directed
unsigned char poutput;

void putchar(char c)
{
switch (poutput)
       {
       case USART0: // the output will be directed to USART0
            while ((UCSR0A & DATA_REGISTER_EMPTY)==0);
            UDR0=c;
       break;

      
       case LCD:    // the output will be directed to the LCD
            lcd_putchar©;
       };
}

void main(void)
{

char k;


// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;

lcd_init(16);
  
while (1)
    {
    poutput=USART0;
    //printf("This is a test of USART%u.\r",0);
    k=getchar();
    putchar(k);
    //UDR0=3;
    delay_ms(100);
    poutput=LCD;
    lcd_clear();
    printf("-- %c --\n%u characters/line.",k,LCD_CHARS_LINE);
    }
}


Сообщение отредактировал AnKing - Oct 13 2010, 21:55
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 14 2010, 05:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Как минимум #define _ALTERNATE_PUTCHAR_ должно стоять ДО #include <stdio.h>
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 14 2010, 08:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AnKing @ Oct 14 2010, 01:55) *
что это может быть?
Такое можно часто наблюдать при проблемах с общим проводом в RS232 - например, при обрыве.
Go to the top of the page
 
+Quote Post
AnKing
сообщение Oct 14 2010, 14:38
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



Цитата(XVR @ Oct 14 2010, 09:02) *
Как минимум #define _ALTERNATE_PUTCHAR_ должно стоять ДО #include <stdio.h>

поставил до....
жтмплей виснет вместе с контроллером если подключаю провод на прием в комп
зато из компа передается(на дисплее отображается последний введенный символ)
но всеравно введенное не совпадает с выводимым на дисплей

об обрыве какого провода идет речь?
GND?

Сообщение отредактировал AnKing - Oct 14 2010, 14:40
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 14 2010, 15:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AnKing @ Oct 14 2010, 18:38) *
об обрыве какого провода идет речь?
GND?
Да
Go to the top of the page
 
+Quote Post
AnKing
сообщение Oct 14 2010, 15:46
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



перепроверил все провода... все подключено, нигде обрывов нет... контроллер всеравно висит ... ничего не принимает и не передает
на спалил ли я max232?
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 15 2010, 05:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Оторвите MAX232 от контролера и замкните оторванные TX/RX на MAX232. Если в Гипертерминале будут отображаться вводимые символы - то проблема в МК, если не будут - то в MAX или проводах
Go to the top of the page
 
+Quote Post
Александр77
сообщение Oct 15 2010, 05:24
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Нескромный вопрос, а чем тактируете МК?
Применяйте ВСЕГДА внешний генератор/резонатор, это спасет от многих бед (из личного опыта)
Go to the top of the page
 
+Quote Post
AnKing
сообщение Oct 15 2010, 05:58
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



замкнул max со стороны контроллера... назад ничего не передается... в то время как если замкнуть перед МАХ то все идет обратно... Я там понял МАХ сдох... соответственно вопрос... как и почему он мог так умереть? ведь по сути эту микросхему не так легко убить?
может я неправильно настраиваю гипертерминал где-то?
Go to the top of the page
 
+Quote Post
Deka
сообщение Oct 15 2010, 09:46
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



При замыкании до макса гипертерминал ведь показывает - значит с ним всё в порядке.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 15 2010, 12:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(AnKing @ Oct 15 2010, 09:58) *
замкнул max со стороны контроллера... назад ничего не передается... в то время как если замкнуть перед МАХ то все идет обратно...
А MAX включен правильно? Входы с выходами не перепутали?

Цитата
может я неправильно настраиваю гипертерминал где-то?
Тогда бы и при замыкании перед MAX'ом тоже не работало бы

Go to the top of the page
 
+Quote Post
AnKing
сообщение Oct 15 2010, 19:07
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



Цитата
Применяйте ВСЕГДА внешний генератор/резонатор, это спасет от многих бед (из личного опыта)

Знал бы я еще как это делать blush.gif

У меня вот эта тестовая плата:
http://www.tupianguanjia.com/bin/3455/avri...8+_V20_Side.jpg

там стоит внешний резонатор уже.
А тактирование определяется фъюзами ведь?
у меня они все незапрограммированы

Сообщение отредактировал AnKing - Oct 15 2010, 19:38
Go to the top of the page
 
+Quote Post
Deka
сообщение Oct 18 2010, 05:08
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



1. Проверить обвязку и подключение драйвера RS-232.
2. Подключить к драйверу только провода от COM порта компьютера.
3. Замкнуть ножки приёма-передачи на "логической" стороне драйвера.
4. Используя любую программу-терминал на любой скорости убедиться в наличии эха.
5. Снять закоротку приёма-передачи на "логической" стороне драйвера.
6. Подключить "логическу" передачу драйвера на приём контроллера.
7. Подключить "логический" приём драйвера на передачу контроллера.
8. Разобраться и правильно сконфигурировать контроллер для работы от правильного кварца.
9. Написать код отправляющий то, что примет.
10. Настроить программу-терминал на скорость контроллера.
11. Убедиться в наличии эха.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 18 2010, 08:05
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Проверьте каким RS232 кабелем подключена ваша плата к PC. Возможно вам нужен нуль-модемный кабель
Go to the top of the page
 
+Quote Post
AnKing
сообщение Oct 18 2010, 19:34
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



Цитата(Deka @ Oct 18 2010, 09:08) *
1. Проверить обвязку и подключение драйвера RS-232.
2. Подключить к драйверу только провода от COM порта компьютера.
3. Замкнуть ножки приёма-передачи на "логической" стороне драйвера.
4. Используя любую программу-терминал на любой скорости убедиться в наличии эха.
5. Снять закоротку приёма-передачи на "логической" стороне драйвера.
6. Подключить "логическу" передачу драйвера на приём контроллера.
7. Подключить "логический" приём драйвера на передачу контроллера.
8. Разобраться и правильно сконфигурировать контроллер для работы от правильного кварца.
9. Написать код отправляющий то, что примет.
10. Настроить программу-терминал на скорость контроллера.
11. Убедиться в наличии эха.


Закоротил контакты на логической стороне - нет эха...
до мах эхо есть....
купил на ebay отдельно только драйвер
http://cgi.ebay.com/ws/eBayISAPI.dll?ViewI...e=STRK:MEWNX:IT
закоротил на нем ноги после драйвера - все равно нет эха unsure.gif (питание на мах подключено естественно, светодиод power горит)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 08:33
Рейтинг@Mail.ru


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