Ir ao conteúdo
  • Cadastre-se

ronyfreytas

Membro Pleno
  • Posts

    26
  • Cadastrado em

  • Última visita

Tudo que ronyfreytas postou

  1. Meu amigo, fiz as modificações, mas ainda persiste, o que parece é que a sensibilidade está muito alta, como o sensor varia de 2,5v até 5v, se ele ficar variando de 2,67 para 2,68 já dá muita diferença na leitura, não sei se é isso.
  2. Boa tarde pessoal, preciso fazer um leitor de corrente e tensão com o pic 18f2550 e lcd. Fiz o código, porém está muito instável, a leitura está muito ruim, não para, fica subindo e descendo,porém na entrada do pic não fica oscilando. O sensor que uso é do tipo hall de 30a (acs 712). segue o código que fiz. Se algum dos amigos puder me ajudar agradeço. #include <18F2550.h> #device adc=10 #FUSES NOWDT //No Watch Dog Timer #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES PROTECT //Code not protected from reading #FUSES NOBROWNOUT //No brownout reset #FUSES BORV20 //Brownout reset at 2.0V #FUSES PUT //Power Up Timer #FUSES NOCPD //No EE protection #FUSES STVREN //Stack full/underflow will cause reset #FUSES NODEBUG //No Debug mode for ICD #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOWRT //Program memory not write protected #FUSES NOWRTD //Data EEPROM not write protected #FUSES NOIESO //Internal External Switch Over mode disabled #FUSES NOFCMEN //Fail-safe clock monitor disabled #FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET #FUSES NOWRTC //configuration not registers write protected #FUSES NOWRTB //Boot block not write protected #FUSES NOEBTR //Memory not protected from table reads #FUSES NOEBTRB //Boot block not protected from table reads #FUSES NOCPB //No Boot Block code protection #FUSES NOMCLR //Master Clear pin used for I/O #FUSES LPT1OSC //Timer1 configured for low-power operation #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode) #FUSES PLL12 //Divide By 12(48MHz oscillator input) #FUSES CPUDIV4 //System Clock by 4 //#FUSES USBDIV //USB clock source comes from PLL divide by 2 //#FUSES VREGEN //USB voltage regulator enabled #use delay(clock=8000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include <flexlcd7.c> float v, a; int16 pwm; void main() { setup_adc_ports(AN0_TO_AN3|VSS_VDD); setup_adc(ADC_CLOCK_INTERNAL); setup_spi(SPI_SS_DISABLED); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DIV_BY_4,249,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_ccp1(CCP_PWM); set_pwm1_duty(10); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); //Setup_Oscillator parameter not selected from Intr Oscillator Config tab // TODO: USER CODE!! lcd_init(); while(true){ //========================================================================= // Tensão //========================================================================== set_adc_channel(0); delay_us(10); v=read_adc(); v=v*0.01528523949169110459433040078201; printf("%fv \n ", v); //========================================================================== // Corrente //========================================================================== set_adc_channel(1); delay_us(10); a=read_adc(); a=a*0.004867585532746823069403714565; a=a-2.5; a=a/0.0799999999999999999999999999999999999; printf("%fa\n ", a); //========================================================================== // PWM //========================================================================== set_adc_channel(2); delay_us(10); pwm=read_adc(); if(pwm<=9){pwm=10;} if(pwm>=999){pwm=998;} printf("%Lupwm\n\r ", pwm); //============================================================================== // LCD //=================================================================================== lcd_gotoxy (1,1); //Ir para a coluna 5 na linha 1 do LCD. // lcd_putc ("V=2.5"); //Escreve no LCD. printf(lcd_putc,"A= %f",a); lcd_gotoxy (1,2); // Ir para a coluna 5 da linha 2 do LCD. //lcd_putc ("A=24"); //Escreve. printf(lcd_putc,"V= %f",v); // delay_ms (100); //Pausa de 100 milisegundos // lcd_putc ("\f"); //Apaga o LCD. // delay_ms (100); set_pwm1_duty(pwm); } }
  3. Meu amigo MOR_AL, vi o link que me enviou, não tive problemas pra ler nem entender as informações, como escrevi acima, disse que coloquei os capacitores, mudei o baud rate para 1200, na verdade me expressei mal à respeito da minha necessidade de ajuda, só não tinha me atentado para seu arquivo estava hospedado no 4shared, (falha minha), agora abri o arquivo, entendi que você diminuiu o ganho do operacional, (se estiver enganado me corrija por favor), preciso incrementar um pouco meu código para fazer o que o amigo sugeriu logo acima, que seria enviar alguns arquivos (preâmbulo), se o amigo tiver uma ideia prática de como fazer isso no ccs compiler será de grande ajuda. Obrigado. Ah!!! , inclusive, MOR_AL, muito bem feito seu arquivo sobre o receptor.
  4. Obrigado Paulo, coloquei os capacitores do vcc ao gnd, baixei o baud rate para 110, mas mesmo assim não funciona direito, se algum dos amigos do fórum tiver mais alguma dica agradeço, Obrigado.
  5. Paulo, preciso de um exemplo mais prático, meu conhecimento ainda não acompanha o seu, se possível, faz um exemplo, obrigado
  6. Meus amigos, o baud rate já coloquei até 110, o que vou tentar é colocar o capacitor de tântalo do vcc ao gnd como ensina no link que o amigo me enviou, vou testar e falo depois, aproveitando, sobre o código, tem uma maneira de ser feito essa transmissão, no caso somente de uma letra, poderia eu fazer diferente, conseguindo assim uma maior garantia de não ocorrer um acionamento indesejado, pois farei mais de uma placa de recepção com um mesmo controle, obrigado.
  7. Amigos, estou tentando fazer alguns acionamentos por controle remoto, estou usando dois pics, um 12f683 e um 16f628A, estou usando comunicação rs 232. Fiz um código simples de liga desliga de led, quando eu coloco a saida de um pic na entrada do outro devidamente configurados, por fio funciona, porém quando eu uso aqueles transmissores de rf 433, ele funciona muito mal, só quando quer, já tentei mudar frequencia de clock, baud de transferencia, e nada. Segue o código, mas o problema e na transmissão sem fio, agradeço a ajuda dos amigos. (Compilador ccs compiler). ///////////////////////////////////////////////////// TRANSMISSOR ////////////////////////////////////////////////////////// #include < 16f628a.h > #use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B1,bits=8) void main() { output_high(pin_a0); while(true) // loop infinito { if (input(pin_a2)) { delay_ms(10); putc ('j'); // envia o caractere "j" output_low(pin_a0); } if (input(pin_a3)) { delay_ms(10); putc ('g'); // envia o caractere "g" output_high(pin_a0); } } } ////////////////////////////////////////// RECEPTOR ///////////////////////////////////////// #include < 12f683.h > #fuses intrc_io, nowdt, nomclr, put #use delay(clock=4000000) #use rs232(baud=9600,parity=N,xmit=PIN_A2,rcv=PIN_A4,bits=8) char dado = 0; void main() { while(true) { dado = getc(); if (dado == 'j') output_low(pin_a5); // se "dado" for "r" desliga a3 if (dado == 'g') output_high(pin_a5); // se "dado" for "g" desliga a1 } }
  8. Pessoal, pesquisei outra opção de pic do mesmo tamanho, achei o pic 12f683, ele tem saída de pwm, acho que vou fazer com ele, aí é só mudar o prescaler.
  9. No caso do comparador amigo, dei uma olhada, e esse pic pelo que vi não me dá essa opção, quanto à sua explicação caro mister, entendi o que quer dizer, porém, se com clock de 4mhz, a frequência fica de 1mhz,até aí beleza, só que nessas condições o overflow do timer fica em 256us, me corrija se estiver errado. Se eu estiver errado, por favor me dá uma linha de raciocínio que eu sigo, obrigado
  10. Então pessoal, sobre a última pergunta, eu estou usando o timer(timer 0), e se não me engano. eu não posso usar o oscilador interno com uma frequência maior que 4mhz, eu fiz um programa parecido com o pic 16f628 usando o pwm dele, mas nesse caso preciso usar esse pic, que não tem essa função, se alguém tiver uma ideia.
  11. O Código que eu fiz é esse abaixo. Ele funciona legal, o "x" é incrementado a cada estouro do timer 0, porém como estou usando o oscilador interno por causa de espaço da minha pci. A variável "Y" é somente para ajuste de precisão da frequência. A frequência máxima que ele gera 1953HZ, creio que não posso colocar o osc interno maior que 4MHZ. #include <12F629.h> #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOCPD //No EE protection #FUSES NOPROTECT //Code not protected from reading #FUSES NOMCLR //Master Clear pin used for I/O #FUSES PUT //Power Up Timer #FUSES NOBROWNOUT //No brownout reset #FUSES BANDGAP_HIGH #use delay(clock=4000000) int x, y; #int_RTCC void RTCC_isr(void) { x++; } void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_comparator(NC_NC); setup_vref(FALSE); enable_interrupts(INT_RTCC); enable_interrupts(GLOBAL); // TODO: USER CODE!! while (true) { if (x>=1) { y++; x=0; } if(y>=1) { output_toggle(pin_a1); y=0; } } }
  12. Eu uso o proteus, só não consegui pensar na logica ainda, mas já uso o simulador sim.
  13. Pessoal, preciso gerar uma frequência de 24khz de saída em um pino do 12f629, não quero usar delay, pois vou usar botão para mudar funções, nesse caso o delay mata o desempenho do código. Precisa ser esse pic pelo tamanho, pensei na possibilidade de fazer isso usando tirmer, mas não consegui, preciso da juda dos amigos do fórum. Eu uso o compilador CCS Compiler. Ronildo.

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