habibi Postado Abril 13, 2015 Denunciar Share Postado Abril 13, 2015 //Calibrador p70 // #include <16F628.h> #device *=16 ///3505-2871 #FUSES NOWDT #FUSES INTRC_IO #FUSES PUT #FUSES PROTECT=3 #FUSES BROWNOUT #FUSES NOMCLR #FUSES NOLVP #FUSES NOCPD // #use delay(clock=4000000) #use rs232(baud=9600,parity=E,xmit=PIN_a0,rcv=PIN_a1,bits=8) //#use rs232(baud=9600,parity=N,xmit=PIN_a0,rcv=PIN_a1,bits=8) #define use_portb_lcd TRUE #include <lcd1.c> #include <stdlib.h> #use FAST_IO(A) #use FAST_IO(B) #byte porta=0x05 #byte portb=0x06 #byte trisb = 0x86 #byte trisa = 0X85 #byte sai=0xff #bit botao1=porta.7 #bit botao2=porta.6 #bit botao3=porta.5 #bit Rele_Reset=porta.3 #bit Rele_Grava=porta.2 #bit tristx=trisa.0 #bit bittx=porta.0 #bit trisb3=trisb.3 char versao[20]; char wversao[1]; byte data; byte wdata[6]; int k,i,l,c; void p70() { rele_reset = 0; rele_grava = 0; trisb = 1; lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("3-Atual 1-Versao"); lcd_gotoxy(1,2); lcd_putc("2-Teste/Calibra"); botao1 = 1; while (1) { if (botao2 == 0) { lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc(" Lendo EPROM "); Rele_Reset = 1; delay_ms(1200); Rele_Reset = 0; lcd_putc("\f"); lcd_gotoxy(1,1); l = 1; c = 1; for (i=1;i<=23;++i) { wversao[0] = getc(); if (i > 3) { versao[i-3] = wversao[0]; }; }; for (i=1;i<=20;i++) { lcd_gotoxy(c,l); lcd_putc(versao); c++; if (c==16) { l = 2; c=1; }; }; while (Botao3 == 1) { }; while (Botao3 == 0) { }; reset_cpu(); }; if (Botao1 == 0) { Rele_Grava = 1; lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc(" Modo Atualiza "); lcd_gotoxy(1,2); lcd_putc("1-Reset 2-Sair "); botao1 = 1; while (Botao3 == 1) { if (Botao2 == 0) { Rele_Reset = 1; delay_ms(600); }; if (Botao2 == 1) { Rele_Reset = 0; }; }; reset_cpu(); }; if (Botao3 == 0) { lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("3- Testa Motor"); lcd_gotoxy(1,2); lcd_putc("1-Calibra 2-Sai"); k = 0; delay_ms(1000); while (Botao3 == 1) { if (Botao2 == 0) { lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc(" Modo Calibrar "); putc(110); delay_ms(1000); putc(20); delay_ms(1000); lcd_gotoxy(1,2); lcd_putc("Inserir a Folha"); while (Botao3 == 1) { }; rele_reset = 1; delay_ms(1000); reset_cpu(); }; if (Botao1 == 0) { lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("Veloci. Frente "); putc(110); delay_ms(1000); putc(25); delay_ms(1000); putc(01); for (i=1;i<=100;++i) { data = getc(); lcd_gotoxy(0,2); printf(LCD_PUTC, " %u",data); //delay_ms(1); }; putc(99); lcd_putc("\f"); lcd_putc("Veloci. Tras "); lcd_gotoxy(1,1); putc(110); delay_ms(1000); putc(25); delay_ms(1000); putc(02); for (i=1;i<=100;++i) { data = getc(); lcd_gotoxy(0,2); printf(LCD_PUTC, " %u",data); //delay_ms(1); }; putc(99); lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("1- Testa Motor"); lcd_gotoxy(1,2); lcd_putc("2-Calibra 3-Sai"); Botao3 == 0; k == 0; }; }; while (botao3==0) { delay_us(1); }; reset_cpu(); }; } } void bl700() { putc(51); putc(00); delay_ms(1000); putc(10); putc(56); putc(00); delay_ms(1000); lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("Insira o cartao"); lcd_gotoxy(1,2); lcd_putc("Menu para Cont."); while (botao1 == 1) { delay_us(100); }; delay_ms(500); lcd_putc("\f"); lcd_gotoxy(1,1); putc(00); k = 0; lcd_putc(" 1 2 3 - 4 5 6"); while (botao1 == 1) { do { data = getc(); } while (data==0) ; k = k + 1; if (k==5) { wdata[0] = data; }; if (k==6) { wdata[1] = data; }; if (k==7) { wdata[2] = data; }; if (k==8) { wdata[3] = data; }; if (k==9) { wdata[4] = data; }; if (k==10) { wdata[5] = data; }; if (k>=16) { lcd_gotoxy(1,2); printf(LCD_PUTC, " %X%X%X - %X%X%X",wdata[0],wdata[1],wdata[2],wdata[3],wdata[4],wdata[5]); k = 0; delay_ms(400); putc(00); }; if (botao3 == 0) { Reset_cpu(); }; }; putc(00); lcd_putc("\f"); lcd_gotoxy(0,1); lcd_putc(" Retire a folha "); putc(255); delay_ms(1000); putc(10); putc(56); putc(255); delay_ms(2000); reset_cpu(); } void Main() { rele_reset = 0; rele_grava = 0; lcd_init(); lcd_gotoxy(1,1); lcd_putc(" calibrador "); lcd_gotoxy(1,2); lcd_putc("1-P70 2-BL700"); botao1 = 1; botao2 = 1; botao3 = 1; while (1) { if (botao1 == 0) { delay_ms(100); if (botao1 == 0) { while (botao1 == 0) { }; p70(); }; }; if (botao3 == 0) { while (botao3 == 0) { }; bl700(); }; }; reset_cpu(); } existe algum erro??? pois ele não esta fazendo 2 funções que seria "lendo eprom" e "modo calibrar" no void p70(){ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LazaroBinda Postado Abril 13, 2015 Denunciar Share Postado Abril 13, 2015 Não sei se eu conseguiria te ajudar por aqui. porque você está com um programa pra PIC. Aparentemente não vejo erro no seu código (embora seja difícil afirmar isso, porque não tenho como depurá-lo, visto que não tenho o esquema do seu circuito). O problema é que quando se trabalha com pic, a gente sempre culpa o código pelo mal funcionamento do circuito. E às vezes o problema não está no código. Você já verificou o seu display? Os outros caracteres que você manda escrever aparecerem normalmente? Não se esqueça que display lcd depende de um tempo entre as escritas, mesmo usando a biblioteca do microc. Existe algum pino do pic que não esteja totalmente definido e você esteja usando? O oscilador do pic é interno ou externo? Ele não está sofrendo nenhuma interferência? (Principalmente se estiver usando motor). Existem muitos fatores que podem influenciar no funcionamento. Estou vendo que você não configurou o conversor AD, que por padrão é o que vem ativado quando você configura o TRISA como entrada. Caso esteja tudo ok. Tente utilizar as interrupções INT ou PORTB. Boa sorte! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 habibi Postado Abril 13, 2015 Autor Denunciar Share Postado Abril 13, 2015 Lazaro voce tem skype ? poderia te mostrar o circuito e dar outras informações Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LazaroBinda Postado Abril 16, 2015 Denunciar Share Postado Abril 16, 2015 Amigo, não tenho skype, mas posta uma imagem aqui que tento te ajudar. você usa proteus? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
habibi
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.