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

lo uso para detectar cuando se conecta el USB a la computadora!!!
y caundo se desconecta el USB este me detecte que se desconecto,
...
usas un capacitor electrolitico o ceramico en el pin VUSB?
estoy usando uno ceramico....como tienes el esquema..me lo podrias poner para ver que tengo mal...y si tengo una resistencia en Vpp...y un capacitor s eme olvido ponerlo en el esquema..jejejje...saludos!!
 
lo uso para detectar cuando se conecta el USB
usas un capacitor electrolitico o ceramico en el pin VUSB?
estoy usando uno ceramico....como tienes el esquema..me lo podrias poner para ver que tengo mal...y si tengo una resistencia en Vpp...y un capacitor s eme olvido ponerlo en el esquema..jejejje...saludos!!
Un electrolítico de 47 uF.
Saludos.
 
Hola buenas, tengo el siguiente problema al realizar una interrupcion por timer con el pic 18f4550 aver si alguien puede ayudarme a encontrar el problema. El problema es que el timer interrumpe un nº muy bajo de veces (17 veces en mi caso) y se queda sin interrumpir mas,no consigue llegar al final del contador (0xff). el esquema que tengo es el siguiente:

Código:
   int32 const num_int=0xff;
   int32 tiempo=0;
   int8 modo_sleep;

#int_timer1
void diezsegundos()
   {
      if (tiempo>num_int)
         {
            modo_sleep=false;               
            tiempo=0;
         }
      else
         {
            modo_sleep=true;
            tiempo++;
         }
      clear_interrupt(int_timer1);
   }



void main(void) 
   setup_timer_1(t1_internal | t1_div_by_8);
   set_timer1(0);
   enable_interrupts(int_timer1);
   enable_interrupts(GLOBAL);  

while (TRUE)
   {
   while (modo_sleep)
      {
         sleep();
      }

   // RESTO DE PROGRAMA

   

   }
Gracias de antemano.
 
amigos me hace falta salir de una duda:que ventaja tiene programar en c para pic y no en esamblador. mi pregunta es si puedo hacer lo mismo que hago en ensamblador lo puedo hacer en c para pic.Yo se que en ensamblador es mas dificil programar el usb pero tiene que tener sus ventajas, yo se algunas , pero necesito el criterio de algunos de ustedes. gracias de antemano.lo pregunto porque yo programo el usb en ensamblador puro con datasheet y el standard en la mano .
 
Y si tenés ejemplos hechos en ensamblador con USB bunísimo...las ventajas es que con ensamblador vos sabés y tenés control de lo que hace el micro en cada momento...aunque hay cosas muy complicadas como tratamiento de arrays...funciones matemáticas y demás cosas que en ensamblador es demasiado complejo de hacer.
 
Ya eh entendido mas el concepto del C, pero tengo problemas en conseguir el CSS, no sabras donde esta disponible alguna pagina por ejemplo, Muchas gracias por el tema.
 
Hola, Moyano Jonathan!

En primer lugar excusa la falta de hablar español (es traducida por Google), en segundo lugar, me gustaría decirles que este post sobre HOST / USB / PIC es magnífico.
En su primer ejercicio, me di cuenta de que muchas veces si se selecciona la misma opción (por ejemplo, 'x') y luego seleccionar la opción de otra ( 'a') falta de respuesta a la primera vez (que se muestra "Se recibe el caracter x") .
¿Sabes por qué sucede esto?

Gracias,
CManl
Portugal
 
hola a todos, está genial este post, yo tengo buenos conocimientos de programacion pero lo que es soldar, mas bien pocos, si alguno me indica donde podría conseguir una placa para el PIC18F2550 que tenga conector usb y a poder ser algo que permita conectar facilmente un cable a los pines de e/s del pic, me interesaria poder controlar una serie de reles y recibir informacion de un par de sensores, necesito conectarlo al pc para visualizar el estado de los puertos del pic y modificar en tiempo real algunos parametros.

Les agradeceria que me dijesen donde puedo conseguir una placa de este tipo y, si hay alguien que se maneje bien con un estañador, no me importaria pagarle para que me haga la placa (que me envie un privado), repito que de soldar ando muy mal.

Un saludo a todos.
 
