////////////////////////////////////////////////////////////////////////////////
// daq USB
// Caracteristicas:
// 8 entradas analogicas AN0:AN7
// 8 entradas digitales RB0:RB7
// 8 salidas digitales RD0:RD7
// 2 salidas PWM RC1 y RC2
// 1 entrada contadora RA4
// Author:Raul Barreto Quinteros
////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#DEVICE ADC=8
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <pic18_usb.h>
#include "usb_desc_scope.h"
#include <usb.c>
#use fast_io(b)
////////////////////////////////////////////////////////////////////////////////
int8 datoRX[8];
int8 datoTX[10];
int8 count=0;
void main(void)
{
port_b_pullups(true);
setup_port_a(AN0_TO_AN7);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0 (RTCC_EXT_H_TO_L);
set_timer0(0);
setup_timer_2(T2_DIV_BY_1, 127, 1);
set_pwm1_duty(0);
set_pwm2_duty(0);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_tris_a(0b11111111);
set_tris_b(0b11111111);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
output_c(0b00000000);
output_d(0b00000000);
usb_init();
delay_ms(50);
while (TRUE)
{
if(usb_enumerated())
{
if (usb_kbhit(1))
{
usb_get_packet(1,datoRX,3);
set_pwm1_duty(datoRX[0]);
set_pwm2_duty(datoRX[1]);
output_d(datoRX[2]);
}
for(count=0;count<8;count++)
{
set_adc_channel(count);
delay_us(10);
datoTX[count]=read_adc();
}
datoTX[8]=get_timer0();
datoTX[9]=input_b();
usb_put_packet(1,datoTX,10,USB_DTS_TOGGLE);
}
}
}