Fórum

Notifications
Clear all

10 botoes

33 Posts
3 Users
0 Likes
56 K Leituras
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

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 !!!


   
ReplyQuote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

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.


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

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 !!


   
ReplyQuote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

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

 


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

Ola, eu quero saber se tem como eu alterar os valores de piscadas e bips entre 2 a 100 ?


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

Blz! Vou testar no fim de semana, abraco !!


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

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 !


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

Baumm!!! Deu uma olhada ai !!??!!


   
ReplyQuote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

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

 


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

Vou dar uma mexida aqui e fazer uns testes, obrigado , abraco !


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

Então, o sw 9 e 10 nao funcionaram, se vc quiser mexer ai pra ver se eles funcionam, manda ai quando puder, obrigado !


   
ReplyQuote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

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.


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

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 !


   
ReplyQuote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

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

 

 


   
ReplyQuote
(@raimundo)
Trusted Member
Joined: 8 anos ago
Posts: 62
Topic starter  

 Funcionou bao, Valeu Claudio, abraco !


   
ReplyQuote
Page 2 / 3
Back To Top