saludos moyano? he estado haciendo mas ejemplos del HID basados en tus ejemplos
pero me he encontrado con un problema y es ke solo puedo enviar 2 bytes
mi pregunta es donde tengo ke modificar los descriptores para poder enviar mas de 2 bytes
 
Es verdad,yo tambien ando con finales para dar,y me engancho mucho a hacer cosas que es mas divertido que estudiar a veces. Aunque sea que lo tenga para el arbolito : )
 
jaajjaajj me recibí el lunes...asi que estoy mas liberado ahora....el gran tema es que se me rompió la notebook y voy a tener que usar la computadora de la familia pero buee...de a poco lo voy a ir haciendo o terminando mejor dicho.

Y si como dice meta....las obligaciones y la vida social (asados, mujer, amigos y demás) demandan un cierto tiempo. Pero no se preocupen que yo no prometo en vano si dije que lo iba a terminar lo voy a terminar
 
jaajjaajj me recibí el lunes...asi que estoy mas liberado ahora....el gran tema es que se me rompió la notebook y voy a tener que usar la computadora de la familia pero buee...de a poco lo voy a ir haciendo o terminando mejor dicho.

Y si como dice meta....las obligaciones y la vida social (asados, mujer, amigos y demás) demandan un cierto tiempo. Pero no se preocupen que yo no prometo en vano si dije que lo iba a terminar lo voy a terminar
Enhorabuena che! Felicitaciones! Ingeniería E. no?
Saludos.
 
Hola a todos (y)
Como había citado antes voy a proseguir con mi manual sobre el puerto USB y el control de dispositivos mediante USB.
Como he tenido muy poco tiempo con todas las cosas q he tenido que hacer el manual quedó de lado ..pero he comenzado mis vacaciones de verano asi que voy a seguir con esto a ver si puedo terminarlo :D

Lo primero que quedó pendiente desde antes de que dejara todo fue el pasaje de todos los ejemplos de VB 2005 a VB.net y VC# 2008, Así que ahora vamos a comenzar con la ayuda de ustedes a pasar los programas uno por uno.

Como varios de mis conocimientos se borraron cuando formateé mi computadora debido a un virus que le entró a mi máquina, voy a necesitar de su ayuda para poder ver algunos tips de programación que no me acuerdo.

Vamos a empezar con el sistema de emulación CDC usando un PIC18F2550, programación en C de CCS y Programación en VC# y VB.net para la PC.

Como hardware usaré mi entrenador USB.

El programa que se desarrollará tendrá los siguientes elementos:

- Detección automática de puertos y selección de puerto a utilizar mediante un ComBox.
- Envio y recepción de datos : Control de 8 cargas y Lectura de 8 entradas.
- Lectura de 3 entradas analógicas.
- Vizualización de datos desde el PIC: Mensajes y alertas así como debug de la programación.
- Conexión y desconexión del puerto en caliente.

Yo comenzaré desde mañana con el desarrollo del programa y de a poco lo iremos desarrollado en conjunto con toda la documentación que estará en el manual.

Luego seguiremos con las otras formas de comunicación.

Un saludo ! (y)

Los programas serán código abierto para que cualquiera pueda añadir sus ideas al proyecto para poder mejorarlo ...asi también los ejemplos los compilare para .net frameworck 2.0 para winXP ...también funcionará en vista y en windows 7
 
Última edición:
Me alegro que tengas tiempo y sigas adelante. En estos momentos estoy haciendo la versión V2 del PicRS232.

Voy a intentar ayudar en C# y después lo pasamos a VB .net si le interesa.

He logrado hacer la detección del puerto serie hasta los virtuales, no se si en USB es un tema diferente.




El programa que se desarrollará tendrá los siguientes elementos:

- Detección automática de puertos y selección de puerto a utilizar mediante un ComBox.

En puerto serie lo tengo hecho. Averiguaré si USB es algo parecido.

