#include <p18f2550.h>
#include <delays.h>
#pragma config WDT = OFF
#pragma config MCLRE = OFF
#pragma config PBADEN = OFF
#pragma config FOSC = XT_XT // Normal (4 MHz)
void main(void)
{
unsigned char Intensidad, Porcent_Angulo;
unsigned char Iteraciones;
PORTA = 0;
PORTB = 0;
PORTC = 0;
LATA = 0;
LATB = 0;
LATC = 0;
ADCON1 = 0x0F;
CMCON = 0x07;
TRISA = 0xF0; // Servos en RA0 a 3
TRISB = 0xE3; // Led RGB en RB2,3 y 4
TRISC = 0xFF;
Porcent_Angulo = 1;
Iteraciones = 0;
while(1)
{
// Prueba servos:
// 1) 450 useg a nivel alto
LATAbits.LATA0=1;
Delay10TCYx(45); // 45*10*1useg = 450 useg (Aproximadamente)
// 2) de 0 a 2000 useg a 1 (de 0 a 180º)
Delay10TCYx(Porcent_Angulo); // Tiempo en alto que determina el ángulo
LATAbits.LATA0=0;
// 3) Resto hasta 20 mseg a 0
Delay10TCYx(200-Porcent_Angulo); // Compensamos para dejar un tiempo final a bajo de valor fijo
Delay100TCYx(176); // 176*100*1useg =17'5 mseg aprox.
Iteraciones++;
if (Iteraciones==5) // Han pasado 100 milisegundos...
{
Porcent_Angulo++; // Incremento el ángulo
Iteraciones=0;
}
if (Porcent_Angulo==200) Porcent_Angulo=1; // Como la comprobación se hace tras el incremento, nunca se llamará a
// Delay10TCYx(200-Porcent_Angulo); con 200-200 = 0
}