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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Не Могу Настроить Uart->485 На Pic16F689
Сергей Владимиро...
сообщение May 24 2013, 17:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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"...

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

Подскажите, в чём дело. Спасибо!
Go to the top of the page
 
+Quote Post
igorle
сообщение May 24 2013, 19:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Я бы начал с того, что посмотрел осциллографом десятую ножку PICа. Померил ширину одного бита, прочитал байт. Убедился что скорость 2400 и передается именно 0xAB.
Go to the top of the page
 
+Quote Post
Сергей Владимиро...
сообщение May 24 2013, 20:21
Сообщение #3


Участник
*

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



На 10-й ноге TX вижу такой кадр:

Прикрепленное изображение


Если первый бит стартовый, то следующие восемь "11010101" похожи на данные. Учитывая, что данные передаются младшим битом вперёд, "10101011" - это и есть "AB".

А вот как определить скорость... что-то не соображу... Один бит = 1 клетка, развёртка 2ms. Объясните пожалуйста как проверить. Спасибо.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 24 2013, 20:27
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Сергей Владимирович @ May 25 2013, 00:21) *
А вот как определить скорость... что-то не соображу... Один бит = 1 клетка, развёртка 2ms. Объясните пожалуйста как проверить. Спасибо.

Ну, если один бит равен одной клетке, а в клетке 2 ms, тогда битовая скорость получается примерно 1/0.002 = 500

Похоже, ваш процессор работает на 4MHz (например, запрограммирован на работу от внутреннего RC).
Go to the top of the page
 
+Quote Post
Сергей Владимиро...
сообщение May 24 2013, 20:53
Сообщение #5


Участник
*

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



Это возможно, но как быть с этим...

#define _XTAL_FREQ 20000000

__CONFIG(FOSC_HS...

...и кварцем на 20МГц??? Откуда взяться 4МГц???
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 24 2013, 21:14
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Просто проверьте, что у Вас в слове конфигурации действительно записано то, что ожидается.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 24 2013, 21:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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-ю ногу заместо выпаянного кварца.
Go to the top of the page
 
+Quote Post
Сергей Владимиро...
сообщение May 25 2013, 04:51
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 25 2013, 07:46
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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% оставляю на то, что генерация срывается в момент подключения щупа)

Чудес не бывает, разберетесь, никуда не денетесь sm.gif тут главное- не вслепую тыкать авось заработает, а понимать что и зачем Вы делаете.
Go to the top of the page
 
+Quote Post
Сергей Владимиро...
сообщение May 25 2013, 14:27
Сообщение #10


Участник
*

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



1. Конденсаторы вернул;
2. Осликом генерацию не вижу;
3.,4. по поводу замены кварца и внешнего такта: выпаял кварц, а обмен продолжается на скорости 500!!! Значит я в своих настройках использую внутренний генератор! При всём этом FCMEN запретил!!!

Устал я, ничего не понимаю((( Как мне настроить МК на внешний кварц??? Отлажу до завтра, утро вечера мудренее...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 25 2013, 14:35
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Сергей Владимирович @ May 25 2013, 17:27) *
1. Конденсаторы вернул;
2. Осликом генерацию не вижу;
3.,4. по поводу замены кварца и внешнего такта: выпаял кварц, а обмен продолжается на скорости 500!!! Значит я в своих настройках использую внутренний генератор! При всём этом FCMEN запретил!!!

Устал я, ничего не понимаю((( Как мне настроить МК на внешний кварц??? Отлажу до завтра, утро вечера мудренее...

Чудес не бывает. Когда найдете причину- самому смешно станет, насколько все просто sm.gif

Попробуйте прочитать из МК то, что в него зашили и проверить биты конфигурации в этом прочитанном дампе. Может проблемы в программаторе или еще что не так (например, не тот тип МК выбран).
Go to the top of the page
 
+Quote Post
Сергей Владимиро...
сообщение May 25 2013, 15:24
Сообщение #12


Участник
*

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



Вот тут-то как раз всё в порядке. Контрольная сумма и биты конфигурации совпадают.

Я не могу понять, что не верно в конфигурации???

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_ON & IESO_ON & FCMEN_OFF);

Почему МК работает от внутреннего кварца???

Мне тут подсказали, что для внешнего кварца должно быть: IESO_OFF & FCMEN_OFF. С кварцами 12 и 20 МГц не работает, ровно как и перестало работать без кварца...

На 8 и 4МГц тоже не работает...


Сообщение отредактировал Сергей Владимирович - May 25 2013, 15:25
Go to the top of the page
 
+Quote Post
rx3apf
сообщение May 25 2013, 17:23
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Может быть, используемый программатор не записывает фьюзы ? Или, чтобы записывал, надо где-то что-то выставить ?
Go to the top of the page
 
+Quote Post
Сергей Владимиро...
сообщение May 26 2013, 12:10
Сообщение #14


Участник
*

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



Вряд ли! Я использую PICKit2, он показывает контрольную сумму прошивки и конфигурацию, после считывания они совпадают с загруженными.

Вообщем проблема такая - нет генерации на внешнем кварце! Об UART-е уже и речи нет...
Go to the top of the page
 
+Quote Post
igorle
сообщение May 26 2013, 12:31
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Сергей Владимирович @ May 26 2013, 15:10) *
Вообщем проблема такая - нет генерации на внешнем кварце! Об UART-е уже и речи нет...

Я недавно тоже плясал вокруг кварцевого генератора. Даже тема все-еще в топе висит. Не зная Вашего процессора, я порекомендовал бы такую последовательность
- Найти рабочий (демо) борд, если такие существуют в природе и есть под рукой. На нем написать и отработать минимальный код для включения внешнего генератора.
- Если на другом борде все работает, то начинать на своем заменять конденсаторы (Вы уверены что номиналы правильные?), затем кварц. Если и это не поможет - то заменить чип.

В моем случае именно чип оказался неисправным. Но он вообще глючил сильно. В Вашем случае, скорее всего, чип нормальный.
Go to the top of the page
 
+Quote Post

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

 


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


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