Código:
#region Configurar puerto serie.

        private void SeleccionCambiada(object sender, EventArgs e)
        {

            // Deberemos añadir un control de excepciones si queremos capturar posibles errores



            // Para reasignar valores... primero cerrar el puerto
            serialPort1.Close();

            // Asignar los nuevos Settings
            serialPort1.BaudRate = Convert.ToInt32(comboBox_bits_por_segundo.Text);
            try
            {
                serialPort1.DataBits = Convert.ToInt16(comboBox_bits_de_datos.Text);
            }
            catch (FormatException)
            {
                //label_info.Visible = true;
                //label_info.Text = "No se usa este parámetro.";
            }
            serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox_paridad.Text);
            serialPort1.Handshake = (Handshake)Enum.Parse(typeof(Handshake), comboBox_control_de_flujo.Text);

            try
            {
                serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), comboBox_bits_de_parada.Text);
            }
            catch (ArgumentOutOfRangeException)
            {
                // No se puede poner None.
                //label_info.Visible = true;
                //label_info.Text = "Inválido al introducir el valor 'None'.";
            }

            serialPort1.Open();


        }
        #endregion

        private void comboBox_puerto_com_SelectedIndexChanged(object sender, EventArgs e)
        {
            serialPort1.Close();
            serialPort1.PortName = comboBox_puerto_com.SelectedItem.ToString();
            serialPort1.Open();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Asignar las Velocidades seleccionables al Combo
            object[] Velocidades = { 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 };
            comboBox_bits_por_segundo.Items.AddRange(Velocidades);

            object[] BitData = { 8, 7, 6 };
            comboBox_bits_de_datos.Items.AddRange(BitData);

            // Asignar Paridades Seleccionables desde la enumeracion
            foreach (string s in Enum.GetNames(typeof(Parity)))
            {
                comboBox_paridad.Items.Add(s);
            }

            // Asignar Bits de datos seleccionables desde la enumeración.
            foreach (string b in Enum.GetNames(typeof(SerialData)))
            {
                comboBox_bits_de_datos.Items.Add(b);
            }

            // Asignar Paridades Seleccionables desde la enumeracion
            foreach (string p in Enum.GetNames(typeof(StopBits)))
            {
                comboBox_bits_de_parada.Items.Add(p);
            }

            // Asignar control de flujo Seleccionables desde la enumeracion.
            foreach (string c in Enum.GetNames(typeof(Handshake)))
            {
                comboBox_control_de_flujo.Items.Add(c);
            }

            // GetPortNames, nos devuelve un array con los nombres
            // de los puertos instalados en nuestro equipo.
            String[] Ports = SerialPort.GetPortNames();
            comboBox_puerto_com.Items.AddRange(Ports);


            // Seleccionar los items por defecto
            comboBox_bits_por_segundo.SelectedIndex = 4; // Empieza con el 9600 como predeterminado.
            comboBox_bits_de_datos.SelectedIndex = 0; // 8.
            comboBox_paridad.SelectedIndex = 0; // None o ninguno.
            comboBox_bits_de_parada.SelectedIndex = 2; // One o 1.
            comboBox_control_de_flujo.SelectedIndex = 0; // None o ninguno.
            comboBox_puerto_com.SelectedIndex = 0;

            // Abrir el puerto serie con los items por defecto
            SeleccionCambiada(sender, e);

            // Asignar la funcion a ejecutar por disparo de evento al cambio de indice en el combobox
            comboBox_bits_por_segundo.SelectedIndexChanged += new System.EventHandler(SeleccionCambiada);
            comboBox_bits_de_datos.SelectedIndexChanged += new System.EventHandler(SeleccionCambiada);
            comboBox_paridad.SelectedIndexChanged += new System.EventHandler(SeleccionCambiada);
            comboBox_bits_de_parada.SelectedIndexChanged += new System.EventHandler(SeleccionCambiada);
            comboBox_control_de_flujo.SelectedIndexChanged += new System.EventHandler(SeleccionCambiada);
            comboBox_puerto_com.SelectedIndexChanged += new System.EventHandler(SeleccionCambiada);

            // Cargar los datos del XML.
            Cargar_XML();
        }


- Envio y recepción de datos : Control de 8 cargas y Lectura de 8 entradas.

¿Te refieres con Visual C# o VB .net? En ese sentido espero que venga alguien o lo resolvemos entre todos pero debes ser más técnico.

- Lectura de 3 entradas analógicas.

No me he metido en ese campo.

- Vizualización de datos desde el PIC: Mensajes y alertas así como debug de la programación.

Explicado en la página 163 del manual. Descargar ejemplo aquí.

- Conexión y desconexión del puerto en caliente.

mmmmmmmm...

Ganas de aprender muchas, conocimientos pocos...

A ver si todos y todas aportamos algo, ese algo se convertirá en grande.

Saludo.