|
Не Могу Настроить Uart->485 На Pic16F689 |
|
|
|
May 24 2013, 17:10
|

Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-05-13
Пользователь №: 76 966

|
Здравствуйте! Такая проблема: мне нужно передавать данные на ПК. Использую драйвер 485 интерфейса ADM485ARZ и преобразователь интерфейсов Меркурий-221. Приём на ПК контролирую программой RS232 PRO v3.30. Обмен происходит на скорости 2400. Асинхронная передача, 8 бит данных, без чётности, один стоповый бит. Вот схема...
Вот код... Код /*-------------------------------------------------------------------------*/ //Head... /*-------------------------------------------------------------------------*/ #include <htc.h> #include <pic16f689.h>
#define _XTAL_FREQ 20000000
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_ON & IESO_ON & FCMEN_ON);
/*-------------------------------------------------------------------------*/
void main() { //Init hard... /*-------------------------------------------------------------------------*/ //UART...
TXSTA = 0b00000000; RCSTA = 0b10000000; SPBRG = 129; TXEN = 1; /*-------------------------------------------------------------------------*/ //INT...
INTCONbits.GIE = 0;
/*-------------------------------------------------------------------------*/ //Work cicle... START: /*-------------------------------------------------------------------------*/
if (TRMT == 1) {
TXREG = 0xAB; //Test TX!
};
__delay_ms(500);
/*-------------------------------------------------------------------------*/ //End work cicle. goto START; }; В результате отправляю "AB", а ПК принимает "F0F0F0F0"... Перепроверял... наверняка я что-то упускаю из вида или просто не знаю, т.к. я первый раз делаю такой обмен... Подскажите, в чём дело. Спасибо!
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 25)
|
May 24 2013, 20:21
|

Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-05-13
Пользователь №: 76 966

|
На 10-й ноге TX вижу такой кадр:
Если первый бит стартовый, то следующие восемь "11010101" похожи на данные. Учитывая, что данные передаются младшим битом вперёд, "10101011" - это и есть "AB". А вот как определить скорость... что-то не соображу... Один бит = 1 клетка, развёртка 2ms. Объясните пожалуйста как проверить. Спасибо.
|
|
|
|
|
May 24 2013, 21:36
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(Сергей Владимирович @ May 24 2013, 20:10)  Вот схема... Это точно полная схема? или та часть, которую Вы посчитали нужной показать? 1. Нет конденсаторов от кварца на землю. 2. Нет конденсатора по питанию на RS485 и на PIC18 Но это думаю не основное. По исходнику сказать что-то сложно, у меня, например, сейчас для PIC18 ничего не установлено. дайте хекс, тогда хоть правильность конфигурационных битов в симуляторе сразу видно будет, да и все прочее тоже. Про программу сходу вопрос: почему Вы не устанавливаете остальные относящиеся к USART регистр BAUDCTL в нужное состояние? ну ладно, пусть оно по ресету в нуле, тогда получается что BRGH == 0; BRG16 == 0; (иначе бы частота была еще больше, но не ниже как у Вас в реале) BR = 20e6/(64*130) = 2404 . похоже на то что нужно. Но осциллограф думает иначе. Значит несоответствие реальной частоты задающего генератора ожидаемой. Либо кварц и его обвязка виноваты, либо конфигурация неправильная. Очень может быть что просто кварц у вас гармониковый и заводится на своих 6.6 МГц. Или даже на 4 МГц. А не на 20. 1. обязательно поставьте конденсаторы от кварца в землю согласно даташиту. 2. Посмотрите осциллографом на 3-й ногеПИКа частоту, может и увидите на какой он заводится (обычно генерацию хорошо видно) 3. Попробуйте другой кварц, скажем на 4 МГц и сравните. 4. просто подадите извне частоту на 2-ю ногу заместо выпаянного кварца.
|
|
|
|
|
May 25 2013, 04:51
|

Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-05-13
Пользователь №: 76 966

