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

 
 
> Не Могу Настроить 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
 
Start new topic
Ответов
Сергей Владимиро...
сообщение May 25 2013, 04:51
Сообщение #2


Участник
*

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


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- Сергей Владимирович   Не Могу Настроить Uart->485 На Pic16F689   May 24 2013, 17:10
- - igorle   Я бы начал с того, что посмотрел осциллографом дес...   May 24 2013, 19:23
- - Сергей Владимирович   На 10-й ноге TX вижу такой кадр: Если первый би...   May 24 2013, 20:21
|- - aaarrr   Цитата(Сергей Владимирович @ May 25 2013, 00...   May 24 2013, 20:27
- - Сергей Владимирович   Это возможно, но как быть с этим... #define _XTAL...   May 24 2013, 20:53
- - aaarrr   Просто проверьте, что у Вас в слове конфигурации д...   May 24 2013, 21:14
- - Ruslan1   Цитата(Сергей Владимирович @ May 24 2013, 20...   May 24 2013, 21:36
- - Сергей Владимирович   1. Конденсаторы вернул; 2. Осликом генерацию не ви...   May 25 2013, 14:27
|- - Ruslan1   Цитата(Сергей Владимирович @ May 25 2013, 17...   May 25 2013, 14:35
- - Сергей Владимирович   Вот тут-то как раз всё в порядке. Контрольная сумм...   May 25 2013, 15:24
|- - Tanya   Цитата(Сергей Владимирович @ May 25 2013, 19...   May 26 2013, 14:39
- - rx3apf   Может быть, используемый программатор не записывае...   May 25 2013, 17:23
- - Сергей Владимирович   Вряд ли! Я использую PICKit2, он показывает ко...   May 26 2013, 12:10
|- - igorle   Цитата(Сергей Владимирович @ May 26 2013, 15...   May 26 2013, 12:31
|- - rx3apf   Цитата(Сергей Владимирович @ May 26 2013, 16...   May 27 2013, 08:20
- - Сергей Владимирович   Да я с Вами согласен на 1000000%!!! Я ...   May 26 2013, 13:41
- - Lagman   Я когда работал с PIC18 в MPLAB, то не указывал в ...   May 26 2013, 18:14
- - Сергей Владимирович   Настроил МК на внутренний генератор, 4 МГц. Всё ра...   May 27 2013, 15:30
|- - Tanya   Цитата(Сергей Владимирович @ May 27 2013, 19...   May 27 2013, 16:18
- - Сергей Владимирович   Да там и рассказывать нечего: МК + кристалл 20МГц,...   May 27 2013, 17:07
- - rx3apf   Попробуйте отключить бит FCMEN в конфигурации - мо...   May 27 2013, 18:30
- - igorle   Кстати, да. Я тут полгода назад всех изводил вопро...   May 27 2013, 18:48
|- - toweroff   Цитата(igorle @ May 27 2013, 22:48) И фот...   May 27 2013, 19:42
- - Сергей Владимирович   Я таймер ещё не использовал, собственно регистр не...   May 28 2013, 06:19


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

 


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


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