Problemas com código (pic não funciona no protoboard)
 Mosaico
 Mosaico
 PIC
 Problemas com código (pic não funciona no protoboard)
  Registrar   Ajuda   Login

Tópico AnteriorTópico Anterior - Próximo TópicoPróximo Tópico
Tópico com 2343 visitas e 22 mensagens
Autor
Tópico: Problemas com código (pic não funciona no protoboard)
Marcelo Vianna
Usuário Nivel 1

Postagens: 6
Registro: 23/03/2007
Local: curitiba - PR - Brasil
Idade: 40 anosSexo Masculino
 Postado em 29/03/2007 10:51:00 PM

Olá pessoal, estou recentemente aprendendo pic em c e estou tendo problemas com o meu código. Esse codigo compila sem erro e sem warning mas não funciona no protoboard ( a gravação também está ok). Acho que faltam parametros no código, como conf. do cristal etc... se alguem puder me ajudar agradeço. Marcelo.

#include <16f628a.h>
#include <stdio.h>
#use delay(clock=12000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOMCLR,NOLVP,RC_IO,NOCPD
//#use standard_io(a)
//#use fast_io(b)
//*****************************************************************************
// define pinos de I/O (UM NOME MAIS AMIGÁVEL)
//*****************************************************************************
#define HALL PIN_A0 //
#define SIRENE PIN_A1 //
#define SEGREDO PIN_A2 //
#define PORT_MOT PIN_A3 //
#define PORT_PASS PIN_A4 //
#define OSC1 PIN_A6 //RESERVADO
#define OSC2 PIN_A7 //RESERVADO
//-----------------------------------------------------------------------------
#define RF PIN_B0 //
#define X PIN_B1 //
#define IGNICAO PIN_B2 //
#define ALERTA PIN_B3 //
#define PORTAS PIN_B4 //
#define LED_VM PIN_B5 //
#define LED_VD PIN_B6 //
#define BUZZER PIN_B7
//-----------------------------------------------------------------------------
// CONFIGURAÇÃO DOS REGISTRADORES DE CONTROLE
//-----------------------------------------------------------------------------
#use fixed_io(a_outputs=HALL, SIRENE)
#use fixed_io(b_outputs=ALERTA, PORTAS, LED_VM, LED_VD, BUZZER)

#byte tmr0 =0x00
#byte intcon =0x90
#byte trisa =0xdc
#byte trisb =0x07
#byte option_reg =0x80
#byte pcon =0x03
#byte vrcon =0x00
#byte pie1 =0x00
#byte txsta =0x00
#byte eecon1 =0x00
#byte t1con =0x00
#byte t2con =0x00
#byte ccp1con =0x00
#byte cmcon =0x07
#byte pir1 =0x00
#byte rcsta =0x00
//-----------------------------------------------------------------------------

void main(void)
{
int tempo;
tempo=10000;


while(true)
{
output_high(BUZZER);//buzzer
output_high(SIRENE);
output_high(ALERTA);
output_high(LED_VM);
output_high(LED_VD);
output_high(PORTAS);

delay_ms(tempo);
output_low(BUZZER);//buzzer
output_low(SIRENE);
output_low(ALERTA);
output_low(LED_VM);
output_low(LED_VD);
output_low(PORTAS);
delay_ms(tempo);
}
}


IP LogadoPróxima Mensagem
Doglao
Usuário Nivel 5

Postagens: 105
Registro: 09/12/2005
Local: Ciudad Juarez - - MX
Idade: 43 anosSexo Masculino
 Postado em 30/03/2007 7:00:00 PM

hola, voce realmente esta usando esta frequencia, se esta no protoboard o seu pic nao teria nada mal conectado entre os capacitores ceramicos e o cristal, voce ta usando oscilador interno, mas porque definiu as portas a6 e a7? aonde voce conseguiu este codigo? passa o projeto completo pra estudalo e ver se condiz o hardware com o codigo.
abcs

IP LogadoMensagem AnteriorPróxima Mensagem
Marcelo Vianna
Usuário Nivel 1

Postagens: 6
Registro: 23/03/2007
Local: curitiba - PR - Brasil
Idade: 40 anosSexo Masculino
 Postado em 30/03/2007 7:51:00 PM

Na verdade, em meu protoboard já tenho um projetinho que já funciona com esse pic e que roda perfeitamente em pic assembler. Também fiquei na duvida com relação ao cristal e o próprio pic, mas quando uso o cógigo assembler tudo roda bem. Não sabia que não devia declarar as portas ra6 e ra7 (para cristal). Na verdade o código tá meio confuso, mas isso não importa muito, pois minha intenção é fazer o pic rodar setando alguma saída para que eu tenha um inicio para meus estudos. Agradeço a ajuda. Vou retirar os pinos declarados do cristal e tentar rodá-lo. Se tiver uma sugestão, agradeço.

