Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
hacktek dijo:Disculpen mi ignorancia pero soy ultra nuevo en esto, pero como conecto el pic al usb? :S para poder programarlo? onda cargar firm y extras?
Espero no molestar...
Gracias.
Cuando puedas sube el esquema y el HEX para su simulacionjokelnice dijo:como buen aporte al tema pienso que es bueno comentarles que proteus en su ultima version lanzo la posibilidad de emular el puerto usb ( es cierto quiere decir que podremos probar los ejemplos sin necesidad de tener lod dispositivos reales y funciona igual yo ya hice la prueba si les interesa habisenme y le envio para que lo descarguen , saludos les envio una imagen
// Prueba de funcionamiento del conversor A/D del PIC18F2550.
// Programador: Moyano Jonathan.
// Fecha: 24/12/08.
#include <18F2550.h> // Definición de registros internos.
//#DEVICE ADC=8 // cad a 8 bits, justificación a a la derecha.
#DEVICE ADC=10 // cad a 10 bits, justificación a a la derecha.
//#DEVICE ADC=16 // cad a 10 bits, justificación a a la izquierda.
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,NOVREGEN,NOPBADEN
// Fuses utilizados:
/*
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
NOMCLR: Utilizamos reset por software.
NOWDT: No utilizamos el perro guardían.
NOPROTECT: Desactivamos la protección de código.
NOLVP: Desactivamos la programación a bajo voltaje.
NODEBUG: No entramos al modo debug.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz.
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
NOVREGEN: deshabilita el regulador de 3.3 volts que usa el módulo USB.
NOPBADEN: Deshabilitamos el módulo de conversión ADC del puerto B.
*/
#use delay(clock=48000000) // Frecuencia máxima de trabajo 48 Mhz.
void main() {
long valor; // Guardamos el valor de conversión del AD.
int parte_alta; // Parte alta de la conversión. (ADRESH).
output_a (0); // Resetea los puertos.
output_b (0);
output_c (0);
set_tris_a(0x1); // configura los puertos como salidas, menos el RA0 que lo configura como entrada.
set_tris_b(0x0);
set_tris_c(0x0);
//-----------------------------------
disable_interrupts(global);
disable_interrupts(int_timer1);
disable_interrupts(int_rda);
disable_interrupts(int_ext);
disable_interrupts(int_ext1);
disable_interrupts(int_ext2);
setup_spi(FALSE);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
setup_adc_ports( AN0 || VSS_VDD ); // Configuramos RA0, como entrada analógica.
setup_adc(ADC_CLOCK_DIV_64 ); // Configuramos el relog del ADC.
#asm
movlw 0b10111110 ;justificacion_derecha,20Tad,Fosc/64
iorwf 0xFC0,1 ; direccion de ADCON2 // Configuramos el ADCON2.
#endasm
set_adc_channel(0); // Elejimos el canal AN0, correspondiente a RA0.
while(1){ // bucle infinito
valor = read_adc(); // toma el resultado del CAD.
output_b((int)valor); // envía el byte LSB a portb.
parte_alta=(int)((valor & 0x300)>>8); // separa los 2 bits MSB de valor.
output_c(parte_alta); // y los envia al portc.
}
}