patoassado2
-
Posts
15 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por patoassado2
-
-
Se puder mostra o esquema elétrico, to vendo q ta em um oscilador rc entao não deve ser arduino, dependendo da ligação pode dar pau também, tipo se não colocar resistor nas entradas ligados no terra (de uns 3 a uns 15 k devem servir, 10k eh o habitual ).
Tem o timer0 q da pra usar a interrupção dele(quando ele estoura) pra contar tempo(colocando valor inicial no timer e definindo quantas linhas de código contam uma unidade do timer nas config da pra contar qualquer valor de tempo) , a interrupção para o programa e leva a execução dos ciclos pra um endereço no começo da memória(linha 4) e de lá você faz o que quiser
o byte tris=0x85 n seria byte tris=0x85h ? ou não precisa do h?
to sem meus componentes aqui, pior q eu tenho esse pic kkkk mas to em outra cidade.... -
Deixa int entao, e troca os true e false por 0 e 1, da na mesma
#include <12F675.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT
#use fast_io(A)
//#end if
#ZERO_RAM#byte tris=0x85
#bit led = 0x5.4 //pino 3
#bit botao = 0x5.0 //pino 7int tempo;
int flag_led_piscou;
int flag_botao_acionou;void main() {
tris=0b001101; //gp0 como entrada
tempo=0;
flag_led_piscou= 0;
flag_botao_acionou= 0;while(true){
tempo=0;
if(botao==1){
flag_botao_acionou=1;
tempo=0;
}
while(flag_botao_acionou==1 && flag_led_piscou==0 && botao==0){
delay_ms(1);
tempo++;
if (tempo==5000){
led=1;
delay_ms(500); //led aceso
led=0;
flag_led_piscou=1;
flag_botao_acionou=0;
tempo=0;
}
}
flag_led_piscou=0;
flag_botao_acionou=0;
}
} -
estão com nome repetido, apaga e deixa so essas
int tempo;
bool flag_led_piscou;
bool flag_botao_acionou;não sei, talvez eu escrevi boleana errado, não sei como declara boleana, eu vi q eh assim num site kkkk
em q linguagem você esta programando?
-
Se não der desisto, (por hj kkk)
#include <12F675.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT
#use fast_io(A)
//#end if
#ZERO_RAM#byte tris=0x85
#bit led = 0x5.4 //pino 3
#bit botao = 0x5.0 //pino 7int tempo;
bool flag_led_piscou;
bool flag_botao_acionou;void main() {
tris=0b001101; //gp0 como entrada
tempo=0;
flag_led_piscou= false;
flag_botao_acionou= false;while(true){
tempo=0;
if(botao==1){
flag_botao_acionou=true;
tempo=0;
}
while(flag_botao_acionou==true && flag_led_piscou==false && botao==0){
delay_ms(1);
tempo++;
if (tempo==5000){
led=1;
delay_ms(500); //led aceso
led=0;
flag_led_piscou=true;
flag_botao_acionou=false;
tempo=0;
}
}
flag_led_piscou=false;
flag_botao_acionou=false;
}
} -
ainda não entendi porque ele liga imediatamente ao abrir o botão , vou dar mais uma olhada aqui
naooo, é so int mesmo aff ausheuhasea
copiei o seu codigo pra modificar, acho que não existe int1
colocou flag_led_piscou=0; dps q saiu do while(botao==0 && flag_led_piscou==0)?
não precisa ser essa flag, pode ser algum comando q saia do while, eu n conheço muito essa linguagem
-
achei outro erro meu.... dps q sair do while coloca a flag em 0 de novo kkkkk
#use fast_io(A)
//#end if
#ZERO_RAM#byte tris=0x85
#bit led = 0x5.4 //pino 3
#bit botao = 0x5.0 //pino 7int tempo;
int1 flag_led_piscou;void main() {
tris=0b001101; //gp0 como entrada
tempo=0;flag_led_piscou=0;
while(true){
if(botao==1){
delay_ms(100); // filtro de ruído
while(botao==0 && flag_led_piscou==0){
delay_ms(1);
tempo++;
if (tempo==5000){
led=1;
delay_ms(500); //led aceso
led=0;
flag_led_piscou=1; // poderia ser um return ou sei la
}
}
tempo=0;
led=0;
flag_led_piscou=0; //af q put$ria
}
}
} -
parece q faltou definir a variavel no comeco
coloca la, dps do int tempo , int flag_led_piscou -
ve se as interrupções do microcontrolador estão desativadas
saquei... perae vou arrumar aqui com uma flag...#include <12F675.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT
#use fast_io(A)
#endif
#ZERO_RAM#byte tris=0x85
#bit led = 0x5.4 //pino 3
#bit botao = 0x5.0 //pino 7int tempo;
void main() {
tris=0b001101; //gp0 como entrada
tempo=0;flag_led_piscou=0;
while(true){
if(botao==1){
delay_ms(100); // filtro de ruído
while(botao==0 && flag_led_piscou==0){
delay_ms(1);
tempo++;
if (tempo==5000){
led=1;
delay_ms(500); //led aceso
led=0;
flag_led_piscou=1; // poderia ser um return ou sei la
}
}
tempo=0;
rele=0;
}
}
} -
esquecí de uma coisa, é legal sempre zerar as variáveis e portas antes de começar os programas, as vezes elas ficam com os valores presos na memória
tipo colocarx=0;
Gp4=0;
no começo do programa também, ou ele pode bugar... -
if(botao==1){ delay_ms(100); // filtro de ruído while(botão==0){ delay_ms(1); x++; if (x == 5000){ Gp4=1; delay_ms(500); //led aceso Gp4=0; } } x=0; Gp4=0; }
não sei se ta certo tenta ai kkkk, n lembro como escreve em c++....
porém quando o led estiver aceso não detectará botao... não sei configurar interrupção do timer do pic no c++ pra interromper o led também... -
O led deve piscar por quanto tempo? quanto tempo aceso? tanto faz?
-
Tenta algo mais genérico que inclusive já tem pronto, como programas que simulam protocolos de comunicação de máquina mesmo (os mais genéricos, tipo i2c) que já tem placas prontas para comprar que se comunicam com arduino, e existem programas para fazer comunicação com seu PC através do usb, eu acho q seria mais interessante. Poderia pegar os dados deste programa no PC e mandar para qualquer lugar, inclusive para um banco de dados na nuvem, é mais fácil do que simular alguma maquina que já está até com os resistores perfeitamente dimensionados com oscilador próprio, nunca fica preciso sem aqueles algoritmos de aproximação e outras artimanhas que só se da conta que existe na prática.
-
to olhando aqui, essas versao nova do mplab parecem ser uma *****, tenta baixar uma versao antiga... não compilam totalmente certo mas é melhor do que nao compilar nada
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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
Como fazer piscar o led com o 12f629
em Microcontroladores
Postado
nesse ultimo quando você aperta o botao o programa esta lendo
if(botao==1){
x++;
}
entao como você demorou mais de um décimo de segundo pra apertar o botao o programa ja leu essas linhas de codigo pelo menos centenas de vezes por isso o x já vai direto pro 6000 e aciona o led, pra isso q serve o filtro de ruido do botão, é tipo um delay q você bota no programa
no penultimo você fez um filtro de ruido pro botão...
while(botao==1){
delay_ms(20);
esse gp3 tb ta como entrada, liga um resistor de 10k no terra igual fez com o botao
sei gp0 tb ta como entrada... coloca como saída ou bota um resistor também, ou não vai funcionar direito