IP LogadoMensagem AnteriorPróxima Mensagem
Marcelo Vianna
Usuário Nivel 1

Postagens: 6
Registro: 23/03/2007
Local: curitiba - PR - Brasil
Idade: 40 anosSexo Masculino
 Postado em 31/03/2007 6:27:00 AM

Doglao, fiz os seguintes testes: Não declarei os pinos ra6 e ra7 do oscilador externo e troquei o cristal de 12Mhz por um de 4 Mhz e o troço funcionou. Tentei alterar (com o código funcionando) o cristal para 12Mhz novamente e alterando o delay do clock para 12 Mhz não rodou. No código feito em asm com o crital de 12 roda beleza. Muito estranho.

IP LogadoMensagem AnteriorPróxima Mensagem
Doglao
Usuário Nivel 5

Postagens: 105
Registro: 09/12/2005
Local: Ciudad Juarez - - MX
Idade: 43 anosSexo Masculino
 Postado em 31/03/2007 4:26:00 PM

ok , ai vai Marcelo, tira do fuses o RC_IO que eh para clock interno e vai funcionar perfeito com 4 mhz claro que eh o maximo internamente que pode configurar, e o cristal de 4 mhz que voce ta usando nao ta valendo de nada porque a frequencia esta internamente. Agora para funcionar em 12mhz retira a RC_IO , coloque o seu cristal de 12mhz e configure novamente o delay(clock=12000000) que vai funcionar. eu acho, esta informacao tirei do trecho deste programa
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT //ordenes para el programador
#fuses RC_IO //reloj interno
#use delay (clock=4000000) //Fosc=4Mhz
#use rs232(baud=9600, xmit=PIN_b2, rcv=PIN_b1) //manejo del RS232
#define EEPROM_SDA PIN_A1 //pines para...
#define EEPROM_SCL PIN_A0 //...manejo de eeprom 24LC256
que eta nesta pagina http://miarroba.com/foros/ver.php?foroid=46840&temaid=4061462&imprimible=si
best regards

IP LogadoMensagem AnteriorPróxima Mensagem
Marcelo Vianna
Usuário Nivel 1

Postagens: 6
Registro: 23/03/2007
Local: curitiba - PR - Brasil
Idade: 40 anosSexo Masculino
 Postado em 31/03/2007 7:28:00 PM

Douglas, agora já consegui rodar (um pouco antes de seu último post) com um cristal de 4Mhz usando:
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD
#use delay (clock=4000000) //Fosc=4Mhz

O estranho disso é que mudando o delay para 12Mhz e usando um cristal de 12Mhz, o pic não parte.

Estou usando o seguinte código já compilando e rodando sem problemas (apenas para testes):

#include <16f628a.h> //pic a utilizar
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD //CONFIGURAÇÃO DOS FUSÍVEIS
#use delay (clock=4000000) //Fosc=4Mhz

//-----------------------------------------------------------------------------
// VARIÁVEIS GLOBAIS
//-----------------------------------------------------------------------------


//*****************************************************************************
// define pinos de I/O (UM NOME MAIS AMIGÁVEL)
//*****************************************************************************
#define HALL PIN_A0 //pino que aciona o sensor hall
#define SIRENE PIN_A1 //pino que aciona a sirene ou alarme sonoro
#define SEGREDO PIN_A2 //entrada do sinal do botão segredo
#define PORT_MOT PIN_A3 //entrada do sinal do botão da porta do motorista
#define PORT_PASS PIN_A4 //entrada do sinal do botão da porta do passageiro
//-----------------------------------------------------------------------------
//RA6 E RA7 RESERVADOS PARA O CRISTAL.
//-----------------------------------------------------------------------------
#define RF PIN_B0 //entrada do sinal do 4n25 da radiofrequencia
#define X PIN_B1 //entrada do sinal do 4n25 do botão X
#define IGNICAO PIN_B2 //entrada do sinal do 4n25 da ignição
#define ALERTA PIN_B3 //pino que aciona o pisca alerta
#define PORTAS PIN_B4 //pino que aciona o relé que libra ou não as portas
#define LED_VM PIN_B5 //pino que aciona o led vermelho
#define LED_VD PIN_B6 //pino que aciona o led verde
#define BUZZER PIN_B7 //pino que aciona o buzzer
//-----------------------------------------------------------------------------
// FUNÇÕES AUXILIARES
//-----------------------------------------------------------------------------

