#include <18f4553.h>
#device adc=12
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,PUT
#use delay(clock=48M)
#DEFINE USB_HID_DEVICE FALSE
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1 for IN bulk/interrupt transfers USB_ENABLE_INTERRUPT
#define USB_EP1_TX_SIZE 2
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_RX_SIZE 2
#include <pic18_usb.h>//Funciones de bajo nivel(hardware) para la serie PIC 18Fxx5x que serviran en usb.c
#include "usb_desc_scope.h"
#include <usb.c> //libreria para el manejo del usb
int16 dato[1];
int16 dato1;
int8 k=0;
int8 flujol,flujoh,entrada[3];
int16 flujo16bits=0;
float temp=0;
float frec=0;
//#int_timer1
#int_ccp1
void CCP1(){
dato1= read_adc();
flujoh = dato1 & 0x7F;
flujol = dato1;
flujo16bits = make16(flujoh,flujol); // Creo la variable de 16 bits
flujo16bits >>= 3;// Divido por 8
dato[0]= flujo16bits;
}
void main(){
setup_timer_1(T1_INTERNAL |T1_DIV_By_4 );
setup_ccp1(CCP_COMPARE_RESET_TIMER);
setup_adc_ports(ALL_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel(1);
CCP_1=251; //Fs=12000hz
enable_interrupts(GLOBAL); //Habilita int. general
usb_init(); //Inicialización del control del USB
usb_task(); //Monitorea el estado de la coneccion conectandose y desconectandose automaticamente
usb_wait_for_enumeration(); //espera infinitamente hasta que el dispositivo fue enumerado
enable_interrupts(INT_CCP1);
enable_interrupts(INT_SSP);
while(TRUE)
{
// temp=(dato1*0.12207);
// printf("%f\r",temp);
usb_task(); //Detección de la conexión de dispositivo USB
if(usb_enumerated())
usb_put_packet(1, dato,2, USB_DTS_TOGGLE);
}
}
#include <18f4553.h>
#device adc=12
//#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL1,CPUDIV1,VREGEN,USBDIV,PUT
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,PUT
#use delay(clock=48M)
#DEFINE USB_HID_DEVICE FALSE
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1 for IN bulk/interrupt transfers USB_ENABLE_INTERRUPT
#define USB_EP1_TX_SIZE 2
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_RX_SIZE 2
#include <pic18_usb.h>//Funciones de bajo nivel(hardware) para la serie PIC 18Fxx5x que serviran en usb.c
#include "usb_desc_scope.h"
#include <usb.c> //libreria para el manejo del usb
int16 valor;
int16 dato[1];
int16 dato1;
int8 muestras[1];
#int_ad
void ad_int(){ //Función interrupción AD
valor=read_adc(ADC_READ_ONLY); //Valor de fuente analógica...
ccp_2=251; //reinicia cuenta
}
void main() {
disable_interrupts(global);
setup_adc_ports(AN0_TO_AN3); //Habilitación RA0 analógico
setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno RC
set_adc_channel(1); //Canal 0
setup_ccp2(CCP_COMPARE_RESET_TIMER); //CCP2 modo COMPARACION…
// y disparo especial
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); //Configuración TMR1
set_timer1(0); //Puesta a 0
ccp_2=251; //Muestreo 12khz a 20MHz
usb_init(); //Inicialización del control del USB
usb_task(); //Monitorea el estado de la coneccion conectandose y desconectandose automaticamente
usb_wait_for_enumeration(); //espera infinitamente hasta que el dispositivo fue enumerado
enable_interrupts(INT_AD); //Habilitación Interrupción AD
enable_interrupts(global); //Habilitación Interrupción global
do {
muestras[0]=make8(valor,1);
muestras[1]=make8(valor,0);
usb_task(); //Detección de la conexión de dispositivo USB
if(usb_enumerated())
usb_put_packet(1, muestras,2, USB_DTS_TOGGLE);
}
while (TRUE);
}
Cambialo a:Código: C
#include <18f4553.h> #device adc=12 //#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL1,CPUDIV1,VREGEN,USBDIV,PUT #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,PUT #use delay(clock=48M) #DEFINE USB_HID_DEVICE FALSE #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1 for IN bulk/interrupt transfers USB_ENABLE_INTERRUPT #define USB_EP1_TX_SIZE 2 #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1 for OUT bulk/interrupt transfers #define USB_EP1_RX_SIZE 2 #include <pic18_usb.h>//Funciones de bajo nivel(hardware) para la serie PIC 18Fxx5x que serviran en usb.c #include "usb_desc_scope.h" #include <usb.c> //libreria para el manejo del usb volatile int16 valor; volatile int1 datolisto = FALSE; int16 dato[1]; int16 dato1; int8 muestras[1]; #int_ad void ad_int(){ //Función interrupción AD valor=read_adc(ADC_READ_ONLY); //Valor de fuente analógica... cp_2=251; //reinicia cuenta datolisto = TRUE; } void main(void) { disable_interrupts(global); setup_adc_ports(AN0_TO_AN3); //Habilitación RA0 analógico setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno RC set_adc_channel(1); //Canal 0 setup_ccp2(CCP_COMPARE_RESET_TIMER); //CCP2 modo COMPARACION… // y disparo especial setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); //Configuración TMR1 set_timer1(0); //Puesta a 0 ccp_2=251; //Muestreo 12khz a 20MHz usb_init(); //Inicialización del control del USB usb_task(); //Monitorea el estado de la coneccion conectandose y desconectandose automaticamente usb_wait_for_enumeration(); //espera infinitamente hasta que el dispositivo fue enumerado enable_interrupts(INT_AD); //Habilitación Interrupción AD enable_interrupts(global); //Habilitación Interrupción global while(TRUE) { if(datolisto) { muestras[0]=make8(valor,1); muestras[1]=make8(valor,0); datolisto = FALSE; } usb_task(); //Detección de la conexión de dispositivo USB if(usb_enumerated()) usb_put_packet(1, muestras,2, USB_DTS_TOGGLE); } }
Cambialo a:Código: C
#include <18f4553.h> #device adc=12 //#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL1,CPUDIV1,VREGEN,USBDIV,PUT #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,PUT #use delay(clock=48M) #DEFINE USB_HID_DEVICE FALSE #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1 for IN bulk/interrupt transfers USB_ENABLE_INTERRUPT #define USB_EP1_TX_SIZE 2 #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1 for OUT bulk/interrupt transfers #define USB_EP1_RX_SIZE 2 #include <pic18_usb.h>//Funciones de bajo nivel(hardware) para la serie PIC 18Fxx5x que serviran en usb.c #include "usb_desc_scope.h" #include <usb.c> //libreria para el manejo del usb volatile int16 valor; volatile int1 datolisto = FALSE; int16 dato[1]; int16 dato1; int8 muestras[1]; #int_ad void ad_int(){ //Función interrupción AD valor=read_adc(ADC_READ_ONLY); //Valor de fuente analógica... cp_2=251; //reinicia cuenta datolisto = TRUE; } void main(void) { disable_interrupts(global); setup_adc_ports(AN0_TO_AN3); //Habilitación RA0 analógico setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno RC set_adc_channel(1); //Canal 0 setup_ccp2(CCP_COMPARE_RESET_TIMER); //CCP2 modo COMPARACION… // y disparo especial setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); //Configuración TMR1 set_timer1(0); //Puesta a 0 ccp_2=251; //Muestreo 12khz a 20MHz usb_init(); //Inicialización del control del USB usb_task(); //Monitorea el estado de la coneccion conectandose y desconectandose automaticamente usb_wait_for_enumeration(); //espera infinitamente hasta que el dispositivo fue enumerado enable_interrupts(INT_AD); //Habilitación Interrupción AD enable_interrupts(global); //Habilitación Interrupción global while(TRUE) { if(datolisto) { muestras[0]=make8(valor,1); muestras[1]=make8(valor,0); datolisto = FALSE; } usb_task(); //Detección de la conexión de dispositivo USB if(usb_enumerated()) usb_put_packet(1, muestras,2, USB_DTS_TOGGLE); } }
datoh = spi_read(0) & 0x7F;
datol = spi_read(0); // Tomo el segundo valor
output_high(CS); // Finalmente apago el CS
dato16bits = make16(flujoh,flujol); // Creo la variable de 16 bits
dato16bits >>= 3;// Divido por 8