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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
barabek
сообщение Nov 13 2008, 02:15
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(lancode @ Nov 13 2008, 01:24) *
Попробовал перекинуть провод по которому передаются данные с P1.0 на P1.1 или P1.2 - чтоб проверить прием по другим каналам PCA. Сразу не пошло. Просто не вызывается прерывание PCA_inter. p.s. Классный у Вас осциллограф smile.gif


В майне забыл запустить 1 и 2 PCA - модули (PCA0CPM0=PCACPMfalledge; - запуск 0-го модуля, аналогично сделать для 1 и 2).
А осцил самому нравится smile.gif. И куплен на халяву - что нравится вдвойне smile.gif

Сообщение отредактировал barabek - Nov 13 2008, 02:16
Go to the top of the page
 
+Quote Post
lancode
сообщение Nov 20 2008, 14:23
Сообщение #17





Группа: Новичок
Сообщений: 10
Регистрация: 25-05-08
Пользователь №: 37 806



Ага. Инициализация была пропущена. Я не заметил blush.gif
Сейчас результы работы UART такие:
Тестировал прием данных на порты по-отдельности:
Порт P1.0 и P1.1 принимают данные без ошибок.
Порт P1.2 - не получается правильно принять данные. Прерывание вызывается, обрабатывается, но что-то работает неверно - байты искажаются.
Соединил перемычкой P1.0 и P1.1. Хотел таким образом протестировать одновременный прием данных по обоим линиям.
На P1.0 все в порядке, а на P1.1 - неверные данные.
Пока нет возможности протестировать одновременный прием разных данных на все порты, но потом я это сделаю.
Перещелкивание пинов, которое использовалось для отладки на осцилографе я удалил. Больше не знаю как можно оптимизировать по скорости.
Подозреваю что прием работает неправильно из-за вот этих настроек:
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xe9;
sfr16 PCA0CP2=0xeb;

Я не понял почему задержки именно такие. Каким образом они вычислялись? Попробовал эксперементально подобрать числа - не получилось.

ps. Можно ли принимать данные на разных скоростях? Например на одном порту 115200, на другом - 9600, а на третьем - 19200. Пока мне это не нужно делать, просто интересная идея возникла. smile.gif
Go to the top of the page
 
+Quote Post
barabek
сообщение Nov 21 2008, 03:24
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(lancode @ Nov 21 2008, 00:23) *
Ага. Инициализация была пропущена. Я не заметил blush.gif
Сейчас результы работы UART такие:
Тестировал прием данных на порты по-отдельности:
Порт P1.0 и P1.1 принимают данные без ошибок.
Порт P1.2 - не получается правильно принять данные. Прерывание вызывается, обрабатывается, но что-то работает неверно - байты искажаются.

Нашел ошибку при копировании, необходимо исправить:
Код
     {
     SBUF2sr_temp>>=1;
     SBUF2sr_tempMSB=Rx2sft_pin;
     switch(RX0_state)//здесь ошибка!!! должно быть RX2_state

Цитата
Соединил перемычкой P1.0 и P1.1. Хотел таким образом протестировать одновременный прием данных по обоим линиям.
На P1.0 все в порядке, а на P1.1 - неверные данные.
Пока нет возможности протестировать одновременный прием разных данных на все порты, но потом я это сделаю.
Перещелкивание пинов, которое использовалось для отладки на осцилографе я удалил. Больше не знаю как можно оптимизировать по скорости.

Так я и знал smile.gif. После того как запостил, подумал-подумал и вот что приходит на ум. Если на каждую обработку бита уходит по 2.5 мкс, а длительность бита около 8 мкс, то при одновременном приеме приемник №1 (и тем более №2) обновляют свои счетчики (PCA0CPх+=HALFBITTIME;)на это время позднее (для №2 это вообще больше 5мкс). Поэтому эти процедуры нужно как-то вынести в самое начало обработчика прерывания, однако это увеличит длительность обработки. Стоит ли это делать, все равно в некоторых ситуациях при ПОЧТИ одновременном приеме возможна задержка обработки в максимуме почти на это-же время и, соответственно, срыв синхронизации. Улучшить ситуацию можно (кажется так и сделано в апноте), если не считывать стартовый бит, а после фронта старта отсчитывать 1,5 длительности бита до первого бита данных. Тогда максимально узкое место по времени будет 8мкс - длительность 1 бита, а не 4мкс - длительность 0,5 бита. Чуть ухудшится помехозащищенность, но она и так никакая, так что ничего страшного smile.gif. Вобщем, как-то мне страшновато стало 3 приемника, 2 я думаю, можно потянуть, был бы камень побыстрей, тогда...
А вот замкнуть два входа приемников я не догадался smile.gif, а сейчас кит использован, не начем погонять 05.gif
Цитата
Подозреваю что прием работает неправильно из-за вот этих настроек:
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xe9;
sfr16 PCA0CP2=0xeb;

Я не понял почему задержки именно такие. Каким образом они вычислялись? Попробовал эксперементально подобрать числа - не получилось.

Это не задержки, это адреса модулей, чтобы с ними можно было общаться как с 16битным числом, подробнее почитайте в "Cx51 Compiler" (у меня файл называется "c51.pdf") - возможно он есть и у Вас на компе. Поставляется вместе с кейлом, либо в нете легко найти. Только обратите внимание, что они хранятся не в том порядке байтов, как обычный "int", но это так, на будущее.
Цитата
ps. Можно ли принимать данные на разных скоростях? Например на одном порту 115200, на другом - 9600, а на третьем - 19200. Пока мне это не нужно делать, просто интересная идея возникла. smile.gif

конечно разные скорости возможны. Для этого вводить не одно определение #define BITTIME (SYSCLK/BAUDRATE), а соответствующие. Главное, чтобы не получилось больше 65536, Т.е. в нашем случае минимальный бодрейт получается 366 бит/с. Если переделать, что на старте отсчитывать 1,5 бита, получим 549.
Go to the top of the page
 
+Quote Post
lancode
сообщение Nov 21 2008, 19:36
Сообщение #19





Группа: Новичок
Сообщений: 10
Регистрация: 25-05-08
Пользователь №: 37 806



Ошибку поправил. Теперь работают все 3 порта.

Цитата
а сейчас кит использован, не начем погонять

Вы распаиваете схему прямо там, на макетной плате кита?
Я просто взял шлейф от floppy дисковода и подключаю через него разные макетные платы. Так можно отлаживать разные проекты одновременно. Не знаю насчет помехозащищенности, но проблем пока не возникало. smile.gif

В принципе, моя задача решена. У меня редко будет одновременный прием данных на таких скоростях. А если часть данных побъется, то это не страшно.

Про прием на разных скоростях спросил, потому что боялся, что будет чего-нибудь глючить, если настроить разные определения BITTIME.

p.s. Если Вы все-таки реализуете одновременный прием на разных портах, то мнтересно бы было потестить этот исходиник smile.gif Это так, если будет интерес и время свободное. smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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