|
RS-232, не передает обратно в компьютер |
|
|
|
Oct 19 2010, 04:39
|
Участник

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

|
Схемы нету но есть фотка  Нижний конец провода идет в комп
|
|
|
|
|
Oct 19 2010, 15:06
|
Участник

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

|
flow control отключен провода местами поменял, теперь моргают светодиоды приема и передачи на плате. НО в терминале все равно ничего нет Вот схема подключения макса на stk48
Сообщение отредактировал AnKing - Oct 19 2010, 15:28
|
|
|
|
|
Oct 19 2010, 18:00
|
Участник

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

|
Цитата(XVR @ Oct 19 2010, 20:53)  Для вашего stk48: 1) Провода к PC должны идти один к одному (2й с stk на 2й на PC, 3-3, 5-5) 2) Поставьте перемычку на разъем MAX232.SIP (тот, что на схеме слева) 3) Не забудьте подать питание на stk48 4) Проверьте в Гипертерминале (с отключенным Flow Control) Поставил провода ровно (2-2, 3-3, 5-5) поставил перемычку в гипертерминале ничего назад не идет питание на stk есть. а с маленьким rs232toTTL конвертером - светодиоды приема/передачи моргают а в терминале тоже ничего. Я уже и дополнительный контроллер в комп вставил с двумя ком портами(надеялся мот порты хреновые).... нет.... тот же результат...
Сообщение отредактировал AnKing - Oct 19 2010, 20:37
|
|
|
|
|
Oct 19 2010, 20:59
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 23-12-06
Из: Старых Васюков
Пользователь №: 23 821

|
Цитата(AnKing @ Oct 19 2010, 08:39)  Схемы нету но есть фотка ... Нижний конец провода идет в комп Если на верхнем разъёме D-SUB "вилка" (похоже  ), то этот разъём, IMHO, запаян "зеркально". То есть провод GND, который должен быть запаян на 5-й выв. разъёма, запаян на 1-й выв., а тот, который должен быть запаян на 2-й вывод, запаян на 4-й. (Правильно, в P.S.) P.S. Не, всё ещё хуже. Кабель, судя по фотографии, должен быть "прямой". То есть:2-й выв. нижнего разъёма (на фотографии, коричневый провод) должен соединиться со 2-м выв. верхнего разъёма, а не с 3-м. 3-й(красный) - с 3-м, а не с 4-м. 5-й(жёлтый) - с 5-м, а не с 1-м.
Сообщение отредактировал Mike18 - Oct 19 2010, 21:33
--------------------
Время - материя тонкая и неточная...
|
|
|
|
|
Oct 19 2010, 21:40
|
Участник

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

|
Цитата(Mike18 @ Oct 20 2010, 00:59)  Если на верхнем разъёме D-SUB "вилка" (похоже  ), то этот разъём, IMHO, запаян "зеркально". То есть провод GND, который должен быть запаян на 5-й выв. разъёма, запаян на 1-й выв., а тот, который должен быть запаян на 2-й вывод, запаян на 4-й. (Правильно, в P.S.) P.S. Не, всё ещё хуже. Кабель, судя по фотографии, должен быть "прямой". То есть:2-й выв. нижнего разъёма (на фотографии, коричневый провод) должен соединиться со 2-м выв. верхнего разъёма, а не с 3-м. 3-й(красный) - с 3-м, а не с 4-м. 5-й(жёлтый) - с 5-м, а не с 1-м. Спаял все как сказали и он заработал  Есть только один вопрос putchar(getchar()); - не передает все печатаемые символы а только выборочно.. например не передает 'a' англицкое а printf() функция так вообще не работает putchar('x'); - выводит зяпятую... и такого плана нестыковочки
|
|
|
|
|
Oct 20 2010, 17:03
|
Участник

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

|
Переписал все в AVR Studio Когда отправляю что-нибудь с контроллера (USART_Transmit('T')  В терминале(RealTerm) курсор передвигается и моргает лампочка RxD Но не передается символ. И горит лампочка Break(Break is when RxD line is broken) что там может быть брокен? Код #include <avr\io.h> #include <util\delay.h> #include <stdlib.h> //#include <avr\interrupt.h>
void USART_Transmit( unsigned char data ) { // Wait for empty transmit buffer while ( !( UCSR0A & (1<<UDRE0)) ) ; // Put data into buffer, sends the data UDR0 = data; }
unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSR0A & (1<<RXC0)) ) ; /* Get and return received data from buffer */ return UDR0; }
void USART_Init( unsigned int baud ) { // Set baud rate UBRR0H = (unsigned char)(baud>>8); UBRR0L = (unsigned char)baud; // Enable receiver and transmitter UCSR0B = (1<<RXEN0)|(1<<TXEN0); // Set frame format: 8data, 1stop bit UCSR0C = (0<<USBS0)|(3<<UCSZ00); }
int main (void) {
DDRB=0x00;
USART_Init(9600);
while(1) { //USART_Transmit(USART_Receive()); USART_Transmit('T'); PORTB=0x00; _delay_ms(500); PORTB=0xFF; _delay_ms(500); } }
|
|
|
|
|
Oct 20 2010, 18:59
|
Участник

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

|
Цитата(XVR @ Oct 20 2010, 21:40)  Неправильно выставлен делитель для USART (UBRR0). Туда надо не скорость записывать, а коэффициент деления - читайте DS  не понимаю куда в этой формуле подставлять значения я пока еще никак не могу понять какую мне частоту лучше выставлять на stk48 стоит резонатор даташит на которыя я найти нигде не могу (n7.3728j - то что сверху на нем написано) ставлю ту что по умолчанию - 4 000 000 Нельзя ли примерчик подкинуть пожалста?
|
|
|
|
|
Oct 20 2010, 19:28
|
Участник

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

|
В даташите при такой частоте и скорости 115200 UBRRn - 3 как это загнать в регистры? Цитата(AnKing @ Oct 20 2010, 23:21)  В даташите при такой частоте и скорости 115200 UBRRn - 3 как это загнать в регистры? Все понял... подставил 3 вместо baud и все покатило.... передает символ правильно... теперь тока есть вопрос что такое "../usart2.c:45: warning: implicit declaration of function 'printf'" и как ето можно исправить чтобы выводить строки
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|