Control de dispositivos a través del módulo USB del PIC18F45/2550

Vos decis que programe algo en Visual .net ? Por que ejemplos en VB 6.0 hay montones washi_w_z_r publicó un programa que iso utilizando VC# y mpusbapi.dll preguntale yo todavía estoy en fase de aprendizaje y además los estudios me están matando el tiempo con ametralladora.
 
Esperaba que hicieras algo de explicación sobre el USB para hacer una Interfaz y controlar 8 RELÉ por poner un ejemplo. También estoy de aprendizaje...

(Perdón por confundirte)

Voy a buscar al que dices si es que lo encuentro y voy a mirar que ha hecho con importar las dll.

No se me da mucho usar dll importadas, pero por hacer pruebas e buscado por ahí y funciona estas cositas.

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace CD_Control
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
        public static extern void mciSendStringA(string lpstrCommand,
            string lpstrReturnString, long uReturnLength, long hwndCallback);
        //Why did i put this here?
        string rt = "";
        private void button1_Click(object sender, EventArgs e)
        {
            mciSendStringA("set CDAudio door open", rt, 127, 0); //Abre la bandeja del lector.
        }

        private void button2_Click(object sender, EventArgs e)
        {
            mciSendStringA("set CDAudio door closed", rt, 127, 0); //Cierra la bandeja del lector.
        }
    }
}
 
Ya voy a ver si el fin de semana empiezo definitivamente a hacer las pruebas. Yo en este momento me voy a poner a trabajar con 2 dll principalmente: mcHID.dll (dll del easyHID) y mpusbapi.dll haciendo las llamadas con VC# ya que me parece un poco más comodo para trabajar. Otra cosa luego de hacer las llamadas a las funciones hay que declararlas para que funcionen (tengo una idea más o menos de como se hace en ese lenguaje) en visual basic es facil porque generalmente te venía un archivo con los módulos de las funciones. Y con respecto al control de 8 relés con USB no es dificil ya voy a ver como lo implemento para VC# y lo posteo.
 
Hola a todos, gracias por tan interesante y aplicativo tema.
En este momento estoy tratando de remplazar una interfase conversora de serial a USB (ejemplo Trendnet USB to Serial Converter TU-S9) para una aplicación que maneja protocolo serial y deseo usarla en computadores portátiles.
Hace tiempo arme el PICkit2 clone que usa el HID y me parecio muy bueno sobre todo porque no requiere instalar driver.
La pregunta es: conocen algún ejemplo donde se use el HID para hacer un conversor Serial a USB con las señales de TX, RX y DTR funcionando?.
Por mas que he buscado no he visto nada que funcione con el HID y menos con el DTR!
Se que el HID es lento, pero mi aplicacion solo requiere 9600 baudios.
Estube mirando el FT232 pero preferiria usar un PIC18 como el 2550, ya que dentro de la aplicacion estoy usando otro PIC16 para otras funciones y lo ideal seria integrar todo en un solo micro.

Gracias
 
buenos días Moyano Jonathan. estoy empezando a trabajar con el pic 18f4550 y la comunicación usb por medio de visual basic 6, ud puso un ejemplo en la pagina 6 el cual prende o apaga un led segun el pulsador, lo estube trabajando y me funciono perfectamente, pero ahora me gustaria hacer lo contrario, es decir enviar un dato ahora del Pic al PC tambien empleando visual basic.

si me podrias colaborar en decirme como se hace para enviar datos.

gracias
 
En el ejemplo 1, se hace la emulacion CDC con las señales TX y RX, que son las mas importantes. Sabes si se puede tambien obtener la señal DTR con estas librerias?
No he visto aplicaciones con CDC que la obtengan, es posible? solo necesito adicionalmente a las TX y RX la DTR.
Gracias
 
Hola!
Me estoy iniciando en PIC USB. Uso el 18F2550 programado en C18. Lo hice con CDC.
Cuando envío por el hyperterminal un determinado caracter, el ejemplo que hice en Proteus responde, pero cuando envio el caracter al PIC en el hardware este no responde. Puse el condensador de Vusb y no creo haber hecho algo mal. En el proteus me abre el COM7 y en el hardware el COM8. Tengo el PIC operando ya que hice que me prendiera un LED al iniciar.
Se les ocurre, que puede andar mal?
 
Gracias por tu respuesta Meta, pero no me funcionó. Puse que el VID sea 05F9 y el PID FFFF. Me imagino que no hay nada malo en esto, no? Otra duda: vi algunos programas de alto nivel en la PC para comunicarse con el PIC que utilizan el VID y PID y otros que no.
Por ejemplo, en el hypertermial me imagino que no se usa. Por qué es esto?
De todas formas, lo más importante para mí es poder hacer la comunicación. Si se les ocurre algo para ayudarme estaré muy agradecido.
Saludos
 
Respondiendo sus preguntas:
buenos días Moyano Jonathan. estoy empezando a trabajar con el pic 18f4550 y la comunicación usb por medio de visual basic 6, ud puso un ejemplo en la pagina 6 el cual prende o apaga un led segun el pulsador, lo estube trabajando y me funciono perfectamente, pero ahora me gustaria hacer lo contrario, es decir enviar un dato ahora del Pic al PC tambien empleando visual basic.

si me podrias colaborar en decirme como se hace para enviar datos.

gracias

Buscá en todas lás páginas del post hay ejemplos de sobra para lo que vos querés hacer. Hay ejemplos tanto con modo CDC así como también en HID.

En el ejemplo 1, se hace la emulacion CDC con las señales TX y RX, que son las mas importantes. Sabes si se puede tambien obtener la señal DTR con estas librerias?
No he visto aplicaciones con CDC que la obtengan, es posible? solo necesito adicionalmente a las TX y RX la DTR.
Gracias

No hay ningún ejemplo de USB que haya visto que tenga la señal DTR usando emulación CDC pero si usas la EUSART si lo vás a poder implementar.

Aquí dejo algo de información de USB.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1486

Puede ayudar mucho...
A ver si hacemos control de RELÉ de una vez.

Metá la controladora de 8 relés la postee hace ya bastante tiempo usando la clase HID y Visual basic 6.0. En estos momentos estoy viendo como hacer para hacer lo mismo en Visual C# lo cual de a poco lo estoy logrando.

Hola!
Me estoy iniciando en PIC USB. Uso el 18F2550 programado en C18. Lo hice con CDC.
Cuando envío por el hyperterminal un determinado caracter, el ejemplo que hice en Proteus responde, pero cuando envio el caracter al PIC en el hardware este no responde. Puse el condensador de Vusb y no creo haber hecho algo mal. En el proteus me abre el COM7 y en el hardware el COM8. Tengo el PIC operando ya que hice que me prendiera un LED al iniciar.
Se les ocurre, que puede andar mal?

Proteus no es muy buen simulador a la hora de realizar la comunicación USB lo mejor es que probés tu circuito en un protoboard. Ahora puede ser también un problema de programación pero nunca he usado C18 solo C de CCS.


Gracias por tu respuesta Meta, pero no me funcionó. Puse que el VID sea 05F9 y el PID FFFF. Me imagino que no hay nada malo en esto, no? Otra duda: vi algunos programas de alto nivel en la PC para comunicarse con el PIC que utilizan el VID y PID y otros que no.
Por ejemplo, en el hypertermial me imagino que no se usa. Por qué es esto?
De todas formas, lo más importante para mí es poder hacer la comunicación. Si se les ocurre algo para ayudarme estaré muy agradecido.
Saludos

Si estás usando CDC no importa el VID PID que le pongas va a funcionar igual. Si usas CDC en el hyperterminal lo único que tenés que configurar es el número del puerto que tenés y la velocidad de comunicación.
Cualquier cosa que no te funcione acá en este post el tema de CDC está más que explicado con muchos ejemplos de comunicación, aunque acordate que todos los programas para el PIC están en C de CCS.
 
Gracias por tu respuesta Moyano. Compré otro PIC y tampoco funcionó.
Cuando pongo el osciloscopio en D+ o D- y envío un dato por el hyperterminal no varía nada. Siempre veo una señal cuadrada invariante. Saben si puede estar el error acá? Enque no "salgan" datos del PC? Tengo Win XP SP-3
Voy a seguir probando y cuando lo resuelva les aviso.
Saludos
 
Bueno, muchas gracias. Posteo el código. En sí el stack y demás es muy grande. Lo que iimporta es el main.c, hardwareprofile.h y algún otro archivo.
Mi main lo que hace es en ProcessIO() es esperar el 1 ASCII.
Muchas gracias y espero que puedan ayudarme.
No uso el CCS, no es nada en especial. Uso mucho el MikroC y me llevo bien con él. Tomé la decición de hacer USB en C18 para aprender más y luego hacer Ethernet en C18. No es muy justificable pero así lo voy a hacer si es que no sigo tan trancado.
Gracias y saludos
 

Adjuntos

  • pic_usb_143.rar
    183.3 KB · Visitas: 380
Bueno, muchas gracias. Posteo el código. En sí el stack y demás es muy grande. Lo que iimporta es el main.c, hardwareprofile.h y algún otro archivo.
Mi main lo que hace es en ProcessIO() es esperar el 1 ASCII.
Muchas gracias y espero que puedan ayudarme.
No uso el CCS, no es nada en especial. Uso mucho el MikroC y me llevo bien con él. Tomé la decición de hacer USB en C18 para aprender más y luego hacer Ethernet en C18. No es muy justificable pero así lo voy a hacer si es que no sigo tan trancado.
Gracias y saludos
PD, estoy con problemas para adjuntar. Lo adjunto en el próximo mensaje
 
Estuve analizando tu código pero no pude encontrar el error además las librerías de C18 para USB son más complejas que las de CCS y no logro entender las funciones. Por eso aunque te paresca molesto te va a ser menos complejo pasarte a CCS que entender tu error en C18
 
Hola Moyano, primeramente quiero felicitarte y agradecerte por este post; he tenido bastante tiempo rompiendome la cabeza con la lectura de datos proporcionados por un micro hacia un PC y no había podido avanzar mucho; con los ejercicios que posteaste (particularmente el N° 5) he logrado por fin comprender lo suficiente como para adelantar bastante en mi proyeco de fin de carrera; sin embargo, hay algo con lo que no he podido. En tu ejercicio N° 5, si quiero medir en la PC el voltaje de entrada del ADC, aplico la siguiente formula; v_adc*5/1024 y el resultado es la medida del voltaje de entrada; ahora bien, siendo una entrada maxima de 5V, no tengo problemas para leerla hasta 2.5V, leyendose en el programa de Vb el valor 255; a partir de este valor, comienza a mostrarme en la pantalla de Vb valores menores; de hecho, he observado que si por ejemplo, el voltaje de entrada en el ADC es de 2.9V, en la pantalla de Vb me mostrará 44 (o algo muy aproximado); pareciera que me mostrara la diferencia entre 255 y el valor que estoy leyendo. Observo que en el ejemplo me dice que toma la parte baja del valor leido, pero no se como tomar el valor completo, o en cualquier caso, tomar (y enviar) aparte el valor alto para luego concatenarlos (o sumarlos) en la aplicación de Vb. Una solución no muy satisfactoria para 5 V, es multiplicar el valor obtenido por 10; esto me permite tener una cifra significativa y un decimal, pero debería trabajar, en realidad, con por lo menos 2 cifras enteras y 2 decimales. ¿tienes alguna idea de como solucionar esto? De antemano, muchisimas gracias
 
Atrás
Arriba