Autor Tema: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)  (Leído 126973 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #75 en: 01 de Agosto de 2007, 01:49:59 »
No confundir con el pin Vusb del PIC, cuya única función es la de regular la tensión interna del PIC para trabajar en modo USB y que irremediablemente llevará un condensador tirado a masa de 220nF como mínimo.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #76 en: 01 de Agosto de 2007, 02:12:30 »
Cierto, Manolo.

El Pin del PIC para regular la tensión de la alimentación del módulo USB se llama VUsb y lleva como bien dices un condensador a masa.

El Pin del conector USB que trae la alimentación del bus USB se llama VBus y es al que me refiero en mi post que puede utilizarse para hacer las funciones de Vcc.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado IBOT

  • PIC10
  • *
  • Mensajes: 2
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #77 en: 01 de Agosto de 2007, 17:11:34 »
ahora entiendo gracias por su ayuda, ahora tendre ke buskar un lugar donde vendan el pic ya ke aka hay muy pokos lugares donde los venden. :(

Desconectado LoPiTaL

  • PIC12
  • **
  • Mensajes: 73
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #78 en: 04 de Noviembre de 2007, 10:19:32 »
Hola. Tenía un pequeño problema, y es que no consigo que el ordenador me detecte el PIC cuando lo conecto. Me explico: he probado varios programas de los que habeis presentado, siguiendo el manual ese de pdf y tras muchos intentos he logrado que funcione correctamente. Sin embargo, cuando modifico algo en el programa y lo vuelvo a enchufar, a veces me lo detecta y a veces no (y lo malo es que la mayoría de veces es que no) y eso que he tenido especial cuidado con lo de la división del reloj (uso un cristal de 12 MHz y divido por 3 para conseguir los 4 MHz). No se por qué, pero creo que es debido al reloj, pero no sé qué es, les agradecería mucho una ayudita o algún consejo para montar el circuito... Lo estoy probando directamente en protoboard, sin usar entrenadores ni cosas así...

También me preguntaba si existe la combinación Oscilador Interno + USB (he leido el datasheet pero la verdad es que no me ha quedado muy claro), así me aseguraría que el reloj va bien...

Aquí les dejo el programa que estaba probando ahora por si fuese problema software y no hardware, aunque en verdad me ha pasado con todos los programas con los que he probado (no hagan caso de lo de comunicar con otro pic, porque aún no he llegado a probar esa fase, tan sólo estoy intentando conectar el USB):

Citar
'Enciende dos leds conectados al cerebro central y uno situado en la estación base
'Conexion:
'   PIN B0: reloj.
'   PIN B1: datos.
'   PIN B2: LED estación base.

DEFINE OSC 48         
DEFINE LOADER_USED 1

USBBufferSizeMax   con 8  ' maximum buffer size
USBBufferSizeTX    con 8  ' input
USBBufferSizeRX    con 8  ' output

' the USB buffer...
USBBuffer        Var Byte[USBBufferSizeMax]
USBBufferCount   Var Byte

'Variables propias
i                VAR BYTE
aux              VAR BYTE
auxBit           var bit
estadoled        VAR bit
orden            VAR byte

' ************************************************************
' * main program loop - remember, you must keep the USB      *
' * connection alive with a call to USBService every couple  *
' * of milliseconds or so...                                 *
' ************************************************************

TRISB=0         'B0 y B1 como salidas, B2 y B3 como entradas y el resto,
                'como da igual(no las usaremos), salidas.
PORTB=0

usbinit ' initialise USB...
ProgramStart:
   gosub DoUSBIn
   
   'Cuando se emita una orden nueva, en USBBuffer[4] tendremos un 1. La orden
   'nueva será transmitida por USBBuffer[5]. Para el caso de los LEDs: 1->LED 1
                                                                    '  2->LED 2
   'Si de lo que se trata es de una orden para la estación base, en USBBuffer[5]
   'tendremos un 2. La orden será encender o apagar un LED situado en el pin 2 del puerto B
       USBSERVICE
       IF USBBuffer[4]=1 THEN   'Es una orden para el robot
            GOSUB EnvioDato   
       else                     
            if usbbuffer[4]=2 then 'USBBuffer[4]=2 -> Es una orden para la estación base.
                if estadoled=1 then
                    PORTB.2=0
                    estadoled=0
                else
                    PORTB.2=1
                    estadoled=1
                endif
            Endif
   
       endif
   
   'gosub DoUSBOut Por ahora no hace falta, dado que no enviamos nada al ordenador.
   goto ProgramStart 

' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
DoUSBIn:
   USBBufferCount = USBBufferSizeRX              ' RX buffer size
   USBService                                    ' keep connection alive
   USBIn 1, USBBuffer, USBBufferCount, DoUSBIn   ' read data, if available
   return
   
' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
DoUSBOut:
   USBBufferCount = USBBufferSizeTX              ' TX buffer size
   USBService                                    ' keep connection alive
   USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data
   return


'Comunicación serie a dos hilos sin comprobación de escritura.
'El reloj se mandará por el pin 0 y el dato por el pin 1, ambos del puerto B

EnvioDato:
    orden=USBBUFFER[5]
    'Enviamos los datos:
    aux=1       'aux solo tendrá un bit activo cada vez. De esta forma y mediante la AND
                'podemos saber qué bit debemos mandar cada vez.
                'Mandamos primero el bit MENOS significativo (LSB).
               
    FOR i=1 TO 8 STEP 1
        usbservice      'Mantenemos la conexión con el USB activa
        if (AUX and orden)=0 then    'Calculamos el bit que se debe enviar
            auxBit=0
        ELSE
            auxBit=1
        endif
           
        PORTB.1=auxBit   'Enviamos primero el dato y después activamos el reloj.
        PORTB.0=1        'Activamos el reloj.
       
        'Esperamos un tiempo prudencial y deshabilitamos el reloj.
        pause 100
        usbservice
        PORTB.0=0
       
        aux=aux*2 'Hacemos un desplazamiento a la izquierda para preparar el siguiente dato.
       
    NEXT i   
RETURN

Muchas gracias de antemano,

LoPiTaL
Hoy soy yo quién pregunta. Mañana seré quien conteste...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #79 en: 04 de Noviembre de 2007, 11:54:15 »
Hola:

Ten cuidado con las pausas de tiempos grands y recuerda llamar constantemente a USBSERVICE, el pause 100 te puede causar problemas, mejor haz un bucle con pausas mucho más pequeñas y dentro del bucle llama a USBSERVICE, o si quieres evitarte eso, usa un timer, y cuando se desborde llamas a usbservice.

Desconectado LoPiTaL

  • PIC12
  • **
  • Mensajes: 73
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #80 en: 04 de Noviembre de 2007, 17:19:11 »
Ok, gracias. Sin embargo no creo que el problema esté ahí (al menos de momento), ya que tan sólo me he centrado en encender el led en la "estación base" (USBBuffer[4]=2) y no entra en la rutina de EnvioDato (o, al menos, no debería).

¿A nadie le ha ocurrido esto: cada vez que conecto el USB, el ordenador no reconoce el dispositivo? A mi esque es muy curioso, ya que probando con el programa de encender/apagar un led normal y corriente, al principio no me iba, y tras varias pruebas funcionó, y lo único que cambié entre prueba y prueba fue el cristal y los condensadores conectados a él... ¿Realmente el cristal este es tan sensible como para que se aprecie el ponerlo girado, un poco sacado, moverlo un poco? ¿O es que estoy haciendo algo mal y no lo veo?

Toda ayuda se agradece,

LoPiTaL
Hoy soy yo quién pregunta. Mañana seré quien conteste...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #81 en: 04 de Noviembre de 2007, 18:44:44 »
Hola:

Recuerda que estás armando el circuito en el protoboard, mira que todos los cables estén bien conectados y que el conector sobretodo no esté "bailando".

Desconectado LoPiTaL

  • PIC12
  • **
  • Mensajes: 73
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #82 en: 05 de Noviembre de 2007, 18:36:20 »
Ok, probaré de montarlo en una placa de esas que ya vienen perforadas y que se tiran las pistas con estaño (xD no recuerdo el nombre....) y a ver si lo detecta bien....

Muchas gracias y ya comentaré si avanzo bien o que...

LoPiTaL
Hoy soy yo quién pregunta. Mañana seré quien conteste...

Desconectado LoPiTaL

  • PIC12
  • **
  • Mensajes: 73
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #83 en: 07 de Noviembre de 2007, 19:17:54 »
Ya he hecho el montaje en plaquita y funciona a las mil maravillas!!!!!  :lol: :lol: :lol:

Gracias por el consejo, ya puedo seguir trasteando :D
Hoy soy yo quién pregunta. Mañana seré quien conteste...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #84 en: 08 de Noviembre de 2007, 11:53:22 »
Hola:

Me alegra, y el consejo fué porque ya viví algo como eso :D

Desconectado J_jOsE

  • PIC12
  • **
  • Mensajes: 57
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #85 en: 20 de Noviembre de 2007, 12:32:48 »
hola a todos
bueno, escribo para pedirles un favor. :(
Necesito hacer un proyecto utilizando el puerto USB del PIC18F4550
y no se si me podrían ayudar,  no se si tuvieran algun tutorial o  ejemplos
para leerlos y asi poder entender con mayor facilidad.
De antemano les agradezco esperando una respuesta pronta
No Pain No Gain

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #86 en: 20 de Noviembre de 2007, 14:36:18 »
Hola, toda la informacion y ejemplos esta en este tema por favor, leelo desde el principio.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Jorge XV

  • PIC10
  • *
  • Mensajes: 2
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #87 en: 03 de Diciembre de 2007, 14:01:38 »
Antes que nada me presento.... :)
Me llamo Jorge Mariani ...Soy de Argentina y desde hace 1 mes que venia buscando la manera de manejar dispositivos externos desde la PC a travez del USB.

Ya me estaba dando por vencido al ver la complejidad del manejo interno en los Microcontroladores en lo que a USB se refiere....hasta que encontre el Proyecto del Amigo Giovanni Lafebre que represento una tabla de salvacion para mi :)

Ante todo...GRACIAS GIOVANNI Y FELICITACIONES por tu Exelente Tutorial de como utilizar esas exelentes librerias que genera EasyHid !!!!!!
Sin ellas...conectar un microcontrolador a una PC por USB seria todo un suplicio  :mrgreen:

Para compensar tanta ayuda desinteresada a los que como yo estabamos en aprietos  :mrgreen:...voy a contribuir con algunos datos que logre averiguar investigando un poquito.... 8)

