nao consigo acionar chave

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

nao consigo acionar chave

Mensagem  theus_mecatronica em Seg Maio 10, 2010 10:30 pm

Código:
while (1)
   {
   Delay10KTCYx(500);
   LED_AMARELO=! (LED_AMARELO);
   Delay10KTCYx(500);
   LED_VERMELHO=! (LED_VERMELHO);
   
   if (BOTAO_1)
   {
   LED_VERDE=1;
   }

   }//end while

Essa lógica está errada?
Ou falta alguma coisa para conseguir acionar o LED depois de pressionar a chave?
ja defini todas as portas

theus_mecatronica

Mensagens : 9
Data de inscrição : 29/04/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  Bruno S. Avelar em Ter Maio 11, 2010 12:18 pm

Olá theus_mecatronica,

A lógica não está errada.
Do jeito que está ao apertar o botão o LED verde acenderá e ficará acesso para sempre enquanto os outros ficarão piscando.
Se não está acontecendo isto eu recomendo a você verificar se a configuração do botão, feita antes do while(1), está como entrada digital e que os LEDs estão configurados como saídas digitais.
Provavlemente você terá que colocar

ADCON1 |=0x0F;

na parte de configuração, uma vez que RE1 e RE0 também são portas analógicas.
Vê aí se dá certo!

Espero ter ajudado,
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 33
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  theus_mecatronica em Ter Maio 11, 2010 1:07 pm

Mais uma vez obrigado pela atenção Bruno, eu configurei as portas sim e creio que estejam certas. So troquei o LED pela BUZINA

Código:

#include <p18cxxx.h>   // Necessário para que o compilador adicione a biblioteca
                  // com as definições do PIC selecionado no projeto, neste
                  // caso, o modelo 18F4550.

#include <delays.h>      // Biblioteca padrão de rotinas de atraso do C18 Microchip
                  // mais informações nos arquivos de ajuda da biblioteca C18
                  // presentes na propria pasta de instalação, por exemplo,
                  // C:\MCC18\doc\hlpC18Lib.chm
                  // Procure pelo item: "Delay Functions"
                            
/** D E F I N E S ************************************************************/
// LED's do Kit PICMINAS:   saida digital
//atribuição:   0 = LED desligado
//            1 = LED ligado
#define BUZINA           PORTCbits.RC1
#define BOTAO_1         PORTEbits.RE1

/** V A R I A V E I S  G L O B A I S ****************************************/

/**  P R O T O T I P O S  P R I V A D O S ***********************************/
void ConfiguraSistema (void);
void Delay (void);
void Delay_precisao (void);

/** F U N C O E S ************************************************************/

/******************************************************************************
 * Funcao:       void main(void)
 * Entrada:    Nenhuma (void)
 * Saída:         Nenhuma (void)
 * Descrição:  Função principal do programa. O termo "main" significa principal,
 *            pois esta é a primeira a ser chamada após o   reset do
 *            microcontrolador.
 *            Todas as outras funções sao chamadas a partir da "main".
 *****************************************************************************/
void main(void)
{
   
   ConfiguraSistema();
      BUZINA=0;
      

   
      
   
   {
      if (BOTAO_1)
      {
       BUZINA = !(BUZINA);   //Inverte o nivel logico do LED vermelho
      }
      
   }//end while
   
}//end main


void ConfiguraSistema (void)
{
    // Configura LED's do Kit PICMINAS: saida digital
   TRISCbits.TRISC1=0;
   TRISEbits.TRISE1=1;   // RD1: saida digital - LED_VERMELHO
   
}//end ConfiguraSistema


void Delay (void)
{
   Delay10KTCYx(240);    //delay de 200ms
   Delay10KTCYx(60);    //delay de  50ms
}//end Delay

void Delay_precisao (void)
{
   Delay10KTCYx(240);    //delay de 200ms
   Delay10KTCYx(59);
   Delay1KTCYx(9);
   Delay100TCYx(9);
   Delay10TCYx(9);
   Delay1TCY();
   Delay1TCY();
   Delay1TCY();
   Delay1TCY();
   Delay1TCY();
   Delay1TCY();
}
extern void _startup (void);        // See c018i.c in your C18 compiler dir

// Alocação da função de tratamento do "reset" da aplicação principal
// no endereço 0x800 da memória de programa
#pragma code REMAPPED_RESET_VECTOR = 0x000800
void _reset (void)
{
    _asm goto _startup _endasm
}
#pragma code

theus_mecatronica

Mensagens : 9
Data de inscrição : 29/04/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

DESCULPAS

Mensagem  theus_mecatronica em Ter Maio 11, 2010 7:02 pm

Mil desculpas Bruno, mas nao sabia deste detalhe do forum. Mas a partir de hoje seguirei na risca. Obrigado pela dica.

theus_mecatronica

Mensagens : 9
Data de inscrição : 29/04/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  Bruno S. Avelar em Qua Maio 12, 2010 2:19 pm

Olá theus_mecatronica,

Compilei o código que você colocou no post acima. Para ele funcionar você deve colocar na parte de configuração do sistema a linha:
Código:
ADCON1 |=0x0F;
Ela é necessária pois a porta RE1 que está ligado o botão 1 que você utiliza ela pode ser usada para entrada analógica. O registrador de função especial ADCON1 pode ser entendido lendo o datasheet na parte de conversor AD.
Se seu projeto for apenas digital basta incluir esta linha de código antes da configuração das portas.

Espero ter ajudado,
Bruno S. Avelar.
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 33
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  theus_mecatronica em Qui Maio 13, 2010 4:41 pm

Mais uma vez problema resolvido muito obrigado Bruno.

theus_mecatronica

Mensagens : 9
Data de inscrição : 29/04/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  theus_mecatronica em Sab Maio 15, 2010 2:47 pm

Código:

   if (BOTAO_1)
            {
            while(1)
            {
            BUZINA =! (BUZINA);
            LED_VERDE =! (LED_VERDE);
            Delay10KTCYx (200);
            Delay10KTCYx (200);
            Delay10KTCYx (200);
            Delay10TCYx (2);
            Delay1TCY();
            Delay1TCY();
            Delay1TCY();
            Delay1TCY();
            BUZINA =! (BUZINA);
            LED_VERDE =! (LED_VERDE);
            Delay10KTCYx (200);
            Delay10KTCYx (200);
            Delay10KTCYx (200);
            Delay10TCYx (2);
            Delay1TCY();
            Delay1TCY();
            Delay1TCY();
            Delay1TCY();

Juro que tentei Bruno, mas nao consegui colocar como codigo, caso consiga responder minha pergunta poderia ensinar-me tambem a colocar como "codigo"? Queria saber como faço para interromper o comando while apertando o botao RE2 por exemplo. Obrigado e desulpe-me.

theus_mecatronica

Mensagens : 9
Data de inscrição : 29/04/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  Bruno S. Avelar em Qua Maio 19, 2010 11:06 am

Olá

Como colocar o texto na janela de código: Basta escrever o código normalmente como você tem feito, no final do código voce deve escrever [/code] e no início do código voce deve escrever [code]. Para o seu ficar certo faltou só a barra no final. Eu arrumei para você.
Sobre sua dúvida:
É possível sair de um while(1) usando o comando go to. Porém hoje em dia consideramos hediondo um código em C com esta sintaxe (eu nem tanto, mas é o que dizem). Se você puder, use um pino do PORTB que possua interrupção e trate o código na interrupção, se você precisar mesmo do RE2 recomendo que pense em outra lógica para resolver este problema sem ter que sair do loop infinito.

Espero ter ajudado,
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 33
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Re: nao consigo acionar chave

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum