Buenas compañeros del foro de electronica, vengo con una nueva duda.
En estos momentos me encuentro trabajadno con el pic 18f4550 por el usb, estoy haciendo un semaforo controlado por pc, dependiendo del boton que se presione en el programa es la accion. Pero bueno el problema no es eso, mas que nada una introduccion.
El problema es este, estoy usando picusb para la comunicacion, este es el programa del semaforo:
Y la imagen es mi circuito, se los describo.
El el pin 1, el mclr, tiene una resistencia de 1 K, en la 11 Vdd, en 12 GND, 13 y 14 cristal de 12 Mhz, y 2 capacitores de 15pF, y en la 18 un capacitor de 47uF, en 23 D- y 24 D+ que vienen desde el usb, y los leds de el semaforo, y en el pin 40 unos leds para saber si la conexion es correcta.
El problema es este, al momento de compilar el programa y despues de grabarlo en el pic, lo monto y conecto mi usb al pc pero esta no detecta el dispositivo y no me deja instalarlo , he probado el pic con un programa que no requiera usb y funciona bien.
Este circuito me lo dio mi profesor de programacion y anteriormente funcionaba en otro pc, el pc me detectaba bien el pc y podria hacer bien la comunicacion con el programa para controlar el semaforo, pero hace unos dias se desconecto mi usb del protoboard, y lo volvi a conectar pero ahora ya no lo detecta. Me gustaria saber si tienen alguna idea de por que el pc no detecta el pic.
Si requieren mas detalles, procurare darselos lo mejor posible.
En estos momentos me encuentro trabajadno con el pic 18f4550 por el usb, estoy haciendo un semaforo controlado por pc, dependiendo del boton que se presione en el programa es la accion. Pero bueno el problema no es eso, mas que nada una introduccion.
El problema es este, estoy usando picusb para la comunicacion, este es el programa del semaforo:
Código:
/////////////////////////////////////////////////////////////////////////
//// PicUSB.c ////
//// ////
//// Este ejemplo muestra como desarrollar un sencillo dispositivo ////
//// USB con el PIC18F2550, aunque puede ser facilmente adaptado ////
//// para la serie 18Fxx5x. Se suministra el PicUSB.exe, así como ////
//// su código fuente para Visual C# 2005, podréis encontrar tb ////
//// los drivers para el dispositivo. No se suministra esquema de ////
//// conexión puesto que está pensado para ser usado en el GTP USB, ////
//// cualquiera de las tres versiones disponibles, si aun no teneis ////
//// el programador, podeis utilizar el esquema de ese proyecto. ////
//// ////
//// Cuando el dispositivo sea conectado al PC, saldrá el asistente ////
//// para la instalación del driver. Instala el suministrado junto ////
//// a este ejemplo, lo encontrareis dentro de la carpeta Driver. ////
//// Una vez instalado podreis usar el PicUSB.exe para encender o ////
//// apagar el led bicolor del GTP USB, y para realizar la suma de ////
//// dos números introducidos. ////
//// ////
//// Realizado con el compilador CCS PCWH 3.227 ////
//// ////
//// Por: Jaime Fernández-Caro Belmonte [EMAIL="SinCorreo@hotmail.com"]SinCorreo@hotmail.com[/EMAIL] ////
//// ////
//// [url]http://www.hobbypic.com[/url] ////
/////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=12000000)
/////////////////////////////////////////////////////////////////////////////
//
// CCS Library dynamic defines. For dynamic configuration of the CCS Library
// for your application several defines need to be made. See the comments
// at usb.h for more information
//
/////////////////////////////////////////////////////////////////////////////
#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 3 //size to allocate for the rx endpoint 1 buffer
/////////////////////////////////////////////////////////////////////////////
//
// If you are using a USB connection sense pin, define it here. If you are
// not using connection sense, comment out this line. Without connection
// sense you will not know if the device gets disconnected.
// (connection sense should look like this:
// 100k
// VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC)
// |
// +----/\/\/\/\/\-----GND
// 100k
// (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////
//#define USB_CON_SENSE_PIN PIN_B2 //CCS 18F4550 development kit has optional conection sense pin
/////////////////////////////////////////////////////////////////////////////
//
// Include the CCS USB Libraries. See the comments at the top of these
// files for more information
//
/////////////////////////////////////////////////////////////////////////////
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c>
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
/////////////////////////////////////////////////////////////////////////////
//
// Al conectar el PicUSB al PC encendemos el Led Rojo hasta que el dispositivo
// halla sido configurado por el PC, en ese momento encederemos el Led Verde.
// Esperaremos hasta que se reciba un paquete proveniente del PC. Comprobaremos
// el primer byte del paquete recibido para comprobar si queremos entrar en el
// modo Suma, donde se realizará una suma de dos operandos, que corresponderan
// con los dos bytes restantes del paquete recibido; una vez realizada la suma
// enviaremos el paquete con el resultado de vuelta al PC. Si entramos en el
// modo Led comprobaremos el segundo byte del paquete recibido para comprobar
// si deberemos apagar los leds, encender el verder o el rojo.
//
/////////////////////////////////////////////////////////////////////////////
void main(void) {
int8 semaforo[2];
output_high(PIN_B7); //enciende el led al conectar el pic
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
output_low(PIN_B7); // se apaga el led al existir comunicación usb
while (TRUE)
{
if(usb_enumerated()) //si el PicUSB está configurado
{
if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host
{
usb_get_packet(1, semaforo, 1);
if (semaforo[0] == 1)
{
do
{
output_high(PIN_D7); // Apaga led
output_low(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(55000);
output_low(PIN_D7); // Apaga led
output_high(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_high(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_high(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_high(PIN_D4);
output_low(PIN_D3);
output_low(PIN_D2);
delay_ms(55000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_low(PIN_D4);
output_high(PIN_D3);
output_low(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_low(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_low(PIN_D4);
output_high(PIN_D3);
output_low(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_low(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_low(PIN_D4);
output_high(PIN_D3);
output_low(PIN_D2);
delay_ms(1000);
output_low(PIN_D7); // Apaga led
output_low(PIN_D6);
output_high(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_low(PIN_D2);
delay_ms(1000);
usb_get_packet(1, semaforo, 1);
}while(semaforo[0]==1);
}
if (semaforo[0] == 2) // Modo_Led
{
output_low(PIN_D7); //// Enciende led
output_low(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_low(PIN_D2);
}
if (semaforo[0] == 3) // Modo_Led
{
output_high(PIN_D7); //// Enciende led
output_low(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_low(PIN_D3);
output_high(PIN_D2);
}
if (semaforo[0] == 4) // Modo_Led
{
output_low(PIN_D7); //// Enciende led
output_high(PIN_D6);
output_low(PIN_D5);
output_low(PIN_D4);
output_high(PIN_D3);
output_low(PIN_D2);
}
if (semaforo[0] == 5) // Modo_Led
{
output_low(PIN_D7); //// Enciende led
output_low(PIN_D6);
output_high(PIN_D5);
output_high(PIN_D4);
output_low(PIN_D3);
output_low(PIN_D2);
}
}
}
}
}
Y la imagen es mi circuito, se los describo.
El el pin 1, el mclr, tiene una resistencia de 1 K, en la 11 Vdd, en 12 GND, 13 y 14 cristal de 12 Mhz, y 2 capacitores de 15pF, y en la 18 un capacitor de 47uF, en 23 D- y 24 D+ que vienen desde el usb, y los leds de el semaforo, y en el pin 40 unos leds para saber si la conexion es correcta.
El problema es este, al momento de compilar el programa y despues de grabarlo en el pic, lo monto y conecto mi usb al pc pero esta no detecta el dispositivo y no me deja instalarlo , he probado el pic con un programa que no requiera usb y funciona bien.
Este circuito me lo dio mi profesor de programacion y anteriormente funcionaba en otro pc, el pc me detectaba bien el pc y podria hacer bien la comunicacion con el programa para controlar el semaforo, pero hace unos dias se desconecto mi usb del protoboard, y lo volvi a conectar pero ahora ya no lo detecta. Me gustaria saber si tienen alguna idea de por que el pc no detecta el pic.
Si requieren mas detalles, procurare darselos lo mejor posible.
Última edición por un moderador: