olha eu aqui, Claudio, faz um ano que vc me presenteou com este projeto dos botoes, agora que eu vou mexer nele, queria saber se tem como eu fuçar, se tem como e onde, pra mudar valores de saida, vc pode me ajudar de novo, essa semana montei controle de 3 canais com 12f629, bao de mais !!!
Olá Raimundo!
É o mesmo programa, com aumento do porta.
Tente o seguinte (não testei ainda):
/****************************************************************************
PROGRAMAS_CCS_C_EX2
Exemplos de programas com compilador CCS C
Piscando um led e produzindo bips conforme interruptor acionado
Autor: Claudio Lários
Data: 22/04/2019
Ao acionar o interruptor 1 ligado ao portb.0 veremos o led pisca 1 vez e
um beep será produzido no disco piezo-elétrico.
Ao acionar o interruptor 2 ligado ao portb.1 veremos o led piscara 2 vezes e
se ouvirá 2 bips.
Isto continua até acionar o interruptor 8 ligado ao portb.7 fazendo o led
piscar por 8 vezes e ser ouvido 8 bips.
Também ao acionar interruptor 9 e 10 ligados ao porta.
Necessita colocar resistores de pull-up nos interruptores 9 (pino 17) e 10 (pino 18) de 10k ao Vcc.
Note que mudou os pinos do buzzer e do led.
Blog PicSource
*************************************************************************/
#include <16F628A.h>//microcontrolador PIC16F628A
#use delay(clock=4000000)//internal
#fuses NOWDT,INTRC_IO, NOPUT, NOPROTECT, BROWNOUT, NOMCLR, NOLVP, NOCPD//fuses
//bytes
#byte portb = 0x06
#byte porta = 0x05
#byte trisa = 0x85
#byte trisb = 0x86
#byte option_reg = 0x81
//bits
//ligue 8 interruptores (um em cada pino para o gnd)
#bit sw1 = 0x6.0 //pino 6
#bit sw2 = 0x6.1 //pino 7
#bit sw3 = 0x6.2 //pino 8
#bit sw4 = 0x6.3 //pino 9
#bit sw5 = 0x6.4 //pino 10
#bit sw6 = 0x6.5 //pino 11
#bit sw7 = 0x6.6 //pino 12
#bit sw8 = 0x6.7 //pino 13
#bit sw9 = 0x5.0 //pino 17
#bit sw10 = 0x5.1 //pino 18
#bit led = 0x5.6 //pino 15 ligue um led com resistor de 470 ohms ao gnd
#bit buzzer = 0x5.7 //pino 16 ligue um disco piezo-elétrico ao gnd
/*************************************************************************
GERA SOM DE BIP NO DISCO PIEZO ELETRICO
*************************************************************************/
void bipar(){
#define DURACAO 1000
#define NOTA 140
unsigned int16 b;
for(b=0;b<=DURACAO;b++){
buzzer=1;
delay_us(NOTA);
buzzer=0;
delay_us(NOTA);
}
}
/*************************************************************************
ROTINA DE GERAÇÃO DAS PISCADAS NO LED E SOM
*************************************************************************/
void pisca_bipa( unsigned int8 num){
num^=0xff;//inverte os bits
while(num){
led=1;//liga led
bipar();//gera bip no disco piezo elétrico
led=0;//apaga led
delay_ms(300);
num=num>>1;//desloca para esquerda
}
}
/*************************************************************************
ROTINA MAIN
*************************************************************************/
void main(){
setup_comparator(NC_NC_NC_NC);//desliga comparadores analógicos internos
trisb=0b11111111;//entradas
trisa=0b00111111;//saídas nos pinos 15 e 16
option_reg=0; //liga pullup
porta=0;
/*************************************************************************
LAÇO DE REPETIÇÃO
*************************************************************************/
for(;;){
while(portb==0xff);//aguarda apertar algum botão
delay_ms(40);//debounce dos interruptores
if(portb!=0xff){//testa para confirmar aperto
pisca_bipa(portb);//pisca led pelo número correspondente do botão apertado
while(portb!=0xff)delay_ms(40);//aguarda soltar botão se for o caso
}
if(porta!=0xff){//testa para confirmar aperto
pisca_bipa(porta+248);//pisca led pelo número correspondente do botão apertado
while(porta!=0xff)delay_ms(40);//aguarda soltar botão se for o caso
}
}//for(;;)
}//main()
//fim do programa
/****************************************************************************
Note que tem que usar resistor de 10k , um no pino 18 e outro no 17 junto aos botões 9 e 10.
Mudou os pinos do led e do buzzer, sendo agora nos pinos 15 e 16.
Boa noite !
certo, dei uma olhada aqui, ce aumentou 2 saidas, isso ? eu nao expressei bem, eu posso alterar pa dar mais piscas e bips ? tipo o sw 1 apertado dar 10, outro 20, outro 50, 0utro 100, tem jeito ????!!!!, juda nois ai, valeu !!
Tente algo assim (não testei):
/****************************************************************************
PROGRAMAS_CCS_C_EX3
Exemplos de programas com compilador CCS C
Piscando um led e produzindo bips conforme interruptor acionado
Autor: Claudio Lários
Data: 25/04/2019
Pisca led e bipa conforme interruptor acionado e ajustes do defines.
Necessita colocar resistores de pull-up nos interruptores 9 (pino 17) e 10 (pino 18) de 10k ao Vcc.
Blog PicSource
*************************************************************************/
#include <16F628A.h>//microcontrolador PIC16F628A
#use delay(clock=4000000)//internal
#fuses NOWDT,INTRC_IO, NOPUT, NOPROTECT, BROWNOUT, NOMCLR, NOLVP, NOCPD//fuses
//bytes
#byte portb = 0x06
#byte porta = 0x05
#byte trisa = 0x85
#byte trisb = 0x86
#byte option_reg = 0x81
//bits
//ligue 8 interruptores (um em cada pino para o gnd)
#bit sw1 = 0x6.0 //pino 6
#bit sw2 = 0x6.1 //pino 7
#bit sw3 = 0x6.2 //pino 8
#bit sw4 = 0x6.3 //pino 9
#bit sw5 = 0x6.4 //pino 10
#bit sw6 = 0x6.5 //pino 11
#bit sw7 = 0x6.6 //pino 12
#bit sw8 = 0x6.7 //pino 13
#bit sw9 = 0x5.0 //pino 17
#bit sw10 = 0x5.1 //pino 18
#bit led = 0x5.6 //pino 15 ligue um led com resistor de 470 ohms ao gnd
#bit buzzer = 0x5.7 //pino 16 ligue um disco piezo-elétrico ao gnd
//defines
//ALTERE O VALOR DE PISCADAS E BIPS PARA CADA INTERRUPTOR (DE 1 A 255 )
#define NUMERO_PISCA_BIP1 10
#define NUMERO_PISCA_BIP2 20
#define NUMERO_PISCA_BIP3 30
#define NUMERO_PISCA_BIP4 40
#define NUMERO_PISCA_BIP5 50
#define NUMERO_PISCA_BIP6 60
#define NUMERO_PISCA_BIP7 70
#define NUMERO_PISCA_BIP8 80
#define NUMERO_PISCA_BIP9 90
#define NUMERO_PISCA_BIP10 100
/*************************************************************************
GERA SOM DE BIP NO DISCO PIEZO ELETRICO
*************************************************************************/
void bipar(){
#define DURACAO 1000
#define NOTA 140
unsigned int16 b;for(b=0;b<=DURACAO;b++){
buzzer=1;
delay_us(NOTA);
buzzer=0;
delay_us(NOTA);
}
}
/***************************************************************/
void bipa_p(unsigned int8 n){
while(n){
led=1;//liga led
bipar();//gera bip no disco piezo elétrico
led=0;//apaga led
delay_ms(300);
n--;//decrementa
}
}
/****************************************************************ROTINA DE GERAÇÃO DAS PISCADAS NO LED E SOM
****************************************************************/
void pisca_bipa_B(){//para o portB
If(portb&1) bipa_p(NUMERO_PISCA_BIP1 );
If(portb&2) bipa_p(NUMERO_PISCA_BIP2 );
If(portb&4) bipa_p(NUMERO_PISCA_BIP3 );
If(portb&8) bipa_p(NUMERO_PISCA_BIP4 );
If(portb&16) bipa_p(NUMERO_PISCA_BIP5 );
If(portb&32) bipa_p(NUMERO_PISCA_BIP6 );
If(portb&64) bipa_p(NUMERO_PISCA_BIP7 );
If(portb&128) bipa_p(NUMERO_PISCA_BIP8 );
}
/*********************************************************************/
void pisca_bipa_A(){//para o portA
If(porta&1) bipa_p(NUMERO_PISCA_BIP9 );
If(porta&2) bipa_p(NUMERO_PISCA_BIP10 );
}
/*************************************************************************
ROTINA MAIN
*************************************************************************/
void main(){
setup_comparator(NC_NC_NC_NC);//desliga comparadores analógicos internos
trisb=0b11111111;//entradas
trisa=0b00111111;//saídas nos pinos 15 e 16
option_reg=0; //liga pullup
porta=0;
/*************************************************************************
LAÇO DE REPETIÇÃO
****************************************************************************/
for(;;){
unsigned int8 c;
while(portb==0xff);//aguarda apertar algum botão
delay_ms(40);//debounce dos interruptores
if(portb!=0xff){//testa para confirmar aperto
pisca_bipa_B();//pisca led pelo número correspondente do botão apertado
while(portb!=0xff)delay_ms(40);//aguarda soltar botão se for o caso
}
c=porta&3;
if(c!=3){//testa para confirmar aperto
pisca_bipa_A();//pisca led pelo número correspondente do botão apertado
c=porta&3;
while(c!=3)delay_ms(40);//aguarda soltar botão se for o caso
}
}//for(;;)
}//main()
//fim do programa
Ola, eu quero saber se tem como eu alterar os valores de piscadas e bips entre 2 a 100 ?
Blz! Vou testar no fim de semana, abraco !!
Raimundo de novo ! Claudio, fiz um teste aqui, os sw ate 8 conta direto, acho que ate 255 porque para depois um tempo, os sw 9 e 10 nao conta, ajuda nois ai traveis !
Baumm!!! Deu uma olhada ai !!??!!
Humm! Estou sem tempo para montar em protoboard e fazer testes. Vai tentando, com esta opção:
/****************************************************************************
PROGRAMAS_CCS_C_EX4
Exemplos de programas com compilador CCS C
Piscando um led e produzindo bips conforme interruptor acionado
Autor: Claudio Lários
Data: 28/04/2019
Pisca led e bipa conforme interruptor acionado e ajustes do defines.
Necessita colocar resistores de pull-up nos interruptores 9 (pino 17) e 10 (pino 18) de 10k ao Vcc.
Blog PicSource
*************************************************************************/
#include <16F628A.h>//microcontrolador PIC16F628A
#use delay(clock=4000000)//internal
#fuses NOWDT,INTRC_IO, NOPUT, NOPROTECT, BROWNOUT, NOMCLR, NOLVP, NOCPD//fuses
//bytes
#byte portb = 0x06
#byte porta = 0x05
#byte trisa = 0x85
#byte trisb = 0x86
#byte option_reg = 0x81
//bits
//ligue 8 interruptores (um em cada pino para o gnd)
#bit sw1 = 0x6.0 //pino 6
#bit sw2 = 0x6.1 //pino 7
#bit sw3 = 0x6.2 //pino 8
#bit sw4 = 0x6.3 //pino 9
#bit sw5 = 0x6.4 //pino 10
#bit sw6 = 0x6.5 //pino 11
#bit sw7 = 0x6.6 //pino 12
#bit sw8 = 0x6.7 //pino 13
#bit sw9 = 0x5.0 //pino 17
#bit sw10 = 0x5.1 //pino 18
#bit led = 0x5.6 //pino 15 ligue um led com resistor de 470 ohms ao gnd
#bit buzzer = 0x5.7 //pino 16 ligue um disco piezo-elétrico ao gnd
//defines
//ALTERE O VALOR DE PISCADAS E BIPS PARA CADA INTERRUPTOR (DE 1 A 255 )
#define NUMERO_PISCA_BIP1 10
#define NUMERO_PISCA_BIP2 20
#define NUMERO_PISCA_BIP3 30
#define NUMERO_PISCA_BIP4 40
#define NUMERO_PISCA_BIP5 50
#define NUMERO_PISCA_BIP6 60
#define NUMERO_PISCA_BIP7 70
#define NUMERO_PISCA_BIP8 80
#define NUMERO_PISCA_BIP9 90
#define NUMERO_PISCA_BIP10 100
/*************************************************************************
GERA SOM DE BIP NO DISCO PIEZO ELETRICO
*************************************************************************/
void bipar(){
#define DURACAO 1000
#define NOTA 140
unsigned int16 b;for(b=0;b<=DURACAO;b++){
buzzer=1;
delay_us(NOTA);
buzzer=0;
delay_us(NOTA);
}
}
/***************************************************************/
void bipa_p(unsigned int8 n){
while(n){
led=1;//liga led
bipar();//gera bip no disco piezo elétrico
led=0;//apaga led
delay_ms(300);
n--;//decrementa
}
}
/****************************************************************ROTINA DE GERAÇÃO DAS PISCADAS NO LED E SOM
****************************************************************/
void pisca_bipa_B(){//para o portB
unsigned int8 d;
d=portb;
d=~d;
If(d&1) bipa_p(NUMERO_PISCA_BIP1 );
If(d&2) bipa_p(NUMERO_PISCA_BIP2 );
If(d&4) bipa_p(NUMERO_PISCA_BIP3 );
If(d&8) bipa_p(NUMERO_PISCA_BIP4 );
If(d&16) bipa_p(NUMERO_PISCA_BIP5 );
If(d&32) bipa_p(NUMERO_PISCA_BIP6 );
If(d&64) bipa_p(NUMERO_PISCA_BIP7 );
If(d&128) bipa_p(NUMERO_PISCA_BIP8 );
}
/*********************************************************************/
void pisca_bipa_A(){//para o porta
unsigned int8 e;
e=porta;
e=~e;//inverte os dígitos
If(e&1) bipa_p(NUMERO_PISCA_BIP9 );
If(e&2) bipa_p(NUMERO_PISCA_BIP10 );
}
/*************************************************************************
ROTINA MAIN
*************************************************************************/
void main(){
setup_comparator(NC_NC_NC_NC);//desliga comparadores analógicos internos
trisb=0b11111111;//entradas
trisa=0b00111111;//saídas nos pinos 15 e 16
option_reg=0; //liga pullup
porta=0;
/*************************************************************************
LAÇO DE REPETIÇÃO
****************************************************************************/
for(;;){
unsigned int8 c;
while(portb==0xff);//aguarda apertar algum botão
delay_ms(40);//debounce dos interruptores
if(portb!=0xff){//testa para confirmar aperto
pisca_bipa_B();//pisca led pelo número correspondente do botão apertado
while(portb!=0xff)delay_ms(40);//aguarda soltar botão se for o caso
}
c=porta&3;
if(c!=3){//testa para confirmar aperto
pisca_bipa_A();//pisca led pelo número correspondente do botão apertado
c=porta&3;
while(c!=3)delay_ms(40);//aguarda soltar botão se for o caso
}
}//for(;;)
}//main()
//fim do programa
Vou dar uma mexida aqui e fazer uns testes, obrigado , abraco !
Então, o sw 9 e 10 nao funcionaram, se vc quiser mexer ai pra ver se eles funcionam, manda ai quando puder, obrigado !
Você colocou os resistores de pull up de 10k ? O port A não tem pull ups internos. Use resistores de 10k ligando um lado no vcc e o outro no botão, um para cada botão somente para sw9 e 10.
Bauummm! Coloquei os 10k no vcc e nos pinos 17 e 18, isso ? se eu tirar eles os outros sw conta errado, se vc quiser tirar esses, e ficar so com os 8 botoes ta de boa, manda ai quando puder, abraco !
Tente este outra modificação:
/****************************************************************************
PROGRAMAS_CCS_C_EX5
Exemplos de programas com compilador CCS C
Piscando um led e produzindo bips conforme interruptor acionado
Autor: Claudio Lários
Data: 01/05/2019
Pisca led e bipa conforme interruptor acionado e ajustes do defines.
Necessita colocar resistores de pull-up nos interruptores 9 (pino 17) e 10 (pino 18) de 10k ao Vcc.
Blog PicSource
*************************************************************************/
#include <16F628A.h>//microcontrolador PIC16F628A
#use delay(clock=4000000)//internal
#fuses NOWDT,INTRC_IO, NOPUT, NOPROTECT, BROWNOUT, NOMCLR, NOLVP, NOCPD//fuses
//bytes
#byte portb = 0x06
#byte porta = 0x05
#byte trisa = 0x85
#byte trisb = 0x86
#byte option_reg = 0x81
//bits
//ligue 8 interruptores (um em cada pino para o gnd)
#bit sw1 = 0x6.0 //pino 6
#bit sw2 = 0x6.1 //pino 7
#bit sw3 = 0x6.2 //pino 8
#bit sw4 = 0x6.3 //pino 9
#bit sw5 = 0x6.4 //pino 10
#bit sw6 = 0x6.5 //pino 11
#bit sw7 = 0x6.6 //pino 12
#bit sw8 = 0x6.7 //pino 13
#bit sw9 = 0x5.0 //pino 17
#bit sw10 = 0x5.1 //pino 18
#bit led = 0x5.6 //pino 15 ligue um led com resistor de 470 ohms ao gnd
#bit buzzer = 0x5.7 //pino 16 ligue um disco piezo-elétrico ao gnd
//defines
//ALTERE O VALOR DE PISCADAS E BIPS PARA CADA INTERRUPTOR (DE 1 A 255 )
#define NUMERO_PISCA_BIP1 1
#define NUMERO_PISCA_BIP2 2
#define NUMERO_PISCA_BIP3 3
#define NUMERO_PISCA_BIP4 4
#define NUMERO_PISCA_BIP5 5
#define NUMERO_PISCA_BIP6 6
#define NUMERO_PISCA_BIP7 7
#define NUMERO_PISCA_BIP8 8
#define NUMERO_PISCA_BIP9 9
#define NUMERO_PISCA_BIP10 10
/*************************************************************************
GERA SOM DE BIP NO DISCO PIEZO ELETRICO
*************************************************************************/
void bipar(){
#define DURACAO 1000
#define NOTA 140
unsigned int16 b;for(b=0;b<=DURACAO;b++){
buzzer=1;
delay_us(NOTA);
buzzer=0;
delay_us(NOTA);
}
}
/***************************************************************/
void bipa_p(unsigned int8 n){
while(n){
led=1;//liga led
bipar();//gera bip no disco piezo elétrico
led=0;//apaga led
delay_ms(300);
n--;//decrementa
}
}
/****************************************************************
ROTINA DE GERAÇÃO DAS PISCADAS NO LED E SOM
****************************************************************/
void pisca_bipa_B(){//para o portB
unsigned int8 d;
d=portb;
d=~d;
If(d&1) bipa_p(NUMERO_PISCA_BIP1 );
If(d&2) bipa_p(NUMERO_PISCA_BIP2 );
If(d&4) bipa_p(NUMERO_PISCA_BIP3 );
If(d&8) bipa_p(NUMERO_PISCA_BIP4 );
If(d&16) bipa_p(NUMERO_PISCA_BIP5 );
If(d&32) bipa_p(NUMERO_PISCA_BIP6 );
If(d&64) bipa_p(NUMERO_PISCA_BIP7 );
If(d&128) bipa_p(NUMERO_PISCA_BIP8 );
}
/*********************************************************************/
void pisca_bipa_A(){//para o porta
unsigned int8 e;
e=porta;
e=~e;//inverte os dígitos
If(e&1) bipa_p(NUMERO_PISCA_BIP9 );
If(e&2) bipa_p(NUMERO_PISCA_BIP10 );
}
/*************************************************************************
ROTINA MAIN
*************************************************************************/
void main(){
setup_comparator(NC_NC_NC_NC);//desliga comparadores analógicos internos
trisb=0b11111111;//entradas
trisa=0b00111111;//saídas nos pinos 15 e 16
option_reg=0; //liga pullup
porta=0;
/*************************************************************************
LAÇO DE REPETIÇÃO
****************************************************************************/
for(;;){
unsigned int8 c;
if(portb!=0xff){//testa para confirmar aperto
pisca_bipa_B();//pisca led pelo número correspondente do botão apertado
while(portb!=0xff)delay_ms(40);//aguarda soltar botão se for o caso
}
c=porta&3;
if(c!=3){//testa para confirmar aperto
pisca_bipa_A();//pisca led pelo número correspondente do botão apertado
c=porta&3;
while(c!=3)delay_ms(40);//aguarda soltar botão se for o caso
}
}//for(;;)
}//main()
//fim do programa
Funcionou bao, Valeu Claudio, abraco !