void SAIDAS() //aciona as saídas
{
int tempo;
tempo=1000;
output_low(led_vd);
output_high(HALL);//
delay_ms(tempo);
output_high(SIRENE);
delay_ms(tempo);
output_high(ALERTA);
delay_ms(tempo);
output_high(LED_VM);
delay_ms(tempo);
output_high(PORTAS);
delay_ms(tempo);

output_low(HALL);//
delay_ms(tempo);
output_low(SIRENE);
delay_ms(tempo);
output_low(ALERTA);
delay_ms(tempo);
output_low(LED_VM);
delay_ms(tempo);
output_low(PORTAS);
delay_ms(tempo);
output_high(LED_VD);
}
//-----------------------------------------------------------------------------
void TESTA_SEGREDO() //função que testa se o botão segredo está acionado ou não
{
if (!input(SEGREDO))
{
SAIDAS();
}
else
{
return;
}
}
//-----------------------------------------------------------------------------
void TESTA_RF() //função que testa se a radiofrequencia está acionada ou não
{
if (!input(RF))
{
saidas();
}
else
{
return;
}
}
//-----------------------------------------------------------------------------
void TESTA_IGNICAO() //função que testa se a ignição está ligada ou não
{
if (!input(IGNICAO))
{
saidas();
}
else
{
return;
}
}
//-----------------------------------------------------------------------------
void TESTA_PORT_MOT() //função que testa se a porta do motorista está ou não aberta
{
if (!input(PORT_MOT))
{
saidas();
}
else
{
return;
}
}
//-----------------------------------------------------------------------------
void TESTA_PORT_PASS() //função que testa se a porta do passageiro está ou não aberta
{
if (!input(PORT_PASS))
{
saidas();
}
else
{
return;
}
}
//-----------------------------------------------------------------------------
void TESTA_X() //função que testa se o botão X foi ou não pressionado
{
if (!input(X))
{
saidas();
}
else
{
return;
}
}
//****************************************************************************
// FUNÇÃO PRINCIPAL
//****************************************************************************
void main(void)
{
while(true)
{
TESTA_SEGREDO();
TESTA_RF();
TESTA_IGNICAO();
TESTA_PORT_MOT();
TESTA_PORT_PASS();
TESTA_X();
}
}


IP LogadoMensagem AnteriorPróxima Mensagem
Doglao
Usuário Nivel 5

Postagens: 105
Registro: 09/12/2005
Local: Ciudad Juarez - - MX
Idade: 43 anosSexo Masculino
 Postado em 01/04/2007 5:51:00 PM

Ola Marcelo, so por efeito de curiosidade eu tambem gostaria de saber, 12mhz se usa fuses XT ou HS , qual seria o correcto, se uso mal estes fusiveis sera que da problemas no funcionamento?
abcs

IP LogadoMensagem AnteriorPróxima Mensagem
Leandro_pic
Usuário Nivel 5

Postagens: 465
Registro: 24/02/2007
Local: criciuma - SC - Brasil
Idade: 26 anosSexo Masculino
 Postado em 02/04/2007 12:18:00 PM

XT é para clock externo até 4Mhs, HS é para clock externo de 4Mhs a 20Mhs
se vc não obedecer isso pode dar "zebra". a maioria das vezes nem funciona.

IP LogadoMensagem AnteriorPróxima Mensagem
Doglao
Usuário Nivel 5

Postagens: 105
Registro: 09/12/2005
Local: Ciudad Juarez - - MX
Idade: 43 anosSexo Masculino
 Postado em 02/04/2007 2:29:00 PM

Ok, se no seu codigo voce colocar HS sera que vai funcionar com 12mhz?

IP LogadoMensagem AnteriorPróxima Mensagem
Leandro_pic
Usuário Nivel 5

Postagens: 465
Registro: 24/02/2007
Local: criciuma - SC - Brasil
Idade: 26 anosSexo Masculino
 Postado em 03/04/2007 12:38:00 PM



Sim, pois 12Mhz está entre 4Mhz e 20Mhz.

IP LogadoMensagem AnteriorPróxima Página
 Todos os horários são de Brasília (GMT -03:00)
 Nova Mensagem desde a sua Última Visita.
[***] Palavra proibida pelo moderador do Grupo de Discussão
Páginas: 1 2 3
Tópico AnteriorTópico Anterior - Próximo TópicoPróximo Tópico

Volta para o Topo da Página



Forum Now! - Criar seu forum grátis