Ir ao conteúdo
  • Cadastre-se

sergio3214

Membro Júnior
  • Posts

    15
  • Cadastrado em

  • Última visita

Reputação

0
  1. tem alguem que possa me ajuda nesse codigo ele funciona no proteus mas na pratica não // --- Mapeamento de Hardware --- #define dig_uni RB4_bit //Dígito das unidades no RB0 #define dig_dez RB5_bit //Dígito das dezenas no RB1 #define dig_cen RB6_bit //Dígito das centenas no RB2 #define dig_mil RB7_bit //Dígito das milhares no RB3 // --- Constantes do Projeto --- #define shunt 470 //Resistência de desvio igual a 0.47 ohm // --- Protótipo das Funções Auxiliares --- int display(int num); //Exibe o valor correspondente no display de catodo comum int display_dp(int num); //Exibe o valor correspondente no display adicionando o ponto decimal long average_volt(); //Retorna a média de 100 leituras de tensão void volts(); //Calcula a tensão em Volts // --- Variávei Globais --- long store; //Armazena a média de 100 leituras de tensão long t_Volts; //Armazena tensão em Volts long m_amps; //Armazena a corrente em mili Ampères char control = 1; //Variável de controle (para saber qual display está ativo) int cen, dez, uni, mil; //Variáveis auxiliares para dados nos displays int counter = 100; // --- Rotina de Interrupção --- static void interrupt (void) { if(TMR1IF_bit) //Houve o estouro do TMR1? { TMR1IF_bit = 0x00; //Sim, limpa a flag TMR1L = 0x2C; TMR1H = 0xFC; if(!dig_mil && control == 1) //Dígito dos milhares desligado? { //Variável de controle igual a 1? control = 0x02; //Sim, control recebe o valor 2 dig_uni = 0x00; //Apaga dígito das unidades dig_dez = 0x00; //Apaga dígito das dezenas dig_cen = 0x00; //Apaga dígito das centenas PORTC = 0x00; //Desliga PORTC mil = (m_amps/1000); //Calcula o dígito do milhar dig_mil = 0x01; //Ativa dígito dos milhares PORTC = display(mil); //Escreve o valor no display dos milhares } //end if dig_mil else if(!dig_cen && control == 2) //Dígito das centenas desligado? { //Variável de controle igual a 2? control = 0x03; //Sim, control recebe o valor 3 dig_uni = 0x00; //Apaga o dígito das unidades dig_dez = 0x00; //Apaga o dígito das dezenas dig_mil = 0x00; //Apaga o dígito dos milhares PORTC = 0x00; //Desliga PORTC cen = (m_amps%1000)/100; //Calcula o dígito das centenas dig_cen = 0x01; //Ativa dígito das centenas PORTC = display(cen); //Escreve o valor no display das centenas } //end if dig_cen else if(!dig_dez && control == 3) //Dígito das dezenas desligado? { //Variável de controle igual a 3? control = 0x04; //Sim, control recebe o valor 4 dig_uni = 0x00; //Apaga o dígito das unidades dig_cen = 0x00; //Apaga o dígito das centenas dig_mil = 0x00; //Apaga o dígito dos milhares PORTC = 0x00; //Desliga PORTC dez = (m_amps%100)/10; //Calcula o dígito das dezenas dig_dez = 0x01; //Ativa dígito das dezenas PORTC = display(dez); //Escreve o valor no display das dezenas } //end if dig_dez else if(!dig_uni && control == 4) //Dígito das unidades desligado? { //Variável de controle igual a 4? control = 0x01; //Sim, control recebe o valor 1 (para encerrar a lógica) dig_dez = 0x00; //Apaga o dígito das dezenas dig_cen = 0x00; //Apaga o dígito das centenas dig_mil = 0x00; //Apaga o dígito dos milhares PORTC = 0x00; //Desliga PORTC uni = m_amps%10; //Calcula o dígito das unidades dig_uni = 0x01; //Ativa dígito das unidades PORTC = display(uni); //Escreve o valor no display das unidades } } //end if (teste de estouro) } //end interrupt // --- Função Principal --- void main() { ANSEL = 0b00000001; ANSELH = 0; ADCON0 = 0x01; //Aciona o módulo conversor AD, Canal AN0 ADCON1 = 0x10; //Entrada AN0 como analógica CM1CON0 = 0x00; //Desabilita comparadores CM2CON0 = 0x00; CM2CON1 = 0; IRCF0_bit = 1; IRCF1_bit = 1; IRCF2_bit = 1; T1CON = 0x21; //Interrupção global, habilita interrupção do Timer1 TMR1H = 0xFC; TMR1L = 0x2C; //Timer0 incrementa pelo ciclo de máquina TMR1IE_bit = 1; TMR1IF_bit = 0; PEIE_bit = 1; GIE_bit = 1; TRISA = 0b00011111; //Prescaler configurado para 1:16 PORTA = 0b00011111; TRISB = 0x00; //Configura TRISB<7:4> como entrada, TRISB<3:0> como saída TRISC = 0x00; //Configura todo PORTC como saída PORTB = 0x00; //Inicializa PORTB (dígitos desligados) PORTC = 0x00; //Inicializa PORTC (segmentos desligados), RBC em nível alto // --- Loop infinito --- while(1) { volts(); //Chama a função para cálculo da tensão em Volts delay_ms(200); //taxa de atualização } //end while } //end main // --- Desenvolvimento das Funções Auxiliares --- //Esta função acha o bit pertinente a cathode (matrix de bits) para ser enviado //para o PORTC e mostrar um número no display de 7 segmentos. O número //é passado como um parâmetro para a função. int display(int num) { int cathode; //armazena código BCD //-- Vetor para o código BCD -- int SEGMENTO[10] = {0x3F, //BCD zero '0' 0x06, //BCD um '1' 0x5B, //BCD dois '2' 0x4F, //BCD três '3' 0x66, //BCD quatro '4' 0x6D, //BCD cinco '5' 0x7D, //BCD seis '6' 0x07, //BCD sete '7' 0x7F, //BCD oito '8' 0x67}; //BCD nove '9' cathode = SEGMENTO[num]; //para retornar o cathode return(cathode); //retorna o número BCD } //end display int display_dp(int num) //Adiciona o ponto decimal { int cathode; //armazena código BCD //Vetor para o código BCD int SEGMENTO[10] = {0xBF, //BCD zero '0.' 0x86, //BCD um '1.' 0xDB, //BCD dois '2.' 0xCF, //BCD três '3.' 0xE6, //BCD quatro '4.' 0xEd, //BCD cinco '5.' 0xFd, //BCD seis '6.' 0x87, //BCD sete '7.' 0xFF, //BCD oito '8.' 0xE7}; //BCD nove '9.' cathode = SEGMENTO[num]; //para retornar o cathode return(cathode); //retorna o número BCD } //end display void volts() //Função para cálculo da tensão em Volts { store = average_volt(); //Recebe o valor médio da tensão retornado pela função average_volts() t_Volts = (store*4230)/866; //Converte o valor para Volts t_Volts = t_Volts*1000; m_amps = t_Volts/shunt; } //end celsius long average_volt() //Função que calcula a média de 100 leituras de tensão { //Garante maior precisão na medida unsigned char i; //Variável de iterações long volt_store = 0; //Variável local para armazenar o valor da tensão for(i=0; i<100; i++) //Somatório de 100 leituras { volt_store += ADC_Read(0); //temp_store = temp_store + ADC_Read(0) (faz o somatório das 100 iterações) } return(volt_store/100); //retorna a média das iterações } //end average_temp
  2. Boa noite Na verdade o que você precisa e de uma rampa de aceleração para controla o Triac Você precisa fazer o controle de um LED que ele amente seu brilho gradativamente começando de 1,5 a 3... automático, conseguindo isso você poderá usa um fotoacoplado ou um rele de estado solido, quanto o desligamento você pode esta colocado um botão push button no Vcc, e assim substitui por um interruptor eletrotécnico. faça uso da sua inteligencia andpudim!!
  3. //transmit coding #include <18f252.h> #device ADC=8 #fuses HS, NOWDT, NOLVP, NOPROTECT #use delay(clock=4000000) //#use rs232(baud=19200, xmit=PIN_A0, rcv=PIN_A1) // you can use any pins for software uart.. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, PARITY=N, BITS=8,Errors) // characters tranmitted faster than the pic eats them will cause UART to hang. #include <stdlib.h> #define ADC_0 PIN_A0 #define TX_6 PIN_C6 #define RX_7 PIN_C7 void main() { int8 fvalue; setup_adc_ports(AN0);//or setup_adc_ports(ALL_ANALOG) setup_adc(ADC_CLOCK_DIV_8); set_adc_channel(0); delay_us(20); fvalue=read_adc(); putc(fvalue); while (1) { fvalue=read_adc(); putc(fvalue); delay_ms(1000); } } //receive coding #include <18f252.h> #fuses HS, NOWDT, NOLVP, NOPROTECT #use delay(clock=4000000) //#use rs232(baud=19200, xmit=PIN_A0, rcv=PIN_A1) // you can use any pins for software uart.. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, PARITY=N, BITS=8,Errors ) // characters tranmitted faster than the pic eats them will cause UART to hang. #include <stdlib.h> #define LED_0 PIN_A0 #define TX_6 PIN_C6 #define RX_7 PIN_C7 char v1; void main() { int8 fvalue; int8 v1; while(true) { if(!input(pin_A0) ) { fvalue=getc(); v1=(5*((int)fvalue)/255); printf("\ = %u",(int)v1); } } } alguem sabe mim dizer onde estou errando
  4. #include <12f675.h> # DEVICE ADC=8 #fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR ,BROWNOUT, PUT #use delay(clock=4000000) // 4 MHz crystal on PCB //#use rs232(baud=19200, xmit=PIN_A0, rcv=PIN_A1) // you can use any pins for software uart... #use rs232(baud=9600, xmit=PIN_A4, rcv=PIN_A2, PARITY=N, BITS=8,) // characters tranmitted faster than the pic eats them will cause UART to hang. #include <stdlib.h> #define LED_5 PIN_A5 #define LED_1 PIN_A1 #define ciclo_3 PIN_A3 #define TX_4 PIN_A4 #define RX_2 PIN_A2 #define fim 100 int8 periodo=0; int8 ciclo1=0; #int_timer1 void Timer_isr(void) { /*===================== Teste para ciclo = 0 =====================*/ if(ciclo1 == 0) { output_low (PIN_A3); } if(ciclo1 == fim) { output_high(PIN_A3); } /*============================= Já que o ciclo e diferente de 0 ===============================*/ if(periodo < ciclo1) { output_high(PIN_A3); } else { output_low(PIN_A3); } if(periodo >= fim-1) { periodo=0; } periodo++; set_timer1(65440); //65440 } void setup () { SETUP_ADC_PORTS(sAN0); SETUP_ADC(ADC_CLOCK_DIV_8); SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_1); // Configurar timer1 para clock interno/8 enable_interrupts (INT_TIMER1); // Habilitar Interrupções enable_interrupts (GLOBAL); set_timer1(65440); // Preload do timer1 set_adc_channel(0); delay_ms(20); while(TRUE) { ciclo1 = 0.4 * read_adc(); delay_ms (50); } } void main (DADOS) { while (TRUE) { if (input(PIN_A5)){ output_high(LED_5); printf("a"); //sends signal a delay_ms(1000); } else{ output_low(LED_5); printf("l"); //sends signal l delay_ms(200); } if (input(PIN_A1)){ output_high(LED_1); printf("b"); //sends singnal b delay_ms(1500); } else{ output_low(LED_1); printf("s"); //sends signal s delay_ms(500); } } isadora ferraz } adicionado 8 minutos depois isadora ferraz ai esta porém a conversão não esta funcionado
  5. isadora essa dai não sei se consigo fazer
  6. Isadora Ferraz float v; void main() { setup_adc_ports(AN0_TO_AN1|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_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); //setup_oscillator parameter not selected from intr oscillator config tab //TODO: USER CODE!! while (TRUE){ output_high(pin_c0); delay_ms(1000); set_adc_channel(0); //0 delay_us(10); v=read_adc(); v=v*0.0048875855327468; printf("%f \n \r " ,v); } }
  7. sim com pic 12f675 pwm tanto o código com na pratica inclusive já apresentei em sala de aula em que o assunto era pwm aqui foi o código ccs #include<12F675.h> #device adc = 8 #FUSES NOWDT // No assista Dog Timer #FUSES INTRC_IO // Cristal internal = 4MHZ #FUSES PUT // Power up Temporizador #FUSES NOPROTECT // Código não protegido contra leitura #FUSES NOMCLR #FUSES BROWNOUT // Repor quando brownout detectado #FUSES NOCPD // Sem proteção EE #use delay(CLOCK = 4000000) #define fim 100 int8 periodo=0; int8 ciclo1=0; #int_timer1 void Timer_isr(void) { /*===================== Teste para ciclo = 0 =====================*/ if(ciclo1 == 0) { output_low (PIN_A2); } if(ciclo1 == fim) { output_high(PIN_A2); } /*============================= Já que o ciclo e diferente de 0 ===============================*/ if(periodo < ciclo1) { output_high(PIN_A2); } else { output_low(PIN_A2); } if(periodo >= fim-1) { periodo=0; } periodo++; set_timer1(65440); //65440 } void main() { SETUP_ADC_PORTS(sAN0); SETUP_ADC(ADC_CLOCK_DIV_8); SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_1); // Configurar timer1 para clock interno/8 enable_interrupts (INT_TIMER1); // Habilitar Interrupções enable_interrupts (GLOBAL); set_timer1(65440); // Preload do timer1 set_adc_channel(0); delay_ms(20); while(TRUE) { ciclo1 = 0.4 * read_adc(); delay_ms (50); } }
  8. não conseguir compreender Isadora Ferraz seja ó um pouco mas clara
  9. deu pra entende o código mas como enviar esse código para outro pic.. quero aprende a envia o pwm de um pic para outro já conseguir acender um led de um pic para outro mas agora quero o pwm
  10. Transmissor #include <mainjk.h> void main() { while(TRUE) { if(input(pin_a7)){printf("a");delay_ms(400);} if(input(pin_a6)){printf("b");delay_ms(400);} } } receptor #include <mainkk.h> char letra; void main() { while(TRUE) { if (kbhit()){ letra=getc(); if (letra=="a"){ output_toggle(pin_a0);} if (letra=="b"){ output_toggle(pin_a1);} } } } e também não obtive sucesso nesse código feito ccs compile
  11. Bommu esse codigo foi criado no PicBasico Pro ele não foi criado por mim peguei ele com exemplo mas não obtive sucesso e gostaria de ajuda
  12. include "modedefs.bas" DEFINE ADC_BITS 8 ' Set number of bits in result DEFINE ADC_CLOCK 3 ' Set clock source (rc = 3) DEFINE ADC_SAMPLEUS 50 trisio =%00011111 'input=mclr,pot´s , output= serial ansel = %00111111 b0 var byte b1 var byte b2 var byte b3 var byte b4 var byte w0 var word w1 var word '------------------------------------------------------------ loop: 'Potenciometros: 'Aceleração:5k4 ' 'acel=2k14, meio=2k73, desac.=3k14 '405 512 594 '10bit´s '101 128 148 '8bit´s 'Direção: 5k ' 'esquerda=1k82, meio=2k54, direita=3k3 ' 368 512 675 '10bit´s ' 92 128 168 '8bit´s ' 'Trimmer´s = pot´s de 10k (8k real) pause 5 ' estava 5 adcin 0,b0'acel '101 a 148 adcin 1 ,b1 'direcao '92 a 168 ADCiN 2 ,b2 'trimmer acel '0 a 255 (/5 = 51) adcin 3,b3 'trimmer direcao '0 a 255 (/6 = 42) w0 = b0 + (b2/5) b0 = w0 w1 = b1 + (b3/6) b1 = w1 gosub limites b4 = b0+b1'valor truncado SEROUT gpio.5,N2400,[204,B0,b1,b4] '20.8ms a 2400bps '204 = 11001100 goto loop '-------------------------------------------------- limites: if b0 < 100 then b0 = 100 endif if b1 < 100 then b1 = 100 endif if b0 > 200 then b0 = 200 endif if b1 > 200 then b1 = 200 endif return '--------------------------------------------------- receptor modulo RX include "modedefs.bas" trisio =%00001001 'serin,mclr ansel = 0 cmcon0 = 7 b0 var byte b1 var byte b4 var byte soma var byte c1 var byte c2 var byte '------------------------------------------------------------ loop: SERIN gpio.0,N2400,20,continua,[204],B0,b1,b4 '204 = 11001100 continua: soma = b0+b1 'valor truncado if soma <> b4 then gosub saida goto loop endif c1 = b0 c2 = b1 gosub saida goto loop '---------------------------------------------------------------- saida: high gpio.4 pauseus c1*10 low gpio.4 high gpio.5 pauseus c2*10 low gpio.5 return '----------------------------------------------------------------- olhai tentei no proteus mas ele não fucionor... adicionado 3 minutos depois eu ja fiz um led acender porém quero pwm
  13. obrigado meu cara, mas o que eu quero fazer e com envia o sinal de pwm para o pic receptor, atraves da comunicação serial
  14. Boa noite Pessoal Gostaria da ajuda de vocês , quero fazer comunicação rf com pic(modulo TX e RX) para que o PIC TX envia o sinal de PWM para o PIC RX para controla a velocidade de um motor CC e de um servomotor. por favor se alguém pode mim ajudar com código de exemplo
  15. Mathus LPS preciso de uma ajuda sua! queria saber como faço para habilita o pwm nesse seu código pois já procurei sobre o assunto mas o unica que vir simplificado sobre comunicação entre dois pic foi Você Pode me ajuda

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