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.
Hola!!!,
Disculpen por la molestia pero... no se como crear la interface en VB 2008 con el archivo mpusbapi.dll, me lo podrían explicar paso a paso por favor de antemano GRACIAS!!!!
hola cosmico,
gracias por el tip, pero resulta que era una mala coneccion entre los pines del pic, ya la pc me reconce el pic como cdc com 3... aunque si me pasa algo muy rato el pic esta conectado y reconocido como puerto serial, pero no me funciona con hyperterminal o con visual basic 2010, aun estoy trabajando en esto... pero si tuvieras alguna idea de por donde va ese error... me ayudarias mucho... o si alguien mas tiene una idea de esto....
Moyano, vi en la pagina 39 que COSMICO pregunto lo mismo que yo y le contestaste.. es dificil leer todo.... Cambio la pregunta: las librerias que posteaste en la primera pagina son un poco distintas a las que provee CCS, eso afecta en algo?
// Ejercicio Nº1: Genera un COM virtual y se comunica bidireccionalmente con el a través del PIC18F2550.
#include <18F4550.h> // Definición de registros internos.
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,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, y dejamos el pin 1 del micro como entrada/salida digital.
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á.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB
*/
#use delay(clock=48000000) // Frecuencia máxima de trabajo.
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
void main() {
usb_cdc_init(); // Configuramos al puerto virtual.
usb_init(); // Inicializamos el stack USB.
while(!usb_cdc_connected()) {}
// espera a detectar una transmisión de la PC (Set_Line_Coding).
do{
usb_task();
if (usb_enumerated()){ // Espera a que el dispositivo sea enumerado por el host.
if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción.
output_toggle(PIN_C3);
if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
printf(usb_cdc_putc, "OK\n\r");
output_toggle(PIN_C4);
//si, entonces envía una cadena hacia el PC
}
}
}
}while (TRUE); // bucle infinito.
}
Gracias FRYCK, lo voy a probar pero el lunes ya que sali del trabajo y hasta el lunes no vuelvo. Te aviso como funciono, de todas formas me parece similar, creo que mi problema puede estar en otro lado. A cuantos baudios transmite? Creo que es 9600 8 N 1 verdad?
Gracias y saludos!
#include <18F2450.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN,MCLR,PUT
#use delay(clock=48000000)
#define led (pin_c0)
#define led2 (pin_c1)
#define led3 (pin_c2)
#define on output_high
#define off output_low
#include <usb_cdc.h>
#include "usb_desc_cdc.h"
void main() {
char valor;
char comparador1;
char comparador2;
comparador1 = "1";
comparador2 = "2";
on (led);-----------------------------------------------------------------------------------------------------
delay_ms (1000); // esta seccion enciende los tres leds que estoy usando para probar
off (led); //que si enciendan
on (led2);
delay_ms (1000);
off (led2);
on (led3);
delay_ms (1000);
off (led3);------------------------------------------------------------------------------------------------------
usb_cdc_init(); //inicio el USB como CDC COM3
usb_init();-----------------------------------------------------------------------------------------------------
do{
if (usb_cdc_connected()){-------------------------------------------------------------------------------
on (led); //cuando el PIC esta conectado al USB enciende el led 1
if (usb_enumerated()){-----------------------------------------------------------------------------
on (led2); //cuando el PIC esta enumerado enciende el PIC enciende el led 2
do{-----------------------------------------------------------------------------------------------
usb_task();
if (usb_cdc_kbhit()) { //si se recibe un dato en el buffer envia al hyperteminal
printf (usb_cdc_putc, "caracter recibido\n\r"); //esta frase
if (usb_cdc_getc() =='1'){//si el dato es un 1 entonces enciende el led 3 y
on (led3); // espera 1 segundo
delay_ms (1000);}
else if (usb_cdc_getc() =='2'){ //si el dato recibido es un 2 entonces
off (led3);}} //entonces apaga el led 3
else if (usb_cdc_kbhit() == false){------------------------------------------------------
printf (usb_cdc_putc, "no hay caracter\n\r"); //si no se recibe datos entonces
delay_ms (1000);} //envia esta frace y espera un segundo para volver a
}while(true);} // chequear si se ha recibido algo
else{
off (led2);}} // si no esta el USB enumerado apaga el led 2
else{
off (led);} //si no esta conectado el USB apaga el led 1
}while (TRUE);
}
#include <18F4550.h> // Definición de registros internos.
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#define led (pin_c0)
#define led2 (pin_c1)
#define led3 (pin_c2)
#define on output_high
#define off output_low
#use delay(clock=48000000) // Frecuencia máxima de trabajo.
#include <usb_cdc.h>
#include "usb_desc_cdc.h"
void main() {
on (led);
delay_ms (1000);
off (led);
on (led2);
delay_ms (1000);
off (led2);
on (led3);
delay_ms (1000);
off (led3);
usb_cdc_init();
usb_init();
do{
if (usb_cdc_connected()){
on (led);
if (usb_enumerated()){
on (led2);
do{
usb_task();
if (usb_cdc_kbhit()) {
printf (usb_cdc_putc, "caracter recibido\n\r");
if (usb_cdc_getc() =='1'){
on (led3);
delay_ms (1000);
}
else if (usb_cdc_getc() =='2'){
off (led3);
}
}
else if (usb_cdc_kbhit() == false){
printf (usb_cdc_putc, "no hay caracter\n\r");
delay_ms (1000);
}
}while(true);
}
else{
off (led2);
}
}
else{
off (led);
}
}while (TRUE);
}