Ir ao conteúdo
  • Cadastre-se

Microdesign

Membro Júnior
  • Posts

    17
  • Cadastrado em

  • Última visita

Reputação

0
  1. Bom Pedro, você não explicou o que o seu projeto irá fazer, de qualquer forma você pode usar o seguinte exemplo como modelo para receber os dados Nesse exemplo a variável "global Recebe_dado" irá receber o dado que chega na Serial do HC-06 Se receber a string "A" e o estado da variável "global estado1" for "OFF" ENTÃO mudo a aparencia (imagem) de um botão e escrevo no Label1 "LED1 LIGADO" Seto para "ON" o estado da variável "global estado1" Mostro no Label3 o que chegou na Serial do HC-06 neste caso a string "A" você pode fazer as adaptações para o seu projeto usando este como base Qualquer coisa é só chamar
  2. Gilver, Tá bem confuso o seu código Dei uma olhada rápida e ao meu ver não vai funcionar Não vi também no código nenhum pino para entrada do sensor de presença do veiculo e nem o contador Isso é só um protótipo certo? porque na prática seria inviável fazer com LDR? Ao meu ver não seria o sensor mais indicado A lógica para o seu caso seria assim: 1) Verifica S1 Delay X Verifica S2 Se ambos forem 1 = entrada veículo Abre portão Delay X ou verifica novamente estado de S2 (mais seguro) Fecha portão Incrementa contador Se somente S1 for 1 = entrada de pessoa Aciona Sirene Faz a lógica inversa para saída
  3. Pedro, O RX do HC-06 não deve ser ligado direto ao TX do PIC por que o nivel de tensão é 3.3v. você tem que usar um divisor de tensão. O TX você pode ligar direto, o RX NÃO Bom vamos começar fazendo o seguinte: 1) Com o código que te passei gravado no PIC envie um caracter "a" (minúsculo e sem as aspas) pelo Blueterm. Deverá acender o LED no pino A0. Repetindo o comando o LED apaga. 2) Se isto funcionar então nós vamos fazer agora o inverso, enviar um comando do PIC para o APP que é isso que você quer. Para isso preciso ver o código que você fez no APPinventor. Coloque ele aqui. obs: você sabe se o HC-06 está configurado com baudrate 9600bps? Faça isso eu aguardo os testes
  4. Olá Pedro, Posso te ajudar pois já trabalhei com esses módulos no meu projeto Inclusive ainda tenho ele montado no protoboard Inclusive também posso lhe ajudar com APPinventor Acredite é super tranquilo e funciona muito bem com a serial Nos testes que eu fiz eu consegui um alcance de mais de 20 metros Se você precisar dá pra enviar string do PIC pra o Aplicativo também O código abaixo liga/desliga LEDs nos pinos A0 e A1 sempre que o PIC recebe a string correspondente ao comando #include <16F877a.h>#fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOLVP #use delay (clock=4000000)#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)char serial;#int_rdavoid serial_isr(){serial=getc();switch (serial) { case 'a': Output_toggle(PIN_A0); break; case 'b': Output_toggle(PIN_A1); break; }}void main(){set_tris_A(0b00000000); enable_interrupts(global);enable_interrupts(int_rda); }
  5. Pela lógica acredito que sim...a variável DATA está com o dado correto, uma vez que código + Modulo RF433 funcionam no PIC 877A Mas vou colocar um LCD no PIC 628A e ver o que ta chegando na variável DATA
  6. É isadora....fiz os testes e o mistério continua...não aciona nenhum LED Mudei pra DATA Desabilitei o PWM Desabilitei os comparadores O código ficou assim: #include <16F628A.h>#FUSES XT, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT#use delay(clock = 4000000)#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)#define RFIn PIN_B0 //entrada do sinal de RF#define NBIT 28 // numero de bits//INT32 DATA=0;unsigned long int DATA;int1 decoder(void){byte x=0;int16 time_aux=0;DATA=0;while(!input_state(RFIn)){time_aux++;delay_us(10);}if((time_aux>1149) || (time_aux<=1151)){for(x=0;x<NBIT;x++){while(input_state(RFin));delay_us(250);if(input_state(RFIn)){return FALSE;}delay_us(500);if(!input_state(RFIn)){DATA|=0x8000000;DATA>>=1;}else data>>=1;delay_us(500);if(!input_state(RFin)){return FALSE;}}return TRUE;}else return FALSE;}void main(){set_tris_A(0b00000000);set_tris_B(0b11111111);setup_ccp1 (ccp_off);setup_comparator (NC_NC_NC_NC);while (TRUE) {decoder();if(DATA==112971776){ output_toggle(PIN_A0);delay_ms(300);}else if(DATA==110874624){ output_toggle(PIN_A1);delay_ms(300);}else if(DATA==111923200){ output_toggle(PIN_A2);delay_ms(300);}}} E agora??? Oh céus...Não sei mais o que fazer Me ajuda Isadoraaaa !!! Isadora, Também fiz o seguinte teste: Enquanto mantenho o pino B0 (push bottom) em nivel baixo os LEDs nos Pinos A0 e A1 ficam piscando Funcionou normalmente O código de teste ficou assim: #include <16F628A.h>#FUSES XT, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT#use delay(clock = 4000000)#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) #define RFIn PIN_B0 //entrada do sinal de RF#define NBIT 28 // numero de bits//INT32 DATA=0;//unsigned long int DATA;int1 decoder(void){while(!input_state(RFIn)){output_toggle(PIN_A0);delay_ms(500);output_toggle(PIN_A1);}}void main(){set_tris_A(0b00000000);set_tris_B(0b11111111);setup_ccp1 (ccp_off);setup_comparator (NC_NC_NC_NC);while (TRUE) {decoder();}}
  7. (led=a>>4) ====> Essa sintaxe o CCS não aceitou por isso fiz a alteração Também acho que não é necessário rodar esse código uma vez que está funcionando bem com 877A Vou fazer a mudança que você sugeriu e realizar os testes. Ontem eu fiz testes com outros valores de cristais 8MHz, 10MHz e 12MHz e nada...o PIC 628A não acende os LEDs Também acho que é alguma configuração de hw do micro
  8. Não... não foi Já tinha feito isso tudo isso que você falou,,,só repeti o seu código e comentei as partes que estão apresentando o erro. Vou colocar o código completo então: #include <16F628A.h>#FUSES NOWDT #FUSES XT #FUSES NOPUT #FUSES NOPROTECT #FUSES NOBROWNOUT #FUSES MCLR #FUSES NOLVP #FUSES NOCPD #use delay(clock=4000000)#define RF PIN_B0#define led PIN_A2char a=0;void main(){ set_tris_A(0b00000000); set_tris_B(0b11111111); setup_ccp1(CCP_OFF); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); disable_interrupts(INT_EXT); disable_interrupts(GLOBAL); for(;{while(!RF);while(RF);led==a>>4;a++;}}
  9. isadora Não tem osciloscópio O que aparece no LCD quando leio com o PIC 16F877A é o seguinte: Código do Controle Remoto ECP (ele fica enviando esse código constantemente): ------------------------------ C: 67109780 RECV ------------------------------ Código do Botão 1: ------------------------------ C: 112971776 RECV ------------------------------ Código do Botão 2: ------------------------------ C: 110874624 RECV ------------------------------ Código do Botão 3: ------------------------------ C: 111923200 RECV ------------------------------ Por fim não consegui compilar o código que você pediu pra testar...mesmo fazendo as adaptações para o compilador CCS o compilar apresenta os seguintes erros: #define RF PIN_B0 #define led PIN_A2 char a=0; main() { //iniclaliza hw for(; { while(!RF); //condition always false while(RF); //condition always true led==a>>4; //code has no effect a++; } }
  10. Isadora, Respondi às suas perguntas procurando ser o mais objetivo e lógico possível Como disse eu quero apenas acender dos LEDs nso pinos que eu indiquei...somente isso. Nada de display LCD. O display LCD eu usei com o 877A pra capturar os códigos do controle ECP. Sabendo os códigos gerados pelos botões do controle ECP gravei no PIC16F628A para acionar os LEDs. Já tentei trocar a ligação do Pino B0 (onde está ligado o módulo receptor 433) para outros pinos do port B e nada Sinceramente não faça a mínima ideia do que pode ser Continua sendo um mistério o fato de estar acionando os LEDS quando uso o 877A e não estar acendendo os LEDs com o 628A
  11. O "não funciona" ´significa não aciona os LEDs nas Portas A0, A1 e A2. Esse é objetivo do projeto O Módulo Receptor 433 está OK ....está funcionando com o 877A, portanto certamente está enviando os bits para o Pino B0 do 628A A questão é por que não lê e interpreta os dados enviados se o 877A faz isso perfeitamente acionando os respectivos LEDs.
  12. Isadora, Quanto a função 'decoder' ainda não estudei a sua funcionalidade, peguei esse código em outro tópico e ele está funcionando perfeitamente no 16F877A. É estranho mas o compilador CCS parece não diferenciar maiúsculas de minúsculas..."data" e "DATA" tratam-se da mesma variável e tá funcionando assim. O controle esta enviando os códigos corretamente...eu leio com um 16F877A e um LCD. Os códigos dos botões aparecem certinho peguei o código dos botões e criei as rotinas if{DATA=XXXXXXX } e gravei nesse mesmo PIC 16F877A e funcionou perfeitamente. Cada botão pressionado acende o LED ligado a sua respectiva porta. Pode ser alguma configuração especifica mesmo para o 16F628A Já tentei com o PIC12F675 e nada também
  13. Olá Matheus, Fiz o que você sugeriu mas também não funcionou Com o 877A ,Mesmo usando HS com xtal de 4MHz funciona perfeitamente agora com o 628A...nada Não sei que mistério é esse Já testei com dois PIC's 16F628A para descartar problema no CI Mais alguma coisa que eu possa fazer?
  14. Olá Pessoal, Estou tentando utilizar um código para ler os botões de um controle remoto ECP no PIC 16F628A e não funciona O mais estranho é que com o 16F877A funcionou perfeitamente, mas com o 16F628A não O código eu peguei nesse tópico aqui : http://forum.clubedohardware.com.br/forums/topic/853197-resolvido-m%C3%B3dulos-rr3-e-rt4-da-telecontrolli/page-2 Fiz as adaptações para o 16F628A e ficou assim: #include <16F628A.h>#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT#use delay(clock = 4000000)#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) //#define lcd_enable pin_B0 // pino enable do LCD //#define lcd_rs pin_B1 // pino rs do LCD //#define lcd_wr pin_B2 // pino rs do LCD //#define lcd_d4 pin_B4 // pino de dados d4 do LCD //#define lcd_d5 pin_B5 // pino de dados d5 do LCD //#define lcd_d6 pin_B6 // pino de dados d6 do LCD //#define lcd_d7 pin_B7 // pino de dados d7 do LCD#include "lcd.c"#use fast_io(A)#use fast_io(#define RFIn PIN_B0 //entrada do sinal de RF#define NBIT 28 // numero de bitsINT32 DATA=0;int1 decoder(void){byte x=0;int16 time_aux=0;DATA=0;while(!input_state(RFIn)){time_aux++;delay_us(10);}if((time_aux>1149) || (time_aux<=1151)){for(x=0;x<NBIT;x++){while(input_state(RFin));delay_us(250);if(input_state(RFIn)){return FALSE;}delay_us(500);if(!input_state(RFIn)){data|=0x8000000;data>>=1;}else data>>=1;delay_us(500);if(!input_state(RFin)){return FALSE;}}return TRUE;}else return FALSE;}void main(){set_tris_A(0b00000000);lcd_init();while (TRUE) {decoder();printf(lcd_putc,"\fC: %Lu\nRECV",DATA);delay_ms(5);if(DATA==112971776){ output_toggle(PIN_A0);delay_ms(500);}else if(DATA==110874624){ output_toggle(PIN_A1);delay_ms(500);}else if(DATA==111923200){ output_toggle(PIN_A2);delay_ms(500);}}} Na verdade o que estou tentando fazer aqora é acionar os LEDS das portas A0,A1 e A2 com os códigos os botões que eu já li usando o 16F877A. Eu montei o mesmo código como 16F877A e ele aciona os LEDS perfeitamente Não consegui descobrir o porque de não estar funcionando Alguém pode me ajudar a resolver esse mistério?
  15. Obrigado pela contribuição, Mas eu gostaria de implementar isso em termos práticos. Algum exemplo em C (compilador CCS)? Quando eu usei o código SIRC para fazer um Controle Remoto eu tinha que fazer o seguinte no transmissor: /*------ ENVIO START --------*/ output_high(pin_B0); delay_us(2400); output_low(pin_B0); delay_us(600); /*------Transmite 1--------*/ if (dado) { //Verifica se é 0 ou 1. output_low(pin_B0); delay_us(1200); output_high(pin_B0); delay_us(600); /*------Transmite 0--------*/ if (dado) { //Verifica se é 0 ou 1. output_low(pin_B0); delay_us(600); output_high(pin_B0); delay_us(600); E no receptor eu usava o pino de Interrupção pra receber e decodificar, medindo o período de cada dado recebido, assim conseguia identificar o que era um bit de START, um 0 ou um 1. Agora no Manchester como fazer essa codificação e decodificação?

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

×
×
  • Criar novo...