|
|
  |
проблема с ком-портом pic16f887, принимает не те данные |
|
|
|
Jan 15 2013, 19:58
|

Частый гость
 
Группа: Участник
Сообщений: 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 ничего. Думал может в настройках порта, но скорость и там и там совпадаю. Может было у кого что-то похожее? Спасибо за помощь(
|
|
|
|
|
Jan 16 2013, 03:53
|
Участник

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

|
А тут случайно не происходит перекрывания глобальной "int i" и локальной "unsigned char i"?
|
|
|
|
|
Jan 16 2013, 03:59
|

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

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

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

|
Цитата(Mikron @ Jan 16 2013, 06:59)  сейчас протестирую, блин, компилятор cc5x, от него всего можно ожидать, уже были с ним неожиданности, спасибо На другой плате все работает, как думаете, можно было как-нибудь хитро испортить мк, что бы он два старших бита не передавал или не принимал?
|
|
|
|
|
Jan 17 2013, 08:27
|

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

|
Цитата(Mikron @ Jan 16 2013, 12:26)  На другой плате все работает, как думаете, можно было как-нибудь хитро испортить мк, что бы он два старших бита не передавал или не принимал? Продолжаю разбираться в чем проблема. На другой плате со временем так же перестало нормально работать(. Возникла мысль что вся проблема в помехах либо по питанию либо на линии связи. Прикладываю трассировку платы( может быть подскажет кто, что можно улучшить(
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 17 2013, 10:42
|

Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 18 2013, 09:25
|
Участник

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

|
Mikron, а осциллоскопа у вас нет, чтобы сигнальчики посмотреть на выходе МК и потом на выходе MAX?
|
|
|
|
|
Jan 18 2013, 10:55
|

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

|
перепаял конденсатор у ножки 2 max232 с земли на питание поменял конденсаторы на 0.1 мкф ничего не изменилось( Цитата(doublekey @ Jan 18 2013, 12:25)  Mikron, а осциллоскопа у вас нет, чтобы сигнальчики посмотреть на выходе МК и потом на выходе MAX? нет, но в pickit2 есть UART tools я подключил его, показывает что мк отсылает те же данные, что и принимаю на ПК, следовательно max232 работает нормально, значит проблема может быть в программе, может все дело в битах конфигурации, которые я не выставляю?
|
|
|
|
|
Jan 18 2013, 13:49
|
Участник

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

|
Аналоговые выводы не могут мешать? Попробуйте проинициализировать регистр ANSEL.
|
|
|
|
|
Jan 18 2013, 14:12
|

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

|
Цитата(doublekey @ Jan 18 2013, 16:49)  Аналоговые выводы не могут мешать? Попробуйте проинициализировать регистр ANSEL. сконфигурировал как цифровые входы/выходы ANSEL = 0; ANSELH = 0; все равно не работает( сейчас вообще запускаться перестал, но прошивается нормально
|
|
|
|
|
Jan 18 2013, 14:41
|
Участник

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

|
У меня бывало, что этот компилятор выкидывал конструкции вроде while(!TXIF) {}, приходилось писать как while(!TXIF) {nop();} Посмотрите, что он там в .asm пишет, есть этот while или не.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|