El problema que se les presento a Alejandro y a Alberto...tambien se me presento a mi....y pude averiguar que la causa no estaba radicada en el Pic Basic Pro del cual yo tambien consegui la version 2.46...sino en el MPASM cuya version mas nueva que es la unica que pude conseguir actualmente en Internet...es la causante de dichos problemas  8)

El error al compilar con el MPASM nuevo se produce por 2 causas....Una la descubri y la otra tuve que conformarme con hacer lo que sugiere Alberto

El Error en la linea :

_CONFIG _CONFIG4L, _LVP_OFF_4L & _ICPRT_OFF_4L & _XINST_OFF_4L

se produce por la faltante de 2 lineas de codigo en ...18F2550.INC del MPASM nuevo que configuran ICPRT
Solo hay que agregar dichas lineas como lo hice yo y no aparecera dicho error al ensamblar

Editar el archivo 18F2550.INC del nuevo MPASM....ir hasta donde estan estas lineas.....
Citar
;----- CONFIG4L Options --------------------------------------------------
_STVREN_OFF_4L       EQU  H'FE'    ; Stack full/underflow will not cause Reset
_STVREN_ON_4L        EQU  H'FF'    ; Stack full/underflow will cause Reset   

_LVP_OFF_4L          EQU  H'FB'    ; Single-Supply ICSP disabled
_LVP_ON_4L           EQU  H'FF'    ; Single-Supply ICSP enabled

