valeu pelo modelo de programa, mas não tem como me enviar esse programa em um arquivo que abra no mplab, porque não consegui utilizar esse arquivo no meu computador, quando crio um projeto em c, e copio esse programa o mplab indica muitos erros, no qual não consigo resolver.
também gostaria de saber se poderia me ajudar em outro problema, estou tentando gerar um sinal pwm no pic 18f4550, com o compilador ccs, no programa mplab, mas para a função que eu quero necessito de uma frequência de 50hz com um período de 20ms,(para poder controlar um esc, que até onde pesquisei funciona da mesma forma que um servo motor), mas só consigo uma frequência de 500hz, já tentei mexer na variável que até onde eu sei muda a frequência, mas só consegui 500Hz, nada menos que isso. Poderia me ajudar me mostrando como consigo a frequência que eu preciso?
dentro do código ta escrito onde eu acho que tem que mudar
#include<18F4550.h> #include"microv1.h" #include"teclado.h" #include "flex_lcd.h" #use delay(clock=8000000) #fuses HS,NOWDT,NOLVP unsigned char tecla='\0'; unsigned char op1, op2; unsigned int16 duty, duty1,x; float y,z; void InitMain() { setup_ccp1 (CCP_PWM); ADCON1 = 0x0F; // Todos pinos AN são I/O Digitais TRISA = 0xFF; // Configura para ser Entrada TRISB = 0x00; // Configura para ser saída TRISC = 0x00; // Configura para ser saída PORTA = 0x00; //Inicializa as portas PORTB = 0x00; //Inicializa as portas } void main() { op1='\0'; op2='\0'; InitMain(); lcd_init(); setup_timer_2(T2_DIV_BY_16, 255, 1); //até onde eu sei tem que mexer aqui pra mudar a frequência, mas eu achei //esse valor que era pra resulta em 50hz, mas quando coloco no osciloscópio //não dá inicializa_teclado(); TRISD=0; TRISE=0; x=0; y=0; z=0; while (1){ if (le_teclado()=='1'){ x=x+10; y=y+9765625; if (x>=1024) { x=x-10; y=y-9765625; } } if (le_teclado()=='2'){ if (x<=0) { y=0; x=0; } x=x-10; y=y-9765625; } if (x<=0) { y=0; x=0; } z=y/10000000; //y=x; lcd_gotoxy (1,1); printf(lcd_putc, "%s" , "\f"); //printf(lcd_putc, "%s" , "x"); printf(lcd_putc, "%f" , z); if (x>=1024){ x=0; } set_pwm1_duty(x); // Seta valor de Duty Cicle para PWM1 delay_ms(100); // Filtra a mudança muito rápida de valores } } //end while //end void m