Ir ao conteúdo
  • Cadastre-se
Marcio Pizano

PIC RESOLVIDO Recebendo sinal negativo no microcontrolador

Posts recomendados

Olá! Sou novo aqui e não sei se estou no lugar correto :)
Fiz um circuito onde envio um pulso positivo de 5V ao pic através de um pushbutton, o PIC (12F629) recebe o sinal e executa a programação. Esta funcionando perfeitamente, mas agora preciso fazer exatamente a mesma coisa, porém enviando um sinal negativo e não sei como fazer. Já tentei da forma como faço um reset no MCLR mas não funcionou.
O programa que uso é o PIC C Compile
A linha de código para receber o sinal positivo é esta:

 

if(input(inicia)){...}


INICIA é a var criada para o pino A1

<#define inicia      PIN_A1


Se alguém poder me ajudar eu agradeço.

Abraço!
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é bem negativo. Tá mais pra detectar nível 0.

Num compilador de verdade basta colocar ! (!!!!).

 

 

 

if (!RA1) ...

E claro, não te esqueças do pullup

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder!
O que fiz na verdade é um corta corrente para motos com temporizador, agora, preciso fazer um para carros, e o sinal que preciso enviar para o pic, é o sinal de quando a porta do carro abre, realmente não sei se é negativo, terra etc.
Quando você fala sobre compilador de verdade, qual você se refere? kkk
Obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que o ccs, a exemplo do arduino, tenha mastigar tudo d+ e isso é um pouco irritante pra minha "idade".

P.ex. pesquise o comando (uma função) pra escrever 1 mísero bit num port.

Em c dos pics basta fazer

RB0=0; ou

GPIO0=0;

GPIO=0b10101010;//escreve em tudo

ler:

a=GPIO4;

 

#define PORTA_ABERTA GPIO3

#define led GPIO2

if (!PORTA_ABERTA) {led=1;...};

 

1 hora atrás, Marcio Pizano disse:

realmente não sei se é negativo, terra etc.

Sem problema. Foi só pra te fazer um "ajuste técnico". Quanto à porta, se for o sensor de porta é um botão que dá contato com terra, portanto "negativo" tudo bem. O detalhe é que é 12V. Nada que um divisor resistivo não resolva. Algo como

+12--[lâmpada]-+-[interr da porta]-+-[gnd]
               |                   |
               +--[10k]-+-[4k7]----+ 
                        |
                        +---------->PIC

Tenta o irritante

if(!(input(inicia))){...} ou

if(~(input(inicia))){...} ou ainda

if((input(inicia))^1){...}

É tudo quase a lesma lerda.

 

Profecia... ruídos devem te atazanar... (não explico)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu
Por enquanto vou ficar com o irritante kkkk
Tive muito problemas com ruidos, mas essa parte já resolvi, funciona perfeito.
Dando tudo certo posto o resultado.
Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
No simulador Proteus, tudo perfeito, funcionou legal e nem precisei mudar o restante dos comandos, apenas o IF.
Fiz uma modificação no esquema elétrico também, ao invés de receber nível lógico alto, recebe nível lógico baixo.

if(!(input(inicia))){...}

if(!(input(inicia))){...}

Agora, na prática ainda não sei, quando ficar pronto posto o resultado.

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Isadora!
Fiz o circuito, estafuncionando no Proteus perfeitamente, porém, na prática (Protoboard) os relés não acionam porquê fiz umas modificações no circuito, deixei de usar por exemplo lm7805 para usar Zener, tudo para baratear o circuito, com isso, pensei em substituir os relés pelo TIP122 NPN, no proteus esta ok.
Gostaria de saber se é uma prática válida fazer essa substituição.
O led no circuito é apenas para visualizar o resultado, será uma buzina, corrente de 3,9A
Obrigado!
 

Spoiler

image.thumb.png.82de158239921b8700bb7f9abfdaa6d5.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor desenhe e monte desta forma:

circuito-rel%C3%A9.jpg

ndv os -5V, ok?

 

Penso que o relé fica + melhor que o tip. O tip pode querer esquentar. E sim, claro , com 7805 fica melhor. Nesta etapa de sua existência, use ele mesmo. Deixe a ideia de economia pra futuro quando alguém te pedir 10000 peças por mês.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Fiz o circuito e ainda não funcionou na prática.
Estou enviando o código para se possível (Questão de tempo) identificar algo que devo modificar.
Estou tentando fazer o mais próximo possível do outro modelo que esta funcionando, porém, enviando o sinal negativo. Retirei o uso do Zener e voltei com o 7805 e capacitor para evitar os ruídos.

As imagens eu não estou conseguindo anexar.

#include<12F629.h>
#use delay(clock=4000000) // Oscilador interno
#fuses XT,nomclr,nowdt

//Trocando XT para INTRC_IO, fica oscilando INTERNAMENTE sem o auxilio do cristal.


#define inicia PIN_A1       //pino INICIA      - (PINO 6)
#define rele_buzina PIN_A2  //pino RELÉ BUZINA - (PINO 5) 
#define rele_corta PIN_A0   //pino RELÉ CORTA  - (PINO 7)


