Ir para conteúdo
Fórum Script Brasil

doracenzi

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre doracenzi

Contatos

  • MSN
    guilhermedoracenzi@gmail.com

Perfil

  • Gender
    Male
  • Location
    Sertãozinho - SP

doracenzi's Achievements

0

Reputação

  1. Olá pessoal, estou enfrentando um problema em um projeto que é o seguinte, eu preciso fazer o controle da temperatura dentro de uma estufa, onde o ar é soprado por um soprador tipo Falcon e a resistencia fica logo na frente aquencendo o ar soprado, depois de aquecido o ar vai para a estufa(constantemente fazendo a troca do ar aquecido). Queria por favor uma ajuda de como implementar um código em C para o microcontrolador PIC18F4550 fazer o controle dessa temperatura, pensei em um sistema ON/OFF onde: Se a temperatura lida for menor do que a temperatura desejada então ligar a resistencia e Se a temperatura lida for maior do que a temperatura desejada então desligar a resistencia. Mas nesse sistema eu acho que a taxa de erro com o setpoint(temperatura desejada) seria muito grande influenciando no produto aquecido dentro da estufa. Pensei em um controle PID, para minimizar esse erro. alguém por favor poderia me dar uma ajuda de como implementar esse controle em C para o PIC ? Algum código de ajuda e exemplo seria bem vindo. Desde já muito obrigado. Guilherme Doracenzi.
  2. Olá pessoal, estou com um problema em um projeto que esta a quase uma semana me atrasando, é o seguinte, eu preciso usar uma interrepção externa para que de tempo em tempo o PIC18F4550 envie a temperaturas lidas, esse bloco da leitura das temperaturas tem que ser em uma interrepção externa para não atrapalhar no restante da função principal MAIN, o problema é que eu implementei o TIMER 0 como o fabricante do compilador diz, com toda a sintaxe correta(eu acho) e mesmo assim a interrpução não ocorre, não enviando os dados. Eu não consigo mesmo achar o que esta de errado na implementação, por favor se alguém souber onde esta o erro me ajude, me de uma luz. Obrigado desde já. Deixo aqui em baixo o código implementado em C no PIC C compiler. #include <18F4550.h> #device adc=10 #int_RTCC #FUSES NOWDT //No Watch Dog Timer #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOPROTECT //Code not protected from reading #FUSES NOBROWNOUT //No brownout reset #FUSES BORV20 //Brownout reset at 2.0V #FUSES NOPUT //No 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 IESO //Internal External Switch Over mode enabled #FUSES FCMEN //Fail-safe clock monitor enabled #FUSES PBADEN //PORTB pins are configured as analog input channels 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 MCLR //Master Clear pin enabled #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 #FUSES ICPRT //ICPRT enabled #use delay(crystal=8000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #DEFINE AN pin_D3 #DEFINE BN pin_D4 #DEFINE AP pin_D5 #DEFINE BP pin_D6 #DEFINE delay1 500 int b = 0; char aux[4]; int i = 0; float valor = 0; float diferenca = 0; int flag = 0; int aux1 = 0; int aux2 = 0; int16 valor_anal1 = 0, valor_temp1 = 0, valor_anal2 = 0, valor_temp2 = 0, valor_anal3 = 0, valor_temp3 = 0, valor_anal4 = 0, valor_temp4 = 0; void RTCC_isr(void) { //Sensores de temperatura set_adc_channel(0); // Canal do ADC 0 delay_ms(1); valor_anal1 = read_adc(); // Lê o LM35 1 valor_temp1 = (valor_anal1 * 0.00488) * 100; // Converte em graus celsius set_adc_channel(1); // Canal do ADC 1 delay_ms(1); valor_anal2 = read_adc(); // Lê o LM35 2 valor_temp2 = (valor_anal2 * 0.00488) * 100; // Converte em graus celsius set_adc_channel(2); // Canal do ADC 2 delay_ms(1); valor_anal3 = read_adc(); // Lê o LM35 3 valor_temp3 = (valor_anal3 * 0.00488) * 100; // Converte em graus celsius set_adc_channel(3); // Canal do ADC 3 delay_ms(1); valor_anal4 = read_adc(); // Lê o LM35 4 valor_temp4 = (valor_anal4 * 0.00488) * 100; // Converte em graus celsius //Envia para a porta serial a Temperatura lida do LM35 printf("A%2.1fB%2.1fC%2.1fD%2.1f\n", (float)valor_temp1, (float)valor_temp2, (float)valor_temp3, (float)valor_temp4); } void main() { setup_adc_ports(AN0_TO_AN3); setup_adc(ADC_CLOCK_DIV_2); setup_psp(PSP_DISABLED); setup_spi(0);; setup_wdt(WDT_OFF); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_ccp1(CCP_OFF); setup_comparator(NC_NC_NC_NC); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); enable_interrupts(INT_RTCC); enable_interrupts(GLOBAL); setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); set_tris_a(0b11111111); while(true) { /*Captura do pacote enviado pela interface*/ if (kbhit()) { aux[0] = 0; aux[1] = 0; aux[2] = 0; aux[3] = 0; aux[4] = 0; aux[0] = getc(); //inicio do quadro aux[1] = getc(); aux[2] = getc(); aux[3] = getc(); aux[4] = getc(); putc(aux[0]); putc(aux[1]); putc(aux[2]); putc(aux[3]); putc(aux[4]); }
  3. Olá pessoal, estou com uma dúvida de como implementar uma parte de um projeto que estou realizando. É o seguinte, eu recebo um pacote de dados de 4 temperaturas distintas e eu preciso separar esse pacote e colocar as reapectivas temperaturas em Labels difetenres, por exemplo: Eu recebo o seguinte pacote tipo string pela RS232, "A31.2B27.0C55.5D60.0" O que eu preciso fazer é separar as temperaturas e coloca-las nos respectivos lugares Se "A" então colocar a temperatura 31.2 na Label.Temp1 Se "B" então colocar a temperatura 27.0 na Label.Temp2 Se "C" então colocar a temperatura 55.5 na Label.Temp3 Se "D" então colocar a temperatura 60.0 naa Label.Temp4 Eu parei nesse problema no projeto e não estou conseguindo resolver, se alguém puder me ajudar eu agradeço Obrigado desde já!
×
×
  • Criar Novo...