|
Нет, это полная схема, я откинул всё что можно... уже не знал на что думать, осталось только это... Вот HEX:
UART.production.rar ( 245 байт )
Кол-во скачиваний: 102Регистр BAUDCTL изначально установлен верно, я не стал ничего менять. Подскажите, а что это Вы посчитали BR = 20e6/(64*130) = 2404?? Я не понял. Далее выяснилось следующее: при помощи Terminal v1.9b установил скорость обмена 500, обмен пошел, "ABABAB...". Значит генератор не заводится на 20МГц... Что можно сделать?? Подскажите! По поводу "посмотрите осциллографом", у меня С1-55. На кварце генерации я не вижу, а обмен идёт... значит МК работает от внутреннего генератора... как это может быть???
Сообщение отредактировал Сергей Владимирович - May 25 2013, 04:52
|
|
|
|
|
May 25 2013, 07:46
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(Сергей Владимирович @ May 25 2013, 07:51)  Нет, это полная схема, я откинул всё что можно... уже не знал на что думать, осталось только это... Ну так конденсаторы на место поставьте от кварца на землю (15-20 pF). без них дальше и обсуждать нечего. раздел документации "3.4.3 LP, XT, HS MODES" Цитата(Сергей Владимирович @ May 25 2013, 07:51)  Вот HEX:
UART.production.rar ( 245 байт )
Кол-во скачиваний: 102Ну, что сказать: 1. конфигурационные биты нормально установлены. 2. Ваша задержка вместо 500 ms дает 10 ms. почему- уж сами с компилятором разбирайтесь, что у вас такое "__delay_ms(500);" 3. Согласно симулятору, байт передается 4160 us, это 2404 bps. Совершенно соответствует теории. Значит, программу не копайте, разбирайтесь с железом. Цитата(Сергей Владимирович @ May 25 2013, 07:51)  Подскажите, а что это Вы посчитали BR = 20e6/(64*130) = 2404?? Я не понял. ? Почитайте документацию на используемый микроконтроллер. раздел "12.0 ENHANCED UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER (EUSART)." Цитата(Сергей Владимирович @ May 25 2013, 07:51)  Значит генератор не заводится на 20МГц... Что можно сделать?? Подскажите! Вы мои пункты 1 2 3 4 читали? там есть план действий. И еще один пункт добавлю 5. запретить FCMEN в конфиге. тогда при неработающем внешнем кварце процессор не будет перескакивать на внутренний генератор. Это классическая ошибка программистов, добавляющая седых волос при тестировании и отладке. Особенно тяжело вылавливается, если внутренний генератор работает на частоте, очень близкой к частоте внешнего. Цитата(Сергей Владимирович @ May 25 2013, 07:51)  По поводу "посмотрите осциллографом", у меня С1-55. На кварце генерации я не вижу, а обмен идёт... значит МК работает от внутреннего генератора... как это может быть??? Если смотрели на третьей ноге (именно на 3й а не на 2й!) с делителем 1:10 (что-нибудь типа 10 МОМ 5 пФ) и ничего не видели (ну хоть пару десятков милливольт размах) - то 99% что генерации нет (1% оставляю на то, что генерация срывается в момент подключения щупа) Чудес не бывает, разберетесь, никуда не денетесь  тут главное- не вслепую тыкать авось заработает, а понимать что и зачем Вы делаете.
|
|
|
|
|
May 26 2013, 12:31
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(Сергей Владимирович @ May 26 2013, 15:10)  Вообщем проблема такая - нет генерации на внешнем кварце! Об UART-е уже и речи нет... Я недавно тоже плясал вокруг кварцевого генератора. Даже тема все-еще в топе висит. Не зная Вашего процессора, я порекомендовал бы такую последовательность - Найти рабочий (демо) борд, если такие существуют в природе и есть под рукой. На нем написать и отработать минимальный код для включения внешнего генератора. - Если на другом борде все работает, то начинать на своем заменять конденсаторы (Вы уверены что номиналы правильные?), затем кварц. Если и это не поможет - то заменить чип. В моем случае именно чип оказался неисправным. Но он вообще глючил сильно. В Вашем случае, скорее всего, чип нормальный.
|
|
|
|
|
May 26 2013, 18:14
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Я когда работал с PIC18 в MPLAB, то не указывал в исходнике _CONFIG параметры чипа а прописывал их отдельно в настройках программирования (за давностью уже не помню где точно, но помню не в исходнике точно). Вот кусок из документации: Код MPLAB IDE recognizes configuration bits set in code with config directives or commands. These values are displayed in the Configuration Bits window (Configure>Configuration Bits). Values may be set in the Configuration Bits window as well by deselecting ”Configuration Bits set in code”. Values set in the window override code definitions in MPLAB IDE but do not change the source code. See Section 9.2 ”Configuration Bits” for more information.
|
|
|
|
|
May 27 2013, 15:30
|

Участник

Группа: Участник
Сообщений: 24
Регистрация: 24-05-13
Пользователь №: 76 966

|
Настроил МК на внутренний генератор, 4 МГц. Всё работает, он у меня и меряет и данные ПК передаёт и индикацию обеспечивает. От внешнего кварца не работает! Что делать, ума не приложу. По поводу конфигурации... вот...
Что же ещё нужно???
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|