#include <18F2550.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#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 NOPBADEN //PORTB pins are configured as digital I/O 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
//timer 0
/*
#DEFINE T0CON 0xFD5 // timer0
#DEFINE T1CON 0xFCD // timert1
#BIT TMR0ON = T0CON.7 // valor enable del timer0 1=on, 0=Off
#BIT RD16 = T1CON.7 // valor enable del timer0 1=on, 0=Off
#define TIMER1_ON RD16
*/
// --- esclavos --------------------------------
#define S1 0xB0
#define S2 0xB2
#define S4 0xB4
#define S6 0xB6
#define S8 0xB8
// ----- define los servos ----------------------
#define sv_0 PIN_B7
#define sv_1 PIN_B6
#define sv_2 PIN_C1
#define sv_3 PIN_C2
#define sv_4 PIN_C0
/*
#define sv_5 PIN_B7
#define sv_6 PIN_B6
#define sv_7 PIN_B5
#define sv_8 PIN_B4
#define sv_9 PIN_B3
*/
// TIMER 2 exp 16 bit : 65536 tick 0.2us -->13107.2us 1 INT
// ---- perido de 20 ms 20000us -------------------------------
// 1 tick ........ 0.2us
// 5 tick ........ 1 us
// ----- ventana o cambio motor -------------------------------
// Tick para us en on
//const int16 ventana = 60536; // 65536 - 5000 = 1ms 1000us
//const int16 ventana = 55536; // 65536 - 10000 = 2ms 2000us
//const int16 ventana = 50536; // 65536 - 15000 = 3ms 3000us
const int16 ventana = 45536; // 65536 - 20000 = 4ms 4000us
//const int16 ventana = 40536; // 65536 - 25000 = 5ms 5000us
//const int16 ventana = 15536; // 65536 - 50000 = 10ms 10000us
//1 tick -------- 0.2us
//x tick -------- y us
// ----- tick para tiempo en ON -------------------------------
// --- generico ---------------------
const int16 g_0 = 63036; //65536 - 2500 0.5ms 500us
const int16 g_90 = 58036; //65536 - 7500 1.5ms 1500us
const int16 g_180 = 53036; //65536 - 12500 2.5ms 2500us
//-------------------------------------------------------------
// --- mis tick ---------------------
//conts inr16 g_1 = .....; //65536 - ..... .....ms ...us
//const int16 g_0 = 63036; //65536 - 600 0.120ms 120us
//const int16 g_90 = 58036; //65536 - 1875 0.375ms 375us
//const int16 g_180 = 53036; //65536 - 3150 0.630ms 630us
/* en calculos y pruebas..
const int16 g_0 = 63036; //65536 - 600 0.120ms 120us
const int16 g_15 = 63661; //65536 - 1875 375us
const int16 g_30 = 63661; //65536 - 625 0.125ms 375us / 3 = 125us
const int16 g_45 = 63661; //65536 - .... 0.185ms 370us / 2 = 185us
const int16 g_60 = 63661; //65536 - 1875 0.185ms 630us / 3 = 210us
const int16 g_75 = 63661; //65536 - 1875 375us
const int16 g_105 = 63661; //65536 - 1875 375us
const int16 g_120 = 63661; //65536 - 1875 375us
const int16 g_135 = 63661; //65536 - 1875 375us
const int16 g_150 = 63661; //65536 - 1875 375us
const int16 g_165 = 63661; //65536 - 1875 375us
const int16 g_180 = 53036; //65536 - 3150 0.630ms 630us
*/
// --- vector inicializacion y angulos servos ----------------------
static int16 valor_PWM[]={g_90, g_0,g_180,0,0,0,0};
static int16 ini_PWM[]={g_90, g_90, g_90, g_90,0,0,0,0}; //8 servos
#define Pide_Dato1 2
#define Pide_Dato2 3
#define dato1 4
#define dato2 5
#use delay(clock=20000000)
//#define I2C_SCL PIN_B7
//#define I2C_SDA PIN_C4
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(Slave,Slow,sda=PIN_B0,scl=PIN_B1,address=0xB0)
//#include "milib.c"
//--------- milib.c-------------
//convierte us en tick de reloj
// 1us ---> 5tick
// xus ---> y tick
int16 t_on(int16 us_on){
int16 tick_on;
tick_on= 65536 - (us_on * 5);
return tick_on;
}
bueno no se que pasa..
como obtergo los numeros de tick para 1 grado de forma precisa y estable?