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

 
 
> VirtualTerminal + Atmega16, Не читает из терминала
Ruffian
сообщение Mar 7 2011, 23:15
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 4-03-11
Пользователь №: 63 397



Всем привет.
Помогите разобраться с терминалом. Посмотрел урок по UART, решил повторить. Но что-то не работает.
Код
  UART1_Init(9600);
  UART1_Write('A');
  while (1){
       if ( UART1_Data_Ready()==1 ) {
            readBuffer[i] = UART1_Read();
            i++;
            if ( i==40 ){
                 i=0;
                 Lcd_Cmd(_LCD_RETURN_HOME);
                 for (pos=0;pos<40;pos++){
                     Lcd_Chr_Cp(readBuffer[pos]);
                     if (pos==19){
                          Lcd_Cmd(_LCD_SECOND_ROW);
                     }
                 }
                 UART1_Write('Y');
            }
       }
       else{

       }
  }


В протеусе подключен VirtualTerminal. Набираю в нем текст - никакой реакции. И в терминал не выводит тоже.
UART1_Data_Ready() единицу не возвращает. Почему - непонятно.

Прикрепленные файлы
Прикрепленный файл  terminal.zip ( 63.55 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ruffian
сообщение Mar 8 2011, 14:34
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 4-03-11
Пользователь №: 63 397



Схема есть в архиве. Называется terminal.dsn

Да, да, да !!!
Точно, поставил Rx и Tx перехлестом - заработало! Ввод с терминала теперь отображается на LCD.
Спасибо! Я почему-то подумал, что одноименные выводы соединить надо.
Пойду смотреть как в обратную сторону из МК на терминал работает.
Ещё раз спасибо!
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 8 2011, 15:49
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Ruffian @ Mar 8 2011, 17:34) *
Схема есть в архиве. Называется terminal.dsn

Да, да, да !!!
Точно, поставил Rx и Tx перехлестом - заработало! Ввод с терминала теперь отображается на LCD.
Спасибо! Я почему-то подумал, что одноименные выводы соединить надо.
Пойду смотреть как в обратную сторону из МК на терминал работает.
Ещё раз спасибо!

Там можно диагностику включать и смотреть, пришло ли, ушло ли, куда и с какой целью ушло sm.gif итд
Go to the top of the page
 
+Quote Post
Ruffian
сообщение Mar 8 2011, 18:03
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 4-03-11
Пользователь №: 63 397



Цитата(_Pasha @ Mar 8 2011, 18:49) *
Там можно диагностику включать и смотреть, пришло ли, ушло ли, куда и с какой целью ушло sm.gif итд


Что за диагностика? Можно чуть подробнее? Debug оказался в моем случае бессилен biggrin.gif
Go to the top of the page
 
+Quote Post
Ruffian
сообщение Mar 9 2011, 11:37
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 4-03-11
Пользователь №: 63 397



В общем при передаче в терминал обнаружилась ошибка. Делаю так:

Цитата
UART1_Init(9600);
Delay_ms(200);
UART1_Write_Text("Hello From Hell");
UART1_Write_Text("AAA");


В протеусе подключаю к МК два устройства:
1. Элемент VirtualTerminal
2. Элемент компорта COMPIM. Этот COMPIM связываю со встроенным виндовым терминалом.

Запускаю симуляцию и оба терминала отображают мне такие строки:
"ello From Hell"
"lAA"
Первый байт передачи исчез. Последний байт первой строки (l) был передан со второй строкой, а последний байт второй строки остался непереданным.
Если после этого передать например "ВВВ" а затем "ССС", то в терминал придёт "АВВ" и "ВСС"
После ковыряние в дебаггере обнаружил, что регистр данных UDR непосредственно перед передачей содержит последний байт предыдущей передачи. И соответственно пуляет сначала его, а затем байты текущей передачи количеством n-1. Последний байт текущей передачи остается непереданным и сидит в UDR, ожидая своей очереди до следующей передачи.
Дальше сделал так: перед каждым UART1_Write принудительно стал обнулять UDR. И всё встало на свои места. В терминалах корректно отображается всё, что было передано.
Но нигде не видел, чтобы принудительно надо было обнулять UDR перед передачей.
Почему так, в чем проблема?

Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 9 2011, 12:28
Сообщение #6


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Ruffian @ Mar 9 2011, 14:37) *
Почему так, в чем проблема?
Дайте *.lss от скомпилированного проекта, где использована UART1_Write_Text(), тогда быть может скажем чего.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:19
Рейтинг@Mail.ru


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