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

 
 
 
Reply to this topicStart new topic
> проблема с ком-портом pic16f887, принимает не те данные
Mikron
сообщение Jan 15 2013, 19:58
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Добрый вечер
Возникла проблема с ком портом, почему не понятно, голову уже сломал)

Пик связан с компьютером, все было нормально, в какой-то момент мк стал принимать какие-то странные данные
Написал простую программу, посылающую в ком порт числа от 1 до 255

Код
#pragma origin 4
#pragma interruptSaveCheck  w

#define FOSC 8000000L

#define delay_us(x) { unsigned char us; \
                      us = (x)/(12000000L/FOSC)|1; \
                      while(--us != 0) continue; }

int i;

void delay_ms(unsigned int ms)
{
  unsigned char i;
  do {
    i = 4;
    do {
      delay_us(164);
    } while(--i);
  } while(--ms);
}

void init_usart(void)
{
  TXSTA=0b00100100;  // Asynch,8bits,tx enb
  RCSTA=0b10010000;  
  SPBRG = 51;

}

void init(void)
{
        OSCCON=0x70; //8MHz
        OSCTUNE = 0;

        TRISA = 0b00010111;
        TRISB = 0b00000000;
        TRISC = 0b10000001;
        TRISD = 0b00000000;
        TRISE = 0b00000000;

        PORTA = 0;
        PORTB = 0;
        PORTD = 0;
        PORTE = 0;
}

void main(void)
{
        i=0;

        init();
        init_usart();

        for(;;){

                ++i;

                delay_ms(50);

                if(i>255)
                        i=0;

                 while(!TXIF) {}

                TXREG = i;
        }
}


Вот что получаю

Код
0 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF


Выходит что между 00111111 и 11000000 ничего. Думал может в настройках порта, но скорость и там и там совпадаю.

Может было у кого что-то похожее?
Спасибо за помощь(
Go to the top of the page
 
+Quote Post
Redguy
сообщение Jan 16 2013, 03:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-01-10
Из: Россия, Самара
Пользователь №: 54 801



А тут случайно не происходит перекрывания глобальной "int i" и локальной "unsigned char i"?
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 16 2013, 03:59
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Цитата(Redguy @ Jan 16 2013, 07:53) *
А тут случайно не происходит перекрывания глобальной "int i" и локальной "unsigned char i"?

сейчас протестирую, блин, компилятор cc5x, от него всего можно ожидать, уже были с ним неожиданности, спасибо
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 16 2013, 08:26
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Цитата(Mikron @ Jan 16 2013, 06:59) *
сейчас протестирую, блин, компилятор cc5x, от него всего можно ожидать, уже были с ним неожиданности, спасибо

На другой плате все работает, как думаете, можно было как-нибудь хитро испортить мк, что бы он два старших бита не передавал или не принимал?
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 17 2013, 08:27
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Цитата(Mikron @ Jan 16 2013, 12:26) *
На другой плате все работает, как думаете, можно было как-нибудь хитро испортить мк, что бы он два старших бита не передавал или не принимал?

Продолжаю разбираться в чем проблема. На другой плате со временем так же перестало нормально работать(.

Возникла мысль что вся проблема в помехах либо по питанию либо на линии связи.

Прикладываю трассировку платы( может быть подскажет кто, что можно улучшить(
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 17 2013, 10:42
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Цитата(Mikron @ Jan 17 2013, 11:27) *
Продолжаю разбираться в чем проблема. На другой плате со временем так же перестало нормально работать(.

Возникла мысль что вся проблема в помехах либо по питанию либо на линии связи.

Прикладываю трассировку платы( может быть подскажет кто, что можно улучшить(


Может быть я немного занимаюсь флудом) но похоже проблема в том, что MAX232A а конденсаторы я поставил на 1 мкФ, хотя нужны 0.1 мкФ

напряжение на ножках max232

1 7.5
2 9.6
3 2.7
4 0
5 -5
6 -9.4





Сообщение отредактировал Mikron - Jan 17 2013, 10:49
Go to the top of the page
 
+Quote Post
doublekey
сообщение Jan 18 2013, 09:25
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 28-01-08
Из: Zelenograd
Пользователь №: 34 503



Mikron, а осциллоскопа у вас нет, чтобы сигнальчики посмотреть на выходе МК и потом на выходе MAX?
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 18 2013, 10:55
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



перепаял конденсатор у ножки 2 max232 с земли на питание
поменял конденсаторы на 0.1 мкф
ничего не изменилось(

Цитата(doublekey @ Jan 18 2013, 12:25) *
Mikron, а осциллоскопа у вас нет, чтобы сигнальчики посмотреть на выходе МК и потом на выходе MAX?

нет, но в pickit2 есть UART tools
я подключил его, показывает что мк отсылает те же данные, что и принимаю на ПК, следовательно max232 работает нормально,
значит проблема может быть в программе, может все дело в битах конфигурации, которые я не выставляю?
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 18 2013, 12:14
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



отпаял мк, замкнул ножки 11 и 12 у max232, принимает то же что и передает, значит все дело в мк( либо в программе, либо в программаторе
Go to the top of the page
 
+Quote Post
doublekey
сообщение Jan 18 2013, 13:49
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 28-01-08
Из: Zelenograd
Пользователь №: 34 503



Аналоговые выводы не могут мешать? Попробуйте проинициализировать регистр ANSEL.
Go to the top of the page
 
+Quote Post
Mikron
сообщение Jan 18 2013, 14:12
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Цитата(doublekey @ Jan 18 2013, 16:49) *
Аналоговые выводы не могут мешать? Попробуйте проинициализировать регистр ANSEL.

сконфигурировал как цифровые входы/выходы

ANSEL = 0;
ANSELH = 0;

все равно не работает(
сейчас вообще запускаться перестал, но прошивается нормально
Go to the top of the page
 
+Quote Post
doublekey
сообщение Jan 18 2013, 14:41
Сообщение #12


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 28-01-08
Из: Zelenograd
Пользователь №: 34 503



У меня бывало, что этот компилятор выкидывал конструкции вроде while(!TXIF) {}, приходилось писать как while(!TXIF) {nop();} Посмотрите, что он там в .asm пишет, есть этот while или не.
Go to the top of the page
 
+Quote Post

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

 


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


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