Страница 1 из 1
Работает в протеусе,но не правильно работает на плате.
Добавлено: Пн апр 09, 2012 17:33:04
mich91
Помогите..написал одну програмку на КодеВижн, для теста кабелей,в протеусе всё работает нормально,но когда спаял,то работает но не правильно.Есть вот такой участок кода порт Д настроен как вход,с подтяжкой!!
char pin_def[8]={0b11111110,0b11111101,0b11111011,0b11110111,0b11101111,0b11011111,0b10111111,0b01111111};
char type_test(void)
{
char i;
for(i=0;i<=7;i++)
{
delay_ms(100);
PORTB=pin_def
;
DDRB=~pin_def;
if(PIND!=0xFF)
{
//delay_ms(10);
return 2;
}
}
return 1;
}
И вот такая схема 
По идее когда подключено как на схеме то функция type_test(void),должна возвратить 2,когда хотя б на одном из пине порта Д появится нолик,но почемуто возвращает 1,поскольку не работает как надо ,хотя в протеусе всё работает на ура ((...Может нужно добавить тот делей что я закоментировал ??Когда я сам замикаю любой пин порта Д на землю,то работает ,но когда минус идёт с другого порта ,програмноо ,то он не определяется,что может быть *?А может быть из за какого то неправильного фуз-бит(например деление на
??
Re: Работает в протеусе,но не правильно работает на плате.
Добавлено: Пн апр 09, 2012 18:09:13
radteh
Приложи весь проет с кодевижена да и проеуса не помешает.
PS Это проект тестера-скс (LAN-тестера)?
Re: Работает в протеусе,но не правильно работает на плате.
Добавлено: Пн апр 09, 2012 18:19:30
mich91
radteh писал(а):Приложи весь проет с кодевижена да и проеуса не помешает.
PS Это проект тестера-скс (LAN-тестера)?
Да это оно...Весь проект не могу,какая разница,я ж ведь говорю что этот участок кода не работает...но вот этот работает ,и только тогда когда штучно на порт Д нать нолик,тоисть перевести в режым измерения ПОРТ-ПОРТ,тогда работает....Я думаю что перед сравнением надо кидать задержку,поскоку в этом коде что работает перед сравнением ещё много кода,которое в свою очередь может быть как задержка.
Код: Выделить всё
void test_port_type(void)
{
char n;
PORTD=0xFF;
PORTB=pin_def[cur_pin_out];
DDRB=~pin_def[cur_pin_out];
PORT_TEMP=PINB;
for(n=0;n<8;n++)
{
if(!flags[n])
port_out[n]='S';
else
port_out[n]=n+0x31;
if(PIND==pin_def[n])
{
port_in[cur_pin_out]=(n+0x31);
}
if(port_in[n]<5)
{
port_in[n]='N';
cut=0;
}
}
if(PORTB!=PINB && flags[cur_pin_out] )
{
flags[cur_pin_out]=0;
for(n=cur_pin_out;n<8;n++)
{
if(PORT_TEMP!=(PINB|(~pin_def[n])))
{
flags[n]=0;
short_=0;
short_cir[i_s]=n+0x31;
i_s++ ;
}
}
i_s++;
short_cir[i_s]='•';
}
else
{
if(PIND!=pin_def[cur_pin_out])
{
H_C=0;
}
switch(cur_pin_out+1)
{
case 1 :{
if(PIND!=pin_def[2])
{
C_C=0;
}
};break;
case 2 :{
if(PIND!=pin_def[5])
{
C_C=0;
}
};break;
case 3 :{
if(PIND!=pin_def[0])
{
C_C=0;
}
};break;
case 4 :{
if(PIND!=pin_def[3])
{
C_C=0;
}
};break;
case 5 :{
if(PIND!=pin_def[4])
{
C_C=0;
}
};break;
case 6 :{
if(PIND!=pin_def[1])
{
C_C=0;
}
};break;
case 7 :{
if(PIND!=pin_def[6])
{
C_C=0;
}
};break;
case 8 :{
if(PIND!=pin_def[7])
{
C_C=0;
}
};break;
}
}
}
void test_cable(void)
{
char i;
char m=0;
i_s=0;
for(i=0;i<7;i++)
flags[i]=1;
C_C=1;
H_C=1;
short_=1;
cut=1;
lcd_gotoxy(0,0);
started=1;
if(type_test()==2)
{
cap_en=1;
while(cur_pin_out<8)
{
delay_ms(100);
test_port_type();
cur_pin_out++;
progress();
}
lcd_gotoxy(12,0);
lcd_puts("OK!!");
delay_ms(1000);
lcd_clear();
print_state(&m);
}
else
{
cap_en=0;
lcd_clear();
test_cap_type();
progress();
lcd_gotoxy(12,0);
lcd_puts("OK!!");
delay_ms(1000);
lcd_clear();
print_state(&m);
lcd_gotoxy(0,1);
switch( P_C )
{
case 0: {lcd_puts("USE 2 PAIR WIRE");}break;
case 1: {lcd_puts("USE 4 PAIR ERROR");}break;
case 2: {lcd_puts("USE 4 PAIR WIRE");}break;
};
}
if (cur_pin_out==8)
cur_pin_out=0;
started=0;
}
Re: Работает в протеусе,но не правильно работает на плате.
Добавлено: Пн апр 09, 2012 20:07:34
radteh
У тебя в коде есть вот такой участок
Код: Выделить всё
for(i=0;i<=7;i++)
{
delay_ms(100);
PORTB=pin_def[i];
DDRB=~pin_def[i];
зачем постоянно дёргать режим? Попробуй так
Код: Выделить всё
DDRB=0xFF;
for(i=0;i<=7;i++)
{
delay_ms(100);
PORTB=pin_def[i];
Re: Работает в протеусе,но не правильно работает на плате.
Добавлено: Вт апр 10, 2012 08:34:23
Engineer_Keen
mich91 писал(а):Весь проект не могу,какая разница,я ж ведь говорю что этот участок кода не работает...
А разница в том, чтобы можно было что-то менять, компилировать у себя и сразу проверять, в каком месте проблема...