Ir ao conteúdo
  • Cadastre-se

nil.34

Membro Pleno
  • Posts

    24
  • Cadastrado em

  • Última visita

  1. mas estas saídas são para duas caixas menores passivas e agudas, para a outra caixa ativa nao tem saída
  2. Alguém pode me ajudar tenho duas caixas ativas tipo subwover satelite 45W rms, e gostaria de ligar as duas numa mesma saída de audio (PC /celular), mas as caixa só possuem uma entrada p2 cada.Como faço? um simples cabo Y p2 estereo resolve o problema? São duas dessas na foto, posso usar ligando as duas caixas em uma unica saída (pc/celular) ou preciso de algo a mais?
  3. Alguem sabe como utilizar o Brownout do pic para que quando desligar a alimentação, aciona gravação de uma variavel na eeprom interna?
  4. Consegui, fazer a gravação, utilizando o código abaixo, vi que com ccs preciso informar o inicio da memoria EEprom e seta-la para incio... Mas não entendi, não localizei no datasheet este endereço.... Agora falta substituir o botão, para que quando a limentação cair, grave na eeprom, Não entendi "Alimentação não regulada"? seja abaixo o codigo, sera que esta correto? Na pratica esta funcionando... #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES MCLR //Master Clear pin enabled #FUSES NOPROTECT //Code not protected from reading #FUSES NOCPD //No EE protection #FUSES NOBROWNOUT //No brownout reset #FUSES NOIESO //Internal External Switch Over mode disabled #FUSES NOFCMEN //Fail-safe clock monitor disabled #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NODEBUG //No Debug mode for ICD #FUSES NOWRT //Program memory not write protected #FUSES BORV40 //Brownout reset at 4.0V #FUSES RESERVED //Used to set the reserved FUSE bits #use delay(clock=4000000) #ROM 0x2100 = {0x00,0x00,0x00,0x00} // Endereço inicial eeprom #use fast_io(a)// define as utilizações das portas c como entrada e saida #use fast_io(b)// define as utilizações das portas c como entrada e saida #use fast_io©// define as utilizações das portas c como entrada e saida #byte porta = 0x05 // padrão endereços das portas #byte portb = 0x06 // padrão endereços das portas #byte portc = 0x07 // byte const numeros[10]={0x80,0xf1,0x48,0x60,0x31,0x22,0x02,0xf0,0x00,0xe20};/*cria uma constante para cada digito de 0 a 9 ****************************************************/ #bit botao_desce = porta.0 #bit botao_sobe = porta.1 #bit botao_start = porta.2 // grava na eeprom unsigned int unid=0,dez=0,a=0,x=0;// declara variaveis positivas e inteiras /****************************************************************************** função atualiza display *******************************************************************************/ void atualiza_display() { output_b(numeros[dez]);// mostra os numeros das dezenas no display output_c(numeros[unid]);// mostra os numeros das unidades no display delay_ms(100); } void main() { set_tris_b (0b00000000); // define todos port b como saída portb=0x0;// zera portas b set_tris_a (0b0000111); // define todos port a como saída e entrada porta=0x0;// zera portas a set_tris_c (0b00000000); // define todos port a como saída / entrada portc=0x0;// zera portas c unid=read_eeprom(0); delay_ms(100); dez=read_eeprom(2); delay_ms(100); while(true){ if(botao_desce==0){ unid--; delay_ms(100); dez--; delay_ms(100); } if(botao_sobe==0){ unid++; delay_ms(100); dez++; delay_ms(100); } if(botao_start ==0){ write_eeprom(0,unid); delay_ms(100); write_eeprom(2,dez); delay_ms(100); } atualiza_display(); // mostra contagem no display } }
  5. Aguem sabe o que pode estar errado neste codigo, pois é um contador que deveria armazenar a variavel unidade e dezena na eeprom ,o contador esta funcionando, mas quando entro com os comando de salvar a variavel na memoria eeprom, deixa de funcionar e pelo gravador vejo que não esta salvando as vaeiaveis na eeprom. unsigned int unid=0,dez=0,a=0,x=0;// declara variaveis positivas e inteiras /****************************************************************************** função atualiza display *******************************************************************************/ void atualiza_display(){ output_b(numeros[dez]);// mostra os numeros das dezenas no display output_c(numeros[unid]);// mostra os numeros das unidades no display delay_ms(200); } void main(){ unid=read_EEprom(0); dez=read_EEprom(10); while(true){ if(botao_sobe==0){ // se acionar botao subir delay_ms(5); unid++; //acrescenta +1 na unidade if(unid>9){ // se unidade maior que 5 unid=0; dez++; // acrescente 1 na dezena } if(dez==10){ // se a contagem ultrapassa 99 dez=9; unid=9; } /******************************************************************************/ if(botao_desce==0){ // se acionar botao descer delay_ms(5); if(unid==0 && dez==0){// se contar até 00 unid=1;//repete o if }// contagem não cai para um valor< 00 unid--; if(unid>9){ // enquanto nã chega a 00 unid=9;//decrementa o contador dez--; } } } atualiza_display(); // mostra contagem no display } write_EEprom(0,unid); write_EEprom(10,dez); }
  6. Deve -se observar qual a tensão de trabalho dos leds, para ao associa-los em serie a twnsão que sera dividida por cada led não ultrapasse a de trabalho do led.
  7. 2,2K = vermelho, vermelho, vermelho 3,3K = laranja, laranja, vermelho. 3,3R = laranja, laranja, dourado
  8. O fluxo que a solda carrtel possui influencia também, acredito que a solda carretel azul é melhor...
  9. Gostaria de salvar 4 variaveis abaixo, que são usadas em um contador com display, para que ao ligar o contador ele memorize a contagem que tinha quando foi desligado.Como salvo?, li varias coisas a esse respeito, mas não entendi como endreçar estas variaveis. Pic 16f876a -Linguagem c (CCS) variaveis: unsigned int unid=0,dez=0,a=110,x=0;// declara variaveis positivas e inteiras.
  10. Consegui resolver problema, não era ruido, e sim erro no programa, que no CCS ficou assim: while(true){ if(botao_start==0 && x==1){ // se o botao start acionado,motor estiver lig delay_ms(5); x++; set_pwm1_duty(0);// desliga motor led_start=0; //apaga led start led_stop=1;// acende led stop delay_ms(1); while(botao_start==0);//aguarda soltar botão x=0; } if(botao_start==0 && x==0){ //se o botao start acionado,motor estiver deslig delay_ms(5); x++; set_pwm1_duty(a); // atribui pwm ao valor ajustado em a led_start=1;// acende led start led_stop=0; // apaga led stop delay_ms(1); while(botao_start==0);//aguarda soltar botão } tópico resolvido.
  11. Obrigado. DMHIGOR Conforme você sugeriu, fiz algumas adaptações no programa que estou testando e funcionou, conforme estava esperando... A intenção é acionar e desacionar um motor cc com pwm (através mosfet) através de um unico botão, e variar a velocidade mesmo através de um botão incrementa e outro decrementa. Esta funcionando, o que estou agora tentando resolver, é que as vezes o botão que lig/ desl o pwm falha como se fosse problema de ruido.Mas não testei na pratica, apenas simulei no proteus, não sei se pode ser problema de simulação,Mas o acionamento esta falhando. Segue abaixo o programa /******************************************************************************* Acionamento motor com PWM PIC 16f877A Compilador CCS *******************************************************************************/ #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #FUSES RESERVED //Used to set the reserved FUSE bits #use delay(clock=4000000) #use fast_io(a)// define as utilizações das portas a como entrada e saida #use fast_io(b)// define as utilizações das portas b como entrada e saida #use fast_io(d)// -- #byte porta = 0x05 // padrão endereços das portas #byte portb = 0x06 // padrão endereços das portas #byte portc = 0x07 // -- #byte portd = 0x08 // -- #bit botao_desce = porta.0 // define porta A0 como botão decrementa PWM #bit botao_sobe = porta.1 // define porta A1 como botão incrementa PWM #bit botao_start = porta.2 // define porta A2 como botão liga /desliga PWM unsigned int a=10,x=0; /*************************************************************************** Função liga / desliga - motor ****************************************************************************/ void motor_para(){ //rotina deliga motor x++; if(x>=1) set_pwm1_duty(0);// desliga pwm delay_ms(1); while(input(botao_start)==1);//aguarda soltar botão x=0; } void motor_gira(){ //rotina liga motor x++; if(x>=1) set_pwm1_duty(a); delay_ms(1); while(input(botao_start)==1);//aguarda soltar botão } /***************************************************************************** Função Principal ******************************************************************************/ void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_CLOCK_DIV_2); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_4,249,1);// frequência 1KZ setup_ccp1(CCP_PWM); set_pwm1_duty(10); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a (0b00000111); // define port a0 e port a1 e a2 como entrada set_pwm1_duty(30);// *********************************************************** delay_ms(600); // Estas funçoes acionam um pulso no motor sempre lig progr. set_pwm1_duty(0);//************************************************************* while(true){ if (botao_start==1 && x>=1){ // se o botao start acionado,motor estiver lig delay_ms(5); motor_para();//rotina - motor desliga } if (botao_start==1 && x>=0){ //se o botao start acionado,motor estiver deslig delay_ms(5); motor_gira(); // rotina - motor liga } if (botao_sobe==1){ // botão incrementa pwm if (a<245){ // incrementa até 245 a=a+1; delay_ms(100); if(x>=1){ // mesmo soltando botão pwm continua ligado set_pwm1_duty(a);// pwm assume valor variavel a } } } if (botao_desce==1){// botão decrementa pwm if (a>0){ a=a-1; delay_ms(100); if(x>=1){ set_pwm1_duty(a); } } } } }
  12. Aguem sabe uma rotina para ler um unico botão, de maneira que com um toque ele execute uma função, outro toque ela deixa de executar a mesma funcão.
  13. Alguem sabe como fazer este contador contar até 99, e através de outro botão decrementar ate 00.Pois esta contando mais se permaneço com botão pressionado até 99 ele não decrementa a não ser que seja resetado.E o mesmo acontece quando chega a 00 se não for resetado não sobe.A impressão que tenho que ele esta incrementando um terceiro digito. /**************************************************************************************** PROJETO 16 CONTADOR 0 A 99 *****************************************************************************************/ #include<16f877a.h> #FUSES NOWDT //No Watch Dog Timer #FUSES RC //Resistor/Capacitor Osc with CLKOUT #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES BROWNOUT //Reset when brownout detected #FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18) #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #use delay(clock=4000000)// define clock 4 mhz #use fast_io(b)// define as utilizações das portas c como entrada e saida #use fast_io©// -- #use fast_io(d)// -- #byte portb = 0x06 // padrão endereços das portas #byte portc = 0x07 // -- #byte portd = 0x08 // -- byte const numeros_sobe[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6};/*cria uma constante para cada digito de 0 a 9 ****************************************************/ #bit botao_desce = portd.0 #bit botao_sobe = portd.1 unsigned int unid=0,dez=0; /*************************************************************************************************/ void conta_sobe (){ unid++; if(unid>9) { unid=0; dez++; } } /**************************************************************************************************/ void conta_desce (){ unid--; if(unid>9) { unid=9; dez--; } } /*************************************************************************************************/ void atualiza_display() { output_b(numeros_sobe[dez]);// mostra os numeros das dezenas no display output_c(numeros_sobe[unid]);// mostra os numeros das unidades no display delay_ms(200); } /***********************************************************************************************/ void main() { set_tris_b (0b00000000); // define todos port b como saída portb=0x0;// zera portas b set_tris_c (0b00000000); // define todos port b como saída portc=0x0;// zera portas c set_tris_d (0b00000011); // define port d0 e port d1 como entrada portd=0x0;// zera portas d unid=0,dez=0; /**********************************************************************************************/ while(true){ atualiza_display(); { if ( botao_desce==1) conta_desce () ; if ( botao_sobe==1) conta_sobe () ; } } }

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