_XINST_OFF_4L        EQU  H'BF'    ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
_XINST_ON_4L         EQU  H'FF'    ; Instruction set extension and Indexed Addressing mode enabled

_DEBUG_ON_4L         EQU  H'7F'    ; Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
_DEBUG_OFF_4L        EQU  H'FF'    ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins

y agregar las 2 lineas faltantes...quedando asi :

Citar
;----- CONFIG4L Options --------------------------------------------------
_STVREN_OFF_4L       EQU  H'FE'    ; Stack full/underflow will not cause Reset
_STVREN_ON_4L        EQU  H'FF'    ; Stack full/underflow will cause Reset

_LVP_OFF_4L          EQU  H'FB'    ; Single-Supply ICSP disabled
_LVP_ON_4L           EQU  H'FF'    ; Single-Supply ICSP enabled

_ICPRT_OFF_4L        EQU  H'DF'    ; ICPORT disabled
_ICPRT_ON_4L         EQU  H'FF'    ; ICPORT enabled

_XINST_OFF_4L        EQU  H'BF'    ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
_XINST_ON_4L         EQU  H'FF'    ; Instruction set extension and Indexed Addressing mode enabled

_DEBUG_ON_4L         EQU  H'7F'    ; Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
_DEBUG_OFF_4L        EQU  H'FF'    ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins

y CHAU ERROR  :-/

Entonces lo unico que tuve que cambiar en el 18F2550.INC del Pic Bacic Pro fue el reemplazar W= -311 por W= -230 como indico Alberto...y con esto...tampoco hubo WARNINGS  :mrgreen:

En sintesis .....
Editando el 18F2550.INC del MPASM agregando las 2 lineas del _ICPRT....y Editando el 18F2550.INC del PBP cambiando 311 por 230 ....pude compilar y ensamblar el proyecto y generar el .HEX

Por ultimo...me gustaria saber si alguien me puede decir en que puede afectar el cambio de w = -230 en lugar de w = -311
Muchas gracias a todos por lo que me han enseñado...especialmente a Giovanni...y desde ahora paso a ser un humilde colaborador mas a sus servicios

Gracias...y suerte a todos en sus proyectos :)



« Última modificación: 03 de Diciembre de 2007, 14:12:02 por Jorge XV »

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #88 en: 04 de Diciembre de 2007, 17:27:17 »
Hola:

Finalmente luego de 10 amargos días sin internet  :5] he solucionado el problema y de regreso por aquí.


Me alegro que solucionaste tu problema y ya tienes bien tu proyecto....  :-/ :-/

Desconectado Jorge XV

  • PIC10
  • *
  • Mensajes: 2
Re: USB y PBP empecemos un tutorial entre todos (CON EJEMPLOS)
« Respuesta #89 en: 09 de Diciembre de 2007, 01:29:54 »
Jaja...Gracias Giovanni  8) y me alegro de que estes Internetizado de nuevo  :D

Me fue muy util todo lo que aprendi de tus proyectos en tu pagina y lo que pude leer en el viejo y nuevo Foro

Mi proyecto actual se basa en discar DTMF hacia la linea desde la PC por USB y lo consegui manejando un CI discador HT9200 desde el puertoB del pic 18F2550 de tu proyecto enviando los numeros desde un programa en VB6

El tema es que descubri que el mismo PIC puede discar en DTMF utilizando la instruccion DTMFOUT del PBP...la cual es muy sencilla de usar y simplificaria el circuito  :mrgreen:

PEEEEEROOOOOO   :D Hay un pequeño problemilla  :mrgreen:

El Manual del PBP recomienda que para que funcione bien DTMFOUT...el PIC debe trabajar con un cristal de 20 Mhz o a lo sumo 10 Mhz y cualquier otra frecuencia produciria un desvio  que haria fallar el discado  :?

Mi pregunta para ti es......

¿ Puede trabajar ese mismo circuito tuyo con un cristal de 20 Mhz en lugar de 12 Mhz sin afectar la conexion USB ?
En dicho caso...¿ que habria que modificar en el programa del PBP o en el Programador del PIC ?

Desde ya te estare muy agradecido si me ayudas con esto

y desde ya puedes contar conmigo tu y los demas del Foro por cualquier tema relacionado a Interfaces electronicas que es mi tema predilecto

Gracias por todo  ;-)

Posdata : !!! FELICES FIESTAS !!!  :x)


 

anything