//Tipo inteiro
int FOCO     = 1;     
int BUZI     = 0;
int CONTA    = 0;



void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC);
   setup_vref(FALSE);



//Estágio 1 - RELÉ DESATIVADO - NÃO PEGA
//************************************************************************************************************************************************************************
    nao_pega: //RÓTULO do goto (é o inicio)
    while( FOCO  == 1 ){
                

                if(!(input(inicia))){        //PULSO BOTÃO (PINO 6)
                delay_ms(500);               //Evitar retorno
                output_high(rele_corta);     //ACIONO o relé que permite a passagem de corrente (TEMPO) - (PINO 5)    
                output_low(rele_buzina);    //ACIONO o relé que permite a passagem de corrente (BUZINA) - (PINO 7) (INVERTIDO, leia a obs.)                   
                FOCO = 2;                    //Adiciono 1 ao FOCO para controlar o While
                goto pega;                   //VAI PARA o marcador
                }//IF
}//FOCO
//************************************************************************************************************************************************************************


//Estágio 2 - RELÉ ATIVADO - PEGA
//************************************************************************************************************************************************************************
    pega: //RÓTULO do goto (é o outro índice do goto)  
    while( FOCO  == 2 ){

                if(!(input(inicia))){           //PULSO BOTÃO (PINO 6)  
                delay_ms(200);
                FOCO = 3;                       //Adiciono 0 ao FOCO para controlar o While
                goto contando;                  //VAI PARA o marcador
                }//IF                 
}//FOCO
//************************************************************************************************************************************************************************





//Estágio 3 - RELÉ ATIVADO - CONTANDO
//************************************************************************************************************************************************************************
    contando: //RÓTULO do goto (é o outro índice do goto)  
    while( FOCO  == 3 ){  
    
                delay_ms(500); //Preciso do valor baixo para aceitrar o clique do botão com rapidez (Precisão)
                CONTA++;

                if(!(input(inicia))){           //PULSO BOTÃO (PINO 6) 
                delay_ms(500);                  //Evito o retorno
                FOCO = 2;                       //Adiciono 0 ao FOCO para controlar o While
                CONTA = 0;
                goto pega;                      //VAI PARA o marcador
                }//IF  
                
//                if(CONTA == 1260){                //um segundo = 10,5
                if(CONTA == 14){                //um segundo = 10,5
                FOCO = 4;                       //Adiciono 0 ao FOCO para controlar o While
                CONTA = 0;
                goto cortado; 
                }//IF                
                
}//FOCO
//************************************************************************************************************************************************************************



//Estágio 4 - RELÉ DESATIVADO - CORTADO
//************************************************************************************************************************************************************************
    cortado: //RÓTULO do goto (é o outro índice do goto)  
    while( FOCO  == 4 ){
    delay_ms(500);
      
                //Neste caso apenas desligando a moto para voltar ao normal      
                output_low(rele_corta);      //DESACIONO o relé que permite a passagem de corrente (CORTA) - (PINO 7)
                output_low(rele_buzina);     //DESACIONO o relé que permite a passagem de corrente (BUZINA) - (PINO 5) 
                buzi++;

                if (buzi == 2){
                output_high(rele_buzina);
                delay_ms(100);
                buzi = 0;
                }//IF
}//FOCO
//************************************************************************************************************************************************************************


}//Void main

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Marcio Pizano disse:

imagens eu não estou conseguindo anexar

Carregue num site hospedeiro..p.ex.https://uploaddeimagens.com.br/

depois...

 

1 hora atrás, Marcio Pizano disse:

o circuito e ainda não funcionou na prática

defina melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.
O circuito funciona (Na prática) se eu não inverter o sinal negativo enviado pelo botão, ou seja, se eu enviar positivo ao pic e manter a programação sem a opção de inversão do sinal.
Se eu enviar negativo ao pic e mudar a programação, funciona somente no Proteus e não na prática.

Segue a imagem.
😘😆

1.png?1561856304

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você deve ter feito alguma cagadinha na montagem. E no esquema acima por favor retire a indicação -5 e -12 pois tá me incomodando. Coloque só o símbolo terra/gnd

No seu programa, me mostre onde está definindo se pino entrada ou saída... TRIS...

Tá vendo? O ccs te engessa de tal forma que nem sabe o que é isso. Sim é importante saber. Mas me lembrei agora que o irritante ccs te mastiga isso... e sem explicar nada... aff...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá! Realmente tinha feito uma cagadinha no circuito kkk

Então para sanar as dúvidas, peguei uma placa que tinha certeza do seu bom funcionamento, tirei o pic que enviava 5v no botão e coloquei outro gravado com a programação que postei e tudo funcioneou lindamente. É claro que tive que cortar uma trilha na pci para enviar um sinal negativo, mas tudo ok agora.

Agradeço por sua ajuda que foi de grande importância.

 

Spoiler

me mostre onde está definindo se pino entrada ou saída

Realmente não preciso definir o TRIS, isso deixa agente meio "cego" mesmo.


Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!