#include <18F2550.h>
#fuses HS,USBDIV,PLL5
#use delay(clock=20000000)
#use I2C(MASTER, sda=PIN_B0, scl=PIN_B1, FAST, FORCE_HW)
//////////////////////////////////////////////////////////////////////
////////////////////////////DEFINES///////////////////////////////////
//////////////////////////////////////////////////////////////////////
/*
DESCRIPTORES PARA EL USO USB
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 2 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <main.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
*/
#define ENCENDER output_high
#define APAGAR output_low
#define LED_PIC PIN_C6
//////////////////////////////////////////////////////////////////////
///////////////////////////VARIABLES//////////////////////////////////
//////////////////////////////////////////////////////////////////////
boolean sistema_usound = TRUE;
int posicion_servo1 = 0;
int posicion_servo2 = 0;
//int contador = 0;
//int8 recibe[3];
/////////////////////////////////////////////////////////////////////
///////////////////////////INTERRUPCIONES////////////////////////////
/////////////////////////////////////////////////////////////////////
#INT_TIMER2
void PWM_movimiento_servos(void)
{
//mirar de mejorar el movimiento de los servos
}
#INT_SSP
void interrupcion_I2C(void)
{
//de momento como es master esta interrupcion no hace nada, pero dejamos esta opcion disponible para futuras actualizaciones de funcionamiento
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////FUNCIONES///////////////////////////////
/////////////////////////////////////////////////////////////////////
void escribir_i2c(BYTE direccion, int dato)
{
i2c_start();
i2c_write(direccion);
i2c_write(dato);
i2c_stop();
delay_us(50);
}
int leer_i2c(BYTE direccion, int opcion)
{
int dato = 0;
i2c_start();
i2c_write(direccion);
i2c_write(opcion);
i2c_start();
i2c_write(direccion+1);
dato = i2c_read();
i2c_stop();
return(dato);
}
void parpadeo()
{
ENCENDER(LED_PIC);
delay_ms(500);
APAGAR(LED_PIC);
delay_ms(500);
}
/////////////////////////////////////////////////////////////////////
///////////////////////////////MAIN//////////////////////////////////
/////////////////////////////////////////////////////////////////////
void main(void)
{
//usb_init(); //inicializamos el USB
//usb_task(); //habilita periferico usb e interrupciones
//usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host
setup_timer_2(T2_DIV_BY_1,249,2); //inicializacion de las interrupciones del timer 2 a 0.1 ms cada una
set_timer2(0); //inicializar a 0 el timer2
delay_ms(1000); //esperamos 1 segundo que para asegurarnos que se inicialice toda la placa antes de empezar la fiesta
// enable_interrupts(INT_TIMER2); //interrupcion del timer 2
// enable_interrupts(INT_SSP); //interrupcion del I2C (desabilitada puesto que el master no recibe interrupciones, sino que als crea)
// enable_interrupts(GLOBAL); //habilitamos las interrupciones
while(1)
{
/* FUNCION DE USB DESACTIVADA DE MOMENTO
if(usb_enumerated()) //si la torreta esta correctamente instalada en el pc (opcion desactivada de momento
{
if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host
{
usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe
posicion_servo1 = recibe[1];
posicion_servo2 = recibe[2];
}*/
if(sistema_usound) //si esta activo el utilizar los ultrasonidos
{
posicion_servo1 = leer_i2c(0xa0, 1); //leer posicion en la que debe situarse el servo 1
posicion_servo2 = leer_i2c(0xa0, 2); //leer posicion en la que debe situarse el servo 1
}
//} //fin del if(usb_enumerated)
};
}