Conexion Al Puerto Usb Con Un Microcontrolador

653
UNIVERSIDAD DE SALAMANCA E.T.S. DE INGENIERÍA INDUSTRIAL DE BÉJAR DEPARTAMENTO DE FÍSICA APLICADA ÁREA DE TECNOLOGÍA ELECTRÓNICA TRABAJO FIN DE CARRERA CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR AUTOR: GUILLERMO DAVID HERRERO GONZÁLEZ TUTOR:  JOSÉ TORREBLANCA GONZÁLEZ BÉJAR  ,  JUNIO 2007 

Transcript of Conexion Al Puerto Usb Con Un Microcontrolador

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 1/651

UNIVERSIDAD DE SALAMANCA E.T.S. DE INGENIERÍA INDUSTRIAL DE BÉJAR

DEPARTAMENTO DE FÍSICA APLICADA ÁREA DE TECNOLOGÍA ELECTRÓNICA

TRABAJO FIN DE CARRERA

CONEXIÓN AL PUERTO USB

MEDIANTE UN

MICROCONTROLADOR

AUTOR: GUILLERMO DAVID HERRERO GONZÁLEZ

TUTOR: JOSÉ TORREBLANCA GONZÁLEZ

BÉJAR , JUNIO 2007

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 2/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 3/651

UNIVERSIDAD DE SALAMANCA E.T.S. DE INGENIERÍA INDUSTRIAL DE BÉJAR

DEPARTAMENTO DE FÍSICA APLICADA ÁREA DE TECNOLOGÍA ELECTRÓNICA

TRABAJO FIN DE CARRERA

CONEXIÓN AL PUERTO USB

MEDIANTE UN

MICROCONTROLADOR

AUTOR: GUILLERMO DAVID HERRERO GONZÁLEZ

TUTOR: JOSÉ TORREBLANCA GONZÁLEZ

BÉJAR , JUNIO 2007

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 4/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 5/651

D. Guillermo David Herrero González, autor del presente proyecto, comparte suautoría con su tutor D. José Torreblanca González, para los efectos que pudieranderivarse de su utilización para posteriores trabajos o proyectos fin de carrera.

Por lo tanto, tiene toda la autorización para poder reproducir, copiar y modificar dicho proyecto.

Béjar, Junio de 2007.

Fdo: D. Guillermo David Herrero González

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 6/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 7/651

v

ÍNDICE

A. MEMORIA 1. I ntr oducción_______________________________________________ 29

1.1. Objeto _____________________________________________________ 29

1.2. Descripción _________________________________________________ 29 1.2.1. Capítulo 2: Nociones Básicas De La Norma USB 2.0 ____________________30 1.2.2. Capítulo 3: Microcontroladores______________________________________30 1.2.3. Capítulo 4: Lenguaje De Programación C18____________________________30 1.2.4. Capítulo 5: Lenguaje De Programación Visual Basic_____________________30 1.2.5. Capítulo 6: Interconexión USB-PC___________________________________31 1.2.6. Capítulo 7: Aplicación_____________________________________________31 1.2.7. Cálculos________________________________________________________32 1.2.8. Planos _________________________________________________________32 1.2.9. Pliego De Condiciones ____________________________________________32 1.2.10. Condiciones ____________________________________________________32

2. Nociones Básicas De La Norma USB 2.0________________________ 35

2.1. Introducción ________________________________________________ 35 2.1.1. Motivación _____________________________________________________35

2.2. Vocabulario ________________________________________________ 36

2.3. Historia ____________________________________________________ 38 2.3.1. Utilización Prevista _______________________________________________38

2.4. Arquitectura ________________________________________________ 39 2.4.1. Descripción Del Sistema USB_______________________________________39 2.4.2. Arquitectura Del Bus______________________________________________39 2.4.3. Interfaz Física ___________________________________________________40

2.4.3.1. Aspecto Eléctrico _____________________________________________40 2.4.3.2. Alimentación ________________________________________________40 2.4.3.3. Consumo____________________________________________________40 2.4.3.4. Control De Consumo __________________________________________41 2.4.3.5. Protocolo Del USB____________________________________________41 2.4.3.6. Robustez____________________________________________________41 2.4.3.7. Detección De Errores __________________________________________42 2.4.3.8. Gestión De Errores____________________________________________42 2.4.3.9. Configuración Del Sistema______________________________________42 2.4.3.10.

Tipos De Transferencia _______________________________________43

2.4.3.11. Tipo Control________________________________________________43 2.4.3.12. Tipo Bulk __________________________________________________43 2.4.3.13. Tipo Interrupt _______________________________________________43 2.4.3.14. Tipo Isochronous ____________________________________________43 2.4.3.15. Asignación De La Banda De Paso _______________________________ 44 2.4.3.16. USB Device ________________________________________________44 2.4.3.17. Características De Un Periférico ________________________________44

2.5. Formatos De Los Paquetes ____________________________________ 45 2.5.1. Token__________________________________________________________45 2.5.2. Token Especial: Transacción Split ___________________________________45

2.5.2.1. Transacciones Split____________________________________________46 2.5.2.2. Paquetes Start-Of-Frame (SOF) __________________________________48

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 8/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

vi

2.6. Estados Del USB ____________________________________________ 49 2.6.1. Por Defecto _____________________________________________________50

2.6.2. Direccionado ____________________________________________________ 51 2.6.3. Configuración ___________________________________________________51

2.7. Enumeración Del Bus ________________________________________51

3. M icrontroladores___________________________________________ 55

3.1. Introducción A Los Microcontroladores _________________________55 3.1.1. Controlador Y Microcontrolador_____________________________________55 3.1.2. Diferencia Entre Microprocesador Y Microcontrolador ___________________56 3.1.3. Aplicaciones De Los Microcontroladores______________________________57 3.1.4. El Mercado De Los Microcontroladores_______________________________ 58

3.2. ¿Qué Microcontrolador Emplear?______________________________ 59 3.2.1. Recursos Comunes A Todos Los Microcontroladores ____________________61

3.2.1.1. Arquitectura Básica ___________________________________________61 3.2.1.2. El Procesador O CPU__________________________________________62 3.2.1.3. Memoria____________________________________________________ 62 3.2.1.4. ROM Con Máscara____________________________________________63 3.2.1.5. OTP _______________________________________________________63 3.2.1.6. EPROM ____________________________________________________63 3.2.1.7. EEPROM ___________________________________________________64 3.2.1.8. FLASH_____________________________________________________64 3.2.1.9. Puertos De Entrada Y Salida ____________________________________65 3.2.1.10. Reloj Principal ______________________________________________65

3.2.2. Recursos Especiales ______________________________________________65 3.2.2.1. Temporizadores O “Timers” ____________________________________66 3.2.2.2. Perro Guardián O “Watchdog”___________________________________66 3.2.2.3. Protección Ante Fallo De Alimentación O “Brownout” _______________66 3.2.2.4. Estado De Reposo O De Bajo Consumo ___________________________66 3.2.2.5. Conversor A/D (CAD) _________________________________________67 3.2.2.6. Conversor D/A (CDA) _________________________________________67 3.2.2.7. Comparador Analógico ________________________________________67 3.2.2.8. Modulador De Anchura De Pulsos O PWM_________________________67 3.2.2.9. Puertos De E/S Digitales _______________________________________67 3.2.2.10. Puertos De Comunicación _____________________________________68

3.2.3. Herramientas Para El Desarrollo De Aplicaciones _______________________ 68 3.2.3.1. Desarrollo Del Software: _______________________________________68

3.3. La Familia De Los PIC Como Elección __________________________69 3.3.1. Características Relevantes__________________________________________70

3.3.1.1. Arquitectura _________________________________________________70 3.3.1.2. Segmentación ________________________________________________71 3.3.1.3. Formato De Las Instrucciones ___________________________________71 3.3.1.4. Juego De Instrucciones_________________________________________71 3.3.1.5. Todas Las Instrucciones Son Ortogonales __________________________71 3.3.1.6. Arquitectura Basada En Un “Banco De Registros” ___________________71 3.3.1.7. Diversidad De Modelos De Microcontroladores Con

Prestaciones Y Recursos Diferentes_______________________________71 3.3.1.8. Herramientas De Soporte Potentes Y Económicas____________________ 71

3.3.2. Las gamas de PIC ________________________________________________72 3.3.2.1. La Gama Enana: PIC12C(F)XXX De Terminales ____________________73 3.3.2.2. Gama Baja O Básica: PIC16C5X Con Instrucciones De 16bits__________ 74 3.3.2.3. Gama Media. PIC16CXXX Con Instrucciones De 16bits ______________76

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 9/651

GUILLERMO DAVID HERRERO GONZÁLEZ

vii

3.3.2.4. Gama Alta: PIC17CXXX Con Instrucciones De 16bits________________77 3.3.2.5. Gama Mejorada: PIC18FXXXX _________________________________78

3.4. Familia PIC18Fxx5x _________________________________________ 79 3.4.1. Diagrama de Pines________________________________________________79 3.4.2. Perspectiva General Del Dispositivo__________________________________81 3.4.3. Configuración Del Oscilador________________________________________90

3.4.3.1. Control Del Oscilador _________________________________________91 3.4.3.2. Tipos De Oscilador____________________________________________91

3.4.3.2.1. Modos Del Oscilador Y Operaciones Con El USB _______________91 3.4.3.2.2. XTAL/Resonadores Cerámicos ______________________________92 3.4.3.2.3. Señal De Reloj Externa_____________________________________93 3.4.3.2.4. Multiplicador De Frecuencia PLL ____________________________94 3.4.3.2.5. Bloque Interno Del Oscilador________________________________95

3.4.3.3. Configuración Del Oscilador Para El USB _________________________98 3.4.3.3.1. Operaciones Con Baja Velocidad (USB )_______________________99 3.4.3.3.2. Funcionamiento Diferente El Reloj Del USB Y

El Del Microcontrolador___________________________________100 3.4.3.4. Fuentes De Reloj Y Cambios De Oscilador ________________________100

3.4.3.4.1. Registros De Control Del Oscilador__________________________ 101 3.4.3.4.2. Transiciones Del Oscilador_________________________________102

3.4.3.5. Efecto De Los Modos De Control De Energía En VariasFuentes De Reloj ____________________________________________103

3.4.3.6. Retraso En El Inicio __________________________________________104 3.4.4. Modos De Control De Energía _____________________________________105

3.4.4.1. Seleccionar Los Modos De Control De Energía_____________________ 106 3.4.4.1.1. Fuentes Del Reloj ________________________________________106 3.4.4.1.2. Comienzo De Los Modos De Control De Energía _______________106 3.4.4.1.3. Transiciones De Reloj Y Puntero De Estado ___________________107 3.4.4.1.4. Múltiples Comandos SLEEP _______________________________107

3.4.4.2. Modos De Ejecución _________________________________________108 3.4.4.2.1. Modo PRI_RUN_________________________________________108 3.4.4.2.2. Modo SEC_RUN ________________________________________108 3.4.4.2.3. Modo RC_RUN _________________________________________109

3.4.4.3. Modo SLEEP _______________________________________________111 3.4.4.4. Modos De Reposo ___________________________________________112

3.4.4.4.1. Modo PRI_IDLE ________________________________________112 3.4.4.4.2. MODO SEC_IDLE_______________________________________113 3.4.4.4.3. Modo RC_IDLE_________________________________________114

3.4.4.5. Salir De Los Modos SLEEP Y Reposo ___________________________114 3.4.4.5.1. Salida Por Una Interrupción ________________________________ 115 3.4.4.5.2. Salida Por Desbordamiento Del WDT ________________________115 3.4.4.5.3. Salida Por Reset _________________________________________115 3.4.4.5.4. Salida Sin Un Retraso Del Inicio Del Oscilador_________________116

3.4.5. RESET________________________________________________________116 3.4.5.1. Registro RCON _____________________________________________117 3.4.5.2. Master Clear Reset (MCLR*) __________________________________119 3.4.5.3. Reset Por Subida De Tensión (POR) _____________________________ 119 3.4.5.4. Reset Por Cese De Tensión (BOR)_______________________________120

3.4.5.4.1. Software Que Activa El BOR_______________________________120 3.4.5.4.2. Detección Del BOR ______________________________________121 3.4.5.4.3. Desactivar BOR En El Modo SLEEP_________________________121

3.4.5.5. Contadores Del Reset _________________________________________121 3.4.5.5.1. Temporizador De Inicio (PWRT)____________________________122 3.4.5.5.2. Oscilador Temporizador De Arranque (OST) __________________122

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 10/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

viii

3.4.5.5.3. Temporizador Del Control De PLL __________________________122 3.4.5.5.4. Secuencia De Retraso _____________________________________122

3.4.5.6. Estado De Los Registros En Un Reset ____________________________ 123 3.4.6. Organización De La Memoria______________________________________123

3.4.6.1. Organización De La Memoria De Programa _______________________ 124 3.4.6.1.1. Contador De Programa____________________________________125 3.4.6.1.2. Devolver La Dirección De La Pila ___________________________125 3.4.6.1.3. Pila De Almacenamiento Rápido ____________________________ 128 3.4.6.1.4. Operaciones De Búsqueda En Las Tablas De

Memoria De Programa ____________________________________129 3.4.6.2. Ciclos Instrucción En Los PIC18 ________________________________ 130

3.4.6.2.1. Esquema De Reloj _______________________________________130 3.4.6.2.2. Instrucción Flow/Pipelining ________________________________ 130 3.4.6.2.3. Instrucciones En La Memoria De Programa____________________131 3.4.6.2.4. Instrucciones De Dos Palabras ______________________________ 131

3.4.6.3. Organización De La Memoria De Datos __________________________132 3.4.6.3.1. RAM Del USB __________________________________________134 3.4.6.3.2. Registro Selector Del Banco (BSR) __________________________ 134 3.4.6.3.3. Acceso Al Banco ________________________________________135 3.4.6.3.4. Registro De Archivos De Propósito General ___________________136 3.4.6.3.5. Registros De Función Específica ____________________________ 136 3.4.6.3.6. Registro STATUS________________________________________137

3.4.6.4. Modos De Direccionamiento De Los Datos________________________139 3.4.6.4.1. Direccionamiento Inherente Y Literal ________________________139 3.4.6.4.2. Direccionamiento Directo__________________________________139 3.4.6.4.3. Direccionamiento Indirecto ________________________________140

3.4.6.5. Memoria Del Programa Y El Sistema De Instrucciones Extendidas _____143 3.4.6.6. Memoria De Datos Y El Sistema De Instrucciones Extendidas_________143

3.4.6.6.1. Direccionamiento Indexado Con Literal Compensado____________144 3.4.6.6.2. Instrucciones Afectadas Por El Modo IndexadoPor Literal Compensado ___________________________________ 144

3.4.6.6.3. Mapeo Del Banco De Acceso En El ModoIndexado Por Literal Compensado ___________________________ 146

3.4.6.6.4. BSR En El Modo Indexado Por Literal Compensado_____________147 3.4.7. Memoria Flash De Programa ______________________________________147

3.4.7.1. Escribir Y Leer En Tablas _____________________________________147 3.4.7.2. Registros De Control _________________________________________149

3.4.7.2.1. Registros EECON1 y EECON2 _____________________________ 149 3.4.7.2.2. Registro De Tabla Latch (TABLAT) _________________________151 3.4.7.2.3. Registro Del Puntero De Tabla (TBLPTR) ____________________151 3.4.7.2.4. Límites Del Puntero De Tabla ______________________________151

3.4.7.3. Lectura De La Memoria De Programa Flash _______________________ 152 3.4.7.4. Borrado De Memoria Flash De Programa _________________________ 153 3.4.7.4.1. Secuencia De Borrado De La Memoria Flash De Programa _______154

3.4.7.5. Escribir En La Memoria Flash De Programa _______________________155 3.4.7.5.1. Secuencia De Escritura En La Memoria Flash De Programa _______156 3.4.7.5.2. Verificación De La Escritura _______________________________158 3.4.7.5.3. Finalización Inesperada De La Operación De Escritura___________159

3.4.8. Memoria De Datos EEPROM______________________________________160 3.4.8.1. Registros EECON1 Y EECON2 ________________________________160 3.4.8.2. Lectura De Los Datos De La Memoria EEPROM ___________________161 3.4.8.3. Escritura En La Memoria De Datos EEPROM _____________________161 3.4.8.4. Verificación De La Escritura ___________________________________162 3.4.8.5. Operación Con Código De Protección ____________________________ 162

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 11/651

GUILLERMO DAVID HERRERO GONZÁLEZ

ix

3.4.8.6. Protección Contra Escrituras Falsas ______________________________ 162 3.4.8.7. Usar Los Datos EEPROM _____________________________________163

3.4.9. Multiplicador DE 8x8 Por Hardware ________________________________165 3.4.9.1. Introducción ________________________________________________165

3.4.10. Interrupciones__________________________________________________168 3.4.10.1. Interrupciones Del USB ______________________________________169 3.4.10.2. Registros INTCON__________________________________________170 3.4.10.3. Registros PIR ______________________________________________173 3.4.10.4. Registros PIE ______________________________________________176 3.4.10.5. Registros IPR ______________________________________________178 3.4.10.6. Registro RCON ____________________________________________180 3.4.10.7. Pines De Interrupciones INTn _________________________________181 3.4.10.8. Interrupción TMR0__________________________________________181 3.4.10.9. Interrupción Al Cambiar PORTB_______________________________181 3.4.10.10. Almacenamiento De Datos Durante La Interrupción _______________181

3.4.11. Puertos De Entrada-Salida ________________________________________182 3.4.11.1. Registros PORTA, TRISA Y LATA ____________________________ 183 3.4.11.2. Registros PORTB, TRISB Y LATB_____________________________186 3.4.11.3. Registros PORTC, TRISC Y LATC_____________________________191 3.4.11.4. Registros PORTD, TRISD Y LATD ____________________________ 194 3.4.11.5. Registros PORTE, TRISE Y LATE _____________________________ 197

3.4.11.5.1. PORTE En Los Dispositivos De 28-PIN _____________________198 3.4.12. Módulo TIMER0 _______________________________________________201

3.4.12.1. Operaciones Del TIMER0 ____________________________________202 3.4.12.2. Lecturas Y Escrituras Del Timer0 En Modo De 16BITS_____________202 3.4.12.3. Prescaler__________________________________________________203

3.4.12.3.1. Conmutación En La Asignación Del Prescaler_________________203 3.4.12.4. Interrupción Timer0 _________________________________________203

3.4.13. Módulo Timer1 ________________________________________________205 3.4.13.1. Operaciones Del Timer1______________________________________207 3.4.13.2. Modo De Lectura/Escritura De 16-Bit Del Timer1 _________________207 3.4.13.3. Oscilador Timer1 ___________________________________________208

3.4.13.3.1. Usar Timer1 como Fuente De Reloj_________________________209 3.4.13.3.2. Opción De Baja Potencia Timer1___________________________209 3.4.13.3.3. Consideraciones Del Layout Del Oscilador Timer1_____________209

3.4.13.4. Interrupción Timer1 _________________________________________210 3.4.13.5. Reset Del Timer1 Usando El Disparador Especial

Del Acontecimiento CCP _____________________________________210 3.4.13.6. Usar Timer1 como Reloj De Tiempo Real (RTC) __________________211

3.4.14. Módulo Timer2 ________________________________________________213 3.4.14.1. Operaciones Del Timer2______________________________________214

3.4.14.2. Interrupción Timer2 _________________________________________215 3.4.14.3. Salida Del TMR2 ___________________________________________215 3.4.15. Módulo Timer3 ________________________________________________216

3.4.15.1. Operaciones Del Timer3______________________________________218 3.4.15.2. Modo De Lectura/Grabación De 16bit___________________________ 218 3.4.15.3. Usar El Oscilador Timer1 como Fuente De Reloj Timer3 ____________219 3.4.15.4. Interrupción Timer3 _________________________________________219 3.4.15.5. Reset Del Timer3 usando El Disparador Especial

De Acontecimientos Del CCP _________________________________220 3.4.16. Módulos Captura/Comparación/PWM (CCP) _________________________ 221

3.4.16.1. Configuración Del Módulo CCP _______________________________222 3.4.16.1.1. Recursos De Los Módulos CCP Y Del Temporizador ___________222 3.4.16.1.2. CCP2 Asignación De Pin _________________________________223

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 12/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

x

3.4.16.2. MODO CAPTURA _________________________________________224 3.4.16.2.1. Configuración Del Pin CCP _______________________________ 224 3.4.16.2.2. Selección De Modo Timer1/Timer3_________________________224 3.4.16.2.3. Interrupción Por Software_________________________________224 3.4.16.2.4. CCP Prescaler__________________________________________224

3.4.16.3. Modo Comparación _________________________________________225 3.4.16.3.1. Tipo De Conexión CCP __________________________________225 3.4.16.3.2. Selección De Modo Timer1/Timer3_________________________226 3.4.16.3.3. Modo De Interrupción Por Software ________________________226 3.4.16.3.4. Disparador De Acontecimiento Especial _____________________226

3.4.16.4. Modo PWM _______________________________________________228 3.4.16.4.1. Periodo Del PWM ______________________________________229 3.4.16.4.2. Duty Cicle PWM _______________________________________229 3.4.16.4.3. PWM Auto-Apagado (CCP1 Solamente) _____________________230 3.4.16.4.4. Configuración Del PWM _________________________________230

3.4.17. Módulo Mejorado De Captura/Comparación/PWM (ECCP)______________232 3.4.17.1. Salidas Y Configuración Del ECCP_____________________________232 3.4.17.1.1. Recursos Del Temporizador Y Módulo ECCP_________________232

3.4.17.2. Modos Captura Y Comparación________________________________234 3.4.17.2.1. Disparador De Acontecimiento Especial _____________________234

3.4.17.3. El Modo Estándar De PWM___________________________________234 3.4.17.4. El Modo PWM Mejorado_____________________________________235

3.4.17.4.1. Periodo De PWM _______________________________________236 3.4.17.4.2. Duty Cicle PWM _______________________________________236 3.4.17.4.3. Configuraciones De La Salida De PWM _____________________237 3.4.17.4.4. El Modo Half-Bridge ____________________________________238 3.4.17.4.5. Modo Full-Bridge_______________________________________239 3.4.17.4.6. Retraso Programable “Banda-Muerta”_______________________243

3.4.17.4.7. PWM Mejorado Auto-Apagado ____________________________ 244 3.4.17.4.8. Consideraciones De Reinicio ______________________________247 3.4.17.4.9. Pasos Para Configurar El PWM ____________________________ 247 3.4.17.4.10. Operando En Los Modos De Ahorro De Energía______________248 3.4.17.4.11. Efectos De Un Reset____________________________________249

3.4.18. Bus Serie Universal (USB) _______________________________________250 3.4.18.1. Descripción Del Periférico USB________________________________250 3.4.18.2. Estado Y Control Del USB____________________________________251

3.4.18.2.1. Registro De Control Del USB (UCON) ______________________ 251 3.4.18.2.2. Registro De Configuración Del USB (UCFG) _________________253 3.4.18.2.3. Registro De Estado Del USB (USTAT) ______________________ 258 3.4.18.2.4. Control De Los Endpoints Del USB_________________________260 3.4.18.2.5. Registro De Dirección Del USB (UADDR)___________________261

3.4.18.2.6. Registros Del Número Del Frame Del USB (UFRMH: UFRML) __261 3.4.18.3. RAM Del USB _____________________________________________262 3.4.18.4. Buffer Descriptor Y Tabla Del Buffer Descriptor __________________263

3.4.18.4.1. Estado Y Configuración De Los BD ________________________264 3.4.18.4.2. Byte De Cuenta De BD___________________________________268 3.4.18.4.3. Validación De La Dirección De BD_________________________268 3.4.18.4.4. Buffering Ping-Pong_____________________________________269

3.4.18.5. Interrupciones Del USB ______________________________________272 3.4.18.5.1. Registro De Estado De Las Interrupciones Del USB (UIR)_______274 3.4.18.5.2. Registro De Permiso De Las Interrupciones (UIE) _____________275 3.4.18.5.3. Registro De Estado De Las Interrupciones

Por Error Del USB (UEIR)________________________________277 3.4.18.5.4. Registro De Permiso De Las Interrupciones De Error (UEIE)_____278

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 13/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xi

3.4.18.6. Modos De Energía Del USB __________________________________279 3.4.18.6.1. Sólo Energía En El Bus __________________________________279 3.4.18.6.2. Sólo Self-Power ________________________________________279 3.4.18.6.3. Energía Dual Con Dominancia Self-Power ___________________279

3.4.18.7. Streaming Parallel Port (SPP) _________________________________280 3.4.18.8. Oscilador _________________________________________________280 3.4.18.9. Descripción Del USB ________________________________________282

3.4.18.9.1. Esquema De Capas ______________________________________282 3.4.18.9.2. Frames _______________________________________________283 3.4.18.9.3. Transferencias__________________________________________283 3.4.18.9.4. Energía _______________________________________________283 3.4.18.9.5. Enumeración___________________________________________284 3.4.18.9.6. Descriptores ___________________________________________284 3.4.18.9.7. Velocidad Del Bus ______________________________________285 3.4.18.9.8. Especificaciones De Clase Y Drivers ________________________285

3.4.19. Puerto Paralelo Streaming (SPP) ___________________________________286 3.4.19.1. Configuración Del SPP_______________________________________286 3.4.19.1.1. Permitir El SPP_________________________________________287 3.4.19.1.2. Registro De Datos_______________________________________288 3.4.19.1.3. Estados De Espera ______________________________________289 3.4.19.1.4. SPP Pull-Ups __________________________________________289

3.4.19.2. Sistema Para El Control Del USB ______________________________290 3.4.19.3. Sistema Para El Control Del Microcontrolador ____________________291

3.4.19.3.1. Interrupciones SPP ______________________________________291 3.4.19.3.2. Escribir El SPP _________________________________________292 3.4.19.3.3. Lectura Del SPP ________________________________________ 292

3.4.20. Módulo Convertidor De 10-Bit Analógico A Digital (A/D) ______________294 3.4.20.1. Requisitos De La Adquisición A/D _____________________________300

3.4.20.2. Seleccionar Y Configuración El Tiempo De Adquisición Tiempo _____301 3.4.20.3. Seleccionar El Reloj De Conversión A/D ________________________302 3.4.20.4. Operación En Los Modos De Ahorro De Energía __________________303 3.4.20.5. Configuración De Los Pines De Los Puertos Analógicos ____________303 3.4.20.6. Conversiones A/D __________________________________________304 3.4.20.7. Descarga__________________________________________________304 3.4.20.8. Uso Del Disparador Del CCP2_________________________________305

3.4.21. Módulo Comparador ____________________________________________307 3.4.21.1. Configuración Del Comparador ________________________________ 309 3.4.21.2. Operaciones Del Comparador _________________________________309 3.4.21.3. Referencia Del Comparador___________________________________309

3.4.21.3.1. Señal De Referencia Externa ______________________________310 3.4.21.3.2. Señal De Referencia Interna _______________________________ 310

3.4.21.4. Tiempo De Respuesta Del Comparador __________________________ 310 3.4.21.5. Salidas Del Comparador______________________________________310 3.4.21.6. Interrupciones Del Comparador ________________________________ 311 3.4.21.7. Operaciones Del Comparador Durante El Modo SLEEP_____________312 3.4.21.8. Efectos De Un Reset_________________________________________312 3.4.21.9. Consideraciones En La Conexión De Las Entradas Analógicas _______312

3.4.22. Módulo Comparador De Tensión De Referencia_______________________314 3.4.22.1. Configuración Del Módulo Comparador De Tensión De Referencia____314 3.4.22.2. Exactitud/Error De La Tensión De Referencia_____________________316 3.4.22.3. Operación En Modo SLEEP___________________________________316 3.4.22.4. Efectos De Un Reset_________________________________________316 3.4.22.5. Consideraciones De La Conexión ______________________________317

3.4.23. Detector De Alta/Baja Tensión (HLVD) _____________________________ 318

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 14/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xii

3.4.23.1. Operación _________________________________________________319 3.4.23.2. Configuración Del HLVD ____________________________________320 3.4.23.3. Consumición De Corriente____________________________________321 3.4.23.4. Tiempo De Arranque De HLVD _______________________________321 3.4.23.5. Aplicaciones_______________________________________________322 3.4.23.6. Operaciones En El Modo Sleep ________________________________ 323 3.4.23.7. Efectos De Un Reset_________________________________________323

3.4.24. Características Especiales De La CPU_______________________________324 3.4.24.1. Bits De Configuración _______________________________________325 3.4.24.2. Temporizador Del Perro Guardián (WDT)________________________337

3.4.24.2.1. Registro De Control _____________________________________338 3.4.24.3. Arranque A Dos Velocidades__________________________________339

3.4.24.3.1. Consideraciones Especiales Para Usar ArranqueA Dos Velocidades ______________________________________340

3.4.24.4. Monitor De Reloj A Prueba De Fallos ___________________________ 340

3.4.24.4.1. FSCM Y El Temporizador Perro Guardián ___________________341 3.4.24.4.2. Salir De La Operación A Prueba De Fallos ___________________341 3.4.24.4.3. Interrupciones De FSCM Dentro De Los Modos De Ahorro

De Energía ____________________________________________342 3.4.24.4.4. POR O Reinicio Del Sleep ________________________________ 342

3.4.24.5. Verificación Del Programa Y Código De Protección________________343 3.4.24.5.1. Memoria De Programa Código De Protección _________________345 3.4.24.5.2. Datos EEPROM Código De Protección ______________________347 3.4.24.5.3. Configuración Del Registro De Protección ___________________347

3.4.24.6. Localizaciones De Identificación _______________________________ 347 3.4.24.7. Programación Serie In-Circuit _________________________________347 3.4.24.8. Depuración In-Circuit________________________________________347 3.4.24.9. Características Especiales De Icport (Señalando Paquetes Solamente) __348

3.4.24.9.1. Puerto Dedicado ICD/ICSP _______________________________348 3.4.24.9.2. Emulación De 28 Pines___________________________________349 3.4.24.10. Suministro Único De La Programación ICSP ____________________349

3.5. Fuses De Programación de la Familia PIC18Fxx5x _______________ 351 3.5.1. PIC18F2455 ___________________________________________________351

3.5.1.1. Bits Selectores Del Prescaler Del PLL: ___________________________ 351 3.5.1.2. Postcaler Del Reloj Del Sistema CPU:____________________________351 3.5.1.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)__351 3.5.1.4. Bits Selectores Del Oscilador: __________________________________352 3.5.1.5. Bit De Permiso Del Monitor De Reloj De Seguridad: ________________352 3.5.1.6. Bit De Cambio Del Oscilador Interno/Externo: _____________________352 3.5.1.7. Bit De Permiso Del Retraso En El Inicio: _________________________352 3.5.1.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR): ______________353 3.5.1.9. Bits De Tensión BOR: ________________________________________353 3.5.1.10. Bit De Permiso Del Regulador De Tensión USB: __________________353 3.5.1.11. Bit De Permiso Del Temporizador Watchdog:_____________________353 3.5.1.12. Bits Selectores Del Postscaler Del Watchdog:_____________________354 3.5.1.13. Bit De Permiso Del Pin MCLR:________________________________354 3.5.1.14. Bit De Permiso De La Potencia Del Oscilador Timer 1: _____________354 3.5.1.15. Bit De Permiso PORTB A/D:__________________________________355 3.5.1.16. CCP2 MUX Bit:____________________________________________355 3.5.1.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:__________355 3.5.1.18. Bit De Permiso Del ICSP: ____________________________________355 3.5.1.19. Bit De Permiso Del Juego De Instrucciones Extendido: _____________355 3.5.1.20. Bit De Permiso Del Debugger Oculto:___________________________355 3.5.1.21. Bit Del Código De Protección En El Bloque 0: ____________________ 356

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 15/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xiii

3.5.1.22. Bit Del Código De Protección En El Bloque 1: ____________________ 356 3.5.1.23. Bit Del Código De Protección En El Bloque 2: ____________________ 356 3.5.1.24. Bit Del Código De Protección En El Bloque De Inicio:______________356 3.5.1.25. Bit Del Código De Protección En La EEPROM De Datos: ___________356 3.5.1.26. Bit De Protección Contra Escritura 0: ___________________________356 3.5.1.27. Bit De Protección Contra Escritura 1: ___________________________356 3.5.1.28. Bit De Protección Contra Escritura 2: ___________________________357 3.5.1.29. Bit De Protección Contra Escritura En El Bloque De Inicio:__________357 3.5.1.30. Bits De Protección Contra Escritura En Los Registros

De Configuración: __________________________________________357 3.5.1.31. Bits De Protección Contra Escritura En La EEPROM De Datos: ______357 3.5.1.32. Bit De Protección De La Lectura De Tabla Del Bloque 0:____________357 3.5.1.33. Bit De Protección De La Lectura De Tabla Del Bloque 1:____________357 3.5.1.34. Bit De Protección De La Lectura De Tabla Del Bloque 2:____________358 3.5.1.35. Protección Contra La Lectura De Tabla Del Bloque De Inicio:________358

3.5.2. PIC18F2550 ___________________________________________________358 3.5.2.1. Bits Selectores Del Prescaler Del PLL: ___________________________ 358 3.5.2.2. Postcaler Del Reloj Del Sistema CPU:____________________________358 3.5.2.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)__359 3.5.2.4. Bits Selectores Del Oscilador: __________________________________359 3.5.2.5. Bit De Permiso Del Monitor De Reloj De Seguridad: ________________359 3.5.2.6. Bit De Cambio Del Oscilador Interno/Externo: _____________________359 3.5.2.7. Bit De Permiso Del Retraso En El Inicio: _________________________360 3.5.2.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR): ______________360 3.5.2.9. Bits De Tensión BOR: ________________________________________360 3.5.2.10. Bit De Permiso Del Regulador De Tensión USB: __________________360 3.5.2.11. Bit De Permiso Del Temporizador Watchdog:_____________________360 3.5.2.12. Bits Selectores Del Postscaler Del Watchdog:_____________________361

3.5.2.13. Bit De Permiso Del Pin MCLR:________________________________361 3.5.2.14. Bit De Permiso De La Potencia Del Oscilador Timer 1: _____________361 3.5.2.15. Bit De Permiso PORTB A/D:__________________________________362 3.5.2.16. CCP2 MUX Bit:____________________________________________362 3.5.2.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:__________362 3.5.2.18. Bit De Permiso Del ICSP: ____________________________________362 3.5.2.19. Bit De Permiso Del Juego De Instrucciones Extendido: _____________362 3.5.2.20. Bit De Permiso Del Debugger Oculto:___________________________362 3.5.2.21. Bit Del Código De Protección En El Bloque 0: ____________________ 362 3.5.2.22. Bit Del Código De Protección En El Bloque 1: ____________________ 363 3.5.2.23. Bit Del Código De Protección En El Bloque 2: ____________________ 363 3.5.2.24. Bit Del Código De Protección En El Bloque 3: ____________________ 363 3.5.2.25. Bit Del Código De Protección En El Bloque De Inicio:______________363

3.5.2.26. Bit Del Código De Protección En La EEPROM De Datos: ___________363 3.5.2.27. Bit De Protección Contra Escritura 0: ___________________________363 3.5.2.28. Bit De Protección Contra Escritura 1: ___________________________363 3.5.2.29. Bit De Protección Contra Escritura 2: ___________________________364 3.5.2.30. Bit De Protección Contra Escritura 3: ___________________________364 3.5.2.31. Bit De Protección Contra Escritura En El Bloque De Inicio:__________364 3.5.2.32. Bits De Protección Contra Escritura En Los Registros

De Configuración: __________________________________________364 3.5.2.33. Bits De Protección Contra Escritura En La EEPROM De Datos: ______364 3.5.2.34. Bit De Protección De La Lectura De Tabla Del Bloque 0:____________364 3.5.2.35. Bit De Protección De La Lectura De Tabla Del Bloque 1:____________365 3.5.2.36. Bit De Protección De La Lectura De Tabla Del Bloque 2:____________365 3.5.2.37. Bit De Protección De La Lectura De Tabla Del Bloque 3:____________365

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 16/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xiv

3.5.2.38. Protección Contra La Lectura De Tabla Del Bloque De Inicio:________365 3.5.3. PIC18F4455 ___________________________________________________366

3.5.3.1. Bits Selectores Del Prescaler Del PLL: ___________________________ 366 3.5.3.2. Postcaler Del Reloj Del Sistema CPU:____________________________366 3.5.3.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)__366 3.5.3.4. Bits Selectores Del Oscilador: __________________________________367 3.5.3.5. Bit De Permiso Del Monitor De Reloj De Seguridad: ________________367 3.5.3.6. Bit De Cambio Del Oscilador Interno/Externo: _____________________367 3.5.3.7. Bit De Permiso Del Retraso En El Inicio: _________________________367 3.5.3.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR): ______________368 3.5.3.9. Bits De Tensión BOR: ________________________________________368 3.5.3.10. Bit De Permiso Del Regulador De Tensión USB: __________________368 3.5.3.11. Bit De Permiso Del Temporizador Watchdog:_____________________368 3.5.3.12. Bits Selectores Del Postscaler Del Watchdog:_____________________369 3.5.3.13. Bit De Permiso Del Pin MCLR:________________________________369

3.5.3.14. Bit De Permiso De La Potencia Del Oscilador Timer 1: _____________369 3.5.3.15. Bit De Permiso PORTB A/D:__________________________________370 3.5.3.16. CCP2 MUX Bit:____________________________________________370 3.5.3.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:__________370 3.5.3.18. Bit De Permiso Del ICSP: ____________________________________370 3.5.3.19. Bit De Permiso Del Debug En-Circuito/Puerto De

Programación (ICPORT):_____________________________________370 3.5.3.20. Bit De Permiso Del Juego De Instrucciones Extendido: _____________370 3.5.3.21. Bit De Permiso Del Debugger Oculto:___________________________370 3.5.3.22. Bit Del Código De Protección En El Bloque 0: ____________________ 371 3.5.3.23. Bit Del Código De Protección En El Bloque 1: ____________________ 371 3.5.3.24. Bit Del Código De Protección En El Bloque 2: ____________________ 371 3.5.3.25. Bit Del Código De Protección En El Bloque De Inicio:______________371

3.5.3.26. Bit Del Código De Protección En La EEPROM De Datos: ___________371 3.5.3.27. Bit De Protección Contra Escritura 0: ___________________________371 3.5.3.28. Bit De Protección Contra Escritura 1: ___________________________371 3.5.3.29. Bit De Protección Contra Escritura 2: ___________________________372 3.5.3.30. Bit De Protección Contra Escritura En El Bloque De Inicio:__________372 3.5.3.31. Bits De Protección Contra Escritura En Los Registros

De Configuración: __________________________________________372 3.5.3.32. Bits De Protección Contra Escritura En La EEPROM De Datos: ______372 3.5.3.33. Bit De Protección De La Lectura De Tabla Del Bloque 0:____________372 3.5.3.34. Bit De Protección De La Lectura De Tabla Del Bloque 1:____________372 3.5.3.35. Bit De Protección De La Lectura De Tabla Del Bloque 2:____________373 3.5.3.36. Protección Contra La Lectura De Tabla Del Bloque De Inicio:________373

3.5.4. PIC18F4550 ___________________________________________________373

3.5.4.1. Bits Selectores Del Prescaler Del PLL: ___________________________ 373 3.5.4.2. Postcaler Del Reloj Del Sistema CPU:____________________________373 3.5.4.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)__374 3.5.4.4. Bits Selectores Del Oscilador: __________________________________374 3.5.4.5. Bit De Permiso Del Monitor De Reloj De Seguridad: ________________374 3.5.4.6. Bit De Cambio Del Oscilador Interno/Externo: _____________________374 3.5.4.7. Bit De Permiso Del Retraso En El Inicio: _________________________375 3.5.4.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR): ______________375 3.5.4.9. Bits De Tensión BOR: ________________________________________375 3.5.4.10. Bit De Permiso Del Regulador De Tensión USB: __________________375 3.5.4.11. Bit De Permiso Del Temporizador Watchdog:_____________________375 3.5.4.12. Bits Selectores Del Postscaler Del Watchdog:_____________________376 3.5.4.13. Bit De Permiso Del Pin MCLR:________________________________376

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 17/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xv

3.5.4.14. Bit De Permiso De La Potencia Del Oscilador Timer 1: _____________376 3.5.4.15. Bit De Permiso PORTB A/D:__________________________________377 3.5.4.16. CCP2 MUX Bit:____________________________________________377 3.5.4.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:__________377 3.5.4.18. Bit De Permiso Del ICSP: ____________________________________377 3.5.4.19. Bit De Permiso Del Debug En-Circuito/Puerto De

Programación (ICPORT):_____________________________________377 3.5.4.20. Bit De Permiso Del Juego De Instrucciones Extendido: _____________377 3.5.4.21. Bit De Permiso Del Debugger Oculto:___________________________377 3.5.4.22. Bit Del Código De Protección En El Bloque 0: ____________________ 378 3.5.4.23. Bit Del Código De Protección En El Bloque 1: ____________________ 378 3.5.4.24. Bit Del Código De Protección En El Bloque 2: ____________________ 378 3.5.4.25. Bit Del Código De Protección En El Bloque 3: ____________________ 378 3.5.4.26. Bit Del Código De Protección En El Bloque De Inicio:______________378 3.5.4.27. Bit Del Código De Protección En La EEPROM De Datos: ___________378

3.5.4.28. Bit De Protección Contra Escritura 0: ___________________________378 3.5.4.29. Bit De Protección Contra Escritura 1: ___________________________379 3.5.4.30. Bit De Protección Contra Escritura 2: ___________________________379 3.5.4.31. Bit De Protección Contra Escritura 3: ___________________________379 3.5.4.32. Bit De Protección Contra Escritura En El Bloque De Inicio:__________379 3.5.4.33. Bits De Protección Contra Escritura En Los Registros De

Configuración: _____________________________________________379 3.5.4.34. Bits De Protección Contra Escritura En La EEPROM De Datos: ______379 3.5.4.35. Bit De Protección De La Lectura De Tabla Del Bloque 0:____________380 3.5.4.36. Bit De Protección De La Lectura De Tabla Del Bloque 1:____________380 3.5.4.37. Bit De Protección De La Lectura De Tabla Del Bloque 2:____________380 3.5.4.38. Bit De Protección De La Lectura De Tabla Del Bloque 3:____________380 3.5.4.39. Protección Contra La Lectura De Tabla Del Bloque De Inicio:________380

4. Lenguaje De Programación C18 _____________________________ 383 4.1. Introducción _______________________________________________ 383

4.2. Compilador MPLAB C18 ____________________________________ 383 4.2.1. Introducción ___________________________________________________383 4.2.2. Tipos De Datos _________________________________________________384

4.2.2.1. Enteros ____________________________________________________384 4.2.2.2. Reales _____________________________________________________384 4.2.2.3. Estructuras _________________________________________________385 4.2.2.4. Almacenamiento_____________________________________________385 4.2.2.5. Calificadores________________________________________________386

4.2.3. Estructuras de Control____________________________________________386

4.2.3.1. Repetitivas _________________________________________________386 4.2.3.1.1. Sentencia While _________________________________________386 4.2.3.1.2. Sentencia Do____________________________________________387 4.2.3.1.3. Sentencia For ___________________________________________387 4.2.3.1.4. Sentencia If_____________________________________________387 4.2.3.1.5. Sentencia If-Else_________________________________________387 4.2.3.1.6. Sentencia Switch_________________________________________388 4.2.3.1.7. Sentencia Break _________________________________________388 4.2.3.1.8. Sentencia Continue_______________________________________388 4.2.3.1.9. Sentencia Goto __________________________________________388

4.2.4. Punteros_______________________________________________________389 4.2.5. Cadenas De Constantes ___________________________________________389

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 18/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xvi

4.3. Librerías Del C18___________________________________________ 390 4.3.1. Abreviaturas en las librerías de Microchip ____________________________ 390

4.3.2. Adc.H: Librería De Los Conversores A/D ____________________________ 393 4.3.2.1. Descripción De Las Funciones__________________________________393 4.3.3. Pwm.H: Funciones Del PWM Y EPWM _____________________________397

4.3.3.1. Descripción De Las Funciones__________________________________397 4.3.4. Timers.h: Funciones de los temporizadores ___________________________ 399

4.3.4.1. Descripción de las funciones ___________________________________399 4.3.5. Delays.H: Retrasos Por Software ___________________________________404

4.3.5.1. Descripción De Las Funciones__________________________________404 4.3.6. Librerías del USB ______________________________________________406

4.3.6.1. Usb.h _____________________________________________________406 4.3.6.2. Usbcfg.h: Configuración ______________________________________408

4.3.6.2.1. Definiciones ____________________________________________408 4.3.6.2.2. Uso de la clase del dispositivo ______________________________408

4.3.6.2.3. Distribución de los Endpoint _______________________________409 4.3.6.3. Usbdefs_std_dsc.h: Definiciones estándar de los descriptores: _________410 4.3.6.3.1. Incluye:________________________________________________410 4.3.6.3.2. Definiciones ____________________________________________410 4.3.6.3.3. Estructuras _____________________________________________411

4.3.6.4. Usbdsc.h: Descriptores________________________________________413 4.3.6.4.1. Librerías que incluye _____________________________________413 4.3.6.4.2. Definiciones ____________________________________________413 4.3.6.4.3. Externas _______________________________________________413

4.3.6.5. Usbdefs_ep0_buff.h: Descripciones Del Buffer Del Endpoint 0 ________414 4.3.6.5.1. Incluye ________________________________________________414

4.3.6.6. Usbmmap.h ________________________________________________418 4.3.6.6.1. Incluye ________________________________________________418

4.3.6.6.2. Definiciones ____________________________________________418 4.3.6.6.3. Tipos__________________________________________________419 4.3.6.6.4. Externas _______________________________________________420

4.3.6.7. Usbdrv.h: Driver Del USB _____________________________________422 4.3.6.7.1. Incluye ________________________________________________422 4.3.6.7.2. Definiciones ____________________________________________422 4.3.6.7.3. Prototipos públicos _______________________________________425

4.3.6.8. Usbctrltrf.h: Control de transferencias del USB_____________________426 4.3.6.8.1. Incluye ________________________________________________426 4.3.6.8.2. Definiciones ____________________________________________426 4.3.6.8.3. Externas _______________________________________________426 4.3.6.8.4. Prototipos públicos _______________________________________426

4.3.6.9. Usb9.h ____________________________________________________427

4.3.6.9.1. Incluye ________________________________________________427 4.3.6.9.2. Definiciones ____________________________________________427 4.3.6.9.3. Prototipos públicos _______________________________________427

4.3.6.10. Usbgen.h: USB Genérico _____________________________________ 428 4.3.6.10.1. Incluye _______________________________________________428 4.3.6.10.2. Definiciones ___________________________________________428 4.3.6.10.3. Externas ______________________________________________428 4.3.6.10.4. Prototipos Públicos______________________________________428

4.3.6.11. Msd.h: Almacenamiento Masivo _______________________________ 429 4.3.6.11.1. Incluye _______________________________________________429 4.3.6.11.2. Definiciones ___________________________________________429 4.3.6.11.3. Estructuras ____________________________________________432 4.3.6.11.4. Externas ______________________________________________436

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 19/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xvii

4.3.6.11.5. Prototipos públicos ______________________________________436 4.3.6.12. Cdc.h: Dispositivos De Comunicación___________________________437

4.3.6.12.1. Incluye _______________________________________________437 4.3.6.12.2. Definiciones ___________________________________________437 4.3.6.12.3. Estructuras ____________________________________________440 4.3.6.12.4. Externas ______________________________________________442 4.3.6.12.5. Prototipos publicos ______________________________________442

4.3.6.13. Hid.h: Dispositivo interfaz con humanos _________________________ 443 4.3.6.13.1. Incluye _______________________________________________443 4.3.6.13.2. Definiciones ___________________________________________443 4.3.6.13.3. Estructuras ____________________________________________444 4.3.6.13.4. Externas ______________________________________________444 4.3.6.13.5. Prototipos públicos ______________________________________445

4.3.6.14. Io_cfg.h __________________________________________________445 4.3.6.14.1. Incluye _______________________________________________445

4.3.6.14.2. Tris __________________________________________________445 4.3.6.14.3. USB _________________________________________________445 4.3.6.14.4. LED _________________________________________________446 4.3.6.14.5. Interruptores ___________________________________________446 4.3.6.14.6. Potenciómetro__________________________________________446 4.3.6.14.7. SPI: Líneas de Chip Select ________________________________ 446 4.3.6.14.8. SDMMC ______________________________________________446

4.3.6.15. interrupt.h_________________________________________________447 4.3.6.15.1. Incluye _______________________________________________447 4.3.6.15.2. Definiciones ___________________________________________447 4.3.6.15.3. Prototipos _____________________________________________447

4.3.6.16. Usb_compile_time_validation.h: Validación DelTiempo De Compilado _______________________________________448

4.3.6.16.1. Incluye _______________________________________________448 4.3.6.16.2. Validación del USB _____________________________________448 4.3.7. Librerías Del Microprocesador _____________________________________448

4.4. Macros Del Compilador C18 _________________________________ 449 4.4.1. Usbdrv.c: Drivers USB ___________________________________________449

4.4.1.1. Incluye ____________________________________________________449 4.4.1.2. Variables___________________________________________________449 4.4.1.3. Prototipos privados___________________________________________449 4.4.1.4. Declaraciones _______________________________________________449

4.4.1.4.1. void USBCheckBusStatus(void) ____________________________450 4.4.1.4.2. void USBModuleEnable(void)______________________________ 451 4.4.1.4.3. void USBModuleDisable(void) _____________________________451 4.4.1.4.4. void USBSoftDetach(void)_________________________________451 4.4.1.4.5. void USBDriverService(void) ______________________________452 4.4.1.4.6. void USBSuspend(void)___________________________________453 4.4.1.4.7. void USBWakeFromSuspend(void) __________________________ 453 4.4.1.4.8. void USBRemoteWakeup(void)_____________________________454 4.4.1.4.9. void USB_SOF_Handler(void) _____________________________455 4.4.1.4.10. void USBStallHandler(void) ______________________________455 4.4.1.4.11. void USBErrorHandler(void) ______________________________ 456 4.4.1.4.12. void USBProtocolResetHandler(void) _______________________456

4.4.1.5. Función auxiliar _____________________________________________457 4.4.2. Usb9.c ________________________________________________________457

4.4.2.1. Incluye ____________________________________________________457 4.4.2.2. Variables___________________________________________________457 4.4.2.3. Prototipos privados___________________________________________457

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 20/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xviii

4.4.2.4. Declaraciones _______________________________________________457 4.4.2.4.1. void USBCheckStdRequest(void) ___________________________457 4.4.2.4.2. void USBStdGetDscHandler(void)___________________________459 4.4.2.4.3. void USBStdSetCfgHandler(void) ___________________________ 460 4.4.2.4.4. void USBStdGetStatusHandler(void)_________________________460 4.4.2.4.5. void USBStdFeatureReqHandler(void) _______________________461

4.4.3. Usbctrltrf.c ____________________________________________________462 4.4.3.1. Incluye ____________________________________________________462 4.4.3.2. Variables___________________________________________________462 4.4.3.3. Prototipos privados___________________________________________462 4.4.3.4. Declaraciones _______________________________________________462

4.4.3.4.1. void USBCtrlEPService(void) ______________________________ 462 4.4.3.4.2. void USBCtrlTrfSetupHandler(void) _________________________ 463 4.4.3.4.3. void USBCtrlTrfSetupHandler(void) _________________________ 463 4.4.3.4.4. void USBCtrlTrfOutHandler(void)___________________________464

4.4.3.4.5. void USBCtrlTrfInHandler(void) ____________________________ 464 4.4.3.4.6. void USBCtrlTrfTxService(void)____________________________465 4.4.3.4.7. void USBCtrlTrfRxService(void)____________________________466 4.4.3.4.8. void USBCtrlEPServiceComplete(void) ______________________466 4.4.3.4.9. void USBPrepareForNextSetupTrf(void)______________________468

4.4.4. Usbdsc.c: Descriptores USB _______________________________________469 4.4.4.1. Incluye ____________________________________________________471 4.4.4.2. Constantes _________________________________________________472

4.4.5. Usbmmap.c ____________________________________________________474 4.4.5.1. Incluye ____________________________________________________476 4.4.5.2. Variables globales del USB ____________________________________476 4.4.5.3. Localizaciones de variables fijas del USB _________________________ 476

4.4.6. usbgen.c: USB genérico __________________________________________479

4.4.6.1. Incluye ____________________________________________________479 4.4.6.2. Variables___________________________________________________479 4.4.6.3. Declaraciones _______________________________________________479 4.4.6.4. API del usuario______________________________________________479

4.4.6.4.1. void USBGenInitEP(void) _________________________________479 4.4.6.4.2. void USBGenWrite(byte *buffer, byte len) ____________________480 4.4.6.4.3. byte USBGenRead(byte *buffer, byte len)_____________________481

4.4.7. msd.c: USB Almacenamiento Masivo _______________________________482 4.4.7.1. Incluye ____________________________________________________482 4.4.7.2. Variables___________________________________________________482 4.4.7.3. Protoripos privados___________________________________________483 4.4.7.4. Declaraciones _______________________________________________483 4.4.7.5. Respuestas específicas de la clase _______________________________483

4.4.7.5.1. void USBCheckMSDRequest(void)__________________________483 4.4.7.5.2. void ProcessIO(void) _____________________________________484 4.4.7.5.3. void MSDInitEP(void) ____________________________________484 4.4.7.5.4. void SDCardInit(void) ____________________________________484 4.4.7.5.5. void MSDCommandHandler(void) __________________________484 4.4.7.5.6. void SendCSW(void) _____________________________________484 4.4.7.5.7. void SendData(byte* dataAddr, byte dataSize) _________________485 4.4.7.5.8. void MSDDataIn(void)____________________________________485 4.4.7.5.9. void IsValidCBW()_______________________________________485 4.4.7.5.10. void IsMeaningfulCBW()_________________________________485 4.4.7.5.11. void PrepareCSWData()__________________________________485 4.4.7.5.12. void MSDInquiryHandler(void) ____________________________ 485 4.4.7.5.13. void ResetSenseData(void)________________________________485

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 21/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xix

4.4.7.5.14. void MSDReadCapacityHandler() __________________________ 486 4.4.7.5.15. void MSDReadHandler(void)______________________________486 4.4.7.5.16. void MSDDataOut(void) _________________________________486 4.4.7.5.17. void MSDWriteHandler()_________________________________486 4.4.7.5.18. void MSDRequestSenseHandler(void)_______________________486 4.4.7.5.19. void MSDModeSenseHandler() ____________________________ 486 4.4.7.5.20. void MSDMediumRemovalHandler() _______________________487 4.4.7.5.21. void MSDTestUnitReadyHandler() _________________________487 4.4.7.5.22. void MSDVerifyHandler() ________________________________ 487 4.4.7.5.23. void MSDStopStartHandler() ______________________________ 487

4.4.8. cdc.c: USB Dispositivo de comunicación _____________________________ 488 4.4.8.1. Incluye ____________________________________________________488 4.4.8.2. Variables___________________________________________________488 4.4.8.3. Declaraciones _______________________________________________488 4.4.8.4. Respuestas específicas de la clase _______________________________488

4.4.8.4.1. void USBCheckCDCRequest(void) __________________________ 488 4.4.8.5. Api del Usuario _____________________________________________489 4.4.8.5.1. void CDCInitEP(void) ____________________________________489 4.4.8.5.2. byte getsUSBUSART(char *buffer, byte len) __________________489 4.4.8.5.3. void putsUSBUSART(char *data) ___________________________489 4.4.8.5.4. void putrsUSBUSART(const rom char *data) __________________490 4.4.8.5.5. void CDCTxService(void) _________________________________490

4.4.9. hid.c: USB interfaz con humanos ___________________________________491 4.4.9.1. Incluye ____________________________________________________491 4.4.9.2. Variables___________________________________________________491 4.4.9.3. Prototipos privados___________________________________________491 4.4.9.4. Declaraciones _______________________________________________491 4.4.9.5. Respuestas específicas de la clase _______________________________491

4.4.9.5.1. void USBCheckHIDRequest(void)___________________________491 4.4.9.6. API del usuario______________________________________________491 4.4.9.6.1. void HIDInitEP(void)_____________________________________491 4.4.9.6.2. void HIDTxReport(char *buffer, byte len)_____________________492 4.4.9.6.3. byte HIDRxReport(char *buffer, byte len)_____________________ 492

4.4.10. main.c________________________________________________________493 4.4.10.1. Incluye ___________________________________________________493 4.4.10.2. Variables__________________________________________________493 4.4.10.3. Prototipos privados___________________________________________493

4.4.10.3.1. Remapeo de vectores ____________________________________493 4.4.10.3.2. Declaraciones __________________________________________493

4.4.12. interrupt.c_____________________________________________________495 4.4.12.1. Incluye ___________________________________________________495

4.4.12.2. Vectores de interrupción______________________________________495 4.4.12.3. Declaraciones ______________________________________________495 4.4.12.3.1. void high_isr(void) ______________________________________495 4.4.12.3.2. void low_isr(void) ______________________________________495

5. Lenguaje De Programación Vi sual Basic ______________________ 499

5.1. Introducción _______________________________________________ 499

5.2. Características Generales De Visual Basic ______________________ 501

5.3. Tipos de datos______________________________________________ 502 5.3.1. Constantes _____________________________________________________ 502 5.3.2. Variables ______________________________________________________ 502

5.3.2.1. Nombre____________________________________________________ 502

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 22/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xx

5.3.2.2. Tipo ______________________________________________________503 5.3.2.3. Ámbito ____________________________________________________504

5.3.3. Operadores ____________________________________________________504 5.3.4. Sentencias De Control____________________________________________505

5.3.4.1. Sentencia If_________________________________________________505 5.3.4.2. Sentencia Select _____________________________________________506 5.3.4.3. Sentencia For…Next _________________________________________506

5.3.4.3.1. Funcionamiento de la Sentencia For: _________________________ 507 5.3.4.4. Sentencia While…Wend ______________________________________507

5.3.4.4.1. Funcionamiento de la Sentencia While...Wend _________________507 5.3.4.5. Sentencia Do…Loop _________________________________________508 5.3.4.6. Sentencia Goto ______________________________________________508

5.4. Librerías En Visual Basic ____________________________________ 509 5.4.1. Librería Del USB: MPUSBAPI.dll __________________________________509

5.4.1.1. Inroducción_________________________________________________509 5.4.1.2. FUNCIONES _______________________________________________509

5.4.1.2.1. MPUSBGetDLLVersion(Void) _____________________________509 5.4.1.2.2. MPUSBGetDeviceCount(pVID_PID) ________________________ 509 5.4.1.2.3. MPUSBOpen(instance, pVID_PID, pEP, dwDir, dwReserved)_____510 5.4.1.2.4. MPUSBRead(handle, pData, dwLen, pLength, dwMilliseconds) ___511 5.4.1.2.5. MPUSBWrite(handle, pData, dwLen, pLength, dwMilliseconds)___512 5.4.1.2.6. MPUSBReadInt(handle, pData, dwLen, pLength, dwMilliseconds) _512 5.4.1.2.7. MPUSBClose(handle) ____________________________________512

5.4.1.3. TIPOS DE TRANSFERENCIAS________________________________513 5.4.1.4. Declaración De Constantes Y Variables __________________________513 5.4.1.5. Declaración de las funciones ___________________________________514

5.4.1.5.1. C _____________________________________________________514 5.4.1.5.2. VB ___________________________________________________514 5.4.1.5.3. Delphi _________________________________________________515

6. I nterconexión USB-PC _____________________________________ 519

6.1. Introducción _______________________________________________ 519

6.2. Arquitectura Windows ______________________________________ 519

6.3. Carga En Windows De Un Módulo USB________________________ 519

6.4. El Driver .sys ______________________________________________ 520 6.4.1. Diálogo Con La Aplicación________________________________________520 6.4.2. Gestión De Bugs ________________________________________________521 6.4.3. Características De Un Driver ______________________________________521

6.4.3.1.

Principios De Acceso _________________________________________522 6.4.3.2. Modo De Acceso ____________________________________________522

6.4.3.3. Modo De Acceso Múltiple _____________________________________522 6.4.3.4. Paso De Datos ______________________________________________522 6.4.3.5. Limitación de 4Kbytes ________________________________________523 6.4.3.6. Múltiples Periféricos _________________________________________523 6.4.3.7. Gestión De Las Peticiones De La Aplicación_______________________523 6.4.3.8. Gestión De Las Peticiones Del Sistema ___________________________ 523

6.5. El Driver De Microchip______________________________________ 524

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 23/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xxi

7. Apl icación _______________________________________________ 527

7.1. Introducción _______________________________________________ 527

7.2. Circuito Eléctrico___________________________________________ 527 7.2.1. Esquema Eléctrico Del Circuito ____________________________________528 7.2.2. Componentes___________________________________________________529

7.2.2.1. Microcontrolador ____________________________________________529 7.2.2.2. ULN2803 __________________________________________________529 7.2.2.3. L293D ____________________________________________________530 7.2.2.4. Sensor De Distancia __________________________________________530 7.2.2.5. Finales De Carrera ___________________________________________530 7.2.2.6. Zumbador __________________________________________________531 7.2.2.7. Bombillas Y LEDs ___________________________________________531 7.2.2.8. Conector USB ______________________________________________531 7.2.2.9. Motores De Corriente Continua _________________________________532

7.2.2.9.1. Control Del Sentido De Giro _______________________________533 7.2.2.9.2. El L293 Como Driver De Un Motor De Corriente Continua _______534 7.2.2.9.3. Control De La Velocidad __________________________________536 7.2.2.9.4. Aumento Del Par Motor ___________________________________537

7.2.2.10. Motores Paso A Paso ________________________________________538 7.2.2.10.1. Motores Bipolares_______________________________________539 7.2.2.10.2. Motores Unipolares _____________________________________540 7.2.2.10.3. Características Importantes________________________________543

7.2.3. Esquema Eléctrico De La Placa Impresa______________________________ 544

7.3. Firmware Del Microcontrolador ______________________________ 545 7.3.1. Main.c ________________________________________________________545

7.3.1.1. Incluye ____________________________________________________545

7.3.1.2. Variables___________________________________________________547 7.3.1.3. Prototipos privados___________________________________________547 7.3.1.4. Remapeo Del vector __________________________________________548 7.3.1.5. Declaraciones _______________________________________________548

7.3.1.5.1. void main(void) _________________________________________548 7.3.1.5.2. void InitializeSystem(void) ________________________________548 7.3.1.5.3. void USBTasks(void)_____________________________________549

7.3.2. Usbcfg.h ______________________________________________________549 7.3.2.1. Definiciones ________________________________________________549 7.3.2.2. Definición De La Clase _______________________________________549 7.3.2.3. Localizaciones De Los Endpoints _______________________________550

7.3.2.3.1. Identificador De La Interfaz ________________________________ 550 7.3.2.3.2. Endpoints ______________________________________________550

7.3.3. Usbdsc.h ______________________________________________________550 7.3.3.1. Incluye ____________________________________________________550 7.3.3.2. Definiciones ________________________________________________551 7.3.3.3. Funciones Externas___________________________________________551

7.3.4. Usbdsc.c ______________________________________________________551 7.3.4.1. Incluye ____________________________________________________551 7.3.4.2. Constantes _________________________________________________551

7.3.4.2.1. Descriptor Del Dispositivo _________________________________ 551 7.3.4.2.2. Descriptor De La Configuración 1 ___________________________ 552

7.3.5. Io_cfg.h _______________________________________________________ 553 7.3.5.1. Incluye ____________________________________________________553 7.3.5.2. Tris _______________________________________________________ 553 7.3.5.3. Puerto _____________________________________________________ 553

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 24/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xxii

7.3.5.4. USB ______________________________________________________554 7.3.6. User.h ________________________________________________________554

7.3.6.1. Prototipos Públicos___________________________________________554 7.3.7. User.c ________________________________________________________555

7.3.7.1. Incluye ____________________________________________________555 7.3.7.2. Variables___________________________________________________555 7.3.7.3. Prototipos Privados___________________________________________555 7.3.7.4. Declaraciones _______________________________________________556

7.3.7.4.1. void Inicializacion(void)___________________________________556 7.3.7.4.2. void Aplicacion(void)_____________________________________556 7.3.7.4.3. void chequeo(void)_______________________________________557 7.3.7.4.4. void enviar(void) ________________________________________558 7.3.7.4.5. void Mdelante(void) ______________________________________558 7.3.7.4.6. void Mdetras(void)_______________________________________558 7.3.7.4.7. void Velocidad(void) _____________________________________559

7.3.7.4.8. void Paro(void)__________________________________________559 7.3.7.4.9. void Giroizq(void) _______________________________________560 7.3.7.4.10. void Giroder(void) ______________________________________561 7.3.7.4.11. void ANOpen(char c) ____________________________________ 562 7.3.7.4.12. void Sensores(void) _____________________________________562 7.3.7.4.13. void Claxon(void)_______________________________________562 7.3.7.4.14. void Apagado(void) _____________________________________563 7.3.7.4.15. void Encendido(void) ____________________________________563 7.3.7.4.16. void LucesON(void)_____________________________________563 7.3.7.4.17. void LucesOFF(void) ____________________________________563 7.3.7.4.18. void BlinkUSBStatus(void) ________________________________564

7.4. Software Del Ordenador _____________________________________ 565 7.4.1. Módulo ApiUsb.bas _____________________________________________565

7.4.1.1. Funciones De La Mpusbapi.Dll _________________________________ 565 7.4.1.2. Función De Recuperación De Datos Almacenados __________________566 7.4.1.3. Constantes Para La WIN32 API_________________________________566 7.4.1.4. Constantes De Conectividad Con El PIC __________________________566 7.4.1.5. IN_PIPE Y OUT_PIPE Variables Públicas ________________________ 566 7.4.1.6. Variables Públicas Del Programa________________________________566 7.4.1.7. Apertura De Las Comunicaciones _______________________________ 566 7.4.1.8. Cierre De Las Comunicaciones _________________________________567 7.4.1.9. Función Enviar ______________________________________________567 7.4.1.10. Función Recibir ____________________________________________568

7.4.2. Formulario Inicio________________________________________________568 7.4.2.1. Código Del Form Inicio _______________________________________570

7.4.2.1.1. Variables Globales _______________________________________570 7.4.2.1.2. Función Avanza_Click ____________________________________571 7.4.2.1.3. Función Claxon_Click ____________________________________571 7.4.2.1.4. Función Derecha_Click ___________________________________571 7.4.2.1.5. Función Form_Load______________________________________572 7.4.2.1.6. Función Form_Unload ____________________________________572 7.4.2.1.7. Función Izquierda_Click __________________________________573 7.4.2.1.8. Función Luces_Click _____________________________________573 7.4.2.1.9. Menu_Click ____________________________________________574 7.4.2.1.10. Función Paro_Click _____________________________________575 7.4.2.1.11. Retrocede_Click ________________________________________576 7.4.2.1.12. Función ScrollGiro_Change_______________________________ 576 7.4.2.1.13. Función ScrollVelocidad_Change __________________________576 7.4.2.1.14. Función sensores_Click __________________________________576

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 25/651

GUILLERMO DAVID HERRERO GONZÁLEZ

xxiii

7.4.2.1.15. Función TextGiro_Change ________________________________577 7.4.2.1.16. Función TextVelocidad __________________________________5777.4.2.1.17. Función Form_KeyPress _________________________________581

7.4.3. Form Ajuste____________________________________________________583 7.4.3.1. Código Del Form Ajuste ______________________________________584

7.4.3.1.1. Variables_______________________________________________584 7.4.3.1.2. Función Derecha_Click ___________________________________584 7.4.3.1.3. Función Izquierda_Click __________________________________585 7.4.3.1.4. Función AjDistancia_Click ________________________________585 7.4.3.1.5. Función TimerDistancia_Timer _____________________________ 585 7.4.3.1.6. Función Medidas_Timer___________________________________587

7.4.4. Form Sensor ___________________________________________________588 7.4.4.1. Código del Form Ajuste _______________________________________589

7.4.4.1.1. Declaración De Variables__________________________________589 7.4.4.1.2. Función Sensores_Timer __________________________________589

7.4.5. Form Comandos ________________________________________________592 7.4.5.1. Código Del Form Comandos ___________________________________594 7.4.5.1.1. Declaración De Variables__________________________________594 7.4.5.1.2. Función Comandos_Click _________________________________594 7.4.5.1.3. Función Comandos_KeyPress ______________________________594 7.4.5.1.4. Función EnvioComando_Click______________________________596 7.4.5.1.5. Función Form_Unload ____________________________________602

7.5. Driver Cochecito.inf_________________________________________ 602

7.6. Control WiiMote ___________________________________________ 6027.6.1. Introducción ___________________________________________________6067.6.2. Programa de Control _____________________________________________606

7.6.2.1. Programa_______________________________________________606

8. Bibli ografía ______________________________________________ 609

8.1. Libros ____________________________________________________ 609

8.2. Apuntes ___________________________________________________ 610

8.3. Páginas Web _______________________________________________ 610

B. CÁLCULOS

1. Cálculos _________________________________________________ 615

1.1. PWM _____________________________________________________ 615

1.2. Conversor A/D _____________________________________________ 615

C. PLANOS

Plano 1: Esquema del cir cui to eléctr ico _____________________________619

Plano 2: Esquema eléctr ico de la placa _____________________________621

Plano 3: Layout de la placa_______________________________________623

Plano 4: Chasis ________________________________________________625

Plano 5: Piezas del parachoques trasero ____________________________627

Plano 6: Piezas del parachoques delantero __________________________629

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 26/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

xxiv

Plano 7: Piezas del chasis ________________________________________631

Plano 8: Montaje del chasis ______________________________________633

Plano 9: Montaje del ci rcui to en el chasis ___________________________635

D. PLIEGO DE CONDICIONES

1. Pli ego De Condiciones Específi cas Y Constructivas ______________ 639

1.1. Descripción Del Producto ____________________________________ 639

1.2. Forma De Ejecución ________________________________________ 639

1.3. Plazos Y Orden De Ejecución _________________________________ 643

1.4. Materiales _________________________________________________ 644 1.4.1. Materiales Del Laboratorio Necesarios Para La Parte Eléctrica ____________644 1.4.2. Materiales Para La Realización De La Placa___________________________ 645 1.4.3. Materiales De Laboratorio Necesarios Para La Parte Mecánica ___________645 1.4.4. Materiales Para La Realización Del Chasis____________________________645

1.5. Realización De Las Pruebas __________________________________ 646

E. PRESUPUESTO

1. Presupuesto De La Par te Eléctr ica____________________________ 649

2. Presupuesto De La Par te Mecánica ___________________________ 650

3. Total izaciones ____________________________________________ 650

F. CONCLUSIÓN 1. Conclusión _______________________________________________ 653

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 27/651

A. MEMORIA

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 28/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 29/651

1. INTRODUCCIÓN

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 30/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 31/651

29

1. INTRODUCCIÓN

1.1. OBJETO

Como Trabajo Final de Carrera se ha tratado la comunicación de unmicrocontrolador PIC al ordenador por medio del puerto USB. En el presente proyectose trata de hacer una aplicación práctica del tipo de comunicación antes citado.

El proyecto ha sido propuesto y tutorado dentro del departamento de FísicaAplicada en el área de Tecnología Electrónica por José Torreblanca González.

Los grandes grupos en los que se divide el proyecto son:

Ê Estudio de la norma del USB.Ê Estudio de la familia de microcontroladores PIC18Fxx5x.Ê Realización práctica de la aplicación.

Como el presente proyecto se pretende que sirva como ayuda a otras personas, elautor ha tratado el proyecto de una manera sencilla, intentado que sea de fácilcomprensión.

1.2. D ESCRIPCIÓN

La utilidad principal de este proyecto es el control de sensores y motores a travésdel ordenador por medio del puerto USB. El microcontrolador PIC18F2455 es el

encargado de la conexión USB y de ejecutar las órdenes recibidas desde el ordenador.

El microcontrolador realizará la conversión analógico-digital necesaria para lalectura del sensor de distancia. Además, de enviar los pulsos necesarios para activar elmotor paso a paso.

El micro, también se encarga de la modulación de ancho de pulso y de activar los puertos necesarios para modificar el sentido y la velocidad de los motores decorriente continua.

Todos esto temas se han tratado de forma teórica, haciendo un estudio de todoslos puntos necesarios para comprender correctamente las comunicaciones UBS la

programación, tanto del host (ordenador) como del microcontrolador; y de forma práctica al realizar un coche que se controle desde el ordenador por medio del puertoUSB.

A continuación se describe el contenido de cada uno de los capítulos quecomponen el proyecto.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 32/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

30

1.2.1. CAPÍTULO 2: NOCIONES BÁSICAS DE LA NORMA USB 2.0

La memoria comienza con un estudio del USB, las transmisiones entre host(ordenador), hub (dispositivo concentrador) y periférico. Dando especial importancia alsignificado del vocabulario específico de la conexión.

Del estudio de la norma del USB se obtienen los pasos que realiza el host paradetectar y configurar el dispositivo o los tipos de transferencia; y algunos aspectossecundarios pero no menos importantes como los pasos necesarios para transferir un

byte. El principal objetivo de este apartado es la comprensión de la conexión al menor nivel existente.

Al trabajar con microcontroladores que poseen puerto USB todos los pasoscitados en el párrafo anterior, no se observan ya que el chip lo realiza internamente. Lo

único que hay que realizar es una correcta configuración.

1.2.2. CAPÍTULO 3: MICROCONTROLADORES

En este capítulo se realiza un estudio de la familia de microcontroladoresutilizada los PIC18Fxx5x.

Se ha descrito su arquitectura, osciladores, puertos de E/S, puertos especialescomo el USB, manejo de las memorias FLASH, EEPROM y RAM, registros de control.En general, todo lo relativo al microcontrolador excepto el puerto USART que no seutiliza en este proyecto.

1.2.3. CAPÍTULO 4: LENGUAJE DE PROGRAMACIÓN C18Para la programación del micro se recurrirá al lenguaje C18 ya que el fabricante

Microchip concede una licencia gratuita de estudiante y el uso de librerías específicas para las distintas clases de dispositivos y los distintos tipos de comunicación.Resultando éste más sencillo que el lenguaje Assambler, comúnmente utilizado en la

programación de todas las gamas de microcontroladores PIC y dsPIC de Microchip.

En este capítulo, se analizan las funciones más importantes, los tipos de datos, punteros y las librerías utilizadas para la configuración del microcontrolador en laaplicación. Haciendo especial hincapié en las relativas al puerto USB.

1.2.4. CAPÍTULO 5: LENGUAJE DE PROGRAMACIÓN VISUAL BASIC El siguiente tema tratado en la memoria, es la programación del host; para ella,

se recurrirá al lenguaje Visual Basic 6, ya que es un lenguaje muy extendido y muysencillo, con un gran número de librerías y módulos.

Como en el capítulo anterior, en este, se hace un análisis de las funciones másimportantes, tipos de datos, etc. Para poder comprender el software de control delcoche.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 33/651

GUILLERMO DAVID HERRERO GONZÁLEZ

31

Para realizar una comunicación con USB, no existen librerías comunesespecíficas, por lo que se ha utilizado la MPUSBAPI.dll que concede gratuitamente

Microchip. En la memoria, se comentan y explican todas las funciones de esta librería.

1.2.5. CAPÍTULO 6: INTERCONEXIÓN USB-PC

Otro tema muy importante es la realización de un driver. Al utilizar la libreríaanterior, se necesita un driver que la reconozca, por ello Microchip ha creado unogenérico que reconoce los comandos de la librería.

En este capítulo, se analizan las características que tiene que tener un driver comentando las del driver de Microchip.

1.2.6. CAPÍTULO 7: APLICACIÓN

Se va a realizar un coche de radio control que mida distancias y detecte si segolpea contra un objeto; pudiendo variar su movimiento tanto en sentido, dirección yvelocidad.

Para la variación del sentido se ha utilizado un motor de tipo paso a paso bipolar.Para una mayor comprensión se ha pretendido hacer un manual de los motores paso a

paso. En este, se incluyen las diferencias entre los distintos tipos y los pulsos que hayque enviar para activar los motores.

En cuanto a la modificación de la velocidad, se ha recurrido a la modulación deancho de pulso (PWM) ya que el microcontrolador posee un puerto que, una vez

configurado correctamente, crea este tipo de onda. Para la detección de distancias se hautilizado el sensor de Sharp GP2Y0A02YK que crea una variación de la tensióndependiendo de la distancia a la que se encuentre el objeto. Se ha conectado a unaentrada de tipo analógico del microcontrolador para aprovechar al máximo lascaracterísticas tanto del sensor como del microcontrolador.

Los sensores de choque son interruptores finales de carrera. Una vez pulsado, elmicrocontrolador lee la entrada y comprueba que el coche se ha chocado en un puntodeterminado.

El problema de realizar el control del sistema por medio de un microcontrolador es que no cede la corriente necesaria para activar el componente. Hay que recurrir a

buffers, para lo que se han utilizado el integrado ULN2803 en el motor paso a paso, lasluces y el zumbador. El otro buffer es el L293D que es un driver para motores decorriente continua en puente H, mediante el cual se puede cambiar el sentido de losmotores y reconoce la modulación de ancho de pulso.

El siguiente punto de este capítulo, es la explicación de la adaptación delsoftware que cede Microchip a la aplicación. Se comentan todos los archivosmodificados.

Después, se estudia el software del host, realizado en Visual Basic.

Por último, el driver creado para la aplicación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 34/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

32

1.2.7. CÁLCULOS

Se realizan los cálculos necesarios para el proyecto.Al ser un proyecto de electrónica digital, en especial de microcontroladores, sólo

se realizan los cálculos relativos a los motores de corriente continua (para poder seleccionar entre más valores de velocidad) y al conversor A/D (para que no realiceconversiones innecesarias).

1.2.8. PLANOS

En este capítulo, se incluyen los planos tanto de la parte eléctrica como de lamecánica para la realización del coche.

La parte eléctrica se compone de los planos: general, el de diseño de la placa en

transparencia, y de montaje de los sensores.

La parte mecánica se compone de todos los planos necesarios para reproducir elcoche.

1.2.9. PLIEGO DE CONDICIONES

El pliego de condiciones los pasos necesarios para la reproducción del coche,tanto de la placa electrónica como de la parte mecánica.

1.2.10. CONDICIONES

Con este último apartado se pretende explicar los problemas que han surgido enla realización de la aplicación y las experiencias obtenidas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 35/651

2. NOCIONES BÁSICAS DE LA

NORMA USB 2.0

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 36/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 37/651

35

2. NOCIONES BÁSICAS DE LA NORMA USB 2.0

2.1. I NTRODUCCIÓN

Para entender el funcionamiento del USB, es necesario estudiar la especificaciónde este bus. Los fabricantes involucrados en la norma crearon un documento queconstituye la referencia. Aunque en estos momentos se está creando la versión 3.0 del

bus, en el presente capítulo se va a tratar la versión 2.0 ya que es la más rápida y es laque posee la familia de PICs 18Fxx5x.

Ya que la norma es muy extensa, aquí se han traducido las partes que se hancreído más importantes para una comprensión fácil y rápida de este bus.

Uno de los motivos por los que el USB se haya extendido tan velozmente es quese ha creado mediante un convenio de grandes empresas del sector informático:Compac, Hewlett-Packard, Intel, Lucent, Microsoft; NEC y Philips. Adoptando lasmejores características de los diferentes tipos de comunicación de cada empresa.

2.1.1. MOTIVACIÓN

Las motivaciones que han inspirado la creación del Universal Serial Bus ver. 1.0son tres: conexión del PC al teléfono, facilidad de uso y expansión de entrada/salida.

Las motivaciones a mejorar la versión y crear así la 2.0 han sido: la evolución delos ordenadores y de su velocidad, la mejora de los periféricos, la demanda de lasimágenes digitales y la necesidad de una mayor velocidad de transmisión de datos.

Las periódicas revisiones de la norma se realizan para que los desarrolladores nofabriquen unos periféricos con una interfaz obsoleta.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 38/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

36

2.2. V OCABULARIO

El vocabulario aquí expuesto es una lista de términos informáticos muyutilizados en la comunicación por USB. No se incluyen todos los que aparecen en lanorma, sino los que el autor ha creído oportunos por su dificultad o por no estar muydifundidos.

Paced Locked Loop (PLL): Circuito que detecta la fase para poner el oscilador en fase con una frecuencia actual.

Pipe: Una unión abstracta entre el Endpoint y el software del host.

Endpoint o Device Endpoint: La porción direccionable de un dispositivo USBque es la fuente o el lugar de llegada de la comunicación entre el host y el dispositivo.

Dirección del Endpoint: Combinación del número del Endpoint y del sentidoen un dispositivo USB. Cada dirección del Endpoint soporta transferencias de datos enuna dirección.

Sentido del Endpoint: Es el sentido de los datos transferidos por el USB. Puedeser IN (entrada) u OUT (salida). IN se refiere a la transferencia del host y OUT a latransferencia desde el host.

Número del Endpoint: Es un valor de 4bits de 0h a Fh incluidos, asociado a unEndpoint de un dispositivo.

Endpoint de control: Una pareja de Device Endpoint con el mismo número de

Endpoint.Dirección del dispositivo: Es un valor de 7bits que representa la dirección del

dispositivo del USB. La dirección del dispositivo tiene el valor por defecto (00H)cuando el dispositivo USB se alimenta por primera vez o se resetea. El software delsistema del USB asigna una única dirección del dispositivo.

Handshake Packet: Un paquete que reconoce o rechaza una condiciónespecífica.

ACK: Trama de reconocimiento positivo.

NAK: Trama de reconocimiento negativo.

Message Pipe: Un pipe bidireccional que transfiere datos usando una normarespuesta/dato/estado. Los datos tienen una estructura impuesta que permite respuestascorrectas a la identificación y comunicación.

MSb: Bit más significativo.

MSB: Byte más significativo.

LSb: Bit menos significativo.

LSB: Byte menos significativo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 39/651

GUILLERMO DAVID HERRERO GONZÁLEZ

37

Protocolo: Conjunto específico de reglas, procedimientos o conversacionesrelacionadas con el formato y el tiempo de transmisión de datos entre dos dispositivos.

Sample: Unidad más pequeña con la que puede operar un Endpoint.

Sample Rate (Fs): Número de samples por segundo, expresado en hercios (Hz).

Start-Of-Frame (SOF): Primera transacción de cada frame. Un SOF permite alEndpoint identificar el principio del frame y sincronizar el reloj interno del Endpointcon el host.

Frame: Tiempo base de 1ms establecido en los buses de baja/media velocidad(low/full speed).

Paquete Token: Tipo de paquete que identifica que transmisión se realiza en el bus.

Clase: La clase indica el tipo de dispositivo USB.

Paquete ID (PID): Un campo de un paquete USB que indica el tipo de paquete,y el formato del paquete y el tipo de error de detección aplicado.

Descriptor: Los dispositivos dan a conocer sus atributos por medio de losdescriptores. Un descriptor es una estructura de datos con un formato determinado.Cada descriptor empieza con un campo de un byte de ancho que contiene el número de

bytes en el descriptor, seguido por otro campo de un byte de ancho que identifica el tipode descriptor.

Campo de direccionamiento (ADDR): la utilidad del campo dedireccionamiento es especificar la función, por esta dirección, que va a ser la fuente o eldestino de este paquete, dependiendo del valor del token PID.

Hay un total de 128 direcciones especificadas en ADDR<6:0>.

El campo ADDR es único para los token IN, SETUP y OUT y para los tokenespeciales PING y SPLIT.

Cada valor de ADDR define una única función.

En un reset o reinicio, la dirección por defecto es cero y la tiene que programar el host durante el proceso de enumeración. La dirección cero está reservada comodirección por defecto y no se puede asignar para otro uso.

LSb MSb

Addr 0 Addr 1 Addr 2 Addr 3 Addr 4 Addr 5

Campo del Endpoint (ENDP): Los 4bits del campo del Endpoint permiten unamayor flexibilidad en el direccionamiento de funciones en las que s necesita más de unEndpoint.

Excepto el Endpoint 0, los números de los Endpoint son funciones específicas.

El campo del Endpoint se define en los tokens IN, SETUP y OUT y en elespecial PING.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 40/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

38

Todas las funciones tienen que soportar un pipe de control en el Endpoint 0.

Los dispositivos de baja velocidad soportan un máximo de tres pipes por función: un pipe de control con el Endpoint 0 y otras 2 adicionales (otras 2 de control,una de control y un Endpoint interrupción o dos Endpoint interrupción).

Las funciones de media y alta velocidad soportan un máximo de 16 EndpointsIN y OUT.

LSb MSb

Endp 0 Endp 1 Endp 2 Endp 5

2.3. H ISTORIA

El USB se ha concebido como un estándar industrial de expansión para el PC, en particular en el ámbito de la telefonía y productos de consumo.

Los criterios para la definición de su arquitectura son:

Ê facilidad de uso para la expansión de un periférico del ordenador.Ê bajo coste, pero soportando altas velocidades de transferencia (480Mb/s).Ê soporte total en tiempo real de voz, audio y video comprimido.Ê protocolo flexible que permite la transferencia en modo mixed síncrono

(audio, video) o asíncrona (mensajes).Ê fácil integración en las nuevas tecnologías de periféricos.Ê

compatibilidad con las configuraciones del PC.Ê estándares de interfaz para una difusión rápida del producto.Ê posibilidad de crear nuevas clases de periféricos con el fin de aumentar la

capacidad del PC.

2.3.1. UTILIZACIÓN PREVISTA

En su versión de 1,5Mbits/s, el USB se sitúa en la zona de baja velocidad (lowspeed). Las aplicaciones son, entre otras, gestión del teclado, del ratón, de los

periféricos de juegos… En general, de la clase HID (dispositivos de interacción con elhumano).

Este tipo de periférico debe ser barato, conectable y desconectable en caliente(en funcionamiento) y fácil de utilizar. Asimismo, se podrán conectar variosdispositivos al mismo tiempo.

En su versión de 12Mbits/s, el USB se sitúa en la zona de “toda velocidad” (fullspeed). Las aplicaciones son, entre otras, ISDN (RDSI, teléfono digital), PBX(teléfono), audio…

Para este tipo de periférico, además de las características mencionadasanteriormente, tiene que ofrecer garantías sobre el tiempo de tránsito de la informacióny la banda de paso. El tipo de transmisión síncrona permite garantizar estos criterios.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 41/651

GUILLERMO DAVID HERRERO GONZÁLEZ

39

Y, en su última versión, 480Mbits/s, el USB se sitúa en la zona de alta velocidad(high speed). Las aplicaciones son, video de calidad, imágenes, almacenamiento

masivo…Con este tipo de periférico se necesitan todas las características anteriores más

una ancha banda de paso, para una alta velocidad.

Como conclusión de este apartado, se incluye una lista de las principalescaracterísticas del bus:

Ê banda de paso desde algunos kilobits hasta centenas de megabits.Ê transferencia síncrona y asíncrona en el mismo bus.Ê varios tipos de periféricos en el mismo bus.Ê posibilidad de conectar hasta 127 periféricos.Ê tiempo de respuesta garantizado.Ê flexibilidad a nivel de la banda de paso.Ê fiabilidad, control de errores.Ê perfectamente integrado en el PC, plug and play (conectar y usar).Ê coste reducido.Ê posibilidad de expansión.

2.4. A RQUITECTURA

2.4.1. DESCRIPCIÓN DEL SISTEMA USB

El USB es un sistema punto a punto: dado que el lugar de partida es el host (PCo hub), el destino es un periférico u otro hub. Sólo hay un host.

Los periféricos comparten la banda de paso del USB. El protocolo se basa en elllamado paso de testigo (token). El ordenador proporciona el testigo al periféricoseleccionado y seguidamente, éste le devuelve el testigo en su respuesta.

Este bus permite la conexión y desconexión en caliente, sin apagar el equipo.

2.4.2. ARQUITECTURA DEL BUS

La figura muestra la topología del bus, que viene a estar representado por un

árbol, en donde el PC sería la raíz y los periféricos las hojas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 42/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

40

2.4.3. INTERFAZ FÍSICA

2.4.3.1. Aspecto EléctricoA nivel eléctrico el cable USB transfiere la señal y la alimentación sobre cuatro

hilos.

A nivel de señal, se trata de un par tranzado con una impedancia característica de90Ω. La velocidad puede ser de 480Mbits/s, 12Mbits/s o 1,5Mbits/s. La sensibilidad delreceptor debe ser, al menos, 200mV y debe poder admitir un buen factor de rechazo en

modo común (CCMR, es la tensión diferencial entre la tensión común). El reloj setransmite en el flow de datos, la codificación es de tipo NRZI, existiendo un dispositivoque genera el bit e relleno (bit stuffing) que garantiza que la frecuencia del reloj

permanezca constante. Cada paquete va precedido de un campo de sincronismo.

A nivel de alimentación, el cable proporciona la tensión nominal de 5V. Esnecesario definir bien el diámetro del hilo con el fin de que no se produzca una caída detensión demasiado importante en el cable. Una resistencia de terminación instalada en lalínea de datos permite detectar el puerto conocer su configuración (1,5Mbits/s ó12Mbits/s), si no lleva resistencia indica 480Mbits/s.

Existen dos tipos de tomas (A y B), con el fin de evitar la configuración en

bucle. Se distinguen fácilmente: el tipo A es plano y rectangular, mientras que el tipo Bes cuadrado. La base para el tipo A se encuentra en el PC o hub, existiendo en el

periférico una base de tipo B. Los cables son de tipo AB.

En el conector, el punto de masa está algo adelantado con respecto a los puntosde señal, de este modo, cuando se enchufa, la masa siempre hace contacto antes.

2.4.3.2. Alimentación

La especificación abarca dos aspectos de consumo: distribución en función delconsumo especificado por cada periférico USB y control de consumo integrado en lagestión global del PC.

2.4.3.3. Consumo

Cada sección puede proporcionar una determinada potencia máxima siendo elPC el encargado de suministrar la energía. Además, el periférico puede estar autoalimentado (self powered).

Por otro lado, el hub puede distribuir la corriente procedente del PC a los periféricos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 43/651

GUILLERMO DAVID HERRERO GONZÁLEZ

41

2.4.3.4. Control De Consumo

El ordenador controla el consumo, teniendo capacidad de poner en reposo(suspend) o en marcha a un periférico USB. En reposo, éste reduce su consumo (si puede), quedando la parte del USB siempre funcional. Esta gestión está orientadaespecíficamente a los equipos portátiles.

2.4.3.5. Protocolo Del USB

Una transacción sobre el bus necesita al menos tres paquetes. Cada transaccióncomienza por el envío por parte del host de un paquete que indica el tipo, la dirección dela transacción, la dirección del USB y su punto terminal (Endpoint). Este paquete recibeel nombre de token packet (paquete testigo).

A continuación, el transmisor envía su paquete de datos, o indica que no tiene paquetes que transmitir, por último, el destinatario envía un paquete indicando que harecibido bien el paquete de datos.

Recibe el nombre de pipe el enlace virtual entre el host y un periférico USB, consu Endpoint (un periférico puede tener varios Endpoints).

Existen dos tipos de enlaces virtuales (pipe): stream y message. En el caso destream, se trata de un flujo sin estructura; en el otro caso, si tiene una. Cada enlace estácaracterizado por su banda de paso, su tipo de servicio, el número del Endpoint y eltamaño de los paquetes. Estos enlaces se definen durante la inicialización del USB.Siempre existe un enlace virtual 0 que permite tener acceso a la información de

configuración del periférico USB (estado, control e información).En el ordenador, el driver se encarga del encaminamiento de los paquetes sobre

el bus.

2.4.3.6. Robustez

El sistema es fiable y robusto, garantizando la integridad de los datos gracias alas siguientes características:

Ê señal diferencial, en donde la pantalla (blindaje) protege los hilos.

Ê CRC (control) sobre la información de control y datos.Ê

detección de conexión y desconexión del periféricoÊ recuperación automática en cado de error, gestión del tiempo derecuperación (timeout).

Ê gestión del flujo de datos, de los buffers y del modo síncrono.Ê construcción que le hace independiente de las funciones, de los datos y

del control.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 44/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

42

2.4.3.7. Detección De Errores

La detección de errores se basa en el control CRC, efectuado sobre los datos ysobre la información de control, de modo que un CRC incorrecto indica un error en el paquete. El CRC permite detectar el 100% de los errores, en caso de errores simples odobles.

En caso de error, al tercer intento fallido de recuperación, la información deerror se transfiere al nivel superior (aplicación).

2.4.3.8. Gestión De Errores

El protocolo puede controlar los errores por hardware o por software.

Las capas inferiores intentan tres veces la recuperación antes de informar a la

capa superior del problema.

2.4.3.9. Configuración Del Sistema

Un periférico puede ser enchufado o desenchufado en cualquier momento.

La enumeración (búsqueda de los periféricos) no sólo se hace al arrancar, sinoque está funcionando continuamente. Cuando se enchufa o retira un dispositivo, el hubdetecta el cambio y avisa al host.

Cuando se enchufa un nuevo dispositivo, el host (vía hub) direcciona el periférico con una dirección por defecto. Mediante un paquete de control, le da su

dirección. Si se trata de un hub, el procedimiento es el mismo para el propio hub,después para cada uno de los periféricos conectados al hub y declarados por él al host.

En cuanto a la descripción del hub, esta “multitoma” es un dispositivo activo,que incluye un microprocesador, la memoria y todas las interfaces necesarias para lagestión de los otros puertos (que vayan hacia un periférico USB o hacia otro hub).

Los hubs activos proporcionan la alimentación a partir de una fuente externa,mientras que los hubs pasivos proporcionan la alimentación a partir de la fuente

procedente del USB raíz.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 45/651

GUILLERMO DAVID HERRERO GONZÁLEZ

43

2.4.3.10. Tipos De Transferencia

El enlace virtual (pipe) puede ser de cuatro tipos:Ê Control: modo utilizado para realizar configuraciones: existe sobre el

Endpoint 0.Ê Bulk: modo utilizado para la transmisión de datos voluminosos, pero con

pocas restricciones a nivel de duración de la transmisión; por ejemplo,durante una impresión.

Ê Interrupt: modo utilizado para transmisiones de pequeños paquetesrápidos, orientado a percepciones humanas (ratón, puntero…)

Ê Isochronous o flujo en tiempo real: modo utilizado para latransferencia de audio o video. Es necesario negociar la banda de paso.

Un pipe sólo soporta uno de los tipos anteriores. 2.4.3.11. Tipo Control

Los datos de control sirven para configurar el periférico en el momento deconectarse al USB. Algunos drivers específicos pueden utilizar este enlace paratransmitir su propia información de control. Este enlace no tiene pérdida de datos,

puesto que los dispositivos de detección de recuperación de errores están activos a nivelUSB.

2.4.3.12. Tipo Bulk

Este modo se utiliza para la transmisión de importantes cantidades deinformación. Como el tipo Control, este enlace no tiene pérdida de datos. La banda de paso otorgada a este tipo de transmisión depende de los demás periféricos, siendo lamenos prioritaria.

2.4.3.13. Tipo Interrupt

Este tipo de transmisión garantiza la transferencia de pequeñas cantidades dedatos. El tiempo de respuesta no puede ser inferior al valor especificado por la interfaz.El ratón o cualquier otro dispositivo apuntador es una aplicación típica de este modo detransmisión.

2.4.3.14. Tipo IsochronousEste tipo de transmisión funciona en tiempo real. La banda de paso así como el

retardo están garantizados. Es el modo de mayor prioridad.

La transmisión de la voz es un ejemplo de esta aplicación. Si esta no se transmitecorrectamente, pueden llegar a oírse parásitos (glitch) y la aplicación puede detectar ciertos errores de los llamados underruns.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 46/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

44

2.4.3.15. Asignación De La Banda De Paso

La banda de paso se asigna en función de las pipes.Los periféricos deben contar con memoria intermedia de datos (buffers), tanto

mayores cuanto más grande sea el ancho de banda requerido. El objetivo es garantizar que, a pesar de los buffers, el retardo de encaminamiento sea tan solo de unos cuantosmilisegundos.

La asignación queda bloqueada, es decir, si una nueva asignación pudiera llegar a perturbar las asignaciones existentes, esta no será autorizada (bloqueada).

Cuando finaliza un pipe, la banda de paso puede asignarse a oro periférico.

2.4.3.16. USB Device

Los periféricos (devices) se clasifican en función de las operaciones que puedenrealizar: class hub, para los periféricos de extensión; class text, para las interfaces detexto (impresoras)…

2.4.3.17. Características De Un Periférico

El Endpoint 0 proporciona esta información por medio de los descriptores. Seencuentran clasificadas en tres grupos:

Ê Estándar: comunes a todos los periféricos (identificación del fabricante,clase del producto, consumo, descripción de los Endpoints.

Ê Clase: específicas del tipo de periférico.Ê Fabricante: específicas del producto; el fabricante puede incluir la

información que desee.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 47/651

GUILLERMO DAVID HERRERO GONZÁLEZ

45

2.5. F ORMATOS D E LOS P AQUETES

En este apartado se profundiza en la descripción del protocolo.

2.5.1. TOKEN

Un paquete token consiste en un PID, especificando el tipo de paquete IN, OUTo SETUP y los campos ADDR y ENDP.

El paquete token especial PING tiene los mismos campos que un token normal.

En las transacciones OUT y SETUP, los campos de dirección y de Endpointsolamente identifican el Endpoint que recibirá el paquete siguiente de datos. En lastransacciones IN, estos campos sólo indican el Endpoint que transmitirá el paquete dedatos. En las transacciones PING, estos campos indican el Endpoint que responderá conun paquete de protocolo de intercambio. El host es el único que puede emitir paquetestoken.

Un PID IN define una transacción de datos de una función al host. Los PIDsOUT y SETUP definen una transacción de datos del host a la función. Un PID PINGdefine un protocolo de intercambio de la función al host.

LSb MSb

Campo PID ADDR ENDP CRC5

BITs 8 7 4 5

Los paquetes token tienen cinco bits CRC que cubren los campos dirección yEndpoint. El CRC no cubre el PID, su propósito es chequea el campo. Los paquetestoken y SOF están delimitados por un EOP después de tras bytes de paquete de datos. Siun paquete se decodifica como otro token o SOF valido pero no termina con un EOPdespués de tres bytes, esto se tiene que considerar inválido y el receptor lo tiene queignorar.

2.5.2. TOKEN ESPECIAL: TRANSACCIÓN SPLIT

El USB define un token especial para las transacciones Split. Es un paquetetoken de 4 bytes. Esta transacción split proporciona tipos de transferencia y envío deinformación adicionales. El token de transacciones Split se utiliza para que se soporte elintercambio de archivos entre el host comunicándose con el hub que opera a high-speedcon dispositivos full-/low-speed en alguno de sus puertos. Hay dos tipos de split: unatransacción split de inicio (start-split) (SSPLIT) y transacción split completa (complete-split) (CSPLIT). Un campo en el token especial SPLIT, define las siguientes secciones.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 48/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

46

2.5.2.1. Transacciones Split

Una transacción Split high-speed se utiliza solamente entre el host y el hubcuando el hub tiene dispositivos low-/full-speed unidos. Las Split high-speed se utilizan para inicializar el intercambio low-/full-speed a través del hub y algún Endpoint deldispositivo low-/full-speed. Las Split permiten que el hub reciba el estado detransacción completa. Con esto puede que el host comience una transacción full-/low-speed a través de una high-speed sin tener que esperar a que procese/complete la de bajavelocidad.

Una transacción high-speed tiene dos partes: una start-speed y otra complete-speed. Las transacciones Split sólo se definen para usarse entre el host y el hub. Ningúnotro dispositivo high-speed o low-/full-speed puede usar este tipo de intercambio.

Los paquetes genéricos start-split se componen de dos paquetes en la fase token:el token especial SPLIT y el token full-/low-speed. Dependiendo de la dirección detransferencia de datos y de cómo está definido el protocolo de intercambio, después dela fase de token está, opcionalmente, un paquete de datos y otro de protocolo. Latransacción start-split puede ser de 2, 3 ó 4 paquetes determinados por el tipo detransferencia específica y la dirección de los datos.

Fase Token

ProtocoloTokenSSPLI

TokenFS/LS

DATAx

La transacción genérica complete-split se compone de: la fase token que tienedos paquetes: el token especial SPLIT y el token full-/low-speed. El siguiente paquetees uno de datos o uno de protocolo dependiendo de la dirección y el tipo especificado detransacción. Las complete-split pueden ser de 2 ó 3 paquetes determinados por el tipo detransferencia específica y la dirección.

TokenSSPLI

TokenFS/LS

Fase Token

Protocolo

DATAx

o

El resultado de una transacción Split se devuelve con una transacción complete-split. El host emite una start-split (indicado con 1) al hub que puede proceder con otratransacción high-speed. El start-split provoca que el hub mande un Token IN full-/low-speed algo después (indicado con 2). El dispositivo responde al Token IN (en el ejemplocon un paquete de datos) y el hub responde con un protocolo al hub. Finalmente, el host,

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 49/651

GUILLERMO DAVID HERRERO GONZÁLEZ

47

algo después, envía un complete-split (indicado con 3) para recibir los datos enviados, por el dispositivo. Darse cuenta de que en el ejemplo, el hub proporciona un protocolo

full-/low-speed (ACK en este caso) al Endpoint del dispositivo antes del complete-splity el complete-split no proporciona un protocolo high-speed al hub.

Host Hub Dispositivo

TOKEN IN

ACK

DATA 0

CSPLIT

DATA 0

TOKEN IN

SSPLIT

TOKEN IN

1startsplit

3complete

split

2Full-/Low-Speed

BusHigh-Speed

BusFull-/Low-Speed

Una transacción OUT normal full-/low-speed es similar a “invertir” una start-split y complete-split.

Ejemplo de transferencia interrupción OUT: el host envía una transacción start-split consistente en un paquete token especial SSPLIT, un token OUT y un paquete dedatos. El hub, algo después manda el token OUT y el paquete de datos al bus full-/low-speed. El dispositivo responde con un protocolo. Algo después, el host envía latransacción complete-split y el hub responde con los resultados (datos full-/low-speed o

protocolo) que el dispositivo ha cedido.

Host Hub Dispositivo

1startsplit

3complete

split

2Full-/Low-Speed

BusHigh-Speed

BusFull-/Low-Speed

SSPLIT

TOKEN OUT

DATA 0

ACK

TOKEN OUT

DATA 0

CSPLIT

ACK

TOKEN OUT

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 50/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

48

2.5.2.2. Paquetes Start-Of-Frame (SOF)

El host envía los SOF con un ratio nominal cada 1,00ms±0,0005ms en un busfull-speed y 125μs±0,0625μs en uno high-speed. Los paquetes SOF consisten en un PIDindicando el tipo de paquete seguido de un número de frame de 11bits.

LSb MSbCampo PID FrameNumber CRC5Bits 8 11 5

El token SOF comprende la transacción token-only que distribuye un marcador SOF y acompaña el FrameNumber con intervalos de tiempo precisos al comienzo de

cada frame. Todas las funciones high-speed y full-speed, incluyendo los hubs, reciben el paquete SOF. El token SOF no provoca la función recepción para generar un paquete deretorno, por tanto, un envío SOF a una función no tiene garantías.

El paquete SOF entrega dos trozos de información de tiempo. Una funcióninforma que ha ocurrido un SOF cuando este detecta el PID SOF.

En el Apéndice A del archivo de la norma del USB2.0 hay más informaciónsobre el orden de transferencia de paquetes en las transmisiones USB.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 51/651

GUILLERMO DAVID HERRERO GONZÁLEZ

49

2.6. ESTADOS D EL USB

Los distintos pasos hasta que el dispositivo se pueda utilizar son:

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 52/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

50

Unido Alimentado Por Defecto Direccionado Configurado Reposo

No - - - - - USB no unido

Si No - - - - USB sin alimentación

Si Si No - - -USB unido, conalimentación pero noreseteado

Si Si Si No - -

No tiene dirección, eldispositivo responde

con la dirección por defecto

Si Si Si Si No -Tiene una únicadirección pero no se haconfigurado

Si Si Si Si Si NoEl host puede usar eldispositivo

Si Si - - - Si

Dispositivo al mínimo.Unido, alimentado y sin

actividad en 3ms. Puedeestar direccionado yconfigurado. Se ha puesto en reposo porque el host no hamandado órdenes.

2.6.1. POR DEFECTO

Después de alimentar el dispositivo, puede que no responda ante una transacciónhasta que reciba un reset por el bus. Después del reset, el dispositivo tiene la dirección

por defecto.Cuando se completa el reset, el dispositivo funciona con su velocidad correcta.

La elección de la velocidad para, low- y full-speed (baja y media velocidad), sedetermina con las resistencias de terminación.

Un dispositivo que permita operaciones a high-speed (alta velocidad), determinaque puede operar a esta velocidad en el reset.

Un dispositivo que puede funcionar a high-speed se tiene que resetear correctamente a full-speed cuando se trabaja en un entorno full-speed. Después delreset, el dispositivo debe responder correctamente a la configuración del dispositivo y alas preguntas de los descriptores y devolver la información adecuada.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 53/651

GUILLERMO DAVID HERRERO GONZÁLEZ

51

2.6.2. DIRECCIONADO

Todos los dispositivos USB utilizan la dirección por defecto cuando sealimentan inicialmente o después de un reset. A cada dispositivo le asigna una únicadirección el host al unirlo o después de un reset. El dispositivo mantiene esta direccióncuando se pone en reposo.

Un dispositivo USB responde por la pipe por defecto cuando se le asigna unadirección o está en una por defecto.

2.6.3. CONFIGURACIÓN

Antes de utilizar el dispositivo, se tiene que configurar. Desde el punto de vistadel dispositivo, la configuración involucra la respuesta a un SetConfiguration() con un

valor de configuración distinto de cero.Al configurar o reconfigurar un dispositivo se logran todos los estados y valores

de configuración asociados a los Endpoint en la interfaz.

2.7. E NUMERACIÓN D EL BUS

Cuando se une o se quita un dispositivo USB del bus, el host realiza un procesoconocido como enumeración del bus para identificar y controlar los cambios necesariosen el estado del dispositivo. Cuando se conecte un dispositivo USB a un puertoalimentado, transcurren las siguientes acciones:

1. El hub al que se a unido el dispositivo informa al host por medio de unarespuesta del cambio de la pipe. En este punto, el dispositivo USB estáen el estado “Alimentado” y el puerto al que se ha unido desactivado.

2. El host determina la naturaleza exacta preguntando al hub.3. Ahora el host conoce el puerto al cual está conectado el dispositivo, el

host espera 100ms para que se complete el proceso de inserción y paraque la alimentación del dispositivo se vuelva estable. El host activa el

puerto y manda un reset al mismo.4. El hub realiza el proceso requerido para el reset en este puerto. Cuando la

señal de reset se ha completado, el puerto se activa. El dispositivo USBestá en el estado “por defecto” y no puede consumir más de 100mA delVBUS. Todos estos registros y estados se han reseteado y responden alestado “Por Defecto”.

5. El host asigna una dirección única al dispositivo USB, trasladando aldispositivo al estado “Direccionado”.

6. Antes de que el dispositivo tenga una única dirección, se accede a la pipede control por defecto por la dirección por defecto. El host lee eldescriptor del dispositivo para determinar cual es el máximo del tamañode los datos útiles que utiliza el dispositivo en la pipe por defecto.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 54/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

52

7. El host lee la información de configuración del dispositivo leyendo laconfiguración de 0 hasta n-1, donde n es el número de configuraciones.

Este proceso puede tardar varios milisegundos.8. Basándose en la información de configuración y cómo se debe usar eldispositivo USB, el host asigna un valor de configuración al dispositivo.El dispositivo está en el estado “Configurado” y todos los Endpoints deesta configuración están como se indica en sus características. Eldispositivo USB puede que no tenga la energía que indica en suscaracterísticas. Desde el punto de vista del dispositivo, está listo parausarse.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 55/651

3. MICROCONTROLADORES

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 56/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 57/651

55

3. MICRONTROLADORES

3.1. I NTRODUCCIÓN A LOS M ICROCONTROLADORES

Los microcontroladores están conquistando el mundo. Están presentes ennuestro trabajo, en nuestra casa y en nuestra vida, en general. Se pueden encontrar controlando el funcionamiento de los ratones y teclados de los computadores, en losteléfonos, en los hornos microondas y los televisores de nuestro hogar. Pero la invasiónacaba de comenzar y el nacimiento del siglo XXI será testigo de la conquista masiva deestos diminutos computadores, que gobernarán la mayor parte de los aparatos quefabricaremos y usamos los humanos.

3.1.1. CONTROLADOR Y MICROCONTROLADOR

Recibe el nombre de controlador el dispositivo que se emplea para el gobiernode uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento deun horno dispone de un sensor que mide constantemente su temperatura interna y,cuando traspasa los límites prefijados, genera las señales adecuadas que accionan losefectores que intentan llevar el valor de la temperatura dentro del rango estipulado.

Aunque el concepto de controlador ha permanecido invariable a través deltiempo, su implementación física ha variado frecuentemente. Hace tres décadas, loscontroladores se construían exclusivamente con componentes de lógica discreta,

posteriormente se emplearon los microprocesadores, que se rodeaban con chips dememoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos loselementos del controlador se han podido incluir en un chip, el cual recibe el nombre demicrocontrolador. Realmente consiste en un sencillo pero completo computador contenido en el corazón (chip) de un circuito integrado.

Un microcontrolador es un circuito integrado, de alta escala de integración, queincorpora la mayor parte de los elementos que configuran un controlador.

Un microcontrolador dispone normalmente de los siguientes componentes:

Ê Procesador o UCP (Unidad Central de Proceso).Ê Memoria RAM para Contener los datos.Ê Memoria para el programa tipo ROM/PROM/EPROM.Ê Líneas de E/S para comunicarse con el exterior.Ê Diversos módulos para el control de periféricos (temporizadores, Puertos

Serie y Paralelo, CAD: Conversores Analógico/Digital, CDA:Conversores Digital/Analógico, etc.).

Ê Generador de impulsos de reloj que sincronizan el funcionamiento detodo el sistema.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 58/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

56

Los productos que para su regulación incorporan un microcontrolador disponende las siguientes ventajas:

Ê Aumento de prestaciones: un mayor control sobre un determinadoelemento representa una mejora considerable en el mismo.

Ê Aumento de la fiabilidad: al reemplazar el microcontrolador por unelevado número de elementos disminuye el riesgo de averías y se

precisan menos ajustes.Ê Reducción del tamaño en el producto acabado: La integración del

microcontrolador en un chip disminuye el volumen, la mano de obra ylos stocks.

Ê Mayor flexibilidad: las características de control están programadas por lo que su modificación sólo necesita cambios en el programa de

instrucciones.El microcontrolador es en definitiva un circuito integrado que incluye todos los

componentes de un computador. Debido a su reducido tamaño es posible montar elcontrolador en el propio dispositivo al que gobierna. En este caso el controlador recibeel nombre de controlador empotrado (embedded controller).

3.1.2. DIFERENCIA ENTRE MICROPROCESADOR Y MICROCONTROLADOR

El microprocesador es un circuito integrado que contiene la Unidad Central deProceso (UCP), también llamada procesador, de un computador. La UCP está formada

por la Unidad de Control, que interpreta las instrucciones, y el Camino de Datos, que las

ejecuta.Las terminales de un microprocesador sacan al exterior las líneas de sus buses de

direcciones, datos y control, para permitir conectarle con la Memoria y los Módulos deE/S y configurar un computador implementado por varios circuitos integrados. Se diceque un microprocesador es un sistema abierto porque su configuración es variable deacuerdo con la aplicación a la que se destine.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 59/651

GUILLERMO DAVID HERRERO GONZÁLEZ

57

Si sólo se dispusiese de un modelo de microcontrolador, éste debería tener muy potenciados todos sus recursos para poderse adaptar a las exigencias de las diferentes

aplicaciones. Esta potenciación supondría en muchos casos un despilfarro. En la práctica cada fabricante de microcontroladores oferta un elevado número de modelosdiferentes, desde los más sencillos hasta los más poderosos. Es posible seleccionar lacapacidad de las memorias, el número de líneas de E/S, la cantidad y potencia de loselementos auxiliares, la velocidad de funcionamiento, etc. Por todo ello, un aspecto muydestacado del diseño es la selección del microcontrolador a utilizar.

3.1.3. APLICACIONES DE LOS MICROCONTROLADORES

Cada vez existen más productos que incorporan un microcontrolador con el finde aumentar sustancialmente sus prestaciones, reducir su tamaño y coste, mejorar su

fiabilidad y disminuir el consumo.Algunos fabricantes de microcontroladores superan el millón de unidades de un

modelo determinado producidas en una semana. Este dato puede dar una idea de lamasiva utilización de estos componentes.

Los microcontroladores están siendo empleados en multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas,frigoríficos, televisores, computadoras, impresoras, módems, el sistema de arranque denuestro coche, etc. Y otras aplicaciones con las que seguramente no estaremos tanfamiliarizados como instrumentación electrónica, control de sistemas en una naveespacial, etc. Una aplicación típica podría emplear varios microcontroladores para

controlar pequeñas partes del sistema. Estos pequeños controladores podríancomunicarse entre ellos y con un procesador central, probablemente más potente, paracompartir la información y coordinar sus acciones, como, de hecho, ocurre yahabitualmente en cualquier PC.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 60/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

58

3.1.4. EL MERCADO DE LOS MICROCONTROLADORES

Aunque en el mercado de la microinformática la mayor atención la acaparan losdesarrollos de los microprocesadores, lo cierto es que se venden cientos demicrocontroladores por cada uno de aquéllos.

Existe una gran diversidad de microcontroladores. Quizá la clasificación másimportante sea entre microcontroladores de 4, 8, 16 ó 32 bits. Aunque las prestacionesde los microcontroladores de 16 y 32 bits son superiores a los de 4 y 8 bits, la realidades que los microcontroladores de 8 bits dominan el mercado y los de 4 bits se resisten adesaparecer. La razón de esta tendencia es que los microcontroladores de 4 y 8 bits sonapropiados para la gran mayoría de las aplicaciones, lo que hace absurdo emplear micros más potentes y consecuentemente más caros. Uno de los sectores que más tira

del mercado del microcontrolador es el mercado automovilístico. De hecho, algunas delas familias de microcontroladores actuales se desarrollaron pensando en este sector,siendo modificadas posteriormente para adaptarse a sistemas más genéricos. El mercadodel automóvil es además uno de los más exigentes: los componentes electrónicos debenoperar bajo condiciones extremas de vibraciones, choques, ruido, etc. y seguir siendofiables. El fallo de cualquier componente en un automóvil puede ser el origen de unaccidente.

En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidadde los microcontroladores actuales se fabrican con tecnología CMOS 4(Complementary Metal Oxide Semiconductor). Esta tecnología supera a las técnicasanteriores por su bajo consumo y alta inmunidad al ruido.

La distribución de las ventas según su aplicación es la siguiente:

Ê Una tercera parte se absorbe en las aplicaciones relacionadas con loscomputadores y sus periféricos.

Ê La cuarta parte se utiliza en las aplicaciones de consumo(electrodomésticos, juegos, TV, vídeo, etc.)

Ê El 16% de las ventas mundiales se destinó al área de las comunicaciones.Ê Otro 16% fue empleado en aplicaciones industriales.Ê El resto de los microcontroladores vendidos en el mundo,

aproximadamente un 10% fueron adquiridos por las industrias de

automoción.También los modernos microcontroladores de 32 bits van afianzando sus

posiciones en el mercado, siendo las áreas de más interés el procesamiento de imágenes,las comunicaciones, las aplicaciones militares, los procesos industriales y el control delos dispositivos de almacenamiento masivo de datos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 61/651

GUILLERMO DAVID HERRERO GONZÁLEZ

59

3.2. ¿QUÉ M ICROCONTROLADOR E MPLEAR?

A la hora de escoger el microcontrolador a emplear en un diseño concreto hayque tener en cuenta multitud de factores, como la documentación y herramientas dedesarrollo disponibles y su precio, la cantidad de fabricantes que lo producen y por supuesto las características del microcontrolador (tipo de memoria de programa, númerode temporizadores, interrupciones, etc.):

Ê Costes. Como es lógico, los fabricantes de microcontroladores compitenduramente para vender sus productos. Y no les va demasiado mal ya quesin hacer demasiado ruido venden 10 veces más microcontroladores quemicroprocesadores.

Para que nos hagamos una idea, para el fabricante que usa elmicrocontrolador en su producto una diferencia de precio en elmicrocontrolador de algunas pesetas es importante (el consumidor deberá pagar además el coste del empaquetado, el de los otroscomponentes, el diseño del hardware y el desarrollo del software). Si elfabricante desea reducir costes debe tener en cuenta las herramientas deapoyo con que va a contar: emuladores, simuladores, ensambladores,compiladores, etc. Es habitual que muchos de ellos siempre se decanten

por microcontroladores pertenecientes a una única familia.Ê Aplicación. Antes de seleccionar un microcontrolador es imprescindible

analizar los requisitos de la aplicación:9

Procesamiento de datos: puede ser necesario que elmicrocontrolador realice cálculos críticos en un tiempo limitado.En ese caso debemos asegurarnos de seleccionar un dispositivosuficientemente rápido para ello. Por otro lado, habrá que tener en cuenta la precisión de los datos a manejar: si no es suficientecon un microcontrolador de 8 bits, puede ser necesario acudir amicrocontroladores de 16 ó 32 bits, o incluso a hardware de comaflotante. Una alternativa más barata y quizá suficiente es usar librerías para manejar los datos de alta precisión.

9 Entrada Salida: para determinar las necesidades deEntrada/Salida del sistema es conveniente dibujar un diagrama de

bloques del mismo, de tal forma que sea sencillo identificar lacantidad y tipo de señales a controlar. Una vez realizado esteanálisis puede ser necesario añadir periféricos hardware externoso cambiar a otro microcontrolador más adecuado a ese sistema.

9 Consumo: algunos productos que incorporan microcontroladoresestán alimentados con baterías y su funcionamiento puede ser tanvital como activar una alarma antirrobo. Lo más conveniente enun caso como éste puede ser que el microcontrolador esté enestado de bajo consumo pero que despierte ante la activación deuna señal (una interrupción) y ejecute el programa adecuado para

procesarla.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 62/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

60

9 Memoria: para detectar las necesidades de memoria de nuestraaplicación debemos separarla en memoria volátil (RAM),

memoria no volátil (ROM, EPROM, etc.) y memoria no volátilmodificable (EEPROM). Este último tipo de memoria puede ser útil para incluir información específica de la aplicación como unnúmero de serie o parámetros de calibración.El tipo de memoria a emplear vendrá determinado por el volumende ventas previsto del producto: de menor a mayor volumen seráconveniente emplear EPROM, OTP y ROM. En cuanto a lacantidad de memoria necesaria puede ser imprescindible realizar una versión preliminar, aunque sea en seudo-código, de laaplicación y a partir de ella hacer una estimación de cuántamemoria volátil y no volátil es necesaria y si es conveniente

disponer de memoria no volátil modificable.9 Ancho de palabra: el criterio de diseño debe ser seleccionar el

microcontrolador de menor ancho de palabra que satisfaga losrequerimientos de la aplicación. Usar un microcontrolador de 4

bits supondrá una reducción en los costes importante, mientrasque uno de 8 bits puede ser el más adecuado si el ancho de losdatos es de un byte. Los microcontroladores de 16 y 32 bits,debido a su elevado coste, deben reservarse para aplicaciones querequieran sus altas prestaciones (Entrada/Salida potente o espaciode direccionamiento muy elevado).

9 Diseño de la placa: la selección de un microcontrolador concretocondicionará el diseño de la placa de circuitos. Debe tenerse encuenta que quizá usar un microcontrolador barato encarezca elresto de componentes del diseño.

Los microcontroladores más populares se encuentran, sin duda, entre las mejoreselecciones:

Ê 8048 (Intel). Es el padre de los microcontroladores actuales, el primerode todos. Su precio, disponibilidad y herramientas de desarrollo hacenque todavía sea muy popular.

Ê 8051 (Intel y otros). Es sin duda el microcontrolador más popular. Fácilde programar, pero potente. Está bien documentado y posee cientos devariantes e incontables herramientas de desarrollo.

Ê 80186, 80188 y 80386 EX (Intel). Versiones en microcontrolador de los populares microprocesadores 8086 y 8088. Su principal ventaja es que permiten aprovechar las herramientas de desarrollo para PC.

Ê 68HC11 (Motorola y Toshiba). Es un microcontrolador de 8 bits potente y popular con gran cantidad de variantes.

Ê 683xx (Motorola). Surgido a partir de la popular familia 68k, a la que seincorporan algunos periféricos. Son microcontroladores de altísimas

prestaciones.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 63/651

GUILLERMO DAVID HERRERO GONZÁLEZ

61

Ê PIC (MicroChip). Familia de microcontroladores que gana popularidaddía a día. Fueron los primeros microcontroladores RISC.

Es preciso resaltar en este punto que existen innumerables familias demicrocontroladores, cada una de las cuales posee un gran número de variantes.

3.2.1. RECURSOS COMUNES A TODOS LOS MICROCONTROLADORES

Al estar todos los microcontroladores integrados en un chip, su estructurafundamental y sus características básicas son muy parecidas. Todos deben disponer delos bloques esenciales Procesador, memoria de datos y de instrucciones, líneas de E/S,oscilador de reloj y módulos controladores de periféricos. Sin embargo, cada fabricanteintenta enfatizar los recursos más idóneos para las aplicaciones a las que se destinan

preferentemente.

En este apartado se hace un recorrido de todos los recursos que se hallan entodos los microcontroladores describiendo las diversas alternativas y opciones que

pueden encontrarse según el modelo seleccionado.

3.2.1.1. Arquitectura Básica

Aunque inicialmente todos los microcontroladores adoptaron la arquitecturaclásica de von Neumann, en el momento presente se impone la arquitectura Harvard. Laarquitectura de von Neumann se caracteriza por disponer de una sola memoria principaldonde se almacenan datos e instrucciones de forma indistinta. A dicha memoria seaccede a través de un sistema de buses único (direcciones, datos y control).

La arquitectura Harvard dispone de dos memorias independientes una, quecontiene sólo instrucciones y otra, sólo datos. Ambas disponen de sus respectivossistemas de buses de acceso y es posible realizar operaciones de acceso (lectura oescritura) simultáneamente en ambas memorias.

Los microcontroladores PIC responden a la arquitectura Harvard.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 64/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

62

3.2.1.2. El Procesador O CPU

Es el elemento más importante del microcontrolador y determina sus principalescaracterísticas, tanto a nivel hardware como software.

Se encarga de direccionar la memoria de instrucciones, recibir el código OP dela instrucción en curso, su decodificación y la ejecución de la operación que implica lainstrucción, así como la búsqueda de los operandos y el almacenamiento del resultado.

Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales.

Ê CISC: Un gran número de procesadores usados en losmicrocontroladores están basados en la filosofía CISC (Computadores deJuego de Instrucciones Complejo). Disponen de más de 80 instrucciones

máquina en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución.

Una ventaja de los procesadores CISC es que ofrecen al programador instrucciones complejas que actúan como macros.

Ê RISC: Tanto la industria de los computadores comerciales como la delos microcontroladores están decantándose hacia la filosofía RISC(Computadores de Juego de Instrucciones Reducido). En estos

procesadores el repertorio de instrucciones máquina es muy reducido ylas instrucciones son simples y, generalmente, se ejecutan en un ciclo.

La sencillez y rapidez de las instrucciones permiten optimizar elhardware y el software del procesador.

Ê SISC: En los microcontroladores destinados a aplicaciones muyconcretas, el juego de instrucciones, además de ser reducido, es“específico”, o sea, las instrucciones se adaptan a las necesidades de laaplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC(Computadores de Juego de Instrucciones Específico).

3.2.1.3. Memoria

En los microcontroladores la memoria de instrucciones y datos está integrada enel propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el

programa de instrucciones que gobierna la aplicación. Otra parte de memoria será tipo

RAM, volátil, y se destina a guardar las variables y los datos.Hay dos peculiaridades que diferencian a los microcontroladores de los

computadores personales:

Ê No existen sistemas de almacenamiento masivo como disco duro odisquetes.

Ê Como el microcontrolador sólo se destina a una tarea en la memoriaROM, sólo hay que almacenar un único programa de trabajo.

La RAM en estos dispositivos es de poca capacidad pues sólo debe contener lasvariables y los cambios de información que se produzcan en el transcurso del programa.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 65/651

GUILLERMO DAVID HERRERO GONZÁLEZ

63

Por otra parte, como sólo existe un programa activo, no se requiere guardar una copiadel mismo en la RAM pues se ejecuta directamente desde la ROM.

Los usuarios de computadores personales están habituados a manejar Megabytesde memoria, pero, los diseñadores con microcontroladores trabajan con capacidades deROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y512 bytes.

Según el tipo de memoria ROM que dispongan los microcontroladores, laaplicación y utilización de los mismos es diferente. Se describen las cinco versiones dememoria no volátil que se pueden encontrar en los microcontroladores del mercado.

3.2.1.4. ROM Con Máscara

Es una memoria no volátil de sólo lectura cuyo contenido se graba durante lafabricación del chip. El elevado coste del diseño de la máscara sólo hace aconsejable elempleo de los microcontroladores con este tipo de memoria cuando se precisancantidades superiores a varios miles de unidades.

3.2.1.5. OTP

El microcontrolador contiene una memoria no volátil de sólo lectura“programable una sola vez” por el usuario. OTP (One Time Programmable). Es elusuario quien puede escribir el programa en el chip mediante un sencillo grabador controlado por un programa desde un PC.

La versión OTP es recomendable cuando es muy corto el ciclo de diseño del producto, o bien, en la construcción de prototipos y series muy pequeñas.

Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptaciónmediante fusibles para proteger el código contenido.

3.2.1.6. EPROM

Los microcontroladores que disponen de memoria EPROM (ErasableProgrammable Read OnIy Memory) pueden borrarse y grabarse muchas veces. Lagrabación se realiza, como en el caso de los OTP, con un grabador gobernado desde unPC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal

en su superficie por la que se somete a la EPROM a rayos ultravioleta durante variosminutos. Las cápsulas son de material cerámico y son más caros que losmicrocontroladores con memoria OTP que están hechos con material plástico.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 66/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

64

3.2.1.7. EEPROM

Se trata de memorias de sólo lectura, programables y borrables eléctricamenteEEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control programado de un PC. Es muy cómoda y rápida la operación de grabadoy la de borrado. No disponen de ventana de cristal en la superficie.

Los microcontroladores dotados de memoria EEPROM una vez instalados en elcircuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dichocircuito. Para ello se usan “grabadores en circuito” que confieren una gran flexibilidad yrapidez a la hora de realizar modificaciones en el programa de trabajo.

El número de veces que puede grabarse y borrarse una memoria EEPROM es

finito, por lo que no es recomendable una reprogramación continua. Son muy idóneos para la enseñanza y la Ingeniería de diseño.

Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona dememoria EEPROM en los circuitos programables para guardar y modificar cómodamente una serie de parámetros que adecuan el dispositivo a las condiciones delentorno.

Este tipo de memoria es relativamente lenta.

3.2.1.8. FLASH

Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y

borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña.A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es

más rápida y de mayor densidad que la EEPROM.

La alternativa FLASH está recomendada frente a la EEPROM cuando se precisagran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos deescritura/borrado.

Las memorias EEPROM y FLASH son muy útiles al permitir que losmicrocontroladores que las incorporan puedan ser reprogramados “en circuito”, es decir,sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de

memoria incorporado al control del motor de un automóvil permite que puedamodificarse el programa durante la rutina de mantenimiento periódico, compensandolos desgastes y otros factores tales como la compresión, la instalación de nuevas piezas,etc. La reprogramación del microcontrolador puede convertirse en una labor rutinariadentro de la puesta a punto.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 67/651

GUILLERMO DAVID HERRERO GONZÁLEZ

65

3.2.1.9. Puertos De Entrada Y Salida

La principal utilidad de las terminales que posee la cápsula que contiene unmicrocontrolador es soportar las líneas de E/S que comunican al computador internocon los periféricos exteriores.

Según los controladores de periféricos que posea cada modelo demicrocontrolador, las líneas de E/S se destinan a proporcionar el soporte a las señales deentrada, salida y control.

3.2.1.10. Reloj Principal

Todos los microcontroladores disponen de un circuito oscilador que genera unaonda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la

sincronización de todas las operaciones del sistema.Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo

se necesitan unos pocos componentes exteriores para seleccionar y estabilizar lafrecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo juntoa elementos pasivos o bien un resonador cerámico o una red R-C.

Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutanlas instrucciones pero lleva aparejado un incremento del consumo de energía.

3.2.2. RECURSOS ESPECIALES

Cada fabricante oferta numerosas versiones de una arquitectura básica demicrocontrolador. En algunas amplía las capacidades de las memorias, en otrasincorpora nuevos recursos, en otras reduce las prestaciones al mínimo para aplicacionesmuy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfagatodos los requerimientos de su aplicación. De esta forma, minimizará el coste, elhardware y el software.

Los principales recursos específicos que incorporan los microcontroladores son:

Ê Temporizadores o “Timers”.Ê Perro guardián o “Watchdog”.Ê Protección ante fallo de alimentación o “Brownout”.Ê Estado de reposo o de bajo consumo.Ê Conversor A/D.Ê Conversor D/A.Ê Comparador analógico.Ê Modulador de anchura de impulsos o PWM.Ê Puertos de E/S digitales.Ê Puertos de comunicación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 68/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

66

3.2.2.1. Temporizadores O “Timers”

Se emplean para controlar periodos de tiempo (temporizadores) y para llevar lacuenta de acontecimientos que suceden en el exterior (contadores).

Para la medida de tiempos se carga un registro con el valor adecuado y acontinuación dicho valor se va incrementando o decrementando al ritmo de los impulsosde reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el que se

produce un aviso.

Cuando se desean contar acontecimientos que se materializan por cambios denivel o flancos en alguna de las terminales del microcontrolador, el mencionado registrose va incrementando o decrementando al ritmo de dichos impulsos.

3.2.2.2. Perro Guardián O “Watchdog” Cuando el computador personal se bloquea por un fallo del software u otra

causa, se pulsa el botón del reset y se reinicializa el sistema. Pero un microcontrolador funciona sin el control de un supervisor y de forma continuada las 24 horas del día. ElPerro guardián consiste en un temporizador que, cuando se desborda y pasa por 0,

provoca un reset automáticamente en el sistema.

Se debe diseñar el programa de trabajo que controla la tarea de forma querefresque o inicialice al Perro guardián antes de que provoque el reset. Si falla el

programa o se bloquea, no se refrescará al Perro guardián y, al completar sutemporización, “ladrará y ladrará” hasta provocar el reset.

3.2.2.3. Protección Ante Fallo De Alimentación O “Brownout”

Se trata de un circuito que resetea al microcontrolador cuando el voltaje dealimentación (VDD) es inferior a un voltaje mínimo (“brownout”). Mientras el voltaje dealimentación sea inferior al de brownout el dispositivo se mantiene reseteado,comenzando a funcionar normalmente cuando sobrepasa dicho valor.

3.2.2.4. Estado De Reposo O De Bajo Consumo

Son abundantes las situaciones reales de trabajo en que el microcontrolador debeesperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga de

nuevo en funcionamiento. Para ahorrar energía, (factor clave en los aparatos portátiles),los microcontroladores disponen de una instrucción especial (SLEEP en los PIC), queles pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de

potencia son mínimos. En dicho estado se detiene el reloj principal y se “congelan” suscircuitos asociados, quedando sumido en un profundo “sueño” el microcontrolador. Alactivarse una interrupción ocasionada por el acontecimiento esperado, elmicrocontrolador se despierta y reanuda su trabajo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 69/651

GUILLERMO DAVID HERRERO GONZÁLEZ

67

3.2.2.5. Conversor A/D (CAD)

Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital) pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen disponer de un multiplexor que permite aplicar a la entrada del CAD diversas señales analógicasdesde las terminales del circuito integrado.

3.2.2.6. Conversor D/A (CDA)

Transforma los datos digitales obtenidos del procesamiento del computador ensu correspondiente señal analógica que saca al exterior por una de las terminales de lacápsula. Existen muchos efectores que trabajan con señales analógicas.

3.2.2.7. Comparador Analógico

Algunos modelos de microcontroladores disponen internamente de unAmplificador Operacional que actúa como comparador entre una señal fija de referenciay otra variable que se aplica por una de las terminales de la cápsula. La salida delcomparador proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor quela otra.

También hay modelos de microcontroladores con un módulo de tensión dereferencia que proporciona diversas tensiones de referencia que se pueden aplicar en loscomparadores.

3.2.2.8. Modulador De Anchura De Pulsos O PWM

Son circuitos que proporcionan en su salida impulsos de anchura variable, que seofrecen al exterior a través de las terminales del encapsulado.

3.2.2.9. Puertos De E/S Digitales

Todos los microcontroladores destinan algunas de sus terminales a soportar líneas de E/S digitales. Por lo general, estas líneas se agrupan de ocho en ochoformando Puertos.

Las líneas digitales de los puertos pueden configurarse como Entrada o comoSalida cargando un 1 ó un 0 en el bit correspondiente de un registro destinado a su

configuración.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 70/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

68

3.2.2.10. Puertos De Comunicación

Con objeto de dotar al microcontrolador de la posibilidad de comunicarse conotros dispositivos externos, otros buses de microprocesadores, buses de sistemas, busesde redes y poder adaptarlos con otros elementos bajo otras normas y protocolos.Algunos modelos disponen de recursos que permiten directamente esta tarea, entre losque destacan:

Ê UART, adaptador de comunicación serie asíncrona.Ê USART, adaptador de comunicación serie síncrona y asíncronaÊ Puerto paralela esclava para poder conectarse con los buses de otros

microprocesadores.Ê USB (Universal Serial Bus), que es un moderno bus serie para los PC.Ê

Bus I

2

C, que es un interfaz serie de dos hilos desarrollado por Philips.Ê CAN (Controller Area Network), para permitir la adaptación con redesde conexionado multiplexado desarrollado conjuntamente por Bosch eIntel para el cableado de dispositivos en automóviles. En EE.UU. se usael J185O.

3.2.3. HERRAMIENTAS PARA EL DESARROLLO DE APLICACIONES

Uno de los factores que más importancia tiene a la hora de seleccionar unmicrocontrolador entre todos los demás es el soporte tanto software como hardware deque dispone. Un buen conjunto de herramientas de desarrollo puede ser decisivo en laelección, ya que pueden suponer una ayuda inestimable en el desarrollo del proyecto.

Las principales herramientas de ayuda al desarrollo de sistemas basados enmicrocontroladores son:

3.2.3.1. Desarrollo Del Software:

Ensamblador. La programación en lenguaje ensamblador puede resultar untanto ardua para el principiante, pero permite desarrollar programas muy eficientes, yaque otorga al programador el dominio absoluto del sistema. Los fabricantes suelen

proporcionar el programa ensamblador de forma gratuita y en cualquier caso siempre se puede encontrar una versión gratuita para los microcontroladores más populares.

Compilador. La programación en un lenguaje de alto nivel (como el C) permitedisminuir el tiempo de desarrollo de un producto. No obstante, si no se programa concuidado, el código resultante puede ser mucho más ineficiente que el programado enensamblador. Las versiones más potentes suelen ser muy caras, aunque para losmicrocontroladores más populares pueden encontrarse versiones demo limitadas eincluso compiladores gratuitos.

Depuración. Debido a que los microcontroladores van a controlar dispositivosfísicos, los desarrolladores necesitan herramientas que les permitan comprobar el buenfuncionamiento del microcontrolador cuando es conectado al resto de circuitos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 71/651

GUILLERMO DAVID HERRERO GONZÁLEZ

69

Simulador. Son capaces de ejecutar en un PC programas realizados para elmicrocontrolador. Los simuladores permiten tener un control absoluto sobre la

ejecución de un programa, siendo ideales para la depuración de los mismos. Su graninconveniente es que es difícil simular la entrada y salida de datos del microcontrolador.Tampoco cuentan con los posibles ruidos en las entradas, pero, al menos, permiten el

paso físico de la implementación de un modo más seguro y menos costoso, puesto queahorraremos en grabaciones de chips para la prueba in-situ.

Placas de evaluación. Se trata de pequeños sistemas con un microcontrolador ya montado y que suelen conectarse a un PC desde el que se cargan los programas quese ejecutan en el microcontrolador. Las placas suelen incluir visualizadores LCD,teclados, LEDs, fácil acceso a los pines de E/S, etc. El sistema operativo de la placarecibe el nombre de programa monitor. El programa monitor de algunas placas de

evaluación, aparte de permitir cargar programas y datos en la memoria delmicrocontrolador, puede permitir en cualquier momento realizar ejecución paso a paso,monitorizar el estado del microcontrolador o modificar los valores almacenados losregistros o en la memoria.

Emuladores en circuito. Se trata de un instrumento que se coloca entre el PCanfitrión y el zócalo de la tarjeta de circuito impreso donde se alojará elmicrocontrolador definitivo. El programa es ejecutado desde el PC, pero para la tarjetade aplicación es como si lo hiciese el mismo microcontrolador que luego irá en elzócalo. Presenta en pantalla toda la información tal y como luego sucederá cuando secoloque la cápsula.

3.3. L A F AMILIA D E LOS PIC COMO E LECCIÓN

¿Qué es lo que ocurre con los PIC?, ¿Por qué están en boca de todos? Hemos buscado en multitud de bibliografía y realmente nadie da una respuesta concreta, perouna aproximación a la realidad puede ser esta:

Los PIC tienen “ángel”, tienen “algo” que fascina a los diseñadores, puede ser lavelocidad, el precio, la facilidad de uso, la información, las herramientas de apoyo...Quizás un poco de todo eso es lo que produce esa imagen de sencillez y utilidad. Es

probable que en un futuro próximo otra familia de microcontroladores le arrebate ese“algo”.

Queremos constatar que para las aplicaciones más habituales (casi un 90%) laelección de una versión adecuada de PIC es la mejor solución; sin embargo, dado sucarácter general, otras familias de microcontroladores son más eficaces en aplicacionesespecíficas, especialmente si en ellas predomina una característica concreta, que puedeestar muy desarrollada en otra familia.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 72/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

70

Los detalles más importantes que vuelven “locos” a los profesionales de lamicroelectrónica y microinformática y las razones de la excelente acogida que tienen los

PIC son los siguientes:Ê Sencillez de manejo: Tienen un juego de instrucciones reducido; 35 en la

gama media.Ê Buena información, fácil de conseguir y económica.Ê Precio: Su coste es comparativamente inferior al de sus competidores.Ê Poseen una elevada velocidad de funcionamiento. Buen promedio de

parámetros: velocidad, consumo, tamaño, alimentación, códigocompacto, etc.

Ê Herramientas de desarrollo fáciles y baratas. Muchas herramientassoftware se pueden recoger libremente a través de Internet desde

Microchip (http://www.microchip.com).Ê Existe una gran variedad de herramientas hardware que permiten grabar,depurar, borrar y comprobar el comportamiento de los PIC.

Ê Diseño rápido.Ê La gran variedad de modelos de PIC permite elegir el que mejor

responde a los requerimientos de la aplicación.

Una de las razones del éxito de los PIC se basa en su utilización. Cuando seaprende a manejar uno de ellos, conociendo su arquitectura y su repertorio deinstrucciones, es muy fácil emplear otro modelo.

3.3.1. CARACTERÍSTICAS RELEVANTES

Descripción de las características más representativas de los PIC:

3.3.1.1. Arquitectura

La arquitectura del procesador sigue el modelo Harvard. En esta arquitectura, laCPU se conecta de forma independiente y con buses distintos con la memoria deinstrucciones y con la de datos.

La arquitectura Harvard permite a la CPU acceder simultáneamente a las dosmemorias. Además, propicia numerosas ventajas al funcionamiento del sistema como seirán describiendo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 73/651

GUILLERMO DAVID HERRERO GONZÁLEZ

71

3.3.1.2. Segmentación

Se aplica la técnica de segmentación (“pipe-line”) en la ejecución de lasinstrucciones.

La segmentación permite al procesador realizar al mismo tiempo la ejecución deuna instrucción y la búsqueda del código de la siguiente. De esta forma se puedeejecutar cada instrucción en un ciclo (un ciclo de instrucción equivale a cuatro ciclos dereloj).

Las instrucciones de salto ocupan dos ciclos al no conocer la dirección de lasiguiente instrucción hasta que no se haya completado la de bifurcación.

3.3.1.3. Formato De Las Instrucciones

El formato de todas las instrucciones es de la misma longitudTodas las instrucciones de los microcontroladores de la gama baja tienen una

longitud de 12 bits. Las de la gama media tienen 14 bits y más las de la gama alta. Estacaracterística es muy ventajosa en la optimización de la memoria de instrucciones yfacilita enormemente la construcción de ensambladores y compiladores.

3.3.1.4. Juego De Instrucciones

Procesador RISC (Computador de Juego de Instrucciones Reducido).

Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35

los de la gama media y casi 60 los de la alta.3.3.1.5. Todas Las Instrucciones Son Ortogonales

Cualquier instrucción puede manejar cualquier elemento de la arquitectura comofuente o como destino.

3.3.1.6. Arquitectura Basada En Un “Banco De Registros”

Esto significa que todos los objetos del sistema (puertos de E/S, temporizadores, posiciones de memoria, etc.) están implementados físicamente como registros.

3.3.1.7. Diversidad De Modelos De Microcontroladores Con Prestaciones Y Recursos Diferentes

La gran variedad de modelos de microcontroladores PIC permite que el usuario pueda seleccionar el más conveniente para su proyecto.

3.3.1.8. Herramientas De Soporte Potentes Y Económicas

La empresa Microchip y otras que utilizan los PIC ponen a disposición de losusuarios numerosas herramientas para desarrollar hardware y software. Son muyabundantes los programadores, los simuladores software, los emuladores en tiempo real,Ensambladores, Compiladores C, Intérpretes y Compiladores BASIC, etc.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 74/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

72

La arquitectura Harvard y la técnica de segmentación son los principalesrecursos en los que se apoya el elevado rendimiento que caracteriza estos dispositivos

programables, mejorando dos características esenciales:Velocidad de ejecución.

Eficiencia en la compactación del código.

3.3.2. LAS GAMAS DE PIC

Una de las labores más importantes del ingeniero de diseño es la elección delmicrocontrolador que mejor satisfaga las necesidades del proyecto con el mínimo

presupuesto.

Para resolver aplicaciones sencillas se precisan pocos recursos, en cambio, las

aplicaciones grandes requieren numerosos y potentes. Siguiendo esta filosofíaMicrochip construye diversos modelos de microcontroladores orientados a cubrir, deforma óptima, las necesidades de cada proyecto. Así, hay disponiblesmicrocontroladores sencillos y baratos para atender las aplicaciones simples y otroscomplejos y más costosos para las de mucha envergadura.

Microchip dispone de cuatro familias de microcontroladores de 8 bits paraadaptarse a las necesidades de la mayoría de los clientes potenciales.

En la mayor parte de la bibliografía encontrareis tan solo tres familias demicrocontroladores, con lo que habrán despreciado la llamada gama enana, que es enrealidad una subfamilia formada por componentes pertenecientes a las otras gamas. En

nuestro caso hemos preferido comentarla dado que los PIC enanos son muy apreciadosen las aplicaciones de control de personal, en sistemas de seguridad y en dispositivos de

bajo consumo que gestionan receptores y transmisores de señales. Su pequeño tamañolos hace ideales en muchos proyectos donde esta cualidad es fundamental.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 75/651

GUILLERMO DAVID HERRERO GONZÁLEZ

73

3.3.2.1. La Gama Enana: PIC12C(F)XXX De Terminales

Se trata de un grupo de PIC de reciente aparición que ha acaparado la atencióndel mercado. Su principal característica es su reducido tamaño, al disponer todos suscomponentes de 8 terminales. Se alimentan con un voltaje de corriente continuacomprendido entre 2,5 V y 5,5 V, y consumen menos de 2 mA cuando trabajan a 5 V y4MHz. El formato de sus instrucciones puede ser de 12 o de 14 bits y su repertorio es de33 o 35 instrucciones, respectivamente. En la figura se muestra el diagrama deconexionado de uno de estos PIC.

Aunque los PIC enanos sólo tienen 8 terminales, pueden destinar hasta 6 comolíneas de E/S para los periféricos porque disponen de un oscilador interno R-C.

En la tabla se presentan las principales características de los modelos de estasubfamilia, que el fabricante tiene la intención de potenciar en un futuro próximo. Losmodelos 12C5xx pertenecen a la gama baja, siendo el tamaño de las instrucciones de 12

bits; mientras que los 12C6xx son de la gama media y sus instrucciones tienen 14 bits.Los modelos 12F6xx poseen memoria Flash para el programa y EEPROM para losdatos.

MODELOMEMORIA

PROGRAMAMEMORIA

DATOSFRECUENCIA

MAXIMALINEAS

E/SADC

8BITSTEMPORIZADO

RESTERMIN

ALES

PIC12C508 512x12 25x8 4MHz 6 TMR0 + WDT 8

PIC12C509 1024x12 41x8 4MHz 6 TMR0 + WDT 8

PIC12C670 512x14 80x8 4MHz 6 TMR0 + WDT 8

PIC12C671 1024x14 128x8 4MHz 6 2 TMR0 + WDT 8

PIC12C672 2048x14 128x8 4MHz 6 4 TMR0 + WDT 8

PIC12C680512X12FLASH

80x8 16x8EEPROM

4MHz 6 4 TMR0 + WDT 8

PIC12C6811024x14FLASH

80x8 16x8EEPROM

4MHz 6 TMR0 + WDT 8

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 76/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

74

3.3.2.2. Gama Baja O Básica: PIC16C5X Con Instrucciones De 16bits

Se trata de una serie de PIC de recursos limitados, pero con una de la mejoresrelaciones coste/prestaciones. Sus versiones están encapsuladas con 18 y 28 terminalesy pueden alimentarse a partir de una tensión de 2,5 V, lo que les hace ideales en lasaplicaciones que funcionan con pilas teniendo en cuenta su bajo consumo (menos de 2mA a 5 V y 4MHz). Tienen un repertorio de 33 instrucciones cuyo formato consta de 12

bits. No admiten ningún tipo de interrupción y la Pila sólo dispone de dos niveles. En lafigura se muestra el diagrama de conexionado de uno de estos PIC.

Al igual que todos los miembros de la familia PIC16/17, los componentes de lagama baja se caracterizan por poseer los siguientes recursos: (en la tabla se presentan las

principales características de los modelos de esta familia).

Ê Sistema POR (“Power On Reset”)Ê Todos los PIC tienen la facultad de generar una autoreinicialización o

autoreset al conectarles la alimentación.Ê Perro guardián (Watchdog o WDT)Ê Existe un temporizador que produce un reset automáticamente si no es

recargado antes que pase un tiempo prefijado. Así se evita que el sistemaquede “colgado” dado en esa situación el programa no recarga dichotemporizador y se genera un reset.

Ê Código de protecciónÊ Cuando se procede a realizar la grabación del programa, puede

protegerse para evitar su lectura. También disponen los PIC de

posiciones reservadas para registrar números de serie, códigos deidentificación, prueba, etc.Ê Líneas de E/S de alta corrienteÊ Las líneas de E/S de los PIC pueden proporcionar o absorber una

corriente de salida comprendida entre 20 y 25 mA, capaz de excitar directamente ciertos periféricos.

Ê Modo de reposo (Bajo consumo o “sleep”)Ê Ejecutando una instrucción (SLEEP), la CPU y el oscilador principal se

detienen y se reduce notablemente el consumo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 77/651

GUILLERMO DAVID HERRERO GONZÁLEZ

75

Para terminar el comentario introductorio sobre los componentes de la gama bajaconviene nombrar dos restricciones importantes:

Ê La pila o “stack” sólo dispone de dos niveles lo que supone no poder encadenar más de dos subrutinas.

Ê Los microcontroladores de la gama baja no admiten interrupciones.

MEMORIAPROGRAMA

(x12bits)MODELO

EPROM ROM

MEMORIADATOS(bytes)

FRECUENCIAMÁXIMA

LÍNEASE/S

TEMPORIZADORES TERMINALES

PIC16C52 384 25 4MHz 4 TMR0+WDT 18

PIC16C54 512 25 20MHz 12 TMR0+WDT 18

PIC16C54A 512 25 20MHz 12 TMR0+WDT 18

PIC16CR54A 512 25 20MHz 12 TMR0+WDT 18

PIC16C55 512 24 20MHz 20 TMR0+WDT 28

PIC16C56 1K 25 20MHz 12 TMR0+WDT 18

PIC16C57 2K 72 20MHz 20 TMR0+WDT 28

PIC16CR57B 2K 72 20MHz 20 TMR0+WDT 28

PIC16C58A 2K 73 20MHz 12 TMR0+WDT 18

PIC16CR58A 2K 73 20MHz 12 TMR0+WDT 18

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 78/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

76

3.3.2.3. Gama Media. PIC16CXXX Con Instrucciones De 16bits

Es la gama más variada y completa de los PIC. Abarca modelos con encapsuladodesde 18 terminales hasta 68, cubriendo varias opciones que integran abundantes periféricos. Dentro de esta gama se halla el «fabuloso PIC16x84» y sus variantes. En lafigura se muestra el diagrama de conexionado de uno de estos PIC.

En esta gama sus componentes añaden nuevas prestaciones a las que poseían losde la gama baja, haciéndoles más adecuados en las aplicaciones complejas. Admiten

interrupciones, poseen comparadores de magnitudes analógicas, convertidores A/D, puertos serie y diversos temporizadores.

El repertorio de instrucciones es de 35, de 14 bits cada una y compatible con elde la gama baja. Sus distintos modelos contienen todos los recursos que se precisan enlas aplicaciones de los microcontroladores de 8 bits. También dispone de interrupcionesy una Pila de 8 niveles que permite el anidamiento de subrutinas. En la tabla se

presentan las principales características de los modelos de esta familia.

MEMORIA DATOS

MODELOMEMORIA

PROGRAMARAM EEPROM

REGISTROSESPECÍFICOS

TEMPORIZADORES

INTERRUPCIONES

E/SRANGO

TENSIÓNTERMINALES

PIC16C841Kx14

EEPROM36 64 11 TMR0+WDT 4 13 2-6 18

PIC16F84 1Kx14 FLASH 68 64 11 TMR0+WDT 4 13 2-6 18

PIC16F83512X14FLASH

36 64 11 TMR0+WDT 4 13 2-6 18

PIC16CR84

1Kx14 ROM 68 64 11 TMR0+WDT 4 13 2-6 18

PIC16CR83

512x14 ROM 36 64 11 TMR0+WDT 4 13 2-6 18

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 79/651

GUILLERMO DAVID HERRERO GONZÁLEZ

77

Encuadrado en la gama media también se halla la versión PIC14C000, quesoporta el diseño de controladores inteligentes para cargadores de baterías, pilas

pequeñas, fuentes de alimentación ininterrumpibles y cualquier sistema de adquisición y procesamiento de señales que requiera gestión de la energía de alimentación. LosPIC14C000 admiten cualquier tecnología de las baterías como Li-Ion, NiMH, NiCd, Phy Zinc.

El temporizador TMR1 que hay en esta gama tiene un circuito oscilador que puede trabajar asíncronamente y que puede incrementarse aunque el microcontrolador se halle en el modo de reposo (“sleep”), posibilitando la implementación de un reloj entiempo real.

Las líneas de E/S presentan una carga “pull-up” activada por software.

3.3.2.4. Gama Alta: PIC17CXXX Con Instrucciones De 16bitsSe alcanzan las 58 instrucciones de 16 bits en el repertorio y sus modelos

disponen de un sistema de gestión de interrupciones vectorizadas muy potente. Tambiénincluyen variados controladores de periféricos, puertos de comunicación serie y paralelocon elementos externos, un multiplicador hardware de gran velocidad y mayorescapacidades de memoria, que alcanza los 8 k palabras en la memoria de instrucciones y454 bytes en la memoria de datos.

Quizás la característica más destacable de los componentes de esta gama es suarquitectura abierta, que consiste en la posibilidad de ampliación del microcontrolador con elementos externos. Para este fin, las terminales sacan al exterior las líneas de los

buses de datos, direcciones y control, a las que se conectan memorias o controladores de periféricos. Esta facultad obliga a estos componentes a tener un elevado número determinales comprendido entre 40 y 44. Esta filosofía de construcción del sistema es laque se empleaba en los microprocesadores y no suele ser una práctica habitual cuandose emplean microcontroladores.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 80/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

78

3.3.2.5. Gama Mejorada: PIC18FXXXX

La nueva familia PIC18F se presentó como una nueva gama demicrocontroladores RISC de 8bits con arquitectura Harvard que incluía los últimosavances y la mayoría de los periféricos para potenciar miles de aplicaciones centradasen las áreas de automoción, comunicaciones, ofimáticas, productos de gran consumo ycontrol industrial.

El objetivo del fabricante era facilitar a sus usuarios la transición a dispositivosmodernos, que con una relación precio/prestaciones muy competitiva, integraban lamayoría de los recursos necesarios para implementar desarrollos eficientes, de mayor rendimiento y complejidad.

Con la nueva familia Microchip ha resuelto dos grandes metas:

Ê Compatibilidad: con los PIC16F y sus periféricos; soportandoEnsamblador y C.

Ê Elevado rendimiento: máxima eficacia del compilador C; elevada productividad que alcanza un rendimiento de 10MIPS a 10MHz.

A principios del 2006 Microchip disponía de una gama de 80modelos y una previsión de 41 nuevos.

Aportaciones específicas de la gama mejorada:

Ê Tecnología “nanoWatt”: reduce el consumo de energía.Ê Espacio de direccionamiento lineal: desaparecen los bancos.Ê

Compatibilidad de software.Ê Compatibilidad de hardware.Ê Orientación al lenguaje C.Ê Autoprogramabilidad: Pueden escribir su memoria de programa

internamente.Ê Diversidad de periféricos integrados.

Actualmente Microchip dispone de la familia PIC24F de 16bits y la dsPIC.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 81/651

GUILLERMO DAVID HERRERO GONZÁLEZ

79

3.4. F AMILIA PIC18F XX 5 X

Se va a hacer especial hincapié en esta familia ya que es con la que se va arealizar el proyecto porque tiene un puerto USB integrado.

Todo lo que se comenta en la memoria son traducciones de la información delfabricante.

3.4.1. DIAGRAMA DE PINES

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 82/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

80

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 83/651

GUILLERMO DAVID HERRERO GONZÁLEZ

81

3.4.2. PERSPECTIVA GENERAL DEL DISPOSITIVO

TABLA 2-1: Características Del Dispositivo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 84/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

82

FIGURA 2-1: Diagrama De Bloques Del PIC18F2455/2550 28 pines

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 85/651

GUILLERMO DAVID HERRERO GONZÁLEZ

83

FIGURA 2-2: Diagrama De Bloques Del PIC18F4455/4550 44 Pines

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 86/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

84

TABLA 2-2: Descripción De Los Pines E/S Del PIC18F2455/2550

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 87/651

GUILLERMO DAVID HERRERO GONZÁLEZ

85

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 88/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

86

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 89/651

GUILLERMO DAVID HERRERO GONZÁLEZ

87

FIGURA 2-3: Descripción De Los Pines Del PIC18F4455/4550

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 90/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

88

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 91/651

GUILLERMO DAVID HERRERO GONZÁLEZ

89

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 92/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

90

3.4.3. CONFIGURACIÓN DEL OSCILADOR

El microcontrolador necesita un reloj estable para proporcionar una fuente dereloj separada.

FIGURA 3-1: Diagrama Del Reloj

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 93/651

GUILLERMO DAVID HERRERO GONZÁLEZ

91

3.4.3.1. Control Del Oscilador

El oscilador se controla mediante dos registros de configuración y otros dos decontrol.

En CONFIG1L y CONFIG1H se elige el oscilador y las opciones de losescaladores del USB (prescaler y postscaler).

Los bits de configuración se seleccionan al programarlos y permanecerán hastaque se vuelvan a programar.

El registro OSCCON selecciona el modo activo de reloj.

El registro OSCTUNE se utiliza para recortar frecuencia de la fuente INTRC.

3.4.3.2. Tipos De Oscilador

Hay que programar los bits de configuración FOSC3:FOSC0 para seleccionar unmodo de estos:

Ê XT: XTAL/ circuito resonante.Ê XTPLL: XTAL/ circuito resonante con PLL activo.Ê HS: XTAL/ circuito resonante muy rápido.Ê HSPLL: XTAL/ circuito resonante muy rápido con PLL activo.Ê EC: Reloj externo con Fosc/4 como salida en RA6.Ê ECIO: Reloj externo con RA6 como E/S.Ê ECPLL: Reloj externo con Fosc/4 como salida en RA6 y PLL activo.Ê

ECPIO: Reloj externo con RA6 como E/S y PLL activo.Ê INTHS: Oscilador interno usado como reloj del microcontrolador y HScomo reloj del USB.

Ê INTXT: Oscilador interno usado como reloj del microcontrolador y XTcomo reloj del USB.

Ê INTIO: Oscilador interno usado como reloj del microcontrolador y ECcomo reloj del USB con RA6 como E/S.

Ê INTCKO: Oscilador interno usado como reloj del microcontrolador yEC como reloj del USB con Fosc/4 como salida en RA6.

3.4.3.2.1. Modos Del Oscilador Y Operaciones Con El USB

En la familia PIC18F2455/PIC18F2550/PIC18F4455/PIC18F4550 el oscilador primario forma parte del módulo USB y no se puede asociar a ninguna otra fuente dereloj.

El módulo USB tiene que ser controlado por la fuente primaria y los otrosdispositivos o el microcontrolador se pueden controlar por fuentes secundarias uosciladores internos como en el resto de microcontroladores PIC.

Al utilizar el USB necesitamos un reloj interno de 6MHz ó 48MHz, el resto delsistema puede funcionar con cualquier otro oscilador.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 94/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

92

3.4.3.2.2. XTAL/Resonadores Cerámicos

En HS, HSPLL, XT y XTPLL el XTAL o el circuito resonador se conectan aOSC1 y OSC2.

Un postscaler interno permite elegir una frecuencia distinta a la del reloj deentrada. La división de la frecuencia se elige con el bit de configuración CPUDIV y se

puede seleccionar a 1/2, 1/3 ó 1/4 de la frecuencia de entrada.

Se puede utilizar un reloj externo cuando el microcontrolador está en modo HS.En este caso el pin OSC2/CLK0 está abierto.

FIGURA 3-2: XTAL/Resonador Cerámico (Configuración XT, HS O HSPLL)

Nota:

1 Ver tablas 2-1 y 2-2 para conocer los valores iniciales de C1 y C2

2 Se puede necesitar una resistencia R S con cristales de AT

3 R F varía con el modo de oscilador seleccionadoTABLA 3-1: Condensador Para Osciladores Cerámicos

Valores de los condensadores típicos:

Modo Freq OSC1 OSC2

XT 4.0MHz 33pF 33pF

HS 8.0MHz 27pF 27pF

16.0MHz 22pF 22pF

El valor de los condensadores es sólo como guía en el diseño.

Estos condensadores se han probado con los osciladores de la lista de debajo enoperaciones básicas de inicio. Estos valores no están optimizados.

Se puede necesitar otros condensadores de distinto valor para conseguir unaoscilación aceptable en una determinada operación. El usuario tiene que probar la formade la onda conseguida con una determinada VDD y un rango de temperaturas en la cualtrabaje la aplicación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 95/651

GUILLERMO DAVID HERRERO GONZÁLEZ

93

Osciladores utilizados:

4.0MHz

8.0MHz

16.0MHz

TABLA 3-2: Condensadores Para Los XTAL

Valores de los condensadores típicos:

Tipo de Osc XTal Condensadores probados

Freq C1 C2

XT 4MHz 27pF 27pF

HS 4MHz 27pF 27pF

8MHz 22pF 22pF

20MHz 15pF 15pF

El valor de los condensadores es sólo como guía en el diseño.

Estos condensadores se han probado con los osciladores de la lista de debajo enoperaciones básicas de inicio. Estos valores no están optimizados.

Se puede necesitar otros condensadores de distinto valor para conseguir unaoscilación aceptable en una determinada operación. El usuario tiene que probar la forma

de la onda conseguida con una determinada VDD y un rango de temperaturas en la cualtrabaje la aplicación.

Xtal utilizado:

4MHz

8MHz

20MHz

3.4.3.2.3. Señal De Reloj Externa

Los modos EC, ECIO, ECPLL y ECPIO requieren una señal externa de relojconectada al pin OCS1. No se necesita un oscilador de “puesta en marcha” después deun reset o al salir del modo sleep.

En los modos EC y ECPLL, se obtiene una señal en el pin OSC2 de la señal dereloj dividida por 4. Esta señal se puede usar para test o para sincronizar otrosdispositivos.

En los modos ECIO y ECPIO el pin OSC2 funciona como un pin E/S, será elRA6.

El postscaler interno que se utiliza en los modos XT y HS se puede usar tambiénen los modos EC y ECIO.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 96/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

94

FIGURA 3-3: Señal De Reloj Externa (Configuración HS)

FIGURA 3-4: Señal De Reloj Externa (Configuración EC Y ECPLL)

FIGURA 3-5: Señal De Reloj Externa (Configuración ECIO Y ECPIO)

3.4.3.2.4. Multiplicador De Frecuencia PLL

Esta familia de dispositivos incluye un circuito PLL (Paced Locked Loop). Seutiliza en aplicaciones USB con velocidad baja de oscilación y como fuente de reloj

para el microcontrolador.El PLL está activo en los modos HSPLL, XTPLL, ECPLL y ECPIO. Está

diseñado para producir una señal de referencia de 96MHz de una señal de entrada de4MHz. La salida se puede dividir y utilizar para el USB y el reloj del microcontrolador

porque el PLL tiene una señal de entrada y salida fijas. Tiene ocho opciones de prescaler para elegir la frecuencia de entrada al PLL.

Hay un postscaler para elegir la velocidad del microcontrolador, para que elUSB y el microcontrolador tengan una entrada de reloj y funcionen a velocidadesdiferentes. El postscaler tiene las opciones de 1/2, 1/4 y 1/6 de la salida del PLL.

Los modos HSPLL, ECPLL y ECPIO utilizan el modo del oscilador HS parafrecuencias superiores a 48MHz. El prescaler divide la señal de entrada por 12 para producir 4MHz para el PLL. El modo XTPLL sólo utiliza la frecuencia de entrada de4MHz que dirige el PLL directamente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 97/651

GUILLERMO DAVID HERRERO GONZÁLEZ

95

FIGURA 3-6: Diagrama Del Bloque PLL (Configuración HS)

3.4.3.2.5. Bloque Interno Del Oscilador

En la familia PIC18F2455/PIC18F2550/PIC18F4455/PIC18F4550 tienen unoscilador interno que genera dos señales diferentes; cualquiera se puede utilizar comoreloj del microcontrolador. Si el USB no está utilizado, el oscilador interno puedeeliminar el oscilador externo de los pines OSC1 y/o OSC2.

La salida principal (INTOSC) es una fuente de reloj de 8MHz que se puede

utilizar para dirigir el reloj directamente. Esto también gobierna el postscaler deINTOSC, el cual puede proporcionar un rango de frecuencias de 31kHz a 4MHz. Lasalida INTOSC está activa cuando se selecciona una frecuencia de reloj de 125kHz a8MHz.

La otra señal interna de reloj es el oscilador RC (INTRC) que da una salidanominal de 31kHz. INTRC está activo si se selecciona como fuente de reloj; se activaautomáticamente cuando alguno de los siguientes está activo:

Ê Temporizador de encendidoÊ Monitor de reloj de seguridadÊ Temporizador perro guardiánÊ Dos velocidades de inicio

La frecuencia se elige configurando el bit IRCF del registro OSCCON.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 98/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

96

Modos Del Oscilador Interno

Cuando el oscilador interno funciona como reloj del microcontrolador, uno delos otros modos debe utilizarse como reloj del USB. La elección del USB se determinadependiendo del modo de funcionamiento interno.

Hay cuatro modos distintos:

Ê INTHS: Da la señal el oscilador en modo HS.Ê INTXT: Da la señal el oscilador en modo XT.Ê INTCKO: La señal la da un oscilador externo conectado al OSC1; en el

OSC2 podemos obtener Fosc/4.Ê INTIO: La señal la da un oscilador externo conectado al OSC1; en el

OSC2 tenemos un pin E/S (RA6).

Registro OSCTUNE

La salida interna de oscilación está calibrada de fábrica pero se puede ajustar a laaplicación del usuario. Se puede hacer escribiendo el registro OSCTUNE. Lasensibilidad del ajuste es constante en todo el rango.

Cuando se modifica el OSCTUNE las frecuencias INTOSC e INTRC secambiarán a la nueva frecuencia. El reloj INTRC alcanzará la nueva frecuencia en 8ciclos de reloj mientras que el reloj INTOSC se estabilizará en 1ms. El programa seseguirá ejecutando durante este proceso. No hay ninguna indicación de que el sucesohaya concluido.

El registro OSCTUNE contiene el bit INTSRC que permite seleccionar queoscilador interno da la señal de reloj cuando la frecuencia de 31kHz está seleccionada.

Frecuencia Del Oscilador Interno Y Cambios

El oscilador interno está calibrado para dar 8MHz. Sin embargo, esta frecuenciase puede modificar cuando VDD o la temperatura cambian, puede afectar el control deuna operación de muchas formas.

La baja frecuencia del oscilador INTRC funciona independientemente de lafuente INTOSC. Cualquier cambio en INTOSC por tensión o temperatura no tiene

porqué reflejarse en INTRC y viceversa.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 99/651

GUILLERMO DAVID HERRERO GONZÁLEZ

97

REGISTRO 3-1. OSCTUNE: Registro selector del oscilador

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

INTSRC - - TUN4 TUN3 TUN2 TUN1 TUN0

BIT 7 INTSRC: Bit selector de la baja frecuencia del oscilador interno.1= 31,25kHz producido por los 8MHz de INTOSC

(activa el divisor por 256)0= 31kHz producido por el oscilador interno INTRC

BIT 6-5 No implementados, se leen 0BIT 4-0 TUN4:TUN0: Selectores de frecuencia:

01111: Máxima frecuencia….….0000100000: Frecuencia media. Funciona con la

velocidad calibrada.11111….….10000: Mínima frecuencia.

Compensación Por Los Cambios En INTOSC

Es posible ajustar la frecuencia del INTOSC modificando el registro OSCTUNE.

Esto no producirá ningún cambio en la frecuencia de INTRC.El ajuste de INTOSC debe hacerse dependiendo de la aplicación. Por ejemplo, si

necesitamos la EUSART, debemos ajustar la frecuencia para evitar fallos de recepción ode cuadrar los pulsos. Los errores por no cuadrar los pulsos indican que la frecuencia dereloj es muy alta, para ajustarla decrementamos el valor del OSCTUNE. Los errores endatos puedes ocurrir porque la velocidad del reloj es muy baja, para compensarloaumentamos el OSCTUNE.

Es posible comparar la velocidad del reloj con un reloj de referencia. Se puedenusar dos temporizadores: un reloj externo, y el otro es un reloj de referencia como eloscilador Timer1. Ambos temporizadores se borran pero el reloj tomado como

referencia genera interrupciones. Cuando ocurre una interrupción, se lee el reloj internoy los dos temporizadores borrados. Si el valor del temporizador interno es demasiadoalto, el bloque del oscilador interno funciona muy deprisa. Para ajustarlo, hay quedecrementar el registro OSCTUNE.

Se puede utilizar un módulo CCP libremente en el Timer1 o el Timer3, ajustado por el bloque oscilador interno y un evento externo con un periodo conocido (por ejemplo, una corriente alterna). El periodo del primer evento se captura en los registrosCCPRxH:CCPRxL y se graba para poder utilizarlo posteriormente. Cuando ocurre unsegundo evento, se resta al tiempo del segundo el del primero. Como se conoce el

periodo externo, se puede calcular la diferencia entre los dos eventos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 100/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

98

Si la medida es mucho mayor que el tiempo calculado quiere decir que el bloquedel oscilador interno está funcionando demasiado rápido; para compensarlo, hay que

decrementar el registro OSCTUNE. Si la medida es mucho menor que la calculada, el bloque del oscilador interno funciona muy lento; para compensarlo, aumentar el registroOSCTUNE.

3.4.3.3. Configuración Del Oscilador Para El USB

Cuando el PIC18F4550 se utiliza en una conexión por USB, necesitamos unreloj de 6MHz ó 48MHz dependiendo de si usamos alta o baja velocidad. Debemos

preverlo al seleccionar la frecuencia y al programar el microcontrolador.

TABLA 3-3: Opciones De Configuración Del Oscilador Con El USB

Frecuencia de Divisor PILL Modo del reloj División del reloj MCU Frecuencia delentrada del Osc. (PLLDIV2:PLLDIVO) (FOSC3:FOSCO) (CPUDIV1:CPUDIVO) reloj del micro48MHz ÷N/A(1) EC, ECIO None(00) 48MHz

÷2(01) 24MHz ÷3(10) 16MHz÷4(11) 12MHz

48MHz ÷12(111) EC, ECIO None(00) 48MHz

÷2(01) 24MHz .÷3(10) 16MHz÷4(11) 12MHz

ECPLL, ECPIO ÷2(00) 48MHz÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

40MHz ÷10(110) EC, ECIO None(00) 40MHz÷2(01) 20MHz÷3(10) 13.33MHz÷4(11) 10MHz

ECPLL, ECPIO ÷2(00) 48MHz÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

24MHz ÷6(101) HS, EC, ECIO None(00) 24MHz ÷2(01) 12MHz÷3(10) 8MHz÷4(11) 6MHz

HSPLL, ECPLL, ECPIO ÷2(00) 48MHz

÷3(01) 32MHz÷4(10) 24MHz ÷6(11) 16MHz

20MHz ÷5(100) HS, EC, ECIO None(00) 20MHz÷2(01) 10MHz÷3(10) 6.67MHz÷4(11) 5MHz

HSPLL, ECPLL, ECPIO ÷2(00) 48MHz÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

16MHz ÷4(011) HS, EC, ECIO None(00) 16MHz÷2(01) 8MHz

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 101/651

GUILLERMO DAVID HERRERO GONZÁLEZ

99

Frecuencia de Divisor PILL Modo del reloj División del reloj MCU Frecuencia delentrada del Osc. (PLLDIV2:PLLDIVO) (FOSC3:FOSCO) (CPUDIV1:CPUDIVO) reloj del micro

÷3(10) 5.33MHz

÷4(11) 4MHzHSPLL, ECPLL, ECPIO ÷2(00) 48MHz

÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

12MHz ÷3(010) HS, EC, ECIO None(00) 12MHz÷2(01) 6MHz÷3(10) 4MHz÷4(11) 3MHz

HSPLL, ECPLL, ECPIO ÷2(00) 48MHz÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

8MHz ÷2(001) HS, EC, ECIO None(00) 8MHz÷2(01) 4MHz÷3(10) 2.67MHz÷4(11) 2MHz

HSPLL, ECPLL, ECPIO ÷2(00) 48MHz÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

4MHz ÷1(000) XT, HS, EC, ECIO None(00) 4MHz÷2(01) 2MHz÷3(10) 1.33MHz-4(11) 1MHz

HSPLL, ECPLL, XTPLL, ÷2(00) 48MHzECPIO ÷3(01) 32MHz

÷4(10) 24MHz ÷6(11) 16MHz

Nota: (1) Sólo es válido si el bit USBDIV está borrado.

Todas las frecuencias, excepto las de 24MHz, se utilizan en el USB 2.0. Lasfrecuencias de 24MHz se utilizan en el USB1.0.

3.4.3.3.1. Operaciones Con Baja Velocidad (USB )

El reloj del USB cuando funciona a baja velocidad se obtiene del oscilador primario y no del PLL. El oscilador se divide por 4 para obtener los 6MHz en el reloj.Por esto, el microcontrolador necesita una frecuencia de 24MHz cuando el módulo USB

está activo y el controlador del reloj está en uno de los modos primarios del oscilador (XT, HS con o sin PLL).

Estas restricciones no se aplican si el reloj del microcontrolador es uno de lossecundarios o del bloque interno.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 102/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

100

3.4.3.3.2. Funcionamiento Diferente El Reloj Del USB Y El DelMicrocontrolador

El módulo USB puede funcionar de una forma asíncrona con respecto al relojdel microcontrolador y otros periféricos. Esto se puede realizar cuando el USB funcionacon el oscilador primario y el microcontrolador con un reloj distinto con menor velocidad. Si necesitamos esto para ejecutar una aplicación entera con un solo reloj, lasoperaciones “a toda velocidad” proporcionan una gran variedad de frecuencias delmicrocontrolador.

3.4.3.4. Fuentes De Reloj Y Cambios De Oscilador

En la familia PIC18F2455/PIC18F2550/PIC18F4455/PIC18F4550 se incluyeuna opción para alternar la fuente de reloj con dos fuentes alternativas de menor frecuencia. Cuando activamos una fuente alternativa, tenemos disponibles varios modosde “control de energía”.

Hay tres fuentes de reloj en estos dispositivos:

Ê oscilador primarioÊ oscilador secundarioÊ bloque interno de oscilación

Los osciladores primarios incluyen los XTAL, los circuitos resonadores, losmodos externos de reloj y el bloque interno de oscilación. El modo particular se eligecon los bits de configuración FOSC3:FOSC0.

Los osciladores secundarios son las fuentes externas que no se conectan en los pines OSC1 u OSC2. Estas fuentes pueden seguir funcionando incluso cuando elmicrocontrolador se pone en modo “control de energía”.

Los micros PIC18F2455/PIC18F2550/PIC18F4455/PIC18F4550 ofrecen elTimer1 como oscilador secundario. Este oscilador es, a menudo, el temporizador baseen las aplicaciones basadas en tiempo real en todos los modos de “control de energía”.Más comúnmente, se conecta un XTAL de 32,768kHz en los pinesRC0/T1OSO/TI3CKI y RC1/T10SI/UOE* junto con un condensador e cada pin a masa.

El bloque interno de oscilación se puede usar como reloj en los modos “controlde energía”. La fuente INTRC se utiliza en varias opciones especiales como el perroguardián o el monitor del reloj de seguridad.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 103/651

GUILLERMO DAVID HERRERO GONZÁLEZ

101

3.4.3.4.1. Registros De Control Del Oscilador

El registro OSCCON maneja distintos aspectos de las operaciones del reloj entodos los modos de energía.

Los bits de selección de la fuente del reloj son SCS1:SCS0. Las fuentes de relojdisponibles son el reloj primario (definido por los bits FOSC3:FOSC0), el relojsecundario (oscilador Timer1) y el bloque del oscilador interno. La fuente de relojcambia inmediatamente después de haber escrito el bit o los bits en un pequeñointervalo de reloj. Los bits SCS se borran en cualquier tipo de reset.

Los bits de selección de la frecuencia del oscilador interno son IRCF2:IRCF0, seelige la frecuencia de salida del bloque del oscilador interno. La elección se hace sobrela fuente INTRC, la fuente INTOSC o una de las frecuencias obtenidas de aplicar el

postscaler. Si el bloque del oscilador interno aplica la señal de reloj, al cambiar losestados de estos bits obtendremos un cambio inmediato en la salida del oscilador. En unreset del dispositivo, la frecuencia del oscilador interno se configura como 1MHz.

Cuando elegimos una frecuencia de 31kHz (IRC2:IRC0=000), el usuario puedeelegir que oscilador interno funciona como fuente. Esto se hace mediante el bit INTSRCdel registro OSCTUNE. Activando este bit elegimos la fuente de reloj como INTOSCcon una frecuencia de 31,25kHz activando el divisor por 256 en el postscaler delINTOSC. Desactivando este bit ponemos como fuente INTRC con una frecuencianominal de 31kHz.

Esta opción permite a los usuarios seleccionar la fuente de reloj más precisa con

INTOSC que mantiene el ahorro de energía con una baja velocidad de reloj.INTRC siempre mantiene la señal de reloj en eventos como el perro guardián o

el monitor de seguridad del reloj.

Los bits OSTS, IOFS y T1RUN indican cual es el reloj que proporciona la señal principal. El bit OSTS indica que el tiempo de arranque ha terminado y que el reloj primario proporciona el reloj en modo primario. El bit IOFS indica cuando se haestabilizado el bloque del oscilador interno y que el reloj está en modo RC. El bitT1RUN indica cuando el Timer1 proporciona la señal secundaria de reloj. En los modosde “control de energía”, sólo se puede seleccionar uno de estos tres bits a la vez. Si nose han activado ninguno de estos tres bits, el reloj INTRC da la señal o el bloque interno

el oscilador ha empezado y no está todavía listo.El bit IDLEN determina si el dispositivo está en modo sleep o uno de los modos

de ahorro, cuando se ha ejecutado la instrucción SLEEP.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 104/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

102

3.4.3.4.2. Transiciones Del Oscilador

Esta familia de dispositivos tiene un circuito para prevenir “problemas” del relojcuando cambian entre las distintas fuentes de reloj. Ocurre una pequeña pausa cuandocambia la señal de reloj. La longitud de esta pausa es la suma de dos ciclos del relojantiguo mas de tres a cuatro ciclos del reloj nuevo. Esta formula indica cuando el relojnuevo se hace estable.

REGISTRO 3-2. OSCCON: Registro De Control Del Oscilador

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

IDLEN IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0

BIT 7 IDLEN: Bit puntero del modo reposo

1= El dispositivo entra en modo reposo con lainstrucción SLEEP0= El dispositivo entra en modo sleep con la instrucción

SLEEPBIT 6-4 IRCF2:IRCF0: Selectores de la frecuencia interna del oscilador:

111=8MHz (INTOSC directamente)110=4MHz101=2MHz100=1MHz (Por defecto en un reset)011=500kHz010=250kHz

001=125kHz000=31kHz (INTOSC/256 o INTRC directamente. Se

selecciona con el bit INTSRC del registro OSCTUNE)BIT 3 OSTS: Bit de estado del desbordamiento de oscilador de inicio

(depende del estado del bit de configuración IESO)1= El tiempo de inicio ha terminado, el oscilador

primario está activo.0= El tiempo de inicio no ha acabado, el oscilador

primario no está activado.BIT 2 IOFS: Bit de frecuencia estable

1= La frecuencia de INTOSC es estable0= La frecuencia de INTOSC no es estable

BIT 1-0 SCS1:SCS0: Bits de selección del reloj del sistema1x= Oscilador interno01= Oscilador Timer100= Oscilador primario

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 105/651

GUILLERMO DAVID HERRERO GONZÁLEZ

103

3.4.3.5. Efecto De Los Modos De Control De Energía En Varias Fuentes De Reloj

Cuando seleccionamos el modo PRI_IDLE el oscilador primario designadocontinúa sin interrupciones. En los demás modos de ahorro de energía, el oscilador queutilice el pin OSC1 se desactiva. A menos que el USB esté funcionando se desactivaráel pin OSC1 (y el OSC2 si se utiliza) y parará la oscilación.

En el modo de reloj secundario (SEC_RUN y SEC_IDLE), el oscilador Timer1funciona y proporciona la señal de reloj. El oscilador Timer1 o Timer3 puedenfuncionar en todos los modos de ahorro de energía si se requiere como reloj.

En los modos de oscilador interno (RC_RUN y RC_IDLE), el oscilador interno proporciona la fuente de la señal de reloj. La salida de 31kHz de INTRC se puede

utilizar directamente para producir la señal de reloj y varios de los modos de ahorro deenergía especiales. La salida de INTOSC de 8MHz se puede utilizar para producir laseñal de reloj del dispositivo directamente o por medio de algún postscaler. La salidadel INTOSC se desactiva directamente si la señal de reloj la proporciona directamentela salida de INTRC.

El reloj del USB funciona sin verse afectado por el modo Run o el modo reposo.Si el dispositivo funciona con un XTAL o un circuito resonador, la oscilacióncontinuará en el reloj del USB. Éste módulo y los demás puede cambiarse a una nuevafuente de reloj.

Si se selecciona el modo sleep, se interrumpen todas las señales de reloj. Con

todas las corrientes de polarización de los transistores obtenemos el menor consumo enel dispositivo.

No se debe activar el modo sleep cuando el módulo USB está activado y existencomunicaciones. La única excepción es cuando al dispositivo se le ha suspendido por medio de un comando del USB. Una vez que el módulo haya suspendido lasoperaciones y puesto en el estado de baja potencia, el microcontrolador se puede poner en modo sleep.

Activando cualquier proceso que funcione en el modo sleep se incrementará lacorriente que necesita el circuito. El reloj INTRC se necesita para proporcionar lasoperaciones al WDT. El oscilador Timer1 se activará en aplicaciones en tiempo real.

Hay otras operaciones que se pueden activar sin necesitar una señal de reloj.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 106/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

104

3.4.3.6. Retraso En El Inicio

Los retrasos en el inicio se controlan por medio de dos temporizadores por loque, en la mayoría de las aplicaciones, no se necesitan reset externos. Los retrasosmantienen el dispositivo apagado hasta que la tensión es estable en circunstanciasnormales y el reloj primario es estable y está funcionando.

La primera vez es el Temporizador de inicio (PWRT), el cual proporciona unretraso fijo en el arranque. Se activa borrando en bit de configuración PWRTEN*.

El segundo temporizador es el oscilador-temporizador de arranque (OST),mantiene el chip apagado hasta que el oscilador es estable (en los modos XT y HS). ElOST cuenta 1024 ciclos y después activa el micro.

Cuando elegimos el modo de oscilador HSPLL, el dispositivo permanece en

reset 2ms más después del retraso del OST, para que el PLL pueda detectar lafrecuencia de entrada.

Hay un intervalo de retraso TCSD después del POR, cuando el controlador empieza a ejecutar una instrucción. Este retraso se ejecuta cuando están otros retrasosactivos. Este es el único retraso que ocurre cuando se activan los modos de oscilador

primario EC y el modo interno.

TABLA 3-4: Estado De Los Pines OSCY OSCEN El Modo SLEEP

Modo del Oscilador OSC1 Pin OSC2 Pin

INTCKO Abierto, se conecta el reloj Salida (reloj/4) INTIO Abierto, se conecta el reloj Configurado como PORTA, bit 6 ECIO, ECHO Abierto, se conecta el reloj Configurado como PORTA, bit 6

EC Abierto, se conecta el reloj Salida (reloj/4) XT and HS Inactivo sin tensión Inactivo sin tensión

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 107/651

GUILLERMO DAVID HERRERO GONZÁLEZ

105

3.4.4. MODOS DE CONTROL DE ENERGÍA

Los dispositivos PIC18F2455/2550/4455/4550 ofrecen un total de siete modosde funcionamiento para controlar la energía. Estos modos proporcionan una variedad deopciones para la conservación selectiva en las aplicaciones donde los recursos puedenser limitados (es decir, los dispositivos con pilas).

Hay tres categorías de modos de control de energía:

Ê Modo ejecución.Ê Modo reposoÊ Modo sleep.

Estas categorías definen qué porciones del dispositivo se utilizan y a veces, qué

velocidad. Los modos ejecución y reposo pueden utilizar cualquiera de los tres relojesdisponibles (primario, secundario o bloque interno); el modo sleep no utiliza una fuentedel reloj.

Los modos de control de energía incluyen varias características de ahorro deenergía que se ofrecieron en los microcontroladores antiguos. Una es la característica dela conmutación del reloj, ofrecida en otros dispositivos PIC18, permitiendo que elregulador utilice el oscilador Timer1 en lugar del oscilador primario. También seincluye el modo sleep, ofrecido en todos los dispositivos PICmicro, donde se parantodos los relojes del dispositivo.

TABLA 4-1: Modos De Control De Energía

MODO Bits OSCCON Modulo que controla Fuente de reloj y osciladorIDLEN(1) SCS1:SCS0 CPU Periféricos disponible

Sleep 0 N/A Off Off Nada – los relojes estándesactivados

PRI-RUN N/A 00 Clocked Clocked Primario-todos los modos deloscilador. Este es el modo deejecución normal.

SEC-RUN N/A 01 Clocked Clocked Secundario-Como oscilador losTimer

RC RUN N/A 1x Clocked Clocked Bloque interno del oscilador (2) PRI IDLE 1 00 Off Clocked Primario- todos los modos de

oscilador SEC_IDLE 1 01 Off Clocked Secundario-Como oscilador los

Timer RC IDLE 1 1x Off Clocked Bloque interno del oscilador (2)

Nota: 1: IDLEN devuelve este valor cuando se ha ejecutado la instrucciónSLEEP.

2: Incluye INTOSC y los postscaler INTOSC así como la fuente INTRC

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 108/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

106

3.4.4.1. Seleccionar Los Modos De Control De Energía

Seleccionar un modo de control de energía requiere dos decisiones: si la CPUestá controlada o no y la selección de una fuente del reloj. El bit IDLEN(OSCCON<7>) controla la CPU, mientras que los bits SCS1:SCS0 (OSCCON<1: 0>)seleccionan el reloj fuente.

3.4.4.1.1. Fuentes Del Reloj

Los bits SCS1:SCS0 permiten la selección de una de tres fuentes del reloj paralos modos de control de energía. Son:

Ê El reloj primario, según lo definido en los bits de configuraciónFOSC3:FOSC0

Ê El reloj secundario (el oscilador Timer1)Ê El bloque interno del oscilador (para los modos de RC)

3.4.4.1.2. Comienzo De Los Modos De Control De Energía

El cambio de un modo de control de energía a otro comienza cargando elregistro OSCCON. Los bits SCS1:SCS0 seleccionan la fuente del reloj y se determinancuáles funcionan en los modos ejecución y reposo. Cambiar estos bits provoca uncambio inmediato al reloj seleccionado. El cambio puede estar sometido a retrasos enlas transiciones del reloj.

La entrada a los modos de control de energía reposo o sleep se provoca por la

ejecución de una instrucción SLEEP. El modo que se activa depende del estado del bitIDLEN.

Dependiendo del modo actual y del modo al cual vamos a cambiar, un cambiode un modo de control de energía no tiene por que requerir seleccionar todos los bits.Muchas transiciones se pueden hacer cambiando los bits de selección del oscilador, ocambiando el bit IDLEN, antes de ejecutar una instrucción SLEEP. Si el bit IDLEN estáconfigurado correctamente, puede ser necesario realizar una instrucción SLEEP paracambiar al modo deseado.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 109/651

GUILLERMO DAVID HERRERO GONZÁLEZ

107

3.4.4.1.3. Transiciones De Reloj Y Puntero De Estado

La longitud de la transición entre las fuentes del reloj es la suma de dos ciclos dela fuente de reloj vieja y de tres a cuatro ciclos de la nueva fuente. Esta fórmula asumeque la nueva fuente del reloj es estable. Tres bits indican la fuente actual del reloj y suestado. Son:

Ê OSTS (OSCCON<3>)Ê IOFS (OSCCON<2>)Ê T1RUN (T1CON<6>)

En general, sólo uno de estos bits se fijará en un modo de energía. Cuando el bitOSTS está activo, el reloj primario está proporcionando el reloj del dispositivo. Cuandose activa el bit IOFS, la salida de INTOSC está proporcionando una fuente de reloj de

8MHz estable a un divisor que conduce el reloj del dispositivo. Cuando se activa el bitde T1RUN, el oscilador Timer1 está proporcionando el reloj. Si no se activa ningunosde estos bits, entonces el reloj INTRC controla el dispositivo, o la fuente INTOSC no esestable todavía.

Si el bloque del oscilador interno se configura como el reloj primario por los bitsde configuración FOSC3:FOSC0, entonces los bits OSTS y IOFS pueden activarse enlos modos PRI_RUN y PRI_IDLE. Esto indica que es el reloj primario (salidaINTOSC) que genera una señal estable de salida de 8MHz. Cambiar el modo de controlde energía RC a otro de la misma frecuencia puede desactivar el bit OSTS.

Nota 1: Cuidado al modificar el bit IRCF. Si VDD es menor de 3V, es posible

seleccionar una velocidad de reloj más alta que la soportada por VDD. Se puede provocar un error si se violan las especificaciones de VDD/FOSC.

2: Ejecutar una instrucción SLEEP no pone necesariamente el dispositivoen el modo sleep. Actúa como disparador para colocar el controlador en el modo sleep,o en el modo reposo, dependiendo del ajuste del bit IDLEN.

3.4.4.1.4. Múltiples Comandos SLEEP

El modo control de energía que se invoca con la instrucción SLEEP se determinaen el ajuste del bit IDLEN cuando se ejecuta la instrucción. Si se ejecuta otrainstrucción del SLEEP, el dispositivo entrará en el modo de control de energía

especificado por el bit IDLEN en ese momento. Si IDLEN ha cambiado, el dispositivoentrará en el nuevo modo de control de energía especificado por el nuevo ajuste.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 110/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

108

3.4.4.2. Modos De Ejecución

En los modos de ejecución, están activos los relojes al núcleo y a los periféricos.La diferencia entre estos modos es la fuente de reloj.

3.4.4.2.1. Modo PRI_RUN

El modo de PRI_RUN es la ejecución de la potencia normal delmicrocontrolador. Éste también es el modo por defecto sobre un dispositivo reseteandoa menos que el arranque a dos velocidades esté activo. En este modo, se activa el bitOSTS. El bit IOFS puede activarse si el bloque del oscilador interno es la fuente

primaria de reloj.

3.4.4.2.2. Modo SEC_RUN

El modo de SEC_RUN es el modo compatible a “cambio de reloj” ofrecido enotros PIC18. En este modo, la CPU y los periféricos se controlan con el oscilador Timer1. Esto da a los usuarios la opción de un consumo de energía más bajo mientrasque todavía se use una alta fuente estable de reloj.

Se pone el modo SEC_RUN fijando los bits SCS1:SCS0 con ‘01’. La fuente dereloj del dispositivo se cambia al oscilador Timer1, el oscilador primario se desactiva, el

bit T1RUN (T1CON<6>) se activa y el bit OSTS borra.

Nota: El oscilador Timer1 debe estar funcionamiento antes de poner el modoSEC_RUN. Si el bit T1OSCEN no se activa cuando se ponen los bits SCS1:SCS0 a

‘01’, no se activará el modo SEC_RUN. Si El oscilador Timer1 está activado pero nofuncionando, se provocará un retraso en los relojes del dispositivo hasta que el oscilador comience. En tal situación, la operación inicial del oscilador será inestable eimprevisible.

En transiciones entre los modos SEC_RUN a PRI_RUN, los periféricos y laCPU continúan siendo controlados por el oscilador Timer1 mientras que se enciende elreloj primario. Cuando el reloj primario está listo, se cambian los relojes. Cuandocambio de reloj se completa, el bit T1RUN se borra, y se activa el bit OSTS y el reloj

primario está proporcionando la señal. A los bits IDLEN y SCS no les afecta elarranque; el oscilador Timer1 continúa funcionando.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 111/651

GUILLERMO DAVID HERRERO GONZÁLEZ

109

FIGURA 4-1: Tiempos De Transición Para Entrar En El Modo SEC_RUN

FIGURA 4-2: Tiempos De Transición Al Cambiar Del Modo SEC_RUN Al PRI_RUN (HSPLL)

3.4.4.2.3. Modo RC_RUN

En el modo RC_RUN, la CPU y los periféricos se están controlando por el bloque del oscilador interno usando el multiplexor INTOSC; se desactiva el reloj primario. Este modo proporciona la mejor conservación de energía de todos los modoscuando se ejecuta código. Trabaja bien cuando no se requiere medir el tiempo de unaforma precisa ni alta velocidad. Si la fuente primaria del reloj es el bloque del oscilador interno (INTRC o INTOSC), no existen diferencias en la ejecución entre el PRI_RUN y

RC_RUN. Sin embargo, un cambio en el reloj provocará un retraso durante la entrada yla salida del modo de RC_RUN. Por lo tanto, si la fuente primaria del reloj es el bloqueinterno del oscilador, no se recomienda el uso de RC_RUN.

Se activa este modo fijando SCS1 a ‘1’. Se recomienda que SCS0 también esté borrado; esto es para mantener la compatibilidad de software con dispositivos futuros.Cuando la fuente del reloj se cambia al multiplexor de INTOSC, el oscilador primariose desactiva y el bit OSTS se borra. Los bits IRCF se pueden modificar en cualquier momento y cambiar inmediatamente la velocidad de reloj.

Nota: Cuidado al modificar un solo bit de IRCF. Se puede provocar un error sise violan las especificaciones de VDD/FOSC.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 112/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

110

Si los bits IRCF e INTSRC están borrados, la salida de INTOSC estádesactivada y el bit IOFS seguirá a 0; no habrá indicación de la fuente actual del reloj.

La fuente INTRC será el reloj del dispositivo.Si los bits IRCF se activan (permitiendo la salida INTOSC), o si se fija INTSRC,

el bit IOFS se activará después de que la salida INTOSC sea estable. Las señales deldispositivo continúan mientras que la fuente de INTOSC se estabiliza después de unintervalo TIOBST.

Si los bits IRCF estaban previamente en un valor diferente a cero o si INTSRCfue activado antes que SCS1 y la fuente INTOSC era estable, el bit IOFS seguirá activo.

En transiciones del modo RC_RUN al modo PRI_RUN, el dispositivo continúasiendo controlado por el multiplexor INTOSC mientras se activa el reloj primario.Cuando el reloj primario está listo, se produce un cambio a este. Cuando se completa elcambio de reloj, el bit IOFS se borra, se activa el bit OSTS y el reloj primario está

proporcionando el reloj del dispositivo. A los bits IDLEN y de SCS no les afecta elcambio. La fuente de INTRC continuará funcionando si se permite el WDT o el monitor del reloj de seguridad.

FIGURA 4-3: Tiempo De Transición Al Modo RC_RUN

FIGURA 4-4: Tiempo De Transición En El Cambio Del Modo RC_RUN Al PRI_RUN

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 113/651

GUILLERMO DAVID HERRERO GONZÁLEZ

111

3.4.4.3. Modo SLEEP

El modo de control de energía SLEEP en los dispositivosPIC18F2455/2550/4455/4550 es idéntico al modo SLEEP del resto de dispositivos dePICmicro. Se activa borrando el bit IDLEN (estado por defecto en el dispositivo) yejecutándose la instrucción SLEEP. Esto desactiva el oscilador. Se borran todos los bitsde estado de la fuente del reloj.

Cambiar de un modo cualquiera al modo SLEEP no requiere un cambio de señalde reloj. Esto es porque no se necesitan relojes cuando el microcontrolador entra en elmodo sleep. Si se activa el WDT, la fuente de INTRC empezará a funcionar. Si se

permite el oscilador Timer1, también continuará funcionando.

Cuando ocurre un acontecimiento (una interrupción, un reset o el

desbordamiento del WDT) en modo sleep, el dispositivo no funcionará hasta que lafuente del reloj seleccionada por los bits SCS1:SCS0 no esté lista, o se controlará por el bloque del oscilador interno si están activos el monitor del reloj de seguridad o elarranque con dos velocidades. En cualquier caso, se activa el bit OSTS cuando el reloj

primario es el reloj del dispositivo. A los bits IDLEN y SCS no les afecta el arranque.

FIGURA 4-5: Tiempo De Transición Para Entrar En El Modo SLEEP

FIGURA 4-6: Tiempo De Transición Del Reinicio De Un SLEEP (HSPLL)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 114/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

112

3.4.4.4. Modos De Reposo

Los modos reposo permiten que la CPU del regulador esté apagadaselectivamente mientras que los periféricos continúen funcionando. Seleccionar unmodo particular permite a usuarios manejar más el consumo de energía.

Si el bit IDLEN se fija a ‘1’ cuando se ejecuta una instrucción SLEEP, los periféricos tendrán como fuente de reloj la seleccionada con los bits SCS1:SCS0; sinembargo, la CPU no tendrá reloj. A los bits de estado de la señal de reloj no les afecta.Activando el bit IDLEN y ejecutando una la instrucción SLEEP proporciona un métodorápido de cambiar de un modo de funcionamiento dado a su modo de reposocorrespondiente.

Si se selecciona el WDT, la fuente de INTRC continuará funcionando. Si se

permite el oscilador Timer1, también continuará funcionando.Puesto que la CPU no está ejecutando instrucciones, las únicas salidas de los

modos de reposo son una interrupción, un desbordamiento del WDT descanso o unreset. Cuando ocurre un acontecimiento de este tipo, la CPU sufre un retraso del tipoTCSD hasta que llega a ejecutar el código. Cuando la CPU comienza a ejecutar código, seacciona con la misma fuente del reloj que posea el Modo reposo. Por ejemplo, aldespertar del modo RC_IDLE, el bloque del oscilador interno controlará la CPU y los

periféricos (es decir, el modo RC_RUN). A los bits IDLEN y SCS no les afecta elreinicio.

Mientras que en cualquier modo reposo o modo sleep, un desbordamiento del

WDT dará lugar a un reinicio al modo de funcionamiento especificado por los bitsSCS1:SCS0.

3.4.4.4.1. Modo PRI_IDLE

Este modo es el único entre los tres modos de reposo de baja potencia que noinhabilita el reloj primario del dispositivo. Para aplicaciones con una temporizaciónsensible, esto permite una reanudación más rápida del dispositivo, con una fuente

primaria más exacta del reloj, puesto que la fuente del reloj no tiene que “calentar” oesperar la transición de otro oscilador.

El modo de PRI_IDLE entra en modo PRI_RUN activando el bit IDLEN y

ejecutando una instrucción SLEEP. Si el dispositivo está en otro modo defuncionamiento, primero activa el bit IDLEN, después borrar los bits SCS y por últimoejecutar una instrucción SLEEP. Aunque la CPU está desactivada, los periféricoscontinúan gobernados por la fuente primaria de reloj especificada por los bits deconfiguración FOSC3:FOSC0. El bit OSTS se activará.

Cuando ocurre un acontecimiento que provoque un reset, la CPU se controlarácon la fuente primaria de reloj. Existe un retraso de tipo TCSD entre el cambio de modo yel comienzo de la ejecución de código. Esto se provoca para permitir que la CPU estélista para ejecutar instrucciones. Después del reinicio, el resto de bits OSTS se activan.A los bits IDLEN y SCS no les afecta el reset.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 115/651

GUILLERMO DAVID HERRERO GONZÁLEZ

113

3.4.4.4.2. MODO SEC_IDLE

En modo de SEC_IDLE, la CPU se desactiva pero los periféricos continúanfuncionando gracias al Timer1. Se cambia del modo SEC_RUN al SEC_IDLEactivando el bit IDLEN y ejecutando una instrucción SLEEP. Si el dispositivo está enotro modo de funcionamiento, se activa primero el bit IDLEN, después se fijan los bitsSCS1:SCS0 a ‘01’ y se ejecuta el comando SLEEP. Cuando la fuente del reloj secambia al oscilador Timer1, se desactiva el oscilador primario, el bit OSTS se borra y seactiva el bit T1RUN.

Cuando ocurre un acontecimiento de reinicio, los periférico continúanfuncionando con el oscilador Timer1. Después de un intervalo TCSD que sigue a lainterrupción, la CPU comienza a ejecutar código gracias al oscilador Timer1. A los bitsIDLEN y SCS no les afecta el reset; el oscilador Timer1 continúa funcionando.

Nota: El oscilador Timer1 debe estar en funcionamiento antes de entrar en elmodo SEC_IDLE. Si el bit T1OSCEN no se activa cuando se ejecuta la instrucciónSLEEP, se ignorará esta instrucción y no cambiara al modo SEC_IDLE. Si el oscilador Timer1 está activo pero no funciona todavía, se provocarán retrasos en los relojes de los

periféricos hasta que el oscilador comience a contar. En tales situaciones, tenemos unoscilador imprevisible.

FIGURA 4-7: Tiempo De Transición Para Entrar En El Modo IDLE

FIGURA 4-8: Tiempo De Transición El Reinicio Del Modo IDLE Al RUN

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 116/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

114

3.4.4.4.3. Modo RC_IDLE

En modo de RC_IDLE, la CPU se desactiva pero los periféricos continúanactivos con el bloque del oscilador interno usando el multiplexor INTOSC. Este modo permite la conservación controlada de energía durante los períodos de reposo.

El paso del modo RC_RUN, a éste modo se realiza activando el bit IDLEN yejecutando una instrucción SLEEP. Si el dispositivo está en otro modo defuncionamiento, primero se activa el bit IDLEN, después el bit SCS1 y por último, unainstrucción SLEEP. Aunque no importa su valor, se recomienda que se borre el bitSCS0; esto es por mantener la compatibilidad de software con dispositivos futuros. Elmultiplexor INTOSC se puede utilizar para seleccionar una frecuencia de reloj más altamodificando los bits IRCF antes de ejecutar la instrucción SLEEP. Cuando la fuente delreloj se cambia al multiplexor INTOSC, se desactiva el oscilador primario y el bit OSTS

se borra.Si los bits IRCF se ponen a cualquier valor diferente a cero, o se activa el bit

INTSRC, se permite la salida INTOSC. El bit IOFS se activa cuando la salida INTOSCesté estable, después de un intervalo TIOBST. Los relojes de los periféricos continúanhasta que la fuente de INTOSC se estabiliza. Si los bits IRCF estaban previamente enun valor diferente a cero, o INTSRC fue fijado antes de ejecutar la instrucción SLEEP yla fuente INTOSC es estable, el bit IOFS seguirá activo. Si los bits IRCF e INTSRCestán todos borrados, la salida INTOSC no se permitirá, el bit IOFS seguirá borrado yno habrá indicación de la fuente actual de reloj.

Cuando ocurre un acontecimiento de reinicio, los periféricos continúanfuncionando por el multiplexor INTOSC. Después del retraso TCSD sigue lainterrupción, la CPU comienza ejecutando el código que se controla con el multiplexor INTOSC. A los bits IDLEN y SCS no les afecta el reset. La fuente INTRC continuaráfuncionando si el WDT o el monitor de reloj de seguridad están activos.

3.4.4.5. Salir De Los Modos SLEEP Y Reposo

La salida del modo sleep o de los modos de reposo se provoca accionando unainterrupción, un reset o un desbordamiento del WDT. Esta sección discute losdisparadores que causan las salidas de modos de ahorro de energía. El subsistema queregistra las acciones se discuten en cada uno de los modos de ahorro de energía.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 117/651

GUILLERMO DAVID HERRERO GONZÁLEZ

115

3.4.4.5.1. Salida Por Una Interrupción

Cualquier interrupción puede provocar el cambio del modo de reposo o delmodo sleep al modo ejecución. Para permitir esta funcionalidad, se debe activar unafuente de interrupción activando su bit en uno de los registros INTCON o PIE. Se iniciala secuencia de la salida cuando se activa el flag correspondiente a la interrupción.

En todas las salidas de modos reposo o sleep por una interrupción, el programasalta al vector interrupción si el bit GIE/GIEH (INTCON<7>) está activo. Si no, laejecución de código continúa o se reanuda sin saltos.

Se necesita un retraso TCSD después de la interrupción para que el sistema salgadel modo reposo o sleep. Este retraso se provoca para que la CPU se prepare para laejecución. La ejecución de la instrucción se reanuda en el primer ciclo de reloj que sigue

a este retraso.

3.4.4.5.2. Salida Por Desbordamiento Del WDT

La salida por el WDT causará diversas acciones dependiendo del modo deahorro de energía que esté activo cuando se desborde.

Si el dispositivo no está ejecutando código (en cualquier modo reposo o en elmodo sleep), el desbordamiento dará lugar a una salida del modo ahorro de energía. Siel dispositivo está ejecutando código (cualquiera de los modos de ejecución), eldesbordamiento dará lugar a un reset del WDT.

El contador de tiempo y el postscaler del WDT se borran una instrucción SLEEPo CLRWDT, la pérdida de la fuente de reloj seleccionada (si se permite el monitor dereloj de seguridad) y la modificación de los bit IRCF en el OSCCON si el bloque deloscilador interno es la fuente del reloj del dispositivo.

3.4.4.5.3. Salida Por Reset

Normalmente, el dispositivo se resetea con el contador de inicio (OST) hasta queel reloj primario esté listo. En ese momento, el bit OSTS se activa y el dispositivocomienza a ejecutar código. Si el bloque del oscilador interno es la nueva fuente delreloj, el bit IOFS se activa en lugar de otro.

El retraso entre el reset hasta que comienza la ejecución de código depende delas fuentes de reloj de antes y después del reinicio y del tipo de oscilador si la nuevafuente de reloj es el oscilador primario.

La ejecución del código puede comenzar antes de que el reloj primario este listo.Si el inicio con dos velocidades o el monitor de reloj de seguridad están activos, eldispositivo puede comenzar la ejecución tan pronto como la fuente del reset hayadesaparecido. La ejecución se controla con el multiplexor INTOSC conducido por

bloque del oscilador interno. La ejecución la controla por el bloque del interno oscilador hasta que el reloj primario esté listo o entre en un modo de ahorro de energía antes deque el reloj primario esté listo; el reloj primario se desactiva.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 118/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

116

3.4.4.5.4. Salida Sin Un Retraso Del Inicio Del Oscilador

Algunas salidas de los modos de ahorro de energía no llaman al OST. Hay doscasos:

Ê El modo PRI_IDLE donde la fuente primaria de reloj no se detieneÊ La fuente primaria de reloj no es ni XT ni HS

En estas situaciones, la fuente primaria no necesita un retraso en el reinicio, porque está funcionando (en el modo PRI_IDLE) o porque normalmente no necesita unretraso en el inicio (el modo EC o cualquier modo del bloque interno). Sin embargo, senecesita un retraso TCSD después de reiniciar el sistema para dejar el modo sleep oreposo para permitir que la CPU se prepare para ejecutar una instrucción. La ejecuciónde la instrucción se reanuda en el primer ciclo de reloj después del retraso.

3.4.5. RESET

Los dispositivos PIC18F2455/2550/4455/4550 distinguen entre las distintasclases de reset:

a) Reset por fallo de energía (POR)b) Reset por MCLR* durante la operación normalc) Reset de MCLR* durante modos ahorro de energíad) Reset por el perro guardián (WDT) (durante ejecución)e) Reset por cese de energía (BOR)f) Instrucción RESET

g) Reset por desbordamiento la Pilah) Reset por vaciado de la Pila

Esta sección discute los resets generados por MCLR*, POR y BOR y cubre laoperación de los varios contadores de tiempo inicio.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 119/651

GUILLERMO DAVID HERRERO GONZÁLEZ

117

FIGURA 5-1: Diagrama Simplificado Del Circuito De Reset Del Chip

3.4.5.1. Registro RCON

Los resets del dispositivo se siguen con el registro RCON (registro 5-1). Loscinco bits más bajos del registro indican que ha ocurrido un reset. En la mayoría de loscasos, estos bits se borran con el reset y se deben activar por software después. El estadode estos flags se puede leer para indicar el tipo de reset que acaba de ocurrir.

El registro de RCON también tiene bits de control para elegir la prioridad de lainterrupción (IPEN) y del software de control del BOR (SBOREN).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 120/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

118

REGISTRO 5-1. RCON: Registro De Control De Reset

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

IPEN SBOREN - RI* TO* PD* POR* BOR*

BIT 7 IPEN: Bit activador de la prioridad de las interrupciones1= Activa los niveles de prioridad de en las

interrupciones0= Desactiva los niveles de prioridad de en las

interrupciones (Modo compatible con PIC16CXXX)BIT 6 SBOREN: Bit activador de reset por BOR

(En un reset SBOREN=1)Si BOREN1:BOREN0=01

1=BOR activo0=BOR desactivado

Si BOREN1:BOREN0=00, 10 ó 11Bit desactivado, se lee 0

BIT 4 RI*: Bit de la instrucción RESET1=no se ha ejecutado una instrucción RESET (se activa

por firmware)0=se ha ejecutado una instrucción RESET (se tiene que

activar por software)BIT 3 TO*: Bit de desbordamiento del WDT:

1= Se activa por reinicio, CLRWDT,

o una instrucción SLEEP0= El WDT se ha desbordadoBIT 2 PD*: Bit de detección de una caída de tensión:

1= Se activa por reinicio o CLRWDT0=se borra por una instrucción SLEEP

BIT1 POR*: Bit de estado de reset por subida de tensión (el valor actual de POR* depende del tipo de reset)

1= No ha ocurrido (se activa por firmware)0= Ha ocurrido (se tiene que activar por software)

BIT0 BOR*: Bit de estado de reset por cese de energía1= No ha ocurrido (se activa por firmware)

0= Ha ocurrido (se tiene que activar por software)Nota 1: Se recomienda que el bit POR* esté fijado después de detectar el reset

para poder detectar otros resets.

2: Normalmente, cuando ocurre un reset por cese de energía BOR* es ‘0’ yPOR* ‘1’ (suponiendo que POR* se pone a ‘1’ después de un reset por subida detensión).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 121/651

GUILLERMO DAVID HERRERO GONZÁLEZ

119

3.4.5.2. Master Clear Reset (MCLR*)

El pin MCLR* proporciona un método para accionar un reset externo deldispositivo. El reset se genera poniendo el pin a ‘0’. Estos dispositivos tienen un filtroantirruidos en la trayectoria del reset de MCLR* que detecta y no hace caso de pulsos

pequeños. El pin MCLR* no se pone a cero con ningún reset interno, incluyendo elWDT. En los dispositivos PIC18F2455/2550/4455/4550, la entrada MCLR* se puedeinhabilitar con la configuración del bit MCLRE. Cuando MCLR* está desactivado, el

pin se convierte en una entrada digital.

3.4.5.3. Reset Por Subida De Tensión (POR)

Un reset por subida de tensión se genera en el chip cuando VDD sube hasta unumbral. Esto provoca que el dispositivo se inicialice cuando VDD tenga un valor

adecuado.Para aprovecharse del POR, conectar el pin MCLR* a VDD a través de una

resistencia (1k Ω a 10k Ω). Esto elimina los componentes RC externos que se necesitan para crear un retraso en el reset por subida de tensión.

Cuando el dispositivo comienza la operación normal (es decir, salir de lacondición de reset), los parámetros de funcionamiento del dispositivo (tensión,frecuencia, temperatura, etc.) se deben conocer para asegurar el correctofuncionamiento del dispositivo. Si estas condiciones no se conocen, el dispositivo debeestar en reset hasta averiguarlas. Los reset POR se capturan con el bit POR (RCON<1>). El estado del bit se fija a ‘0’ siempre que ocurra un POR; no lo cambianingún otro reset. POR no se ajusta a ‘1’ con ningún acontecimiento de hardware. Paracapturar acontecimientos múltiples, el usuario pone manualmente el bit a ‘1’ por software después de cualquier POR.

FIGURA 5-2: Circuito De Reset Externo Por Subida De Tensión (Para Lenta Subida De V DD )

Nota: 1: Se necesita este circuito sólosi VDD sube lentamente.

El diodo D se necesita para descargar Cen las bajadas de VDD.

2: R<40Ω Recomendada para que latensión no dañe el chip.

3: R 1≥1k Ω limitará la corriente enMCLR*.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 122/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

120

3.4.5.4. Reset Por Cese De Tensión (BOR)

Los dispositivos PIC18F2455/2550/4455/4550 tienen un circuito BOR enejecución que provee al usuario un número de opciones de configuración y de ahorro deenergía. El BOR se controla con los bits BORV1:BORV0 y BOREN1:BOREN0. Hayun total de cuatro configuraciones del BOR

El umbral del BOR se fija con los bits BORV1:BORV0. Si se permite BOR (cualquier valor de BOREN1:BOREN0 excepto el ‘00’), cualquier tensión VDD por debajo de VBOR durante un tiempo mayor que TBOR resetea el dispositivo. Un reset

puede o no puede ocurrir si VDD baja por debajo de VBOR durante un tiempo menor queTBOR . El chip permanece en reset hasta que VDD vale más que VBOR .

Si se permite el contador de tiempo de inicio, se invocará después de que V DD

sea mayor que VBOR ; entonces mantendrá el chip en reset durante un retraso adicional,TPWRT. Si VDD cae por debajo de VBOR mientras que el contador de tiempo de inicio estáfuncionando, el chip volverá a un nuevo reset por cese de tensión y el contador detiempo de inicio se inicializará. Una vez que VDD se levante sobre VBOR , El contador detiempo de inicio ejecutará un retraso.

BOR y el contador de inicio (PWRT) se configuran independientemente.Permitir el reset BOR no permite automáticamente el PWRT.

3.4.5.4.1. Software Que Activa El BOR

Cuando BOREN1:BOREN0 = 01, el BOR puede activarse o inhabilitarse por el

usuario mediante software. Esto se consigue con el bit del control, SBOREN(RCON<6>). Activar SBOREN permite al BOR funcionar como se ha descrito

previamente. Borrar SBOREN inhabilita el BOR totalmente. El bit SBOREN funcionasolamente en este modo; si no, se lee como ‘0’.

La colocación del BOR bajo control por software da al usuario la flexibilidadadicional de adaptar la aplicación sin tener que reprogramar el dispositivo para cambiar la configuración del BOR. También permite al usuario adaptar el consumo de energíadel dispositivo mediante software eliminando la corriente incremental que consume elBOR. Mientras que la corriente de BOR es muy pequeña, puede tener cierto impacto enusos de baja potencia.

Nota: Aun cuando el BOR está bajo control por software, el nivel voltaico delreset BOR todavía se fija con los bits BORV1:BORV0. No se puede cambiar por software.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 123/651

GUILLERMO DAVID HERRERO GONZÁLEZ

121

3.4.5.4.2. Detección Del BOR

Cuando se permite el BOR, el bit BOR* se resetean en cualquier acontecimientode BOR o de POR. Esto hace que sea difícil determinar si ha ocurrido un reset BOR por la lectura el estado del bit BOR*. Un método de mayor confianza es comprobar simultáneamente el estado de los bits POR* y BOR*. Esto asume que el bit POR* se

pone a ‘1’ por software inmediatamente después de cualquier reset POR. SI BOR es ‘0’mientras que POR es ‘1’, se puede asegurar que ha ocurrido un reset BOR.

3.4.5.4.3. Desactivar BOR En El Modo SLEEP

Cuando BOREN1:BOREN0 = 10, los reset BOR están bajo el control delhardware y funciona como se ha descrito previamente. Siempre que el dispositivo entreen modo sleep el BOR se inhabilita automáticamente. Cuando el dispositivo vuelve a

cualquier otro modo de funcionamiento, se vuelve a permitir el BOR automáticamente.Este modo permite aplicaciones en las que el dispositivo se recupere de

situaciones de cese de energía, mientras que ejecutan código, cuando el dispositivorequiere la protección BOR. Al mismo tiempo, ahorra energía adicional en modo sleepeliminando la corriente incremental de BOR.

TABLA 5-1: Configuración Del BOR

Configuración del BOR Estado deBOREN1 BOREN0 SBOREN Operaciones del BOR

(RCON<6>)

0 0 No disponible BOR desactivado; para activarlo reprogramar el bit de configuración0 1 Disponible BOR activo en software; se controlan las operaciones por SBOREN.1 0 No disponible BOR activo en hardware en los modos RUN e IDLE, desactivado en

el modo SLEEP1 1 No disponible BOR activo en hardware; para desactivarlo reprogramar el bit de

configuración.

3.4.5.5. Contadores Del Reset

Los dispositivos PIC18F2455/2550/4455/4550 incorporan tres contadores detiempo separados en el chip que ayudan a regular el proceso de puesta en marcha delreset. Su función principal es asegurarse de que el reloj del dispositivo es estable antesde que se ejecute el código. Estos contadores de tiempo son:

Ê Temporizador de inicio (PWRT)Ê Oscilador temporizador de arranque (OST)Ê Temporizador de control del PLL

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 124/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

122

3.4.5.5.1. Temporizador De Inicio (PWRT)

El temporizador de inicio (PWRT) de los dispositivosPIC18F2455/2550/4455/4550 es un contador de 11 bits que utiliza la fuente de INTRCcomo entrada de reloj. Este intervalo del tiempo de 2048x32µs=65,6ms. Mientras que elPWRT está contando, el dispositivo está en reset.

El retraso depende del reloj INTRC y variará en el chip debido a la variación dela temperatura y del proceso.

El PWRT se permite borrando el bit PWRTEN.

3.4.5.5.2. Oscilador Temporizador De Arranque (OST)

El oscilador temporizador de arranque (OST) proporciona un ciclo de 1024

oscilaciones (de la entrada OSC1) se inicia después del retraso PWRT. Esto asegura queel oscilador XTAL o el resonador hayan comenzado y se haya estabilizado.

El desbordamiento de OST ocurre solamente en los modos XT, HS y HSPLL ysolamente en un inicio o al salir de un modo de ahorro de energía.

3.4.5.5.3. Temporizador Del Control De PLL

Con el PLL permitido en su modo PLL, el retraso que sigue al inicio eslevemente diferente de otros modos del oscilador. Un contador de tiempo proporcionaun retraso fijo que es suficiente para que el PLL detecte la frecuencia principal deloscilador. Este retraso (TPLL) es típicamente de 2ms y sigue al retraso del inicio del

oscilador.

3.4.5.5.4. Secuencia De Retraso

En ciclo inicial, la secuencia del retraso es:

1. Después de que la condición de POR haya desaparecido, se invoca elretraso PWRT (si está permitido).

2. Entonces, se activa el OST.

El retraso total variará basado en la configuración del oscilador y el estado delPWRT. En los dispositivos en modo RC y con el PWRT inhabilitado, no habrá retraso.

Puesto que los retrasos ocurren por pulsos POR, si MCLR* permanece activosuficiente tiempo, en todos los retrasos se activará. El MCLR* comenzará a ejecutarseinmediatamente. Esto es útil para pruebas o a sincronizar más de un PIC18FXXXXfuncionando en paralelo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 125/651

GUILLERMO DAVID HERRERO GONZÁLEZ

123

TABLA 5-2: Retraso En Distintas Situaciones

Configuración del Aumento(2) y cese de tensión Salida del

Oscilador PWRTEN=0 PWRTEN=1 Modo de ahorro de energía HS, XT 66ms(1) + 1024TOSC 1024TOSC 1024TOSC HSPLL, XTPLL 66ms(1)+1024TOSC+2ms(2) 1024TOSC+2ms(2) 1024TOSC+2ms(2) EC, ECIO 66ms(1) - -ECPLL, ECHO 66ms(1)+2ms(2) 2ms(2) 2ms(2) INTIO, INTCKO 66ms(1) - -INTHS, INTXT 66ms(1)+1024TOSC 1024TOSC 1024TOSC

Nota: 1: 66ms (65,5ms) es el retraso nominal de reinicio (PWRT)

2: 2ms es el tiempo nominal requerido para que el PLL reconozca unafrecuencia.

3.4.5.6. Estado De Los Registros En Un Reset A la mayoría de los registros no les afectan los resets. Su estado se desconoce en

un POR y sin cambios por cualquier otro reset. Los otros registros se fuerzan a un“estado de reset” dependiendo del tipo de reset ocurrido.

A la mayoría de los registros no les afecta un reinicio por WDT, puesto que estose ve como la reanudación a la operación normal. Los bits estado RCON, RI*, TO*,PD*, POR* y BOR*, se activan o se borran diferentemente en los distintos resets. Estos

bits se utilizan en software para determinar la naturaleza del reset.

3.4.6. ORGANIZACIÓN DE LA MEMORIA

Hay tres tipos de memoria en los PIC18:

Ê Memoria de programaÊ RAM de datosÊ EEPROM de datos

Como dispositivos de arquitectura Harvard, los buses la memoria de datos y del programa están separados; esto permite el acceso a la vez en las dos memorias. LaEEPROM de datos, en la práctica, se puede utilizar como un dispositivo periférico,

puesto que se maneja a través de un sistema de registros de control.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 126/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

124

FIGURA 6-1: Mapa De Memoria De Programa Y De La Pila

3.4.6.1. Organización De La Memoria De Programa

Los microcontroladores PIC18 implementan un contador de programa de 21bitsque es capaz de tratar 2Mb memoria de programa. Accediendo a una localización enmedio el límite superior de la memoria implementada físicamente y los 2Mbdireccionables se leerá todo ‘0’ (una instrucción NOP).

Los PIC18F2455 y los PIC18F4455 cada uno tienen 24kb de memoria flash y pueden almacenar hasta 12.288 instrucciones de palabra única. El PIC18F2550 yPIC18F4550 cada uno tienen 32kb de la memoria flash y puede almacenar hasta 16.384instrucciones de palabra única. Los dispositivos PIC18 tienen dos vectores deinterrupción. En un reset, la dirección del vector está en 0000h y los vectores deinterrupción están en las direcciones 0008h y 0018h.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 127/651

GUILLERMO DAVID HERRERO GONZÁLEZ

125

3.4.6.1.1. Contador De Programa

El contador de programa (PC) especifica la dirección de la instrucción que se vaa ejecutar. El PC es de 21bits de ancho separados en tres registros de 8bits. El byte bajo,conocido como registro PCL, es legible y escribible. El byte alto, o registro PCH,contiene los bits<15:8> del PC; no es directamente ni legible ni escribible. Lasactualizaciones del registro PCH se realizan a través del registro de PCLATH. El bytesuperior se llama PCU. Este registro contiene los bits<20:16> del PC; no esdirectamente ni legible ni escribible. Las actualizaciones del registro PCU se realizan através del registro PCLATU.

El contenido de PCLATH y de PCLATU se transfiere al contador de programa por cualquier operación que escriba el PCL. Semejantemente, los dos bytes superioresdel contador de programa se transfieren al PCLATH y al PCLATU por cualquier

operación que lea el PCL.El PC trata bytes en la memoria del programa. Para evitar que el PC no se alinee

bien con la instrucción, el bit menos significativo de PCL está fijado a un valor de ‘0’.El PC se incrementa de 2 en 2 para tratar instrucciones secuenciales en la memoria de

programa.

Las rutinas de salto CALL, los RCALL y GOTO escriben en el contador de programa directamente. Con estas instrucciones, el contenido de PCLATH y PCLATUno se transfieren al contador de programa.

3.4.6.1.2. Devolver La Dirección De La Pila

La pila almacena la dirección de hasta 31 saltos. El PC se posiciona sobre la pilacuando se ejecuta una instrucción CALL o RCALL o una llamada a una interrupción. Elcontenido de la pila se devuelve al CP con las instrucciones RETURN, RETLW o unainstrucción RETFIE. A los registros PCLATU y PCLATH no les afectan lasinstrucciones CALL ni RETURN.

La pila funciona como 31 palabras por 21bits de RAM y 5bits de Stack Pointer,STKPTR. El espacio de la pila no es parte de la memoria de programa o de datos. La

pila es legible y escribible y la última dirección de la pila es legible y escribible conRegistros especiales de TOP-of-Stack. Los datos se pueden guardar, o utilizarlos en la

pila, usando éstos registros.

Un tipo instrucción que guarda una dirección en la pila es CALL. El puntero dela pila se incrementa y la localización que señalaba por el puntero de la pila se escribecon el contenido del PC (que señala ya a la instrucción que sigue a CALL). Con lainstrucción RETURN se utiliza el contenido de la pila. El contenido de la localizaciónseñalado por el STKPTR se transfieren al PC y entonces el stack pointer decrementa.

El stack pointer se inicializa con ‘00000’ después de cada reset. No hay RAMasociado a la localización que corresponde con un valor del stack pointer de ‘00000’;esto sólo es un valor de reset. Los bits de estado indican si la pila está llena, hadesbordado o tiene está vacía y tiene que devolver una dirección (underflow).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 128/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

126

FIGURA 6-2: Devolución De La Dirección De La Pila Y Los Registros Asociados

Acceso Al Último Valor De La Pila

Solamente el último valor de la pila (TOS) es legible y escribible. Un sistema detres registros, TOSU:TOSH:TOSL, llevan a cabo el contenido de la localización de la

pila señalado por el registro STKPTR. Esto permite que los usuarios pongan unadirección en la pila mediante software en caso de necesidad. Después de que una CALL,un RCALL o una interrupción, el software puede guardar el valor en la pila escribiendolos registros TOSU:TOSH:TOSL. Una vez ejecutada la rutina, por software, se puededevolver los valores de TOSU:TOSH:TOSL y regresar al lugar del salto en el programa.

El usuario debe inhabilitar las interrupciones globalmente y permitir los bits quetengan acceso a la pila para prevenir errores incontrolados en la pila.

Retorno Del Stack Pointer (STKPTR)El registro STKPTR (registro 6-1) contiene el valor del stack pointer, el bit de

estado STKFUL (la pila está completa) y el bit de estado STKUNF (desbordamiento decapacidad inferior de la pila). El valor del stack pointer puede ser de 0 a 31. Seincrementa el stack pointer antes de que los valores se almacenen en pila y sedecrementa después de que los valores de la pila se utilicen. En reset, el valor del stack

pointer será cero. El usuario puede leer y escribir el valor del stack pointer. Estacaracterística se puede utilizar por un sistema operativo en tiempo real (RTOS) paracontrolar la pila.

Cuando el PC se almacene en la pila 31 veces (sin hacer utilizar ninguno de los

valores de la pila), se activa el bit STKFUL. El bit STKFUL se borra por software o por un POR.

La acción que ocurre cuando se llene la pila depende por completo del estado del bit de configuración STVREN (permite el desbordamiento de la pila). Si se activaSTVREN (defecto), el 31º almacenaje incrementará (PC + 2) el valor sobre de la pila,activará el bit STKFUL y reseteará el dispositivo. El bit STKFUL seguirá siendo ‘1’ yel stack pointer se borrará.

Si STVREN es cero, el bit STKFUL se activará en el 31º almacenamiento y elstack pointer incrementará a 31. Ningún dato adicional sobrescribirá el dato 31º y elSTKPTR permanecerá en 31.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 129/651

GUILLERMO DAVID HERRERO GONZÁLEZ

127

Cuando la pila se ha liberado, el siguiente almacenaje devolverá un cero al PC yactiva el bit STKUNF, mientras que el stack pointer permanece en cero. Seguirá activo

el bit STKUNF hasta que se borre por software u ocurra un POR.Nota: Devolver un valor de cero al PC en un underflow tiene el efecto de dirigir

al programa al vector de reset, donde las condiciones de la pila se pueden verificar y se pueden tomar las acciones apropiadas. Esto es no igual que un reset, no les afecta alcontenido de los SFRs.

Instrucciones Push Y Pop

Puesto que el TOP-of-Stack es legible y escribible, tiene la capacidad dealmacenar valores sobre la pila y quitarlos, sin que afecte a la ejecución de programanormal, es una característica deseable. El sistema de instrucción PIC18 incluye dos

instrucciones, PUSH y POP, que permiten manipular la TOS por software. TOSU,TOSH y TOSL se pueden modificar poniendo datos o devolviéndolos a la pila.

La instrucción PUSH pone el valor actual del PC en la pila. Este incrementa elstack pointer y carga el valor actual del PC sobre la pila.

La instrucción POP desecha la TOS actual decrementando el stack pointer. Elvalor que se almacenó anteriormente en la pila convierte en el valor de la TOS.

REGISTRO 6-1. STKPTR: Registro Del Stack Pointer

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

STKFUL STKUNF - SP4 SP3 SP2 SP1 SP0BIT 7 STKFUL: Bit señalizador del llenado de la pila: (Borrado por

software)1= La pila está llena o sobresaturada0= La pila no está llena ni sobresaturada

BIT 6 STKUNF: Bit señalizador del underflow: (Borrado por software)1= Ha ocurrido un underflow0= No ha ocurrido un underflow

BIT 4-0 SP4:SP0: Bits de localización del stack pointer

Resets Por Llenado De La Pila Y Por UnderflowLos reset por desbordamiento y por underflow de la pila se activan activando el

bit STVREN del registro de configuración 4L. Cuando se activa STVREN, un llenado ovaciado de la pila activará el bit apropiado STKFUL o STKUNF y después hará un reseten el dispositivo. Cuando STVREN está borrado, al llenar o vaciar la pila se activará el

bit apropiado STKFUL o STKUNF pero no se reseteará el dispositivo. Los bitsSTKFUL o STKUNF se borran por software o en un reinicio.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 130/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

128

3.4.6.1.3. Pila De Almacenamiento Rápido

Un almacenamiento rápido en la pila se proporciona con los registros ESTADO,WREG y BSR para lograr una “vuelta rápida” al lugar del salto. Cada pila es de un nivelde profundidad y no es ni legible ni escribible. Se carga con el valor actual del registrocorrespondiente cuando se ejecuta una interrupción. Todas las fuentes de la interrupciónalmacenarán valores en los registros de la pila. Los valores cargan nuevamente dentrode sus registros se utiliza la instrucción RETFIE o FAST para volver de la interrupción.

Si se permiten las interrupciones bajas y prioritarias, los registros de la pila no se pueden utilizar fiablemente para volver de las interrupciones de prioridad baja. Si ocurreuna interrupción prioritaria mientras que se mantiene una interrupción de baja prioridad,los valores del registro de la pila almacenados por la interrupción de prioridad baja seráeliminados y se almacenarán los de la alta. En estos casos, el usuario debe almacenar los

datos de los registros en memoria.Si las interrupciones de alta prioridad no se utilizan, todas las interrupciones

pueden utilizar la pila almacenamiento rápido para volver de la interrupción. Si no seutilizan las interrupciones, la pila de almacenamiento rápido se puede usar pararestaurar los registros ESTADO, WREG y BSR al final de una llamada de unsubprograma. Para utilizar la pila de almacenamiento rápido en una llamada de unsubprograma, hay que usar una instrucción CALL LABEL, FAST donde LABEL es elnombre de la subrutina se debe utilizar para guardar los registros de ESTADO, WREGy BSR en la pila de almacenamiento rápido. Para restaurar estos registros hay queutilizar una instrucción RETURN, FAST.

EJEMPLO 6-1: Código De Ejemplo De Acceso A La Pila De Almacenamiento Rápido

CALL SUB1, FAST ;Se guardan en el registro de la pila de acceso rápido los ;registros ESTADO, WREG y BSR

…..…..

SUB1 …..…..RETURN, FAST ;Devolvemos los valores guardados en la pila de acceso

;rápido

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 131/651

GUILLERMO DAVID HERRERO GONZÁLEZ

129

3.4.6.1.4. Operaciones De Búsqueda En Las Tablas De Memoria DePrograma

Puede haber programas que en determinadas situaciones requieran la creación deestructuras de datos, o tablas con búsqueda, dentro de la memoria del programa. En losdispositivos PIC18, las operaciones de búsqueda en tablas se puede implementar de dosmaneras:

Ê GOTO controladoÊ Lectura de la tabla

GOTO Controlado

Un GOTO controlado se logra agregando una compensación al contador de

programa.Una opción de búsqueda en la tabla se puede conseguir con una instrucción

ADDWF PCL y un grupo de instrucciones RETLW nn. El registro W se carga con unacompensación en la tabla antes de ejecutar la llamada a esa tabla. La primera instrucciónde la rutina llamada es la instrucción ADDWF PCL. La instrucción siguiente ejecutadaserá una RETLW nn que devuelve “el valor” nn a la función que llama.

El valor compensado (en WREG) especifica el número de bytes que el contador de programa debe avanzar y deben ser los múltiplos de 2 (LSb = 0).

Con este método, solamente se puede almacenar un byte de datos en cadalocalización y sitio de cada instrucción, en la vuelta se requiere la dirección de pila.

EJEMPLO 6-2: GOTO Controlado Usando Un Valor Compensado

MOVF OFFSET, WCALL TABLE

ORG nn00hTABLE ADDWF PCL

RETLW nnhRETLW nnhRETLW nnh….

….Lectura Y Escritura En Las Tablas

Un método mejor de almacenar datos en la memoria del programa permite quedos bytes de datos sean almacenados en cada localización de la instrucción.

Las operaciones de búsqueda en tabla de datos pueden almacenar dos bytes por palabra usando la lectura y la escritura en tabla. El registro puntero de la tabla(TBLPTR) especifica el byte de dirección y el registro de latch de la tabla (TABLAT)contiene los datos que se leen o se escriben en la memoria del programa. Los datos setransfieren a o desde la memoria del programa de byte en byte.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 132/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

130

3.4.6.2. Ciclos Instrucción En Los PIC18

3.4.6.2.1. Esquema De RelojLa entrada de reloj del microcontrolador, si es una fuente interna o externa, se

divide por cuatro internamente para generar cuatro relojes sin desfase (Q1, Q2, Q3 yQ4). Internamente, el contador de programa se incrementa en cada Q1; en Q4 se trae lainstrucción de la memoria del programa y almacenado en el registro de la instrucción(IR). Se descifra la instrucción y se ejecuta durante los siguientes Q1 hasta Q4.

FIGURA 6-3: Ciclo Reloj/Instrucción

3.4.6.2.2.

Instrucción Flow/Pipelining Un “ciclo de instrucción” consiste en cuatro ciclos de Q: de Q1 hasta Q4. La

instrucción trae y se ejecuta es controlada de manera que traer tome un ciclo de lainstrucción, mientras que el descifrar y ejecutar tome los otros ciclos de la instrucción.Sin embargo, debido al pipelining, cada instrucción se ejecuta con eficacia en un ciclo.Si una instrucción provoca que el contador de programa cambie (Ej., GOTO), entoncesse requieren dos ciclos para terminar la instrucción. El ciclo de traer comienza con elcontador de programa (el PC) incremento en Q1. En el ciclo de la ejecución, lainstrucción traída se guarda en el registro de la instrucción (IR) en el ciclo Q1. Estainstrucción después se descifra y se ejecuta durante Ciclos Q2, Q3 y Q4. La memoria delos datos se lee durante Q2 (operando leído) y escrito durante Q4 (destinación escribir).

EJEMPLO 6-3: Instrucción Pipeline Flow

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 133/651

GUILLERMO DAVID HERRERO GONZÁLEZ

131

Nota: Todas las instrucciones son de un solo ciclo, excepto las de salto. Estastienen dos ciclos desde que se busca la instrucción se utiliza hasta que la instrucción

nueva se busca y se ejecuta.

3.4.6.2.3. Instrucciones En La Memoria De Programa

A la memoria de programa se dirige en bytes. Las instrucciones se almacenan endos o cuatro bytes en la memoria de programa. El byte menos significativo de unainstrucción se almacena siempre en una posición de memoria del programa con unadirección (LSb = 0). Para mantener la alineación con límites de la instrucción, el PC seincrementa en múltiplos de 2 y el LSb siempre se leerá ‘0’.

Las instrucciones CALL y GOTO tienen la dirección de programa fija en lainstrucción. Puesto que las instrucciones se almacenan siempre en direcciones de

memoria, los datos contenidos en la instrucción son una dirección. La dirección de lainstrucción se escribe en PC<20:1>, que tiene acceso a la dirección deseada del byte enla memoria del programa. Funciona de manera semejante las instrucciones de brinco del

programa, que codifican la dirección. El valor almacenado en una instrucción de brincorepresenta el número de instrucciones de una palabra que el PC brincará.

FIGURA 6-4: Instrucciones En La Memoria De Programa

3.4.6.2.4. Instrucciones De Dos Palabras

El sistema estándar del PIC18 tiene cuatro instrucciones de dos palabras: CALL,

MOVFF, GOTO y LSFR. En todos los casos, la segunda palabra de las instruccionesson siempre ‘1111’ como sus cuatro bits más significativos; los otros 12 bits son datosliterales, generalmente una dirección de memoria de datos.

El uso del ‘1111’ en los 4 MSbs de una instrucción especifica una formaespecial de NOP. Si la instrucción se ejecuta en la secuencia apropiada, inmediatamentedespués de la primera palabra, se conocen los datos de la segunda palabra y se utilizancomo secuencia de la instrucción. Si se salta la primera palabra por alguna razón y lasegunda palabra se ejecuta por sí sola, se lee un NOP. Esto es necesario para los casoscuando la instrucción de dos palabras es precedida por una instrucción condicional quecambie el PC.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 134/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

132

EJEMPLO 6-4: Instrucciones De Dos Palabras

CASO 1:

Código máquina: Código fuente:

0110011000000000 TSTFSZ REG1 ;¿La RAM está en la localización 0?

1100000100100011 MOVFF REG1,REG2 ;No, salta esta instrucción

1111010001010110 ;ejecuta esta otra como NOP

0010010000000000 ADDWF REG3 ;Continua el código

CASO 2:

0110011000000000 TSTSZ REG1 ;¿La RAM está en la localización 0?1100000100100011 MOVFF REG1,REG2 ;Si, ejecuta la instrucción1111010001010110 ;2ª palabra de la instrucción0010010000000000 ADDWF REG3 ;Continua el código

3.4.6.3. Organización De La Memoria De Datos

Nota: La operación de algunos aspectos de la memoria de datos se cambiacuando el PIC18 permite el sistema de instrucción extendida.

La memoria de datos en los dispositivos PIC18 se implementa como RAMestática. Cada registro en la memoria de datos tiene una dirección de 12 bits,

permitiendo hasta 4096 bytes de memoria de los datos. La memoria se divide en 16 bancos que contienen 256 bytes cada uno. Los dispositivos

PIC18F2455/2550/4455/4550 ponen ocho bancos completos en ejecución, para un totalde 2048 bytes.

La memoria de datos contiene los registros de función especial (SFRs) y losregistros de fines generales (GPRs). Los SFRs se utilizan para el control y el estado delregulador y de las funciones periféricas, mientras que los GPRs se utilizan para elalmacenaje de datos y las operaciones para salvar datos del usuario. Cuando se lee unalocalización no implementada aparecerán ‘0’s.

El sistema y la arquitectura de la instrucción permiten operaciones a través detodos los bancos. Se puede tener acceso a la memoria entera de datos por modos dedireccionamiento directo, indirecto o puestos en un índice.

Para asegurarse de que los registros de uso general (SFRs y elegido GPRs) se puede alcanzar en un solo ciclo, los dispositivos PIC18 tienen un banco de acceso enejecución. Éste es una memoria de 256 bytes que proporciona el acceso rápido a SFRs yla parte más baja del banco 0 de GPR sin usar BSR.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 135/651

GUILLERMO DAVID HERRERO GONZÁLEZ

133

FIGURA 6-5: MAPA DE LA MEMORIA DE DATOS

Cuando a=0:

Se ignora el BSR y usamos el acceso al banco.Los primeros 96bytes de la RAM son de propósito general (del banco 0)Los 160bytes restantes son registros de funciones especiales (banco 15)

Cuando a=1:

El BSR especifica el banco usado en la instrucción.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 136/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

134

3.4.6.3.1. RAM Del USB

Los bancos 4 a 7 de la memoria de datos están mapeados a un puerto dualespecial de RAM. Cuando el módulo USB está desactivado, los GPRs en estos bancosse utilizan como cualquier otro GPR en la memoria de datos.

Cuando se permite el módulo USB, la memoria en éstos bancos se asigna comoRAM de almacenamiento intermedio para las operaciones del USB. Esta área secomparte entre el núcleo del microcontrolador y el motor de la interfaz en serie (SIE)del USB y se utiliza para transferir datos directamente entre los dos.

En teoría, se pueden utilizar las áreas de la RAM del USB que no se asignancomo Buffers del USB para almacenar variables. En la práctica, la naturaleza dinámicade la asignación del almacenamiento intermedio hace que sea peligroso. Además, el

banco 4 se utiliza para controlar el almacenamiento intermedio del USB cuando se permite el módulo y no se debe utilizar para otros propósitos durante ese tiempo.

3.4.6.3.2. Registro Selector Del Banco (BSR)

Las áreas grandes de la memoria de datos requieren un eficiente esquema dedirección para hacer el acceso rápido a cualquier dirección posible. Idealmente, estosignifica que no se tiene que proporcionar una dirección entera para cada operación delectura o escritura. En los dispositivos PIC18, esto se logra con un esquema de los

bancos de la RAM. Esto divide la memoria en 16 bancos contiguos de 256 bytes.Dependiendo de la instrucción, cada localización puede tratar directamente unadirección completa de 12 bits, o una dirección de orden inferior de 8 bits y un punterodel banco de 4 bits.

La mayoría de las instrucciones en el sistema del PIC18 hacen uso del punterode banco, conocido como el registro selector del banco (BSR). Este SFR controla los 4

bits más significativos de la dirección de localización; la instrucción incluye los ocho bits menos significativos. Solamente los cuatro bits más bajos del BSR estánimplementados (BSR3:BSR0). No se utilizan los cuatro bits altos; leerán ‘0’ y no se

pueden escribir. El BSR se puede cargar directamente usando la instrucción MOVLB.

El valor del BSR indica el banco en la memoria de datos. Los ocho bits de lainstrucción muestran la localización en el banco y se pueden conocer como el límite

bajo del banco.

Como hasta dieciséis registros pueden compartir la misma dirección de ordeninferior, el usuario debe tener cuidado de asegurarse de que está seleccionado el bancoapropiado antes de leer o escribir datos. Por ejemplo, escribiendo que los datos del

programa de una dirección de 8 bits son F9h, mientras que el BSR es 0Fh, reseteará elcontador de programa.

Mientras que cualquier banco se puede seleccionar, sólo esos bancos que se ponen en ejecución se pueden leer o escribir. Cuando se escriba en los bancos noimplementados no ocurrirá nada, mientras que cuando se lean se devolverán ‘0’s. Sinembargo, al registro ESTADO le afecta como si la operación fuera correcta.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 137/651

GUILLERMO DAVID HERRERO GONZÁLEZ

135

En el núcleo del sistema de instrucciones de los PIC18, solamente la instrucciónMOVFF especifica completamente la dirección de 12 bits de los registros de la fuente y

del blanco. Con esta instrucción se ignora el BSR cuando se ejecuta. El resto de lasinstrucciones incluyen solamente la dirección de orden inferior como operando y debenutilizar el BSR o el banco del acceso para localizar sus registros del blanco.

FIGURA 6-6: Uso Del Banco Seleccionando El Registro (Direccionamiento Directo)

Nota: 1: El bit de acceso a RAM de la instrucción se puede usar para invalidar el banco seleccionado (BSR<3:0>) del registro de acceso al banco.

2: La instrucción MOVFF inserta los 12bit de dirección en la instrucción.

3.4.6.3.3. Acceso Al Banco

Mientras que el uso del BSR, con una dirección de 8bits, permite que losusuarios traten la gama entera de memoria de datos, también significa que se debeasegurar el usuario siempre que esté seleccionado el banco correcto. Si no, los datos se

pueden leer o escribir en una localización incorrecta. Esto puede ser desastroso si un

GPR se va a modificar por una operación porque se escribe un SFR a en lugar de otro.Verificar y/o cambiar el BSR para cada lectura o escritura en la memoria de datos puederesultar ineficaz.

Para mejorar el acceso a las posiciones de memoria de datos de uso general, lamemoria de datos se configura con un banco de acceso, que permite a usuarios el accesoa un bloque mapeado de la memoria sin especificar un BSR. El banco de accesoconsiste en los primeros 96 bytes de memoria (00h-5Fh) en el banco 0 y los últimos 160

bytes de memoria (60h-FFh) en el bloque 15. Se conoce la mitad inferior como el“acceso RAM” y se compone de los GPRs. La mitad superior es donde los SFRs del

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 138/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

136

dispositivo están mapeados. A estas dos áreas mapeadas en el banco de acceso se puededirigir con una dirección de 8 bits.

El banco de acceso se utiliza por las instrucciones de núcleo de los PIC18 queincluyen el bit de acceso a RAM (el parámetro ‘a’ dentro de la instrucción). Cuando el‘a’ es igual a ‘1’, la instrucción utiliza el BSR y la dirección de 8 bits incluidos en elcódigo para la dirección de memoria de datos. Cuando el ‘a’ es ‘0’, sin embargo, sefuerza a utilizar el acceso con las direcciones mapeadas del banco a la instrucción; seignora el valor actual del BSR.

El usar estas direcciones “forzadas” permite a la instrucción funcionar en unadirección de datos en un solo ciclo sin actualizar primero el bit BSR. Para direccionesde 8bits de 60h y más, esto significa que los usuarios pueden evaluar y modificar losSFRs más eficientemente. Acceso la a RAM por debajo de 60h es bueno para almacenar

los valores que el usuario pueda necesitar rápidamente, por ejemplo de cómputoinmediato resultados o variables comunes del programa. Tener acceso a la RAMtambién cuenta la rapidez y más ahorro del código y conmutación de variables.

El acceso al banco mapeado es levemente diferente cuando se permite el sistemade instrucciones extendidas (bit de configuración XINST=1).

3.4.6.3.4. Registro De Archivos De Propósito General

En los dispositivos PIC18 se pudo depositar memoria en el área GPR. Éste es laRAM de datos disponible para el uso de todas las instrucciones. GPRs empieza en elfondo del banco 0 (dirección 000h) y crece hasta la última área de SFR. GPRs no se

inicializa por un reinicio y no cambia en ningún otro reset.

3.4.6.3.5. Registros De Función Específica

Los registros de función específica (SFRs) son registros usados por la CPU y losmódulos periféricos para controlar las operaciones deseadas del dispositivo. Estosregistros se ponen en ejecución como RAM estática en la memoria de datos. SFRsempieza la última dirección de memoria de datos y extiende hacia abajo hasta ocupar elsegmento superior del banco 15, de F60h a FFFh.

Los SFRs se pueden clasificar en dos sistemas: los asociados a la funcionalidaddel “núcleo” del dispositivo (ALU, reajustes e interrupciones) y los relacionados con las

funciones de los periféricos.

Los SFRs se distribuyen por las funciones los periféricos que controlan. Laslocalizaciones de SFR no utilizadas no están implementadas y se leen como ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 139/651

GUILLERMO DAVID HERRERO GONZÁLEZ

137

TABLA 6-1: Mapa De Los Registros De Función Específica

Nota: 1: No es un registro físico.

2: Registros no implementados se leen como ‘0’.

3: Estos registros se implementan el los micros de 40/44 pines.

3.4.6.3.6. Registro STATUS

El registro ESTADO, contiene el estado aritmético de la ALU. Como concualquier otro SFR, se puede modificar con cualquier instrucción.

Si el registro ESTADO es el destino de una instrucción que afecte a los bits Z,

C.C., C, OV o N, no escribirá el resultado de la instrucción, en vez de eso, el registroESTADO se actualiza según la instrucción realizada. Por lo tanto, el resultado de unainstrucción con el registro ESTADO como destino puede ser diferente que de lo

previsto. Por ejemplo, CLRF STATUS activará el bit Z y el resto de los bits no cambian(‘000u u1uu’).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 140/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

138

REGISTRO 6-2. STATUS: Registro Status

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - N OV Z DC C

U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x

BIT 4 N: Bit negativo. Este bit se utiliza en el complemento a 2.Indica cuando el resultado ha asido negativo.

1= Resultado negativo0= Resultado no negativo

BIT 3 OV: Bit de desbordamiento. Este bit se utiliza en elcomplemento a 2. Indica que una operación de 7bitsse ha desbordado.

1= Ha ocurrido un desbordamiento0= No ha ocurrido un desbordamientoBIT 2 Z: Bits de cero

1= El resultado de una operación aritmética es 00= El resultado de una operación aritmética no es 0

BIT 1 DC: Dígito de acarreo/Bit BORROW*En BORROW*, se invierte la polaridad. Una seejecuta una substracción agregando el complemento a2 del segundo operando. En las instrucciones de rotar (RRF, RLF), este bit se carga con el bit 4 ó 3 delregistro fuente.

Con las instrucciones ADDWF, ADDLW, SUBLW ySUBWF

1= Ocurrió un acarreo en los 4 bits de menos peso0= No ocurrió un acarreo en los 4 bits de menos peso

BIT0 C: Bit de acarreo/Bit BORROW*En BORROW*, se invierte la polaridad. Una seejecuta una substracción agregando el complemento a2 del segundo operando. En las instrucciones de rotar (RRF, RLF), este bit se carga con el bit de menos pesou orden inferior registro fuente.Con las instrucciones ADDWF, ADDLW, SUBLW y

SUBWF1= Ocurrió un acarreo en los bits de mayor peso0= No ocurrió un acarreo en los bits de mayor peso

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 141/651

GUILLERMO DAVID HERRERO GONZÁLEZ

139

3.4.6.4. Modos De Direccionamiento De Los Datos

Nota: La ejecución de algunas instrucciones en el núcleo del PIC18 cambiacuando se activan las instrucciones extendidas.

Mientras que la memoria de programa se puede tratar en una sola dirección (através del contador de programa) la información en la memoria de datos se puede tratar de varias maneras. En la mayoría de las instrucciones, el modo de dirección es fijo.Otras instrucciones pueden utilizar hasta tres modos, dependiendo de cuales utilizan losoperandos y si o no el sistema de instrucción extendida está permitido.

Los modos de direccionamiento son:

Ê InherenteÊ Literal

Ê DirectoÊ Indirecto

Hay otro modo de direccionamiento, indexación del literal compensado, estádisponible cuando se permiten las instrucciones extendidas (configuración del bitXINST=1).

3.4.6.4.1. Direccionamiento Inherente Y Literal

Muchas instrucciones de control del PIC18 no necesitan todos los argumentos; pueden realizan una operación global, que afecte al dispositivo o funcionar implícitamente en un registro. Se conoce este modo de dirección como Dirección

inherente. Los ejemplos incluyen SLEEP, RESET y DAW.Otras instrucciones trabajan de una manera similar pero requieren un argumento

explícito adicional en el código máquina. Esto se conoce como modo dedireccionamiento literal porque requieren un cierto valor literal como argumento. Losejemplos incluyen ADDLW y MOVLW, que respectivamente, suman o mueven unvalor literal al registro W. Los otros ejemplos incluyen CALL y GOTO, que incluyen20bits para la dirección de memoria de programa.

3.4.6.4.2. Direccionamiento Directo

El modo de direccionamiento directo especifica el todo o una parte de la fuente

y/o de la dirección de destino de la operación dentro del código de programa. Lasopciones son especificadas por los argumentos que acompañan la instrucción.

En las instrucciones bit-orientadas y byte-orientadas del sistema de instruccióndel núcleo de los PIC18, utilizan una cierta versión de direccionamiento directo por defecto. Todas estas instrucciones incluyen una cierta dirección literal de 8 bits como su

byte menos significativo. Esta dirección especifica una dirección en uno de los bancosde la RAM o una localización en el banco de acceso como el código de la instrucción.

El bit de acceso a RAM la ‘a’ determina cómo es la dirección interpretada.Cuando la ‘a’ es el ‘1’, el contenido del BSR se utiliza con la dirección para determinar los 12bit completos de la dirección del registro. Cuando la ‘a’ es ‘0’, la dirección se

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 142/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

140

interpreta como si fuese un registro en el banco de acceso. El direccionamiento queutiliza el acceso a RAM se conoce como MODO DE DIRECCIONAMIENTO

DIRECTO FORZOSO.Algunas instrucciones, tales como MOVFF, incluyen la dirección de 12 bits

(fuente o destinación) entera en su código máquina. En estos casos, el BSR se ignoracompletamente.

El destino de los resultados de la operación se determina por el bit de destino‘d’. Cuando el ‘d’ es ‘1’, los resultados se almacenan en el registro fuente,sobrescribiendo su original contenido. Cuando el ‘d’ el ‘0’, los resultados se almacenandentro del registro W. Las instrucciones sin la ‘d’ tienen un destino implícito en lainstrucción; su destino es cualquier registro del blanco que funciona o el registro W.

3.4.6.4.3. Direccionamiento IndirectoEl direccionamiento indirecto permite que el usuario tenga acceso a una

localización en la memoria de datos sin dar una dirección fija en la instrucción. Esto sehace usando los registros selectores del archivo (FSRs) como punteros a laslocalizaciones que se leerán o se escribirán. Puesto que los FSRs están situados en laRAM como registros de función específica, sólo se pueden manipular directamente bajocontrol de programa. Esto hace que los FSRs sean muy útiles en estructuras de datos,tales como tablas y órdenes en memoria de datos.

Los registros para el direccionamiento indirecto están puestos con los operandosde archivo indirectos (INDFs) esa manipulación automática del permiso en ejecución

del valor del puntero con auto-incremento, auto-decremento o compensando con otrovalor. Esto permite un código eficiente, usando lazos.

EJEMPLO 6-5: Como Borrar RAM (Banco 1) Utilizando El Direccionamiento Indirecto

LFSR FSR0,100hNEXT CLRF POSTINC0 ;Borrar el registro INDF e incrementar el puntero

BTFSS FSR0H,1 ;¿Todo el banco 1 en blanco? BRA NEXT ;No, borrar el siguiente

CONTINUE ;Si, continua

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 143/651

GUILLERMO DAVID HERRERO GONZÁLEZ

141

Registros FSR Y El Operando INDF

En el núcleo del direccionamiento indirecto hay tres sistemas de registros: FSR0,FSR1 y FSR2. Cada uno representa un par de registros de 8 bit: FSRnH y FSRnL. Loscuatro bits superiores del registro FSRnH no se utilizan, así que cada par de FSR tieneun valor de 12 bits. Esto representa un valor que puede direccionar la gama entera dememoria de datos de una manera lineal. Los pares del registro FSR sirven como

punteros de las posiciones de memoria de datos.

El direccionamiento indirecto se logra con un sistema de Operandos de archivoindirectos, INDF0 con INDF2. Éstos se pueden tomar como registros “virtuales”; estánmapeados en el espacio de SFR pero no se ponen en ejecución físicamente. En la lecturao escritura de un registro INDF particular se accede a su par correspondiente. Leer enINDF1, por ejemplo, lee los datos de la dirección indicada por FSR1H:FSR1L. Las

instrucciones utilizan los registros INDF mientras que los operandos utilizan elcontenido del FSR correspondiente como puntero de la instrucción. El operando deINDF es una manera conveniente de usar los punteros.

Como el direccionamiento indirecto utiliza una dirección completa de 12 bits,las actividades bancarias de la RAM de datos no son necesarias. Así, el contenido actualdel BSR y del bit de acceso a RAM no tiene efecto sobre la determinación de ladirección objetivo.

FIGURA 6-7: Direccionamiento Indirecto

Usando una instrucción de los registros de direccionamiento indirecto comooperando…

…utiliza los 12bit de direccionamiento guardados en el par FSR asociado coneste registro…

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 144/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

142

…para determinar la localización de la memoria de datos que se usará en estaoperación.

En este caso, la pareja FSR1 contiene ECCh. Gracias a esto, el contenido de lalocalización ECCh se asocia al registro W y se guarda en ECh.

Registros FSR Y POSTINC, POSTDEC, PREINC Y PLUSW

Además del operando INDF, cada par de registros FSR también tiene cuatrooperandos indirectos adicionales. Como INDF, éstos son los registros “virtuales” a loscuales no se puede leer o escribir indirectamente. Al acceder a estos registros se accederealmente al par asociado del registro FSR, pero también realiza una acción específicaque almacena valor. Son:

Ê POSTDEC: tiene acceso al valor de FSR, entonces automáticamente lodecrementa en ‘1’ después

Ê POSTINC: tiene acceso al valor de FSR, entonces automáticamente loincrementa en ‘1’ después

Ê PREINC: incrementa el valor de FSR en ‘1’, después lo utilizan en laoperación

Ê PLUSW: suma el valor del registro W (gama de -127 a 128) al del FSR y utiliza el nuevo valor en la operación.

En este contexto, al tener acceso a un registro INDF se utiliza el valor en el FSR sin cambiarlo. Semejantemente, tener acceso a un registro PLUSW da el valor de FSR compensado de este en el registro W; ninguno de los dos valores se cambian realmente

en la operación. Tener acceso a los otros registros virtuales cambia el valor de losregistros de FSR.

Operaciones en el FSRs con POSTDEC, POSTINC y PREINC afectan el par deregistros; es decir, los resets del FSRnL se colocan, de FFh a 00h, lo transportan alregistro FSRnH. Por otra parte, los resultados de estas operaciones no cambian el valor de los flags del registro ESTADO (Ej., Z, N, OV, etc.).

El registro PLUSW se puede utilizar para implementar una forma dedireccionamiento indexado en la memoria de datos. Manipulando el valor del registro,los usuarios pueden conseguir direcciones fijando el puntero de direcciones. En algunoscasos, esto se puede utilizar para poner un control estructurado del programa, por

ejemplo pilas del software, dentro de la memoria de datos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 145/651

GUILLERMO DAVID HERRERO GONZÁLEZ

143

Operaciones De FSRs En FSRs

Las operaciones de direccionamiento indirecto que apuntan otro FSRs oregistros virtuales representan casos especiales. Por ejemplo, usar un FSR para señalar uno de los registros virtuales no dará lugar a operaciones acertadas. Como casoespecífico, asumir que FSR0H:FSR0L contiene FE7h, la dirección de INDF1. Lastentativas de leer el valor de INDF1, usando INDF0 como operando, devolverán 00h.Tentativas de escribir a INDF1, usando INDF0 como operando, resultará en un NOP.

Por otra parte, usar los registros virtuales para escribir un par de FSR puede noocurrirá tal y como se ha planteado. En estos casos, el valor se escribirá al par de FSR

pero sin el incremento o el decremento. Así, escribiendo en INDF2 o en POSTDEC2escribirá el mismo valor a FSR2H:FSR2L.

Puesto que los FSRs son registros físicos mapeados en el espacio de SFR, se pueden manipular con todas las operaciones directas. Los usuarios deben trabajar proceder cautelosamente en estos registros, particularmente si su código utiliza eldireccionamiento indirecto.

Semejantemente, las operaciones por el direccionamiento indirecto se permitengeneralmente en el resto de los SFRs. Los usuarios deben tener la precaución de nocambia inadvertidamente los ajustes que puedan afectar la operación del dispositivo.

3.4.6.5. Memoria Del Programa Y El Sistema De Instrucciones Extendidas

A la operación de la memoria de programa no le afectada el uso del sistema deinstrucciones extendidas.

Permitir el sistema de instrucciones extendida agrega ocho comandos de palabras dobles adicionales al sistema de instrucciones del PIC18: ADDFSR,ADDULNK, CALLW, MOVSF, MOVSS, PUSHL, SUBFSR y SUBULNK.

3.4.6.6. Memoria De Datos Y El Sistema De Instrucciones Extendidas

Permitir el sistema de instrucciones extendidas del PIC18 (configuración del bitXINST=1) cambia ciertos aspectos de la memoria de datos y de su dirección.

Específicamente, el uso del banco de acceso para muchas de las instrucciones del núcleode los PIC18 es diferente. Esto se debe a la introducción de un nuevo modo de dirección

para la memoria de datos. Este modo también altera el comportamiento de FSR2 queusa direccionamiento indirecto y sus operandos asociados.

Lo que no cambia es lo importante. El tamaño de la memoria de datos nocambia, así como su direccionamiento lineal. El mapa de los SFRs sigue siendo igual.Las instrucciones del núcleo de los PIC18 pueden funcionar en ambos modo dedireccionamiento, directo e indirecto; las instrucciones inherentes y literales nocambian. Sigue habiendo un direccionamiento indirecto de FSR0 y FSR1 sin cambios.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 146/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

144

3.4.6.6.1. Direccionamiento Indexado Con Literal Compensado

Al permitir el sistema de instrucciones extendidas de los PIC18 cambia elcomportamiento de direccionamiento indirecto usando el par de registros FSR2 y susoperandos de archivos asociados. Bajo las condiciones apropiadas, las instrucciones queutilizan el acceso a banco, -o sea, las instrucciones bit-orientadas y byte-orientadas-

pueden invocar una forma de direccionamiento indexado usando una instruccióncompensada específica. Este modo de direccionamiento especial se conoce comoindexación del literal compensado o modo indexado por literal compensado.

Al usar el sistema de instrucciones extendidas, este modo de direccionamientorequiere lo siguiente:

Ê Se fuerza el uso del banco de acceso (‘a’=0);Ê

El argumento de dirección es menor o igual a 5Fh.Bajo estas condiciones, el direccionamiento de las instrucciones no se interpreta

como el byte más bajo de una dirección (utilizando el BSR en direccionamientodirecto), o como una dirección de 8 bits en el banco de acceso. En lugar, el valor esinterpretado como un valor compensado a un puntero de la dirección especificada por FSR2. La compensación y el contenido de FSR2 se suman para obtener la dirección deobjetivo de la operación.

3.4.6.6.2. Instrucciones Afectadas Por El Modo Indexado Por LiteralCompensado

Algunas de las instrucciones del núcleo del PIC18 pueden utilizar eldireccionamiento directo les afecta el modo indexado por literal compensado. Estoincluye todas las instrucciones byte-orientadas y bit-orientadas, o casi una mitad delsistema de instrucción estándar del PIC18. A las instrucciones que utilizan solamentelos modos de direccionamiento inherente o literal no les afecta.

Además, las instrucciones byte-orientadas y bit-orientadas no les afecta siutilizan el banco de acceso (El bit de acceso a RAM es ‘1’) o incluye una dirección delarchivo de 60h para arriba. Las instrucciones que resuelven estos criterios continuaránejecutándose como antes.

Los que desean utilizar las instrucciones byte-orientadas o bit-orientadas en el

modo indexado por literal compensando deben observar los cambios de la sintaxis delensamblador.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 147/651

GUILLERMO DAVID HERRERO GONZÁLEZ

145

FIGURA 6-8: El Comparar Tratando Las Opciones Para Las Instrucciones Bit-Orientadas Y Byte-Orientadas (Sistema De Instrucciones Extendidas Permitido)

INSTRUCCIÓN DEL EJEMPLO:

ADDWF, f, d, a (Opcode: ffff del ffff 0010 01da)Cuando a=0 y f=60h: La

instrucción se ejecuta en el mododirecto forzado. Se interpreta ‘f’ comoun localización en el acceso a RAMentre 060h y 0FFh. Éste es igual que elSFRs o las localizaciones F60h a 0FFh(banco 15) de la memoria datos.

Las localizaciones debajo de 60hno están disponibles en este modo dedireccionamiento.

Cuando a=0 y f=5Fh: Lainstrucción se ejecuta en el Modoindexado por literal compensado. ‘f’ seinterpreta como compensación del valor de dirección en FSR2. Los dos se suman

para obtener la dirección objetivo parala instrucción. La dirección puede estar dondequiera dentro la memoria de

datos.Observar que en este modo, la

sintaxis correcta es: ADDWF [k], ddonde ‘k’ es lo mismo que ‘f’.

Cuando a = 1 (cualquier valorde f): La instrucción se ejecuta en elmodo directo (también conocido comoModo largo directo). Se interpreta la ‘f’como localización en uno de los 16

bancos de la memoria de datos. El

banco se elige con el registro BSR. Ladirección puede estar en cualquier

banco implementado en la memoria dedatos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 148/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

146

3.4.6.6.3. Mapeo Del Banco De Acceso En El Modo Indexado Por

Literal CompensadoEl uso del modo indexado por literal compensado cambia el mapeado de la parte

baja de la RAM accesible (00h a 5Fh). En vez de mantener el contenido de la mitadinferior del banco 0, este modo mapea el contenido del banco 0 y otro definido por elusuario “ventana” que se puede localizar en cualquier parte de la memoria de datos. Elvalor de FSR2 establece bajar el límite de las direcciones mapeadas en la ventana,mientras que el límite superior se define por FSR2 más 95 (5Fh).

El remapeado del banco de acceso se aplica solamente a las operaciones usandoel modo indexado por literal compensado. Operaciones utilizan el BSR (el bit de accesoa RAM es ‘1’) continuará utilizando el direccionamiento directo. Cualquier operación

indirecta o indexada que utilice operandos indirectos (FSR2 incluido) seguirátrabajando con el direccionamiento indirecto estándar. Cualquier instrucción que utiliceel banco de acceso, pero incluya una dirección del registro mayor que 05Fh, utilizará eldireccionamiento directo y el mapa normal del banco de acceso.

FIGURA 6-9: Remapeo Del Banco De Acceso En El Modo Indexado Por Literal Compensado

Ejemplo de situación:

ADDWF f,d,aFSR2H:FSR2L=120h

Las posiciones de la región del puntero FSR2 (120h) a las del punteromas (17Fh) están mapeadas con la partede arriba de RAM (000h-05Fh).

Los registros de funcionesespeciales de F60h a FFFh estánmapeadas de 60h a FFh como esnormal.

Las direcciones del banco 0 por debajo de 5Fh no están disponibles eneste modo. Se pueden direccionar usando el BSR

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 149/651

GUILLERMO DAVID HERRERO GONZÁLEZ

147

3.4.6.6.4. BSR En El Modo Indexado Por Literal Compensado

Aunque el banco de acceso está remapeado cuando se permite el sistema deinstrucciones extendidas, las operaciones del resto de BSR no cambian. Eldireccionamiento directo, utiliza el BSR para seleccionar el banco de memoria de datos,funciona en la misma manera según lo descrito previamente.

3.4.7. MEMORIA FLASH DE PROGRAMA

La memoria flash de programa es legible, escribible y borrable, durante laoperación normal sobre la gama entera de VDD.

La lectura en la memoria de programa se ejecuta de byte en byte. Al escribir enla memoria de programa se ejecuta en bloques de 32 bytes a la vez. La memoria de

programa se borra en bloques de 64 bytes. No se pueden borrar grandes cantidades conel código del usuario.

Escribir o borrar memoria de programa parará las búsquedas de instruccioneshasta que se complete la operación. No se puede acceder a la memoria de programa alescribir o borrar, por lo tanto, código no se puede ejecutar. Un contador interno de lamemoria de programa termina las operaciones de escribir y borrar.

No siempre se va a escribir una instrucción válida en la memoria de programa.Ejecutar una localización de la memoria de programa que no sea instrucción válida darálugar a un NOP.

3.4.7.1. Escribir Y Leer En TablasPara leer y escribir en la memoria de programa, hay dos operaciones que

permiten que el procesador mueva bytes entre la memoria de programa y la RAM dedatos:

Ê Leer tabla (TBLRD)Ê Escribir tabla (TBLWT)

La memoria de programa es de 16 bits de ancho, mientras que el espacio de laRAM de datos es de 8 bits de ancho. La lectura y escritura de datos en tabla mueveentre estas dos memorias a través de un registro de 8 bits (TABLAT).

Las operaciones de lectura de la tabla recuperan datos de la memoria de programa y lo coloca en el espacio de la RAM de datos.

La escritura en tabla almacena los datos en la memoria de datos en los registros bloqueados de la memoria de programa.

Un bloque de la tabla contiene datos, más que instrucciones de programa, no senecesita ser una “palabra-alineada”. Por lo tanto, un bloque de la tabla puede comenzar y terminar en cualquier byte de dirección. Si en una tabla se escribe código ejecutableen la memoria de programa, las instrucciones de programa necesitarán ser palabra-alineadas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 150/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

148

FIGURA 7-1: Operación De Lectura En Tabla

Nota: 1: Registros de puntero de tabla a un byte de la memoria de programa.

FIGURA 7-2: Operación De Escritura En Tabla

Nota: 1: El puntero de tabla direcciona uno de los 32 registros bloqueados, la

dirección de cada uno determina con TBLPTRL<4:0>.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 151/651

GUILLERMO DAVID HERRERO GONZÁLEZ

149

3.4.7.2. Registros De Control

Los registros de control que se utilizan conjuntamente con las instruccionesTBLRD y TBLWT. Son:

Ê Registro EECON1Ê Registro EECON2Ê Registro TABLATÊ Registros TBLPTR

3.4.7.2.1. Registros EECON1 y EECON2

El registro EECON1 es el registro de control para los accesos a la memoria. Elregistro EECON2 no es un registro físico; se utiliza exclusivamente en la memoria para

escribir y borrar secuencias. Al leer EECON2 leerá todo ‘0’s.El bit de control EEPGD determina si el acceso es un acceso de memoria de

programa o de datos EEPROM. Al borrarlo, cualquier operación posterior funcionará enla memoria de datos EEPROM. Cuando se activa, las operaciones funcionarán sobre lamemoria de programa.

El bit de control CFGS determina si el acceso es a los registros de laconfiguración o de calibración o a la memoria de programa o a la memoria de los datosEEPROM. Cuando está activo, las operaciones siguientes funcionarán seteando losregistros de configuración sin importar EEPGD. Cuando está borrado, el acceso deselección de la memoria se determina por EEPGD.

El bit FREE, cuando se activa, permitirá borrar una instrucción de la memoria de programa. Cuando FREE está activo, la operación de borrado se ejecuta en el siguientecomando WR. Cuando FREE está borrado, sólo se permite escribir.

El bit WREN, cuando está activo, permitirá una operación de escritura. Aliniciar, el bit WREN está borrado. El bit WRERR se activa por hardware cuando sesetea y se resetea al finalizar el contador de tiempo de programación interno y secompleta la operación de escritura.

Nota: En una operación normal el bit WRERR se lee ‘1’. Esto puede indicar quela operación de lectura ha terminado demasiado pronto por un reset o que no se haescrito bien.

El bit de control WR inicializa la operación de escritura. El bit no se puede borrar, sólo activar, por software; se borra por hardware al terminar la operación deescritura.

Nota: Se fija el flag de la interrupción EEIF (PIR2<4>) cuando se completa laescritura. Debe borrarse por software.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 152/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

150

REGISTRO 7-1: EECON1: Registro De Control De Los Datos De La EEPROM

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

EEPGD CFGS - FREE WRERR (1) WREN WR RD

R/W-x r/w-x U-0 R/W-0 R/W-x R/W-0 R/S-0 R/S-0

BIT 7 EEPGD: Bit selector de la memoria flash o de la EEPROM:1= Memoria de programa flash0= Memoria de datos EEPROM

BIT 6 CFGS: Bit selector de Flash/EEPROM o configuración:1= Acceso a los registros de configuración0= Acceso a la memoria flash o EEPROM

BIT 4 FREE: Bit de borrado serie de la flash1= Borra la memoria de programa con direccionamiento

serie con TBLPTR en el próximo comando WR. (Se borra al completar la operación de borrado)

0= Sólo escrituraBIT 3 WRERR: Flag de error de la memoria flash/EEPROM(1)

1= Una operación de escritura ha terminado bruscamente

0= La operación de escritura se ha completadoBIT 2 WREN: Bit activador de la escritura en la flash/EEPROM

1= Permite ciclos de escritura en la flash/EEPROM0= No permite ciclos de escritura

BIT 1 WR: Bit de control de la escritura:1= Inicia un ciclo de borrado/escritura en la EEPROM

o en la memoria de programa. (El bit se borra por hardware después del ciclo)

0= Ha completado el ciclo de escritura en la EEPROMBIT 0 RD: Bit de control de lectura:

1= Inicia una lectura en la EEPROM. Se borra por hardware, no se puede activar cuando EEPGD=1 oCFGS=1

0= No se inicia una operación de lectura de la EEPROMNota 1: Cuando ocurre un WRERR, los bits EEPGD y CFGS no se borran. Esto

permite determinar la condición de error.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 153/651

GUILLERMO DAVID HERRERO GONZÁLEZ

151

3.4.7.2.2. Registro De Tabla Latch (TABLAT)

El TABLAT es un registro de 8 bits mapeados en el espacio de SFR. El registrode tabla latch se utiliza para almacenar 8 bits de datos durante las transferencias dedatos entre la memoria de programa y la RAM de datos.

3.4.7.2.3. Registro Del Puntero De Tabla (TBLPTR)

El registro del puntero de tabla (TBLPTR) direcciona un byte dentro de lamemoria de programa. El TBLPTR abarca tres registros de SFR: Byte superior del

puntero de tabla, byte alto del puntero de tabla y byte bajo del puntero de tabla(TBLPTRU:TBLPTRH:TBLPTRL). Estos tres registros se ensamblan para formar un

puntero de 22 bits de ancho. Los 21 bits inferiores permiten que el dispositivodireccione hasta 2Mbytes de memoria de programa. El 22º bit permite el acceso a la

identificación del dispositivo, a la identificación del usuario y a los bits de laconfiguración.

El puntero de la tabla, TBLPTR, se controla por las instrucciones TBLRD yTBLWT. Estas instrucciones pueden actualizar el TBLPTR en una de las cuatromaneras basadas en la operación de tabla. Estas operaciones en el TBLPTR afectansolamente los 21 bits de orden inferior.

TABLA 7-1: Operaciones Del Puntero De Tabla Con Las Instrucciones TBLRD Y TBLWT

Ejemplo Operaciones en el puntero de tabla

TBLRD*TBLWT*

No modifica TBLPTR

TBLRD*+TBLWT*+

Se incrementa TBLPTR después de la lectura/escritura

TBLRD*-TBLWT*-

Se decrementa TBLPTR después de la lectura escritura

TBLRD+*TBLWT+*

Se incrementa TBLPTR antes de la lectura/escritura

3.4.7.2.4. Límites Del Puntero De Tabla

TBLPTR se utiliza en operaciones de lectura, escritura y borrado de la Memoriaflash de programa.

Cuando se ejecuta un TBLRD, los 22 bits del TBLPTR determinan que byte selee de la memoria de programa a TABLAT.

Cuando se ejecuta un TBLWT, los cinco bits menos significativos del registro de puntero de la tabla (TBLPTR<4:0>) determinan cuáles de los 32 registros bloqueadosde la memoria de programa se escriben. Cuando empieza el tiempo de escritura en lamemoria de programa (por el bit WR), los 16bits más significativos del TBLPTR (TBLPTR<21: 6>) determinan que bloque de la memoria de programa de 32 bytes seescribe.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 154/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

152

Cuando se ejecuta una instrucción borrar en la memoria de programa, los 16 bitsmás significativos del registro de puntero de tabla (TBLPTR<21:6>) selecciona el

bloque de 64 bytes que será borrado. Lo Bits menos significativos (TBLPTR<5:0>) seignoran.

FIGURA 7-3: Límites Del Puntero De Tabla Basado En Las Operaciones

3.4.7.3. Lectura De La Memoria De Programa Flash

Se utiliza la instrucción TBLRD para recuperar datos de la memoria de programa y los posiciona en la RAM de datos. Sólo se lee un bit cada vez en unaoperación de lectura de tabla.

TBLPTR señala un byte de dirección en el espacio del programa. Al ejecutar TBLRD se pone el byte señalado en TABLAT. Además, TBLPTR se puede modificar

automáticamente en la siguiente operación de lectura de la tabla.La memoria interna del programa se organiza en palabras. El bit menos

significativo de la dirección selecciona entre los bytes altos y bajos de la palabra.

FIGURA 7-4: Lecturas De La Memoria De Programa

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 155/651

GUILLERMO DAVID HERRERO GONZÁLEZ

153

EJEMPLO 7-1: Lectura De Una Palabra De La Memoria De Programa Flash

MOVLW CODE_ADDR_UPPER ;Carga TBLPTR con la base MOVWF

TBLPTRU ;dirección de la palabra MOVLW CODE_ADDR_HIGHMOVWF TBLPTRHMOVLW CODE_ADDR_LOWMOVWF TBLPTRL

READ_WORDTBLRD*+ ;lee en TABLAT e incrementa MOVF TABLAT, W ;consigue los datos

MOVWF WORD_EVENTBLRD*+ ;lee en TABLAT e incrementa

MOVF TABLAT, W;consigue los datos

MOVF WORD_ODD

3.4.7.4. Borrado De Memoria Flash De Programa

El mínimo bloque de borrado es de 32 palabras ó 64 bytes. Solamente con el usode un programador externo, o con control ICSP, se podrán borrar bloques más grandes.

No se pueden borrar palabras en la matriz flash.

Cuando el micro inicia una secuencia de borrado se borra un bloque de 64 bytesde memoria de programa. Se borran los 16 bits más significativos del TBLPTR<21:6>hasta el bloque. Se ignoran los bits TBLPTR<5:0>.

El registro EECON1 ordena la operación de borrado. El bit EEPGD se debeactivar para señalar la memoria flash de programa. El bit WREN se debe activar para

permitir las operaciones de escritura. El bit FREE se activa para seleccionar unaoperación de borrado.

Por protección, se debe utilizar la secuencia de inicio de escritura en EECON2.

Se necesita una escritura larga para borrar la flash interna. Se para la ejecuciónde instrucciones mientras que dure el ciclo de escritura. La escritura la finalizará elcontador de tiempo de programación interno.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 156/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

154

3.4.7.4.1. Secuencia De Borrado De La Memoria Flash De Programa

La secuencia de eventos para borrar un bloque de la memoria interna del programa es:

1. Carga el registro del puntero de tabla con la dirección de la fila que se vaa borrar.

2. Activa el registro EECON1 para la operación de borrado:

Ø Activa el bit EEPGD para dirigirse a la memoria de programa;Ø Borra el bit CFGS para tener acceso a memoria de programa;Ø Activa el bit WREN para permitir la escritura;Ø Activa el bit FREE para permitir el borrado.

3. Inhabilita las interrupciones.

4. Escribe 55h en EECON2.5. Escribe 0AAh en EECON2.6. Activa el bit WR. Esto comenzará el ciclo de borrado de la fila.7. La CPU se parará durante el borrado (cerca de 2ms usando el contador de

tiempo interno).

8. 8. Permite las interrupciones.

EJEMPLO 7-2: Borrar Una Fila De La Memoria Flash De Programa

MOVLW CODE_ADDR_UPPER ;carga TBLPTR con la baseMOVWF TBLPTRU ;dirección del bloque de memoria

MOVLW CODE_ADDR_HIGHMOVWF TBLPTRHMOVLW CODE_ADDR_LOWMOVWF TBLPTRL

ERASE_ROWBSF EECON1, EEPGD ;selección de la memoria FLASH

BCF EECON1, CFGS ;acceso a la memoria flash

BSF EECON1, WREN ;permite escribir en la memoria BSF EECON1, FREE ;permite la operación de borrado BCF INTCON, GIE ;inhabilitar las interrupciones

MOVLW 55h

MOVWF EECON2 ;escribir 55hMOVLW 0AAhMOVWF EECON2 ;escribir 0AAh BSF EECON1, WR ;comienza a borrar BSF INTCON, GIE ;volver a permitir las interrupciones

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 157/651

GUILLERMO DAVID HERRERO GONZÁLEZ

155

3.4.7.5. Escribir En La Memoria Flash De Programa

El bloque de programación mínimo es de 16 palabras ó 32 bytes. No se puede programar una palabra o un byte.

Se utiliza internamente la escritura en tabla para cargar los registros necesarios para programar la memoria flash. Se utilizan 32 registros en la escritura en tabla para programar.

Puesto que el latch de tabla (TABLAT) es solamente un byte, la instrucciónTBLWT se tiene que ejecutar 32 veces para cada operación de programación. Toda latabla escribe operaciones cortas porque sólo se escriben los registros bloqueados. Alfinal de la actualización de los 32 registros, el registro EECON1 debe estar escrito paracomenzar la operación de programación con una escritura larga.

Se necesita la escritura larga para programar la flash interna. Se para laejecución de instrucciones mientras dure la escritura larga. La escritura larga finalizarácon el contador interno de programación.

El contador de tiempo de la EEPROM controla el tiempo de escritura. Lastensiones de escritura/borrado las genera el chip con una bomba de carga, ajustada parafuncionar sobre la gama de la tensión del dispositivo.

Nota: El valor prefijado de los registros bloqueados en un reset y antes de unaoperación de escritura es FFh. Al escribir FFh en un registro de este tipo, no modificaese byte. Esto significa que los bytes individuales de memoria de programa se puedenmodificar, siempre que el cambio no sea modificar un bit de ‘0’ a ‘1’. Al modificar

bytes individuales, no es necesario cargar los 32 registros antes de ejecutar unaoperación de escritura.

FIGURA 7-5: La Escritura De Tabla En La Memoria Flash De Programa

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 158/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

156

3.4.7.5.1. Secuencia De Escritura En La Memoria Flash De Programa

La secuencia para programar una posición interna de memoria de programa es:1. Leer 64 bytes en RAM.

2. Actualizar los valores de los datos en RAM cuando sea necesario.

3. Cargar el registro del puntero de tabla con la dirección que se borre.

4. Ejecutar el procedimiento de borrar fila.

5. Cargar el registro del puntero de tabla con la dirección del primer byteque se escriba.

6. Escribir 32 bytes en los registros bloqueados con EL auto incremento.

7. Activar el registro EECON1 para la operación de escritura:Ê Activar el bit EEPGD para que apunte a la memoria a

programar;Ê Borrar el bit CFGS para tener acceso a memoria de

programa;Ê Activar el bit WREN para permitir escribir.

8. Inhabilitar las interrupciones.9. Escribir 55h en EECON2.10. Escribir 0AAh en EECON2.11. Activar el bit WR. Con esto comenzará el ciclo de escritura.

12. La CPU se parará durante la escritura (cerca de 2 ms usando elcontador de tiempo interno).13. Volver a permitir las interrupciones.14. Repetir los pasos 6 a 14 una vez más para escribir 64 bytes.15. Verificar la memoria (leer tabla).

Este procedimiento requerirá cerca de 8ms para actualizar una fila de 64 bytes dememoria.

Nota: Antes de activar el bit WR, el puntero de tabla tiene que estar dentro delradio de acción de las direcciones previstas de 32 bytes dentro el registro bloqueado.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 159/651

GUILLERMO DAVID HERRERO GONZÁLEZ

157

EJEMPLO 7-3: Escribir En La Memoria Flash Del Programa

MOVLW D'64’ ;nº de bytes en el bloque a borrar

MOVWF COUNTERMOVLW BUFFER_ADDR_HIGH ; puntero al buffer

MOVWF FSR0HMOVLW BUFFER_ADDR_LOWMOVWF FSR0LMOVLW CODE_ADDR_UPPER ;Cargar TBLPTR con la dirección base MOVWF TBLPTRU ;del bloque de memoria

MOVLW CODE_ADDR_HIGHMOVWF TBLPTRHMOVLW CODE_ADDR_LOW

MOVWF TBLPTRLREAD_BLOCKTBLRD*+ ; leer en TABLAT, e incrementar

MOVF TABLAT, W ; coger datos

MOVWF POSTINC0 ; guardar datos

DECFSZ COUNTER ; ¿correcto?

BRA READ_BLOCK ; repetir

MODIFY_WORDMOVLW DATA_ADDR_HIGH ; Puntero al buffer

MOVWF FSR0HMOVLW DATA_ADDR_LOWMOVWF FSR0LMOVLW NEW_DATA_LOW ; Actualizar buffer

MOVLW NEW_DATA_HIGHMOVWF INDF0

ERASE_BLOCKMOVLW CODE_ADDR_UPPER ;Cargar TBLPTR con la dirección base MOVWF TBLPTRU ;del bloque de memoria

MOVLW CODE_ADDR_HIGHMOVWF TBLPTRH

MOVLW CODE_ADDR_LOWMOVWF TBLPTRLBSF EECON1, EEPGD ;Puntero a la Flash

BCF EECON1, CFGS ;acceso a la Flash

BSF EECON1, WREN ;activar la escritura en memoria

BSF EECON1, FREE ;Activar la operación de borrado de fila

BCF INTCON, GIE ;desactiva interrupciones

MOVLW 55hMOVWF EECON2 ;escribe 55h

MOVLW 0AAh

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 160/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

158

MOVWF EECON2 ;escribe 0AAh

BSF EECON1, WR ;comienzo del borrado (CPU parada)

BSF INTCON, GIE ;reactiva interrupcionesTBLRD*- ;decremento después de leer

MOVLW BUFFER_ADDR_HIGH ; puntero al buffer

MOVWF FSR0HMOVLW BUFFER_ADDR_LOWMOVWF FSR0LMOVLW D’2’MOVWF COUNTER1

WRITE_BUFFER_BACKMOVLW D’32’ ;nº de bytes en los registros bloqueados MOVWF COUNTERWRITE_BYTE_TO_HREGSMOVF POSTINC0, W ;coger el byte bajo del buffer

MOVWF TABLAT ;llevar dato al lacht de tabla

TBLWT+* ;escribir dato (escritura corta)

DECFSZ COUNTER ;repetir hasta que el buffer se llene

BRA WRITE_WORD_TO_HREGSPROGRAM_MEMORY

BSF EECON1, EEPGD ;Puntero a la memoria flash

BCF EECON1, CFGS ;Acceso a la memoria flash

BSF EECON1, WREN ;Activar escritura en memoriaBCF INTCON, GIE ;Desactivar interrupciones

MOVLW 55hMOVWF EECON2 ;Escribir 55h

MOVLW 0AAhMOVWF EECON2 ;Escribir 0AAh

BSF EECON1, WR ;Comienzo del programa

DECFSZ COUNTER1BRA WRITE_BUFFER_BACKBSF INTCON, GIE ;Activa las interrupciones

BCF EECON1, WREN ;Desactiva la escritura en memoria

3.4.7.5.2. Verificación De La Escritura

Dependiendo del uso, en una buena programación se puede necesitar que elvalor escrito en la memoria se verifique con el valor original. Esto se debe utilizar enusos donde excesivas escrituras pueden provocar que los bits estén cerca del límite de laespecificación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 161/651

GUILLERMO DAVID HERRERO GONZÁLEZ

159

3.4.7.5.3. Finalización Inesperada De La Operación De Escritura

Si una escritura termina por un acontecimiento imprevisto, tal y como la pérdidade energía o un reset inesperado, las localizaciones de la memoria programadas sedeben verificar y reprogramar si se necesita. Si se interrumpe la operación de escritura

por un reset MCLR* o un desbordamiento del WDT durante la operación normal, elusuario puede comprobar el bit WRERR y reescribir las localizaciones según senecesite.

TABLA 7-2: Registros Asociados Con La Memoria Flash

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

TBLPTRU - - bit 21(1) Byte superior del puntero de tabla de la memoria de programa (TBLPTR<20:16>)

TBLPTRH Byte alto del puntero de tabla de la memoria de programa (TBLPTR<15:8>)

TBLPTRL Byte bajo del puntero de tabla de la memoria de programa (TBLPTR<7:0>)

TABLAT Match de tabla de la memoria de programa

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

EECON2 Registro de control 2 EEPROM (no es un registro físico)

EECON1 EEPGD CFGS - FREE WRERR WREN WR RD

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

Leyenda: - = no implementado, se lee ‘0’. Las celdas sombradas no se utilizanen el acceso a la Flash/EEPROM

Nota: 1: El bit 21 de TBLPTRU permite el acceso a los bits de configuracióndel dispositivo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 162/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

160

3.4.8. MEMORIA DE DATOS EEPROM

La EEPROM es una matriz de memoria permanente, separada de la RAM dedatos y de la memoria de programa, se utiliza en almacenamientos de larga duración delos datos del programa. No está mapeada directamente en los registros de archivo o enla memoria del programa, sino que se trata indirectamente a través de los registrosespeciales de la función (SFRs). La EEPROM es legible y escribible durante laoperación normal sobre la gama entera de VDD.

Cuatro SFRs se utilizan para leer y para escribir los datos en la EEPROM asícomo la memoria del programa. Son:

Ê EECON1Ê EECON2Ê EEDATAÊ EEADR

Los datos EEPROM permiten la lectura y escritura de bytes. Cuando se conectaal bloque de la memoria de datos, el EEDATA sostiene los 8bits de datos para lalectura/escritura y el registro EEADR lleva a cabo el direccionamiento de lalocalización de la EEPROM.

La memoria de datos EEPROM se clasifica como muy resistente a los ciclos deescritura/borrado. Un byte escribe y automáticamente borra la localización y escribe losdatos nuevos (borrar-antes-escribir). El tiempo de escritura se controla por un contador de tiempo en el chip; variará con la tensión y la temperatura así como de chip a chip.

3.4.8.1. Registros EECON1 Y EECON2

El acceso a los datos EEPROM se controla con dos registros: EECON1 yEECON2. Éstos son iguales que los del acceso de control a la memoria del programa yse utilizan de una manera similar para los datos EEPROM.

El registro EECON1 es el registro de control para el acceso a memoria de datosy de programa. Controlando el bit, EEPGD, se determina si el acceso es a la memoria de

programa o a la memoria de datos EEPROM. Cuando está borrado, las operaciones sehacen a la memoria de datos EEPROM. Cuando está activado, se dirige a la memoria de

programa. Controlando el bit, CFGS, se determina si el acceso es a los registros deconfiguración o a la memoria del programa/EEPROM. Cuando está activado, lasoperaciones siguientes tienen acceso a los registros de configuración. Cuando CFGSestá borrado, el bit EEPGD selecciona la flash o la memoria EEPROM. El bit WREN,cuando está activado, permitirá una operación de escritura. En ciclo inicial, el bitWREN está borrado. El bit WRERR se activa por hardware cuando se activa y se borrael bit WREN cuando finaliza el contador de tiempo de programación interno y secompleta la operación de escritura.

Nota: Durante la operación normal, el WRERR se lee como ‘1’. Esto puedeindicar que ha finalizado una operación de escritura prematuramente cerca de un reset ouna operación de escritura finaliza incorrectamente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 163/651

GUILLERMO DAVID HERRERO GONZÁLEZ

161

El bit de control WR inicia operaciones de escritura. El bit no se puede borrar,sólo está activo, en software; se borra en hardware al terminar la operación de escritura.

Nota: Se activa el flag de la interrupción EEIF (PIR2<4>) cuando la escritura secompleta. Debe desactivarse por software.

Controlando los bits, RD y WR, comienzan las operaciones leer y borrar/escribir, respectivamente. Estos bits se activa por firmware y se desactiva por hardware al terminar la operación.

El bit RD no se puede activar al tener acceso a la memoria de programa(EEPGD=1).

El registro EECON2 no es un registro físico. Se utiliza exclusivamente en lassecuencias de escribir y borrar en la memoria. La lectura EECON2 leerá todo ‘0’s.

3.4.8.2. Lectura De Los Datos De La Memoria EEPROM

Para leer una posición de memoria de datos, el usuario debe escribir la direcciónen el registro EEADR, borrar el bit EEPGD (EECON1<7>) y después activar el bit RD(EECON1<0>). Los datos están disponibles en el siguiente ciclo de instrucción; por lotanto, el registro EEDATA se puede leer con la instrucción siguiente. EEDATAmantendrá este valor hasta otra operación de lectura o hasta que lo escriba el usuario(durante una operación de escritura).

EJEMPLO 8-1: Lectura De La Memoria EEPROM

MOVLW DATA_EE_ADDRMOVWF EEDRA ;Bits bajos de la dirección de memoria a leer

BCF EECON1,EEPGD ;Puntero a la memoria de datos

BCF EECON1,CFGS ;Acceso a la memoria EEPROM BSF EECON1,RD ;Lectura en EEPROM

MOVWF EEDATA,W ;W=EEDATA

3.4.8.3. Escritura En La Memoria De Datos EEPROM

Para escribir una localización de la EEPROM, se tiene que escribir la direcciónen el registro EEADR y los datos al registro EEDATA. La escritura no comenzará si nose ejecuta la secuencia: escribir 55h en EECON2, escribir 0AAh en EECON2, despuésactivar el bit WR; para cada byte. Se recomienda que las interrupciones esténdesactivadas durante esto segmento de código.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 164/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

162

EJEMPLO 8-2: Escritura De Datos En La EEPROM

MOVLW DATA_EE_ADDR

MOVWF EEDATA ;Bits bajos de la dirección de memoria a escribir MOVLW DATA_EE_DATAMOVWF EEDATA ;Valor de la memoria de datos a escribir

BCF EECON1,EPGD ;Puntero a la memoria de datos

BCF EECON1,CFGS ;Acceso a la EEPROM

BSF EECON1,WREN ;Activa escritura

BCF INTCON,GIE ;Desactivación de las interrupciones

MOVLW 55hMOVWF EECON2MOVLW 0AAh

MOVWF EECON2BSF EECON1,WR ;Activa WR para empezar a escribir

BSF INTCON,GIE ;Activa las interrupciones

BCF EECON1,WREN ;Desactiva la escritura cuando se complete

3.4.8.4. Verificación De La Escritura

Dependiendo de la aplicación, se puede necesitar que se verifiquen los datosdespués de escribirlos en la memoria comparándolos con el valor original. Se tiene queutilizar esto en los casos en los que haya muchas operaciones de escritura y los bitstrabajen cercanos a los límites de las especificaciones.

3.4.8.5. Operación Con Código De ProtecciónLa memoria de datos EEPROM tiene los bits de los códigos de protección en

palabras de configuración. Las operaciones de lectura y escritura externas se desactivansi se permite el código de protección.

El microcontrolador puede leer y escribir en la EEPROM sin importar el estadodel bit de configuración del código de protección.

3.4.8.6. Protección Contra Escrituras Falsas

Hay casos en los que el dispositivo no puede escribir en la memoria EEPROM.

Para proteger la EEPROM contra estas falsas escrituras, se ponen varios mecanismos enejecución. En un ciclo de inicio, el bit WREN está borrado. Además, se bloquea laescritura en la EEPROM durante el período de ciclo inicial del contador de tiempo. Lasecuencia de inicio de la escritura y el bit WREN ayudan a prevenir una escrituraaccidental durante un cese de tensión, fallo en la energía o malfuncionamiento delsoftware.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 165/651

GUILLERMO DAVID HERRERO GONZÁLEZ

163

3.4.8.7. Usar Los Datos EEPROM

Los datos EEPROM tienen una gran resistencia, una matriz direccionable de bytes que se ha optimizado para el almacenamiento de información que cambia confrecuencia (ej., variables de programa u otros datos que se actualizan a menudo). Losvalores que cambian con frecuencia se actualizarán muy a menudo. Si éste no es el caso,se debe hacer un refresco de la matriz. Por esta razón, las variables que cambianinfrecuentemente (por ejemplo constantes, las identificaciones, la calibración, etc.) sedeben almacenar en la memoria flash del programa.

Nota: Si los datos EEPROM se utilizan solamente para almacenar constantes y/odatos que cambian raramente, no se necesita un refresco de la matriz.

EJEMPLO 8-3: Rutina De Refresco De La EEPROM

CLRF EEADR ;Comienzo en la dirección 0BCF EECON1,CFGS ;Activa memoria

BCF EECON1,EEPGD ;Activa memoria EEPROM

BCF INTCON,GIE ;Desactiva interrupciones

BSF EECON1,WREN ;Activa escritura Loop

BSF EECON1,RD ;Lee la dirección actual

MOVLW 55hMOVWF EECON2MOVLW 0AAh

MOVWF EECON2BSF EECON1,WR ;Activa WR para empezar a escribir

BTFSC EECON1,WR ;Espera que se complete la escritura

BRA $-2INCFSZ EEEDR,F ;Incrementa la dirección

BRA LOOP ;Si no es cero lo repite

BCF EECON1,WREN ;Desactiva la escritura

BSF INTCON,GIE ;Activa interrupciones

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 166/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

164

TABLA 8-1: Registros Asociados Con La Memoria EEPROM

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

EEADR Registro de direccionamiento de la EEPROM

EEDATA Registro de datos de la EEPROM

EECON2 2º Registro de control de la EEPROM (no es un registro físico)

EECON1 EEPGD CFGS - FREE WRERR WREN WR RD

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

Leyenda:- = no implementado, se lee ‘0’. Las casillas sombreadas no se utilizanen el acceso a la Flash/EEPROM.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 167/651

GUILLERMO DAVID HERRERO GONZÁLEZ

165

3.4.9. MULTIPLICADOR DE 8X8 POR HARDWARE

3.4.9.1. Introducción

Todos los dispositivos PIC18 incluyen un multiplicador de 8x8 por hardwarecomo parte de la ALU. El multiplicador realiza una operación sin signo y devuelve unresultado que se almacene en el par de registros del producto, PRODH:PRODL de16bits. La operación del multiplicador no afecta ningún flag en el registro ESTADO.

La fabricación de la operación multiplicación por hardware permite que setermine en un solo ciclo de instrucción. Esto tiene ventajas, un rendimiento de cómputomás alto y un tamaño de código reducido para los algoritmos de multiplicación y

permite que los dispositivos PIC18 sean utilizados en muchos usos reservados

previamente para los procesadores de la señal numérica.

EJEMPLO 9-1: Rutina De Multiplicación Sin Signo De 8x8

MOVF ARG1,WMULWF ARG2 ;ARG1*ARG2=PRODH:PRODL

EJEMPLO 9-2: Rutina De Multiplicación Con Signo De 8x8

MOVF ARG1,WMULWF ARG2 ;ARG1*ARG2=PRODH:PRODL

BTFSC ARG2,SB ;Bit test del signo

SUBWF PRODH,F ;PRODH=PRODH-ARG1

MOVF ARG2,WBTFSC ARG1,SB ;Bit test del signo

SUBWF PRODH,F ;PRODH=PRODH-ARG2

ECUACIÓN 9-1: Algoritmo De Multiplicación 16x16 Sin SIGNO

RES3:RES0=ARG1H:ARG1L*ARG2H:ARG2l==(ARG1H*ARG2H*216)+(ARG1H*ARG2L*28)++(ARG1L*ARG2H*28)+(ARG1L*ARG2L)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 168/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

166

EJEMPLO 9-3: Rutina De Multiplicación De 16x16 Sin Signo

MOVF ARG1L,W

MULWF ARG2LMOVFFPRODH,RES1MOVFFPRODL,RES0MOVF ARG1H,WMULWF ARG2HMOVFFPRODH,RES3MOVFFPRODH,RES2MOVF ARG1L,WMULWF ARG2HMOVF PRODL,W

ADDWF RES1,FMOVF PRODH,WADDWFC RES2,FCLRF WREGADDWFC RES3,FMOVF ARG1H,WADDWF RES1,FMOVF PRODH,WADDWFC RES2,FCLRF WREGADDWFC RES3,F

ECUACIÓN 9-2: Algoritmo De Multiplicación 16x16 Con Signo

RES3:RES0=ARG1H:ARG1L*ARG2H:ARG2l==(ARG1H*ARG2H*216)+(ARG1H*ARG2L*28)++(ARG1L*ARG2H*28)+(ARG1L*ARG2L)++(-1*ARG2H<7>*ARG1H:ARG1L*216)++(-1*ARG1H<7>*ARG2H:ARG2L*216)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 169/651

GUILLERMO DAVID HERRERO GONZÁLEZ

167

EJEMPLO 9-4: Rutina De Multiplicación 16x16 Con Signo

MOVF ARG1L,W

MULWF ARG2LMOVFF PRODH,RES1MOVFF PRODL,RES0MOVF ARG1H,WMULWF ARG2HMOVFF PRODH,RES3MOVFF PRODH,RES2MOVF ARG1L,WMULWF ARG2HMOVF PRODL,W

ADDWF RES1,FMOVF PRODH,WADDWFC RES2,FCLRF WREGADDWFC RES3,FMOVF ARG1H,WADDWF RES1,FMOVF PRODH,WADDWFC RES2,FCLRF WREGADDWFC RES3,F

BTFSS ARG2H,7BRA SIGN_ARG1MOVF ARG1L,WSUBWF RES2MOVF ARG1H,WSUBWFB RES3

SIGN_ARG1BTFSS ARG1H,7BRA CONT_CODEMOVF ARG2L,WSUBWF RES2

MOVF ARG2H,WSUBWFB RES3

CONT_CODE

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 170/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

168

3.4.10. INTERRUPCIONES

Los dispositivos PIC18F2455/2550/4455/4550 tienen fuentes múltiples deinterrupción y una prioridad de interrupción que permite que cada fuente de interrupciónse le asigne un nivel prioritario o un nivel bajo de prioridad. El puntero de alta prioridadestá en 000008h y el puntero de interrupción de baja prioridad está en 000018h. Losacontecimientos prioritarios de interrupción pararán cualquier interrupción de prioridad

baja que pueda estar en marcha.

Hay diez registros que se utilizan para controlar las operaciones de interrupción.Estos registros son:

Ê RCONÊ

INTCONÊ INTCON2Ê INTCON3Ê PIR1, PIR2Ê PIE1, PIE2Ê IPR1, IPR2

Cada fuente de interrupción tiene tres bits para controlar su operación. Lasfunciones de estos bits son:

Ê Flag para indicar que ha ocurrido una interrupciónÊ El bit que permite la ejecución de programa en la dirección del puntero

de interrupción cuando se activa el flagÊ El bit de prioridad para seleccionar alta o baja prioridad

Las características de prioridad de las interrupciones se determinan activando el bit IPEN (RCON<7>). Cuando se permite la prioridad de las interrupciones, hay dos bits que permiten las interrupciones globalmente. Activando el bit GIEH (INTCON<7>)se permiten todas las interrupciones que tengan el bit de prioridad activo (prioritario).Seteando el bit GIEL (INTCON<6>) permite todas las interrupciones que tengan el bitde prioridad borrado (prioridad baja). Cuando el flag de interrupción, el bit de permiso yel bit de las interrupciones globales están activos, el programa saltará inmediatamente ala dirección 000008h ó 000018h, dependiendo del bit de prioridad. Las interrupcionesindividuales pueden desactivarse con su correspondiente bit de permiso.

Cuando el bit IPEN está borrado (estado por defecto), las características de prioridad de las interrupciones están desactivadas y las interrupciones son compatiblescon los dispositivos de alcance medio de PICmicro®. En el modo de compatibilidad, los

bits de prioridad de las interrupciones para cada fuente no tienen ningún efecto.INTCON<6> es el bit PEIE el cuál permite/inhabilita todas las fuentes periféricas deinterrupción. INTCON<7> es el bit GIE que permite/inhabilita todas las fuentes deinterrupción. Todas las interrupciones saltan a la dirección 000008h en modo decompatibilidad.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 171/651

GUILLERMO DAVID HERRERO GONZÁLEZ

169

Cuando se responde una interrupción, el bit de permiso de las interrupcionesglobales está borrado para inhabilitar las otras. Si el bit IPEN está reseteado, éste es el

bit GIE. Si se utilizan los niveles de prioridad de interrupción, éste será el bit GIEH oGIEL. Las fuentes de interrupción prioritarias pueden interrumpir una interrupción de

baja prioridad. Las interrupciones de prioridad bajas no se procesan mientras que lasinterrupciones prioritarias estén en marcha.

La dirección de retorno se pone en la pila y el PC se carga con la dirección del puntero de interrupción (000008h ó 000018h). Una vez en la rutina de la interrupción,las fuentes de interrupción se pueden determinar interrogando los flags de interrupción.Los flags de interrupción se tienen que despejar por software antes de volver a permitir las interrupciones para evitar interrupciones recurrentes.

La “instrucción para volver de la interrupción”, RETFIE, devuelve de la rutina

de interrupción y activa el bit GIE (GIEH o GIEL si se utilizan los niveles de prioridad)que vuelve a permitir las interrupciones.

Para los acontecimientos externos de interrupción, tales como los pines INT o lainterrupción por cambio de la entrada PORTB, el estado latente de la interrupción es detres a cuatro ciclos de instrucción. El exacto el estado latente es igual para instruccionesde uno o dos ciclos. Los flags individuales de interrupción se activan sin importar elestado de su bit de permiso correspondiente o el bit GIE.

Nota: No utilizar la instrucción MOVFF para modificar registros de control deinterrupción mientras que se permita cualquier interrupción. Al hacerlo puede provocar un comportamiento errático del microcontrolador.

3.4.10.1. Interrupciones Del USB

Como otros periféricos, el módulo USB es capaz de generar una amplia gama deinterrupciones para muchos tipos de acontecimientos. Éstos incluyen varios tipos deacontecimientos normales de comunicación y de estado y varios niveles de errores deacontecimientos.

Para manejar estos acontecimientos, el módulo USB se equipa con su propialógica de interrupción. La lógica funciona de una forma similar a las interrupciones delmicrocontrolador, con cada fuente de interrupción tenemos un flag separado y los bitsde permiso. Todos los acontecimientos se concentran en una sola interrupción del

dispositivo, USBIF (PIR2<5>). A los acontecimientos individuales de interrupción delUSB no se les puede asignar su propia prioridad. Esto se determinada en el nivel de

prioridad de las interrupciones del dispositivo para todos los acontecimientos del USBcon el bit USBIP.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 172/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

170

FIGURA 10-1: Lógica De Interrupción

3.4.10.2. Registros INTCON

Los registros INTCON son legibles y escribibles y contienen varios bits de permiso, prioridad y flags.

Nota: Se fijan los flags cuando ocurre una condición de interrupción sin

importar el estado del bit de permiso correspondiente o del bit de permiso global. Elusuario debe asegurarse de que el flag de la interrupción esté a cero antes de habilitar dicha interrupción.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 173/651

GUILLERMO DAVID HERRERO GONZÁLEZ

171

REGISTRO 10-1: INTCON: Registro De Control De Interrupción

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF(1)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/W-x0

BIT 7 GIE/GIEH: Bit activador del permiso global de interrupción:Cuando IPEN=0

1= Activa interrupciones enmascarables0= Desactiva todas las interrupciones

Cuando IPEN=11= Activa interrupciones de prioridad alta

0= Desactiva interrupciones de prioridad altaBIT 6 PEIE/GIEL: Bit activador de las interrupciones de periféricos:

Cuando IPEN=01= Activa interrupciones enmascarables0= Desactiva todas las interrupciones

Cuando IPEN=11= Activa interrupciones de prioridad baja0= Desactiva interrupciones de prioridad baja

BIT 5 TMR0IE: Bit de permiso de interrupción por desbordamiento delTMR0:

1= Activa la interrupción0= Desactiva la interrupción

BIT 4 INT0IE: Bit de permiso de la interrupción externa INT0:1= Activa la interrupción0= Desactiva la interrupción

BIT 3 RBIE: Bit de permiso de la interrupción por cambio delPORTB:

1= Activa la interrupción0= Desactiva la interrupción

BIT 2 TMR0IF: Flag de la interrupción por desbordamiento del TMR0:1= Se ha activado la interrupción

0= No se ha activado la interrupciónBIT 1 INT0IF: Flag de la interrupción externa INT0:1= Se ha activado la interrupción0= No se ha activado la interrupción

BIT 0 RBIF: Flag de la interrupción del cambio de PORTB(1):1= Uno de los pines RB7:RB4 ha cambiado

(se tiene que borrar por software)0= No ha cambiado ningún pin

Nota 1: Una condición de unión mal hecha continuará activando este bit. Al leer PORTB terminará la condición de unión mal hecha y permitirá que el bit se borre.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 174/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

172

REGISTRO 10-2: INTCON2: Registro De Control De Interrupción 2

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

RBPU* INTEDG0 INTEDG1 INTEDG2 - TMR0IP - RBIP

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 RBPU*: Bit activador de pull-up del PORTB:1= Desactivado0= Activado por valores individuales de latch

BIT 6 INTEDG0: Bit selector del flaco de la interrupción 0:1= Flanco de subida0= Flanco de bajada

BIT 5 INTEDG1: Bit selector del flanco de la INT1:1= Flanco de subida0= Flanco de bajada

BIT 4 INTEDG2: Bit selector del flanco de la INT2:1= Flanco de subida0= Flanco de bajada

BIT 2 TMR0IP: Bit de prioridad del desbordamiento del TMR0:1= Alta prioridad0= Baja prioridad

BIT 0 RBIP: Bit de prioridad del cambio de PORTB:1= Alta prioridad0= Baja prioridad

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 175/651

GUILLERMO DAVID HERRERO GONZÁLEZ

173

REGISTRO 10-3: INTCON3: Registro de control de interrupción 3

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

INT2IP INT1IP - INT2IE INT1IE - INT2IF INT1IF

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 INT2IP: Bit de prioridad de la INT2:1= Alta prioridad0= Baja prioridad

BIT 6 INT1IP: Bit de prioridad de la INT1:1= Alta prioridad0= Baja prioridad

BIT 4 INT2IE: Bit de permiso de la interrupción externa INT2:1= Activa la interrupción0= Desactiva la interrupción

BIT 3 INT1IE: Bit de permiso de la interrupción externa INT1:1= Activa la interrupción0= Desactiva la interrupción

BIT 1 INT2IF: Flag de la interrupción externa INT2:1= Se ha activado la interrupción0= No se ha activado la interrupción

BIT 0 INT1IF: Flag de la interrupción externa INT1:1= Se ha activado la interrupción0= No se ha activado la interrupción

3.4.10.3. Registros PIR

Los registros PIR contienen los flags individuales de las interrupciones periféricas. Debido al número de fuentes de interrupción periféricas hay dos registros derespuesta de las interrupciones periféricas (PIR1 y PIR2).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 176/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

174

REGISTRO 10-4: PIR1: Registro De Respuesta De Las Interrupciones Periféricas 1

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

SPPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 SPPIF: Flag de acceso al puerto paralelo lectura/escritura(1):1= Ocurre una lectura/escritura (borrado por software)0= No ocurre lectura/escritura

BIT 6 ADIF: Flag del conversor A/D:1= Conversión A/D completa (borrado por software)0= Conversión A/D no completa

BIT 5 RCIF: Flag de recepción por la EUSART:1= Buffer de recepción lleno (borrado por software)0= Buffer de recepción vacío

BIT 4 TXIF: Flag de transmisión por la EUSART:1= Buffer de transmisión vacío (borrado por software)0= Buffer de transmisión lleno

BIT 3 SSPIF: Flag del puerto serie síncrono:1= Transmisión/recepción completa

(borrado por software)0= Esperando transmisión/recepción

BIT 2 CCP1IF: Flag del CCP1:Modo captura:

1= Ha ocurrido una captura en el TMR1(borrado por software)

0= No ha ocurrido una capturaModo comparación:

1= Ha ocurrido una comparación en el TMR1(borrado por software)

0= No ha ocurrido una capturaModo PWM:

No se utilizan

BIT 1 TMR2IF: Flag de interrupción al igualar TMR2 y PR2:1= Se han igualado (borrado por software)0= No se han igualado

BIT 0 TMR1IF: Flag de desbordamiento del TMR1:1= Desbordamiento del TMR1 (borrado por software)0= No se ha desbordado el TMR1

Nota 1: Este pin está reservado en los micros de 28 pines; mantenerlo siempre borrado.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 177/651

GUILLERMO DAVID HERRERO GONZÁLEZ

175

REGISTRO 10-5: PIR2: Registro De Respuesta De Las Interrupciones Periféricas 2

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

OSCIF CMIF USBIF EEIF BCLIF HLVIF TMR3IF CCP2IF

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 OSCIF: Flag de fallo del oscilador:1= Ha ocurrido un fallo (borrado por software)0= No ha ocurrido ningún fallo

BIT 6 CMIF: Flag del comparador:1= La entrada del comparador ha cambiado

(borrado por software)

0= La entrada no ha cambiadoBIT 5 USBIF: Flag del USB:

1= El USB pide una interrupción (borrado por software)0= El USB no necesita interrupción

BIT 4 EEIF: Flag de escritura en la EEPROM/Flash:1= Se ha completado la escritura (borrado por software)0= No se ha completado la escritura

BIT 3 BCLIF: Flag del colisión en el bus:1= Ha ocurrido una colisión (borrado por software)0= No ha ocurrido colisión

BIT 2 HLVIF: Flag de detección de alta tensión:1= Ha ocurrido una condición de alta tensión

(borrado por software)0= No ha ocurrido una condición de AT

BIT 1 TMR3IF: Flag de desbordamiento del TMR3:1= Se ha desbordado el TMR3 (borrado por software)0= No se ha desbordado

BIT 0 CCP2IF: Flag del CCP2:Modo captura:

1= Ha ocurrido una captura en TMR1 o TMR3(borrado por software)

0= No ha ocurrido ninguna capturaModo comparación:1= Ha ocurrido una comparación en el TMR1 o TMR3

(borrado por software)0= No ha ocurrido una comparación

Modo PWM: No se utiliza

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 178/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

176

3.4.10.4. Registros PIE

Los registros PIE contienen los bits de permiso individual para las interrupciones periféricas. Debido al número de fuentes de interrupción periféricas, se necesitan dosregistros de permiso (PIE1 y PIE2). Cuando IPEN = 0, el bit PEIE se debe activar parano permitir ninguna de estas interrupciones.

REGISTRO 10-6: PIE1: Registro De Permiso De Las Interrupciones Periféricas

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

SPPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 SPPIE: Bit de permiso de interrupción de SPP(1):1= Interrupción por una lectura/escritura permitida0= No se permite la interrupción

BIT 6 ADIE: Bit de permiso de interrupción por el conversor A/D:1= Interrupción activada0= Interrupción desactivada

BIT 5 RCIE: Bit de permiso de interrupción por recepción por la EUSART:

1= Interrupción activada0= Interrupción desactivada

BIT 4 TXIE: Bit de permiso de la interrupción por transmisión por la EUSART:1= Interrupción activada0= Interrupción desactivada

BIT 3 SSPIE: Bit de permiso de interrupción por el MSSP:1= Interrupción activada0= Interrupción desactivada

BIT 2 CCP1IE: Bit de permiso de interrupción por el CCP1:1= Interrupción activada0= Interrupción desactivada

BIT 1 TMR2IE: Bit de permiso de interrupción al igualar TMR2 y PR2:

1= Interrupción activada0= Interrupción desactivada

BIT 0 TMR1IE: Bit de permiso de la interrupción por desbordamientodel TMR1:

1= Interrupción activada0= Interrupción desactivada

Nota 1: Este pin está reservado en los micros de 28 pines; mantenerlo siempre borrado.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 179/651

GUILLERMO DAVID HERRERO GONZÁLEZ

177

REGISTRO 10-7: PIE2: Registro De Permiso De Las Interrupciones Periféricas 2

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

OSCIE CMIE USBIE EEIE BCLIE HLVIE TMR3IE CCP2IE

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 OSCIE: Bit de permiso de interrupción por fallo del oscilador:1= Interrupción activada0= Interrupción desactivada

BIT 6 CMIE: Bit de permiso de interrupción del comparador:1= Interrupción activada0= Interrupción desactivada

BIT 5 USBIE: Bit de permiso de interrupción del USB:1= Interrupción activada0= Interrupción desactivada

BIT 4 EEIE: Bit de permiso de interrupción por escribir enEEPROM/Flash:

1= Interrupción activada0= Interrupción desactivada

BIT 3 BCLIE: Bit de permiso de interrupción por colisión en el bus:1= Interrupción activada0= Interrupción desactivada

BIT 2 HLVIE: Bit de permiso de interrupción por detección dealta tensión:

1= Interrupción activada0= Interrupción desactivada

BIT 1 TMR3IE: Bit de permiso de interrupción por desbordamientodel TMR3:

1= Interrupción activada0= Interrupción desactivada

BIT 0 CCP2IE: Bit de permiso de interrupción del CCP2:1= Interrupción activada0= Interrupción desactivada

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 180/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

178

3.4.10.5. Registros IPR

Los registros IPR contienen los bits de prioridad de las interrupciones periféricas. Debido al número de fuentes de interrupción periféricas, hay dos registros(IPR1 e IPR2). Al usar los bits de la prioridad requieren que la prioridad de lainterrupción esté permita (IPEN activado).

REGISTRO 10-8: IPR1: Registro De Prioridad De Las Interrupciones Periféricas

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

SPPIP(1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 SPPIP: Bit de prioridad de la interrupción de SPP(1):1= Alta prioridad0= Baja prioridad

BIT 6 ADIP: Bit de prioridad de la interrupción por el conversor A/D:1= Alta prioridad0= Baja prioridad

BIT 5 RCIP: Bit de prioridad de la interrupción por recepción por la EUSART:

1= Alta prioridad0= Baja prioridad

BIT 4 TXIP: Bit de prioridad de la interrupción por transmisión por la EUSART:1= Alta prioridad0= Baja prioridad

BIT 3 SSPIP: Bit de prioridad de la interrupción por el MSSP:1= Alta prioridad0= Baja prioridad

BIT 2 CCP1IP: Bit de prioridad de la interrupción por el CCP1:1= Alta prioridad0= Baja prioridad

BIT 1 TMR2IP: Bit de prioridad de la interrupción al igualar

TMR2 y PR2:1= Alta prioridad0= Baja prioridad

BIT 0 TMR1IP: Bit de prioridad de la interrupción por desbordamientodel TMR1:

1= Alta prioridad0= Baja prioridad

Nota 1: Este pin está reservado en los micros de 28 pines; mantenerlo siempre borrado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 181/651

GUILLERMO DAVID HERRERO GONZÁLEZ

179

REGISTRO 10-9: IPR2: Registro De Prioridad De Las Interrupciones Periféricas 2

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

OSCIP CMIP USBIP EEIP BCLIP HLVIP TMR3IP CCP2IP

R/W-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0 R/W-0 R/Wx0

BIT 7 OSCIP: Bit de prioridad de la interrupción por fallodel oscilador:

1= Alta prioridad0= Baja prioridad

BIT 6 CMIP: Bit de prioridad de la interrupción del comparador:1= Alta prioridad

0= Baja prioridadBIT 5 USBIP: Bit de prioridad de la interrupción del USB:

1= Alta prioridad0= Baja prioridad

BIT 4 EEIP: Bit de prioridad de la interrupción por escribir enEEPROM/Flash:

1= Alta prioridad0= Baja prioridad

BIT 3 BCLIP: Bit de prioridad de la interrupción por colisiónen el bus:

1= Alta prioridad0= Baja prioridad

BIT 2 HLVIP: Bit de prioridad de la interrupción por detección dealta tensión:

1= Alta prioridad0= Baja prioridad

BIT 1 TMR3IP: Bit de prioridad de la interrupción por desbordamientodel TMR3:

1= Alta prioridad0= Baja prioridad

BIT 0 CCP2IP: Bit de prioridad de la interrupción del CCP2:

1= Alta prioridad0= Baja prioridad

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 182/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

180

3.4.10.6. Registro RCON

El registro RCON contiene los flags los cuales se utilizan para determinar lacausa del reset o del reinicio que ha provocado la salida de los modos de reposo oSLEEP. RCON también contiene el bit IPEN el cuál permite las prioridades de lasinterrupciones.

REGISTRO 10-10: RCON: Registro De Control Del Reset

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

IPEN SBOREN - RI* TO* PD* POR* BOR*

R/W-0 R/W-1(1) U-0 R/W-0 R-1 R-1 R/W-0 R/W-0

BIT 7 IPEN: Bit activador de las prioridades de las interrupciones:1= Niveles de prioridad permitidos0= Niveles de prioridad no permitidos

BIT 6 SBOREN: Bit activador de BOR (1):Ver registro 5-1

BIT 4 RI*: Flag de reset por instrucción:Ver registro 5-1

BIT 3 TO*: Flag de desbordamiento del Watchdog:Ver registro 5-1

BIT 2 PD*: Flag de detección de la caída de tensión:

Ver registro 5-1BIT 1 POR*: Bit de estado de reset por aumento de tensión(2):Ver registro 5-1

BIT 0 CCP2IP: Bit de estado de reset por cese de tensión:Ver registro 5-1

Nota 1: Si se permite SBOREN, su estado en el reset es ‘1’; si no, es ‘0’. Ver el registro 5-1 para la información adicional.

2: El valor real en el reset del POR se determina por el tipo de reset deldispositivo. Ver el registro 5-1 para adicional información.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 183/651

GUILLERMO DAVID HERRERO GONZÁLEZ

181

3.4.10.7. Pines De Interrupciones INTn

Las interrupciones externas de los pines RB0/AN12/INT0/FLT0/SDI/SDA,RB1/AN10/INT1/SCK/SCL y RB2/AN8/INT2/VMO son activas por flanco. Si el bitcorrespondiente INTEDGx en el registro INTCON2 se activa (= 1), la interrupción seacciona por un flanco de subida; si el bit está borrado, el disparo ocurre en el flanco de

bajada. Cuando ocurre un flanco válido en el pin RBx/INTx, el flag el correspondientese activa, INTxIF. Esta interrupción se puede inhabilitar borrando el bit INTxIE. El flag,INTxIF, debe borrarse por software antes de volver a permitir la interrupción.

Todas las interrupciones externas (INT0, INT1 e INT2) pueden despertar al procesador de los modos de ahorro de energía si se activa el bit, INTxIE antes de entrar en ellos. Si se permiten las interrupciones globales, se activa GIE, el procesador saltaráal puntero de la interrupción después del reinicio.

La prioridad de la interrupción para INT1 e INT2 se determina con el valor contenido en los bits de prioridad de la interrupción, el INT1IP (INTCON3<6>) y elINT2IP (INTCON3<7>). No hay un bit de prioridad asociado a la interrupción INT0.Siempre es una fuente de interrupción prioritaria.

3.4.10.8. Interrupción TMR0

En el modo de 8 bits (que está por defecto), un desbordamiento en el registroTMR0 (FFh => 00h) activará el flag, TMR0IF. En modo de 16 bits, un desbordamientoen el par de registros TMR0H:TMR0L (FFFFh => 0000h) activará TMR0IF. Lainterrupción se puede permitir/inhabilitar activando/borrando el bit de permiso,TMR0IE (INTCON<5>). La prioridad de la interrupción para Timer0 se determina por el valor contenido en el bit de prioridad de la interrupción, TMR0IP (INTCON2<2>).

3.4.10.9. Interrupción Al Cambiar PORTB

Un cambio en la entrada en PORTB<7:4> activa el flag, RBIF (INTCON<0>).La interrupción se puede permitir/inhabilitar activando/borrando el bit de permiso,RBIE (INTCON<3>). La prioridad de la interrupción para la interrupción sedeterminada con el valor contenido en el bit de la prioridad de la interrupción, RBIP(INTCON2<0>).

3.4.10.10. Almacenamiento De Datos Durante La InterrupciónDurante las interrupciones, la dirección del PC de retorno se almacena en la pila.

Además, los registros WREG, ESTADO y BSR se guardan en la pila de acceso rápido.Si no se utiliza un retorno rápido de la interrupción, el usuario puede necesitar guardar los registros WREG, ESTADO y BSR en entrada a la rutina de la interrupción.Dependiendo de la aplicación, también se puede necesitar guardar otros registros.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 184/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

182

EJEMPLO 10-1: Almacenamiento De Los Registros ESTADO, WREG y BSR En RAM

MOVWF W_TEMP ;W_TEMP está en el banco virtual

MOVFF STATUS,STATUS_TEMP ;STATUS_TEMP direccionado en;cualquier sitio

MOVFF BSR, BSR_TEMP ;BSR_TMEP direccionado en;cualquier sitio

;;CÓDIGO DEL USUARIO;MOVFF BSR_TEMP, BSR ;Restaura BSR MOVF W_TEMP, W ;Restaura WREG MOVFF STATUS_TEMP, STATUS ;Restaura ESTADO

3.4.11. PUERTOS DE ENTRADA-SALIDA Dependiendo del dispositivo seleccionado y de las características permitidas,

hay hasta cinco puertos disponibles. Algunos pines de los puertos de entrada-salida semultiplexan con una función alternativa de las características periféricas del dispositivo.Generalmente cuando se activa un periférico, ese pin no se puede utilizar como pin deentrada-salida.

Cada puerto tiene tres registros para operar. Estos registros son:

Ê Registro TRIS (registro de la dirección de los datos)Ê Registro POR (lee los niveles en los pines del dispositivo)Ê Registro LAT (latch de salida)

El registro del latch de datos (LATA) es útil para leer-modificar-escribir lasoperaciones en el valor de los pines de entrada-salida.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 185/651

GUILLERMO DAVID HERRERO GONZÁLEZ

183

FIGURA 11-1: Puerto Genérico De Operaciones De Entrada-Salida

Nota 1: Los puertos de E/S tienen un diodo de protección para VDD y VSS.

3.4.11.1. Registros PORTA, TRISA Y LATA

El PORTA es un puerto bidireccional de 8bits de ancho. El registro de la

dirección de los datos es TRISA. Activar el bit TRISA (=1) hará que el pincorrespondiente de PORTA sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISA (=0)hace que el pin correspondiente de PORTA sea una salida (es decir, pone el contenidodel latch de salida en el pin seleccionado).

Leyendo el registro PORTA se lee el estado de los pines; escribiendo en él, segraba el latch.

El registro del latch de datos (LATA) sólo es memoria mapeada. Lasoperaciones de lectura-modificación-escritura en el registro LATA lee y escribe el valor del latch de salida del PORTA.

El pin RA4 se multiplexa con la entrada de reloj del módulo Timer0 parahacerse el pin RA4/T0CKI. El pin RA6 se multiplexa con el pin principal del oscilador;se permite como un oscilador o pin de entrada-salida al seleccionar el oscilador

principal en el registro 1H de la configuración. Cuando no está utilizado como un puerto, RA6 y su TRIS asociado y los bits del LAT se leen como ‘0’.

El RA4 también se multiplexa con el módulo del USB; sirve como una entradareceptora de un transmisor-receptor externo del USB.

Varios pines de PORTA se multiplexan con las entradas analógicas, las entradasanalógicas de VREF+ y de VREF- y la salida de referencia de la tensión del

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 186/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

184

comparador. La operación de los pines RA5 y RA3:RA0 como entradas del convertidor A/D se seleccionan al borrar/activar los bits de control en el registro ADCON1 (registro

de control A/D1).Nota: En un reset por subida de tensión, RA5 y RA3:RA0 se configuran como

entradas analógicas y se leen como ‘0’. RA4 se configura como entrada digital.

El resto de los pines de PORTA tienen niveles de introducción de datos de TTLy drivers de salida de CMOS.

El registro TRISA controla la dirección de los pines RA, aun cuando se estánutilizando como entradas analógicas. El usuario debe asegurarse de que los bits delregistro TRISA son ‘1’ al usarlos como entradas analógicas.

EJEMPLO 11-1: Inicialización PORTA

CLRF PORTA ;Inicializar PORTA borrando los latch de salida

CLRF LATA ;Otro método para borrar los latch

MOVLW 0Fh ;Configurar A/D

MOVWF ADCON1 ;para entradas digitales

MOVLW 07h ;Configurar los comparadores

MOVWF CMCON ;para entrada digital

MOVLW 0CFh ;Valor usado para inicializar las direcciones de los datos

MOVWF TRISA ;Activar RA<3:0> como entradas y RA<5:4> como salidas

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 187/651

GUILLERMO DAVID HERRERO GONZÁLEZ

185

TABLA 11-1: Resumen De Entradas-Salidas Del PORTA

Pin FunciónConfiguración

Del TRIS

E/S Tipo de E/S Descripción

0 salida salida digitalLATA<0> salida de datos; no le afectan las entradas

analógicasRA0

1 entradaBuffer de

entrada TTLPORTA<0> entradas de datos; desactivada cuando se

activen las entradas analógicasRA0/AN0

AN0 1 entrada analógicaCanal 0 de entrada A/D y entrada del comparador C1-.

Configuración por defecto en POR; no le afectan salidasdigitales.

0 salida salida digitalLATA<1> salida de datos; no le afectan las entradas

analógicasRA1

1 entradaBuffer de

entrada TTLPORTA<1> entrada de datos; se lee ‘0’ en POR.RA1/AN1

AN1 1 entrada analógicaCanal 1 de entrada A/D y entrada del comparador C2-.

Configuración por defecto en POR; no le afectan salidasdigitales.

0 salida salida digital LATA<2> salida de datos; no le afectan las entradasanalógicas. Desactivado cuando la salida CVREF estéactiva.

RA2

1 entradaBuffer de

entrada TTL

PORTA<2> entrada de datos. Desactivado cuando lasfunciones analógicas estén activas; desactivado cuando la

salida CVREF esté activa.

AN2 1 entrada analógicaCanal 2 de entrada A/D y entrada del comparador C2+.Configuración por defecto en un POR; no le afectan las

salidas analógicas.

VREF- 1 entrada analógicaTensión baja de referencia de entrada para el A/D y el

comparador.

RA2/AN2/ VREF-/CVREF

CVREF x salida analógicaTensión de referencia de salida. Activando esto se

desactiva las E/S digitales.

0 salida salida digitalLATA<3> salida de datos; no le afectan las entradas

analógicasRA3

1 entradaBuffer de

entrada TTLPORTA<3> entrada de datos; desactivado cuando las

entradas analógicas estén activas.

AN3 1 entrada analógicaCanal 3 de entrada A/D y del comparador C1+.

Configuración por defecto en un POR.

RA3/AN3/VREF+

VREF+ 1 entrada analógicaTensión de referencia alta de entrada para el A/D y el

comparador.

0 salida salida digitalLATA<4> salida de datos; no le afectan las entradas

analógicasRA4

1 entradaBuffer deentradaSchmitt

PORTA<4> entrada de datos; desactivado cuando lasentradas analógicas estén activas.

T0CKI 1 entradaBuffer deentradaSchmitt

Entrada del reloj Timer0.

C1OUT 0 salida salida digitalSalida del comparador 1; tiene prioridad sobre el puerto de

datos.

RA4/T0CKI/C1OUT/RCV

RCV x entradaBuffer de

entrada TTLEntrada externa del transmisor RCV del USB.

RA5 0 salida salida digitalLATA<5> salida de datos; no le afectan las entradas

analógicas

1 entradaBuffer de

entrada TTLPORTA<5> entrada de datos; desactivado cuando las

entradas analógicas estén activas.

AN4 1 entrada analógica Canal 4 de entrada A/D. Por defecto en un POR.

SS* 1 entradaBuffer de

entrada TTLEntrada selectora de esclavo para SSP (Módulo MSSP).

HLVDIN 1 entrada analógica Detector de tensión Alta/Baja externa.

RA5/AN4/SS*/HLVDIN/C2OUT

C2OUT 0 salida salida digitalSalida del comparador 2; tiene prioridad sobre el puerto de

datos.

OSC2/CLKO/RA6 OSC2 x salida analógicaConexión de regreso del oscilador (todos los modos XT y

HS).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 188/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

186

CLKO x salida salida digitalSalida del sistema del reloj (FOSC/4); disponible en los

modos EC, ECPLL e INTCKO.

0 salida salida digitalLATA<6> salida de datos. Disponible en los modos ECIO,

ECPIO e INTIO; en otro caso, se lee ‘0’.RA6

1 entradaBuffer de

entrada TTLPORTA<6>entrada de datos. Disponible en los modos

ECIO, ECPIO e INTIO; en otro caso se lee ‘0’.

TABLA 11-2: Sumario De Registros Asociados Al PORTA

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTA — RA6(1) RA5 RA4 RA3 RA2 RA1 RA0

LATA — LATA6(1) LATA5 LATA4 LATA3 LATA2 LATA1 LATA0

TRISA — TRISA6(1) TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0

ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0

CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0

UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —

Leyenda: — = no implementado, se lee ‘0’. Las celdas sombreadas no las usa elPORTA.

Nota 1: El RA6 y sus bits de direcciones y latch asociados se activan como pines de E/S basándose en la configuración del oscilador; en otro caso, se leen como‘0’.

3.4.11.2. Registros PORTB, TRISB Y LATB

El PORTB es un puerto bidireccional de 8bits de ancho. El registro de ladirección de los datos es TRISB. Activar el bit TRISB (=1) hará que el pincorrespondiente de PORTB sea una entrada (es decir, pone el conductor correspondientede la salida en un modo alta impedancia). Borrar un bit de TRISB (=0) hace que el pincorrespondiente de PORTB sea una salida (es decir, pone el contenido del latch desalida en el pin seleccionado).

El registro del latch de datos (LATB) sólo es memoria mapeada. Lasoperaciones de lectura-modificación-escritura en el registro LATB lee y escribe el valor del latch de salida del PORTB.

Cada uno de los pines de PORTB tiene un pull-up interno. Un solo bit de control puede cambiar todo el pull-up. Esto se realiza borrando el bit, RBPU* (INTCON2<7>).El pull-up cambia automáticamente cuando el pin se configura como salida. Seinhabilita el pull-up en un reinicio.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 189/651

GUILLERMO DAVID HERRERO GONZÁLEZ

187

Nota: En reinicio, RB4:RB0 se configuran como entradas analógicas por defectoy se leen como ‘0’; Se configuran los bits RB7:RB5 como entradas digitales.

Programando el bit de configuración, PBADEN (CONFIG3H<1>), RB4:RB0 seconfiguran alternativamente como entradas digitales en POR.

Cuatro de los pines de PORTB (RB7: RB4) tienen una interrupción “alcambiar”. Solamente los pines configurados como entradas pueden provocar estainterrupción. Cualquier pin RB7:RB4 configurado como salida se excluye de lainterrupción “al cambiar”. Los pines se comparan con el último valor leído en elPORTB.

La interrupción se puede utilizar para despertar al dispositivo del sleep. Elusuario, en la rutina del servicio de la interrupción, puede inhabilitar la interrupción dela manera siguiente:

a) Una lectura o escritura en el PORTB (excepto con la instrucciónMOVFF x, PORTB). Esto terminará la condición de error deconexión.

b) Borrar el flag, RBIF.

Al leer el PORTB finalizará la condición de error de conexión y permitirá que elflag, RBIF, sea borrado.

La interrupción “por cambio” se recomienda para despertar el dispositivocuando se presiona una tecla y operaciones en las que el PORTB se utiliza solamente

por su interrupción. No es recomendable interrogar el PORTB cuando estamos usando

la interrupción “por cambio”.Los pines, RB2 y RB3, se multiplexan con el USB y sirven como las salidas para

un transmisor-receptor externo USB (configuración TRIS).

RB4 se multiplexa con CSSPP, el chip selecciona funcionar con puerto paralelo(SPP) ajustando el TRIS.

EJEMPLO 11-2: Inicialización De PORTB

CLRF PORTB ;Inicializar PORTB borrando los latch de salida de datos CLRF LATB ;Otra método para borrar los latch de salida

MOVLW 0Eh ;Activar RB<4:0> como pines digitales de entrada-salida

MOVWF ADCON1 ; (requerido si el bit PBADEN está activo) MOVLW 0CFh ;Valor usado para inicializar las direcciones de los datos MOVWF TRISB ;Activa RB<3:0> como entradas

;RB<5:4> como salidas;RB<7:6> como entradas

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 190/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

188

TABLA 11-3: Resumen De Entradas-Salidas Del PORTB

Pin Función Configuración

Del TRIS E/S

Tipo

De E/S Descripción

0 salida salida digitalLATB<0> salida de datos; no le afectan las entradas

analógicasRB0

1 entradaBuffer de

entrada TTL

PORTB<0> entrada de datos; cuando el bit RBPU se borre, poca resistencia. Desactivada cuando se activen

las entradas analógicas(1)

AN12 1 entrada señal analógica Canal de entrada A/D 12.(1)

INT0 1 entradaBuffer de

entrada SchmittEntrada de interrupción externa 0

FLT0 1 entradaBuffer de

entrada SchmittEntrada de PWM mejorado contra fallos (Módulo

ECCP1); activo por software

SDI 1 entradaBuffer de

entrada SchmittSPI entrada de datos (Módulo MSSP).

1 salida salida digitalSalida de datos I2C (Módulo MSSP); tiene prioridad

sobre el puerto de datos.

RB0/AN12/INT0/FLT0/

SDI/SDA

SDA1 entrada I2C/SMB

Entrada de datos I2C (Módulo MSSP); el tipo de entradadepende de las características seleccionadas en el

módulo.

0 salida salida digitalLATB<1> salida de datos; no le afectan las entradas

analógicasRB1

1 entradaBuffer de

entrada TTL

PORTB<1> entrada de datos; cuando el bit RBPU se borre, poca resistencia. Desactivada cuando se activen

las entradas analógicas(1)

AN10 1 entrada señal analógica Canal de entrada A/D 10.(1)

INT1 1 entradaBuffer de

entrada SchmittEntrada de interrupción externa 1

0 salida salida digitalSalida de reloj SPI (Módulo MSSP); tiene prioridad

sobre el puerto de datos.SCK

1 entradaBuffer de

entrada SchmittEntrada de reloj SPI (Módulo MSSP).

0 salida salida digital Salida de reloj I2

C (Módulo MSSP); tiene prioridadsobre el puerto de datos.

RB1/AN10/INT1/SCK/

SCL

SCL1 entrada I2C/SMB

Entrada de reloj I2C (Módulo MSSP); el tipo de entradadepende de las características seleccionadas del módulo.

0 salida salida digitalLATB<2> salida de datos; no le afectan las entradas

analógicasRB2

1 entradaBuffer de

entrada TTL

PORTB<2> entrada de datos; cuando el bit RBPU se borre, poca resistencia. Desactivada cuando se activen

las entradas analógicas(1)

AN8 1 entrada señal analógica Canal de entrada A/D 8.(1)

INT2 1 entradaBuffer de

entrada SchmittEntrada de interrupción externa 2

RB2/AN8/INT2/VMO

VMO 0 salida salida digital Salida de datos del transmisor externo USB VMO.

0 salida salida digitalLATB<3> salida de datos; no le afectan las entradas

analógicas

RB31 entrada

Buffer deentrada TTL

PORTB<3> entrada de datos; cuando el bit RBPU se borre, poca resistencia. Desactivada cuando se activen

las entradas analógicas(1)

AN9 1 entrada señal analógica Canal de entrada A/D 9.(1)

0 salida salida digital Salida del comparador CCP2 y del PWM.CCP2(2)

1 entradaBuffer de

entrada SchmittCapturador de entrada CCP2.

RB3/AN9/CCP2/VPO

VPO 0 salida salida digital Salida de datos del transmisor externo USB VPO.

0 salida salida digitalLATB<4> salida de datos; no le afectan las entradas

analógicasRB4

1 entradaBuffer de

entrada TTL

PORTB<4> entrada de datos; cuando el bit RBPU se borre, poca resistencia. Desactivada cuando se activen

las entradas analógicas(1)

RB4/AN11/KBI0/CSSPP

AN11 1 entrada señal analógica Canal de entrada A/D 11.(1)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 191/651

GUILLERMO DAVID HERRERO GONZÁLEZ

189

KBI0 1 entradaBuffer de

entrada TTLInterrupción al cambiar.

CSSPP(4) 0 salida salida digital Salida de control del chip select de SPP.

0 salida salida digital LATB<5> salida de datos.RB5

1 entradaBuffer de

entrada TTLPORTB<5> entrada de datos; cuando el bit RBPU se

borre, poca resistencia.

KBI1 1 entradaBuffer de

entrada TTLInterrupción al cambiar.

RB5/KBI1/PGM

PGM x entradaBuffer de

entrada Schmitt

Modo de programación de suministro único (ICSP™).Activo por el bit LVP; todas las funciones de los demás

pines desactivadas.

0 salida salida digital LATB<6> salida de datos.

RB6

1 entradaBuffer de

entrada TTLPORTB<6> entrada de datos; cuando el bit RBPU se

borre, poca resistencia.

KBI2 1 entradaBuffer de

entrada TTLInterrupción al cambiar.

RB6/KBI2/PGC

PGC x entradaBuffer de

entrada SchmittReloj de entrada serie para operaciones ICSP e ICD.(3)

0 salida salida digital LATB<7> salida de datos.

RB7

1 entradaBuffer de

entrada TTLPORTB<7> entrada de datos; cuando el bit RBPU se

borre, poca resistencia.

KBI3 1 entradaBuffer de

entrada TTLInterrupción al cambiar.

x salida salida digital Salida serie de datos para operaciones ICSP e ICD.(3)

RB7/KBI3/PGD

PGD

x entradaBuffer de

entrada SchmittEntrada serie de datos para operaciones ICSP e ICD.(3)

Nota 1: Configuración en el POR determinada por el bit PBADEN. Los pinesse configuran como entradas analógicas cuando el bit PBADAN está activo y entradasdigitales cuando está borrado.

2: Selección de pin alternativo de CCP2 cuando CCP2MX = 0. Laselección natural es RC1.

3: Todas las funciones de los pines están desactivadas cuando ICSP oICD se activan.

4: Sólo en los dispositivos de 40/44-pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 192/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

190

TABLA 11-4: Resumen De Los Registros Asociados Al PORTB

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0

TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

INTCON2 RBPU* INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP

INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF

ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

SPPCON(1) — — — — — — SPPOWN SPPEN

SPPCFG(1) CLKCFG1 CLKCFG0 CSEN CLK1EN WS3 WS2 WS1 WS0

UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —

Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no seutilizan para el PORTB.

Nota: Estos registro son solo para los dispositivos de 28pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 193/651

GUILLERMO DAVID HERRERO GONZÁLEZ

191

3.4.11.3. Registros PORTC, TRISC Y LATC

El PORTC es un puerto bidireccional de 7bits de ancho. El registro de ladirección de los datos es TRISC. Activar el bit TRISC (=1) hará que el pincorrespondiente de PORTC sea una entrada (es decir, pone el conductor correspondientede la salida en un modo alta impedancia). Borrar un bit de TRISC (=0) hace que el pincorrespondiente de PORTC sea una salida (es decir, pone el contenido del latch desalida en el pin seleccionado).

En los dispositivos PIC18F2455/2550/4455/4550, el pin RC3 no estáimplementado.

El registro del latch de datos (LATC) sólo es memoria mapeada. Lasoperaciones de lectura-modificación-escritura en el registro LATC lee y escribe el valor

del latch de salida del PORTC.PORTC se multiplexa sobre todo con los módulos de comunicación serie,

incluyendo el EUSART, el módulo MSSP y el módulo USB. A excepción de RC4 yRC5, el PORTC utiliza buffer de disparo de entrada Schmitt.

Los pines RC4 y RC5 se multiplexan con el módulo USB. Dependiendo de laconfiguración del módulo, pueden servir como las líneas de datos diferenciales para eltransmisor-receptor del USB del chip, o las entradas de datos del transmisor-receptor del USB externo. RC4 y RC5, el PORTC tiene buffer de entrada TTL en lugar de los

buffer Schmitt de los otros pines.

RC4 y RC5 no tienen bits de TRISC asociados a ellos. Como puertos digitales,

sólo pueden funcionar como entradas digitales. Cuando se configura para operacionescon USB, la dirección de los datos se determina por la configuración y el estado delmódulo USB en ese momento. Si se utiliza un transmisor-receptor externo, siemprefuncionarán RC4 y RC5 como entradas del transmisor-receptor. Si se utiliza eltransmisor-receptor del chip, la dirección de los datos se determina por la operación quese realiza por el módulo en el momento.

Cuando se permite el transmisor-receptor externo, RC2 sirve como la salida decontrol del transmisor-receptor.

Al permitir funciones periféricas en los pines de PORTC con excepción de RC4y de RC5, hay que tener cuidado al definir los bits de TRIS. Algunos periféricos

eliminan el bit TRIS para configurar un pin como salida, mientras que otros periféricosactivan el bit TRIS para configurar un pin como entrada.

Nota: En un reset por subida de tensión, estos pines, excepto RC4 y RC5, seconfiguran como entradas digitales. Para utilizar los pines RC4 y RC5 como entradasdigital, el módulo USB debe desactivarse (UCON<3>=0) y en el chip el transmisor-receptor del USB debe desactivarse también (UCFG<3>=1).

El contenido del registro de TRISC afectado por el periférico se elimina. Lalectura de TRISC siempre devuelve el contenido actual, aun cuando un dispositivo

periférico puede eliminar uno o más pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 194/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

192

EJEMPLO 11-3: Inicialización Del PORTC

CLRF PORTC ;Inicializar PORTC borrando los latch de salida de datos

CLRF LATC ;Otra método para borrar los latch de salidaMOVLW 07h ;Valor usado para inicializar las direcciones de los datos

MOVWF TRISC ;Activa RC<5:0> como salidas;RC<7:6> como entradas

TABLA 11-5: Resumen De Entradas-Salidas Del PORTC

Pin Función Ajustes

del TRIS E/S Tipo de E/S Descripción

RC0 0 S salida digital LATC<0> salida de datos.

1 EBuffer de

entrada SchmittPORTC<0> entrada de datos.

T1OSO x S señal analógicaSalida del oscilador del Timer1; activo cuando se active el oscilador del

Timer1. Inhabilita las E/S digitales.

RC0/T1OSO/

T13CKI

T13CKI 1 EBuffer de

entrada SchmittEntrada del contador Timer1/Timer3.

0 S salida digital LATC<1> salida de datos.RC1

1 EBuffer de

entrada SchmittPORTC<1> entrada de datos.

T1OSI x E señal analógicaEntrada del oscilador Timer1; activo cuando se active el oscilador Timer1.

Desactiva las E/S digitales.

0 S salida digitalSalida del comparador CCP2 y del PWM output; tiene prioridad sobre el

puerto de datos.CCP2(1)

1 EBuffer de

entrada SchmittEntrada de captura CCP2.

RC1/T1OSI/

CCP2/UOE*

UOE* 0 S salida digital Salida del transmisor OE externo del USB.

0 S salida digital LATC<2> salida de datos.RC2

1 EBuffer de

entrada SchmittPORTC<2> entrada de datos.

0 S salida digitalSalida del comparador ECCP1 y del PWM output; tiene prioridad sobre el

puerto de datos.CCP1

1 EBuffer de

entrada SchmittEntrada de captura ECCP1.

RC2/CCP1/P1A

P1A(3) 0 S salida digitalSalida ECCP1 y PWM mejorado, canal A; tiene prioridad sobre el puertode datos. Tiene que configurarse como triestado durante los eventos de

caída del PWM mejorado.

RC4 — (2) EBuffer de

entrada TTLPORTC<4> entrada de datos; desactivado cuando el modulo transmisor

del USB del chip esté activo.

— (2) S transmisor USBLínea de salida del bus USB diferencial negativo USB (transmisor

interno).D-

(2)

E transmisor USB

Línea de entrada del bus USB diferencial negativo USB (transmisor

interno).

RC4/D-/VM

VM — (2) EBuffer de

entrada TTLEntrada del USB VM externo.

RC5 — (2) EBuffer de

entrada TTLPORTC<5> entrada de datos; desactivado cuando el modulo transmisor

del USB del chip esté activo.

— (2) S transmisor USB Línea de salida del bus USB diferencial positivo USB (transmisor interno).D+

— (2) E transmisor USBLínea de entrada del bus USB diferencial positivo USB (transmisor

interno).

RC5/D+/VP

VP — (2) EBuffer de

entrada TTLEntrada del USB VP externo.

0 S salida digital LATC<6> salida de datos.RC6/TX/CK RC6

1 EBuffer de

entrada SchmittPORTC<6> entrada de datos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 195/651

GUILLERMO DAVID HERRERO GONZÁLEZ

193

TX 0 S salida digitalSalida de transmisión serie asíncrona (módulo EUSART); tiene prioridad

sobre el puerto de datos. El usuario tiene que configurarla como salid.

0 S salida digital Salida de transmisión serie síncrona (módulo EUSART); tiene prioridadsobre el puerto de datos.CK

1 EBuffer de

entrada SchmittEntrada del reloj serie síncrono (Módulo EUSART).

0 S salida digital PORTC<7> salida de datosRC7

1 EBuffer de

entrada SchmittPORT<7> entrada de datos

RX 1 EBuffer de

entrada SchmittEntrada de datos del receptor serie asíncrono (módulo EUSART).

1 S salida digitalSalida serie de datos síncrona (modulo EUSART); tiene prioridad sobre

SPI y el puerto de datos.DT

1 EBuffer de

entrada SchmittEntrada de datos serie síncrona (módulo EUSART). El usuario tiene que

configurarla como entr.

RC7/RX/DT/ SDO

SDO 0 S salida digitalSalida de datos SPI (módulo MSSP); tiene prioridad sobre el puerto de

datos.

Nota 1: Asignación del pin por defecto. La asignación del pin alternativa esRB3 (cuando CCP2MX = 0).

2: RC4 y RC5 no tienen bits correspondientes de TRISC. En el modo de puertos estos pines son sólo entradas. La dirección de los datos del USB se determina por la configuración del USB.

3: Solamente dispositivos de 40/44pines.

TABLA 11-6: Resumen De Registros Asociados Al PORTC

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTC RC7 RC6 RC5(1) RC4(1) — RC2 RC1 RC0

LATC LATC7 LATC6 — — — LATC2 LATC1 LATC0

TRISC TRISC7 TRISC6 — — — TRISC2 TRISC1 TRISC0

UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —

Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no seutilizan para el PORTC.

Nota 1: RC5 y RC4 están solamente disponibles como puertos cuando elmódulo del USB está desactivado (UCON<3> = 0).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 196/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

194

3.4.11.4. Registros PORTD, TRISD Y LATD

Nota: El PORTD solamente está disponible en dispositivos de 40/44pines.El PORTD es un puerto bidireccional de 8bits de ancho. El registro de la

dirección de los datos es TRISD. Activar el bit TRISD (=1) hará que el pincorrespondiente de PORTD sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISD (=0)hace que el pin correspondiente de PORTD sea una salida (es decir, pone el contenidodel latch de salida en el pin seleccionado).

El registro del latch de datos (LATD) sólo es memoria mapeada. Lasoperaciones de lectura-modificación-escritura en el registro LATD lee y escribe el valor del latch de salida del PORTD.

Todos los pines del PORTD están implementados con buffer de entrada dedisparadores Schmitt. Cada pin se puede configurar independientemente como entrada osalida.

Cada uno de los pines de PORTD tiene un pull-up interno. Un solo bit de control puede cambiar todo el pull-up. Esto se realiza borrando el bit, RDPU (PORTE<7>). El pull-up cambia automáticamente cuando el pin se configura como salida. Se inhabilitael pull-up en un reinicio.

Tres de los pines de PORTD se multiplexan con salidas, P1B, P1C y P1D, delmódulo CCP.

Nota: En un reset por subida de tensión estos pines se configuran como entradade datos digital.

El PORTD también se puede configurar como un puerto paralelo (SPP) de 8bitsde ancho. En este modo, los Buffers de entrada son TTL.

Nota: Cuando se utiliza el modo PWM mejorado con salidas dobles ocuádruples, las funciones del MSSP en el PORTD se desactivan automáticamente.

EJEMPLO 11-4: Inicialización Del PORTD

CLRF PORTD ; Inicializar PORTD borrando los latch de salida de datos

CLRF LATD ;Otra método para borrar los latch de salida

MOVLW 0C7h ;Valor usado para inicializar las direcciones de los datosMOVWF TRISD ;Activa RD<3:0> como entradas;RD<5:4> como salidas;RD<7:6> como entradas

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 197/651

GUILLERMO DAVID HERRERO GONZÁLEZ

195

TABLA 11-7: Resumen De Entradas-Salidas Del PORTD

Pin Función

Ajustes

del TRIS E/S Tipo de E/S Descripción

0 salida Salida digital LATD<0> salida de datos.RD0

1 entradaBuffer de

entrada SchmittPORTD<0> entrada de datos.

1 salida Salida digitalSPP<0> salida de datos; tiene prioridad sobre el puerto de

datos.

RD0/SPP0

SPP01 entrada

Buffer deentrada TTL

SPP<0> entrada de datos.

0 salida Salida digital LATD<1> salida de datos.RD1

1 entradaBuffer de

entrada SchmittPORTD<1> entrada de datos.

1 salida Salida digitalSPP<1> salida de datos; tiene prioridad sobre el puerto de

datos.

RD1/SPP1

SPP11 entrada

Buffer de

entrada TTL

SPP<1> entrada de datos.

0 salida Salida digital LATD<2> salida de datos.RD2

1 entradaBuffer de

entrada SchmittPORTD<2> entrada de datos.

1 salida Salida digitalSPP<2> salida de datos; tiene prioridad sobre el puerto de

datos.

RD2/SPP2

SPP21 entrada

Buffer deentrada TTL

SPP<2> entrada de datos.

0 salida Salida digital LATD<3> salida de datos.RD3

1 entradaBuffer de

entrada SchmittPORTD<3> entrada de datos.

1 salida Salida digitalSPP<3> salida de datos; tiene prioridad sobre el puerto de

datos.

RD3/SPP3

SPP31 entrada

Buffer deentrada TTL

SPP<3> entrada de datos.

0 salida Salida digital LATD<4> salida de datos.RD4

1 entradaBuffer de

entrada SchmittPORTD<4> entrada de datos.

1 salida Salida digitalSPP<4> salida de datos; tiene prioridad sobre el puerto de

datos.

RD4/SPP4

SPP41 entrada

Buffer deentrada TTL

SPP<4> entrada de datos.

0 salida Salida digital LATD<5> salida de datosRD5

1 entradaBuffer de

entrada SchmittPORTD<5> entrada de datos

1 salida Salida digitalSPP<5> salida de datos; tiene prioridad sobre el puerto de

datos.SPP5

1 entradaBuffer de

entrada TTLSPP<5> entrada de datos.

RD5/SPP5/P1B

P1B 0 salida Salida digitalSalida ECCP1 y PWM mejorado, canal B; tiene prioridad

sobre el puerto de datos. (1)

0 salida Salida digital LATD<6> salida de datos.RD6

1 entradaBuffer de

entrada SchmittPORTD<6> entrada de datos.

1 salida Salida digitalSPP<6> salida de datos; tiene prioridad sobre el puerto de

datos.SPP6

1 entradaBuffer de

entrada TTLSPP<6> entrada de datos.

RD6/SPP6/P1C

P1C 0 salida Salida digitalSalida ECCP1 y PWM mejorado, canal C; tiene prioridad

sobre el puerto de datos. (1)

0 salida Salida digital LATD<7> salida de datos.RD7/SPP7/P1DRD7

1 entradaBuffer de

entrada SchmittPORTD<7> entrada de datos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 198/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

196

1 salida Salida digitalSPP<7> salida de datos; tiene prioridad sobre el puerto de

datos.SPP7

1 entradaBuffer de

entrada TTLSPP<7> entrada de datos.

P1D 0 salida Salida digitalSalida ECCP1 y PWM mejorado, canal D; tiene prioridad

sobre el puerto de datos. (1)

Nota 1: Puede que configurarse como triestado en los flancos de bajada delPWM mejorado.

TABLA 11-8: Resumen De Registros Asociados Al PORTD

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTD(3) RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

LATD(3) LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0

TRISD(3) TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0

PORTE RDPU(3) — — — RE3(1,2) RE2(3) RE1(3) RE0(3)

CCP1CON P1M1(3) P1M0(3) DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0

SPPCON(3) — — — — — — SPPOWN SPPEN

Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no se

utilizan para el PORTD.Nota 1: Implementado solamente cuando la función Master Clean está

desactivada (configuración del bit MCLRE=0).

2: RE3 es el único bit PORTE implementado en los dispositivos de 28 y40/44pines. El resto de los bits se implementan cuando lo está el PORTE (es decir, enlos dispositivos 40/44pines).

3: Estos registros y/o bits no están implementados en los dispositivos de28pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 199/651

GUILLERMO DAVID HERRERO GONZÁLEZ

197

3.4.11.5. Registros PORTE, TRISE Y LATE

Dependiendo del PIC18F2455/2550/4455/4550 seleccionado, el PORTE se poneen ejecución en dos maneras diferentes.

Para los dispositivos 40/44pines, el PORTE es un puerto de 4bits de ancho. Tres pines (RE0/AN5/CK1SPP, RE1/AN6/CK2SPP y RE2/AN7/OESPP) se configuranindividualmente como entradas o salidas. Estos pines tienen buffer de entrada tipodisparador Schmitt. Cuando se seleccionan como entrada analógica, éstos pines seleerán como ‘0’s.

El registro de dirección de los datos es TRISE. Activar el bit TRISE (=1) haráque el pin correspondiente de PORTE sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISE (=0)

hace que el pin correspondiente de PORTE sea una salida (es decir, pone el contenidodel latch de salida en el pin seleccionado).

Además de los datos del puerto, el registro PORTE también contiene el bit decontrol RDPU (PORTE<7>); esto permite o inhabilita el pull-up del PORTD.

TRISE controla la dirección de los pines RE, incluso cuando se utilizan comoentradas analógicas. El usuario debe cerciorarse de mantener los pines configuradoscomo entradas cuando use las analógicas.

Nota: En un reset por subida de tensión, RE2:RE0 se configuran como entradasanalógicas.

El registro del latch de datos (LATE) sólo es memoria mapeada. Las operacionesde lectura-modificación-escritura en el registro LATE lee y escribe el valor del latch desalida del PORTE.

El cuarto pin PORTE (MCLR*/VPP/RE3) sólo es un pin de entrada. Suoperación se controlada con el bit de configuración MCLRE. Cuando se seleccionacomo puerto (MCLRE = 0), funciona como una entrada digital; como tal, no tiene bitsTRIS o LAT asociados. Si no, funciona como entrada Master Clear del dispositivo. Encualquier configuración, RE3 también funciona como entrada de tensión de

programación.

Nota: En un reset de subida de tensión, se activa RE3 como una entrada digital

solamente si la función de Master Clear está desactivada.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 200/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

198

EJEMPLO 11-5: Inicialización De PORTE

CLRF PORTE ;Inicializar PORTE borrando los latch de salida de datos

CLRF LATE ;Otra método para borrar los latch de salidaMOVLW 0Ah ;Configura A/D como entradas digitales

MOVWF ADCON1MOVLW 03h ;Valor usado para inicializar las direcciones de los datos

MOVLW 07h ;Desactiva los comparadores

MOVWF CMCONMOVWF TRISE ;Activa RE<0> como entradas

;RE<1> como salidas;RE<2> como entradas

3.4.11.5.1. PORTE En Los Dispositivos De 28-PIN

En los dispositivos de 28pines, el PORTE sólo está disponible cuando el Master Clear está desactivado (MCLRE = 0). En éstos los casos, PORTE son de un solo bit,

puerto de entrada de RE3 solamente. El pin funciona según lo descrito previamente.

REGISTRO 11-1: Registro PORTE

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

RDPU(3) - - - RE3(1,2) RE2(3) RE1(3) RE0(1)

R/W-0 U-0 U-0 U-0 R/W-x R/W-0 R/W-0 R/W-0

BIT 7 RDPU: Bit activador del pull-up del PORD:1= Pull-up activado0= Pull-up desactivado

BIT 3-0 RE3:RE0: Bits de entrada de datos del PORTE(1,2,3)

Nota 1: puesto en ejecución solamente cuando la funcionalidad clara principales lisiada (configuración de MCLRE mordida = 0); si no, leer como `0'.

2: RE3 es el único bit de PORTE implementado todos los dispositivos. Elresto de los bits sólo se implementan en los dispositivos de 40/44pines.

3: No implementado en los dispositivos de 28pines; se lee ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 201/651

GUILLERMO DAVID HERRERO GONZÁLEZ

199

TABLA 11-9: Resumen De Entradas-Salidas Del PORTE

Pin Función

Ajustes

del TRIS E/S Tipo de E/S Descripción

0 salida Salida digital LATE<0> salida de datos; no le afectan las entradas analógicas.

RE0

1 entradaBuffer deentradaSchmitt

PORTE<0> entrada de datos; desactivado cuando se activan lasentradas analógicas.

AN5 1 entradaSeñal

analógicaEntrada A/D canal 5; configuración por defecto en un POR.

RE0/AN5/CK1SPP

CK1SPP 0 salida Salida digital Salida SPP reloj 1 (SPP activo).

0 salida Salida digital LATE<1> salida de datos; no le afectan las entradas analógicas.

RE1

1 entradaBuffer deentradaSchmitt

PORTE<1> entrada de datos; desactivado cuando se activan lasentradas analógicas.

AN6 1 entradaSeñal

analógicaEntrada A/D Canal 6; configuración por defecto en un POR.

RE1/AN6/CK2SPP

CK2SPP 0 salida Salida digital Salida SPP reloj 2 (SPP activo).

0 salida Salida digital LATE<2> salida de datos; no le afectan las entradas analógicas.

RE2

1 entradaBuffer deentrada

Schmitt

PORTE<2> entrada de datos; desactivado cuando se activan lasentradas analógicas.

AN7 1 entradaSeñal

analógicaEntrada A/D canal 7; configuración por defecto en un POR.

RE2/AN7/OESPP

OESPP 0 salida Salida digital Salida active SPP (SPP activo).

MCLR* — (1) entradaBuffer deentradaSchmitt

Entrada externa Clear; activa cuando el bit MCLRE esté activo.

VPP — (1) entradaSeñal

analógicaDetección de alta tensión, utilizado en el modo de detección deentrada ICSP. Siempre disponible sin importar el modo del pin.

MCLR*/VPP/RE3

RE3 — (1) entradaBuffer deentradaSchmitt

PORTE<3> entrada de datos; activo cuando el bit de configuraciónMCLRE está borrado.

Nota 1: RE3 no tiene un bit correspondiente TRISE<3>. Este pin es siempreuna entrada sin importar modo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 202/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

200

TABLA 11-10: El Resumen De Registros Asociados Al PORTE

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTE RDPU(3) — — — RE3(1,2) RE2(3) RE1(3) RE0(3)

LATE(3) — — — — — LATE2 LATE1 LATE0

TRISE(3) — — — — — TRISE2 TRISE1 TRISE0

ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0

SPPCON(3)

— — — — — — SPPOWN SPPEN

SPPCFG(3) CLKCFG1 CLKCFG0 CSEN CLK1EN WS3 WS2 WS1 WS0

Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no seutilizan para el PORTE.

Nota 1: Implementado sólo cuando la función Master Clear está desactivada(configuración del bit MCLRE=0).

2: RE3 es el único bit de PORTE implementado en todos losdispositivos. Se implementan el resto de los bits solamente cuando se pone en ejecuciónPORTE (es decir, los dispositivos 40/44-pin).

3: Estos registros o bits no están implementados en los dispositivos de 28el pin.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 203/651

GUILLERMO DAVID HERRERO GONZÁLEZ

201

3.4.12. MÓDULO TIMER0

El módulo Timer0 incorpora las siguientes características:Ê Contador de 8bits ó 16bits seleccionable por softwareÊ Registros legibles y escribiblesÊ 8 bits dedicados al prescaler programable por softwareÊ Fuente de reloj (interno o externo) seleccionableÊ Flanco seleccionable del reloj externoÊ Interrupción por desbordamiento

El registro de T0CON controla todos aspectos de operación del módulo,incluyendo selección del prescaler. Es legible y escribible.

REGISTRO 12-1: T0CON: Registro De Control TIMER0

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1

BIT 7 TMR0ON: Bit de control para activar el Timer01 = permite Timer00 = no permite Timer0

BIT 6 T08BIT: Bit de selección del Timer0 de 8-Bit/16-Bit

1 = Timer0 se configura como contador de 8 bits0 = Timer0 se configura como contador de 16 bits

BIT 5 T0CS: Bit selector de la fuente del reloj Timer01 = reloj en el pin T0CKI0 = reloj interno del ciclo de la instrucción (CLKO)

BIT 4 T0SE: Bit selector del flanco de la fuente Timer01 = incremento en el flanco de bajada del pin T0CKI0 = incremento en el flanco de subida del pin T0CKI

BIT 3 PSA: Bit de la asignación del prescaler del Timer01 = el prescaler Timer0 no se asigna.0 = se asigna el prescaler Timer0

BIT 2-0 T0PS2:T0PS0: Bits selectores del prescaler del Timer0111 = valor de 1:256110 = valor de 1:128101 = valor de 1:64100 = valor de 1:32011 = valor de 1:16010 = valor de 1:8001 = valor de 1:4000 = valor de 1:2

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 204/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

202

3.4.12.1. Operaciones Del TIMER0

Timer0 puede funcionar como un temporizador o contador; el modo seselecciona borrando el bit T0CS (T0CON<5>). En modo temporizador, el módulo seincrementa en cada pulso del reloj a menos que se seleccione un prescaler. Si el registroTMR0 se escribe, se inhibe el incremento en los dos ciclos siguientes de la instrucción.El usuario puede trabajar con esto escribiendo un valor al registro TMR0.

El modo contador se selecciona activando el bit T0CS (=1). En este modo, elTimer0 se incrementa en cualquier flanco de subida o de bajada del pin RA4/T0CKI. Elflanco se determina por el pin T0SE (T0CON<4>); borrando este bit se selecciona elflanco de subida.

Se puede utilizar una fuente de reloj externa para controlar el Timer0; sin

embargo, debe cumplir ciertos requisitos para asegurarse que el reloj externo sesincronice con reloj interno de fase (TOSC). Hay un retraso en la sincronización y elinicio del incremento del temporizador/contador.

3.4.12.2. Lecturas Y Escrituras Del Timer0 En Modo De 16BITS

TMR0H no es el byte alto real del Timer0 en el modo de 16 bits. Realmente, esuna versión protegida del verdadero byte alto del Timer0 que no se puede leer niescribir directamente. TMR0H se actualiza con el contenido del byte alto de Timer0durante la lectura del TMR0L. Esto proporciona la capacidad de leer los 16 bits deTimer0 sin tener que verificar que la lectura del byte alto y del bajo son correctas,debido a las lecturas sucesivas del byte bajo y del alto.

El byte alto del Timer0 se escribe a través del registro intermediario delTMR0H. El byte alto se actualiza con el contenido del TMR0H cuando se escribe elTMR0L. Esto permite que los 16 bits del Timer0 se actualicen inmediatamente.

FIGURA 12-1: Diagrama Del Timer0 (Modo 8-Bit)

Nota: En el reset, Timer0 se activa en modo de 8 bits con la entrada de relojT0CKI y el prescaler al máximo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 205/651

GUILLERMO DAVID HERRERO GONZÁLEZ

203

FIGURA 12-2: Diagrama Del Timer0 (Modo 16-Bit)

Nota: En el reset, Timer0 se activa en modo de 8 bits con la entrada de relojT0CKI y el prescaler al máximo.

3.4.12.3. Prescaler

Estos micros disponen de un contador de 8bit como prescaler para el móduloTimer0. El prescaler no se puede leer o escribir directamente; su valor se fija con los

bits PSA y T0PS2:T0PS0 (T0CON<3: 0>), los cuáles determinan el divisor del prescaler y la asignación del prescaler.

Borrar el bit PSA asigna el prescaler al Módulo Timer0. Cuando se activa, los

valores del prescaler van de 1:2 a 1:256, con incrementos de potencias de 2.Cuando está activo el módulo Timer0, todas las instrucciones que escriben en él

(ej., CLRF TMR0, MOVWF, TMR0, BSF TMR0, etc.) se borra el prescaler.

Nota: Al escribir el TMR0 cuando el prescaler está asignado al Timer0 lodespejará pero no cambiará su asignación.

3.4.12.3.1. Conmutación En La Asignación Del Prescaler

La asignación del prescaler se controla completamente bajo software y se puedecambiar “en marcha” durante la ejecución del programa.

3.4.12.4. Interrupción Timer0Se genera la interrupción TMR0 cuando se desborda de FFh a 00h en modo de 8

bits, o de FFFFh a 0000h en modo de 16 bits. Este desbordamiento activa el flagTMR0IF. La interrupción se puede enmascarar al borrar el bit TMR0IE (INTCON<5>).Antes de volver a permitir la interrupción, el bit TMR0IF debe borrarse por software enla rutina de la interrupción.

Como el Timer0 se desconecta en el modo sleep, su interrupción no puededespertar el dispositivo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 206/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

204

TABLA 12-1: Registros Asociados Al Timer0

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

TMR0L Timer0 Register Low Byte

TMR0H Timer0 Register High Byte

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP

T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0

TRISA — TRISA6(1) TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con Timer0.

Nota 1: Se configura RA6 como un puerto basado en varios modos primariosdel oscilador. Cuando el puerto se desactiva, todos los bits asociados leen ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 207/651

GUILLERMO DAVID HERRERO GONZÁLEZ

205

3.4.13. MÓDULO TIMER1

El módulo temporizador/contador Timer1 incorpora las siguientescaracterísticas:

Ê Temporizador/contador de 16bits seleccionable por software.Ê Registros legibles y escribibles de 8 bits (TMR1H y TMR1L)Ê Fuente seleccionable de reloj (interna o externa) con opciones del reloj o

del oscilador interno Timer1 del dispositivoÊ Interrupción por desbordamientoÊ El módulo reset en un evento especial de disparo del CCPÊ Flag de estado del reloj del dispositivo (T1RUN)

El módulo incorpora su propio oscilador de baja potencia para proporcionar una

opción de registro adicional. El oscilador Timer1 se puede utilizar como fuente de baja potencia de reloj para el microcontrolador en las operaciones de ahorro de energía.

El Timer1 se puede utilizar para proporcionar la funcionalidad del reloj entiempo real (RTC) en las aplicaciones con un mínimo de componentes externos y decódigo.

El Timer1 se controla con el registro T1CON. También contiene el bit de permiso del oscilador Timer1 (T1OSCEN). El Timer1 puede permitirse o inhabilitarseactivando o borrando el bit de control, TMR1ON (T1CON<0>).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 208/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

206

REGISTRO 13-1: T1CON: Registro De Control Del Timer1

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC* TMR1CS TMR1ON

R/W-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 RD16: Bit de permiso de la lectura/escritura en el modo de 16-Bit1 = permite la lectura/escritura del Timer1 en una operación

de 16bits0 = permite lectura/escritura del Timer1 en dos operaciones

de 8bitsBIT 6 T1RUN: Bit de estado del reloj del sistema Timer1

1 = reloj del dispositivo se deriva del oscilador Timer10 = reloj del dispositivo se deriva de otra fuente

BIT 5-4 T1CKPS1: T1CKPS0: Bits de selección del prescaler del Timer111 = valor de 1:810 = valor de 1:401 = valor de 1:200 = valor de 1:1

BIT 3 T1OSCEN: Bit de permiso del oscilador Timer11 = se permite el oscilador Timer10 = se desconecta el oscilador Timer1

El inversor del oscilador y la resistencia de regeneraciónse apagan para eliminar la energía de drenaje.

BIT 2 T1SYNC*: Bit de selección de la sincronización externa con el Timer1Cuando TMR1CS = 1:1 = no sincroniza la entrada de reloj externa0 = sincroniza la entrada de reloj externaCuando TMR1CS = 0:

Se no hace caso este bit. Timer1 utiliza el reloj internocuando TMR1CS = 0.

BIT 1 TMR1CS: Bit de selección de la fuente del reloj del Timer11 = reloj externo en el pin RC0/T1OSO/T13CKI (en el flanco

de subida)0 = reloj interno (FOSC/4)BIT 0 TMR1ON: Bit de activación del Timer1

1 = permite Timer10 = para el Timer1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 209/651

GUILLERMO DAVID HERRERO GONZÁLEZ

207

3.4.13.1. Operaciones Del Timer1

Timer1 puede funcionar en uno de estos modos:Ê Temporizador Ê Contador síncronoÊ Contador asincrónico

El modo de funcionamiento se determina con el bit de selección TMR1CS(T1CON<1>). Cuando se borra TMR1CS (=0), incrementos del Timer1 en cadainstrucción interna (FOSC/4). Cuando se activa el bit, los incrementos Timer1 en cadaflanco de subida de la entrada del reloj externa Timer1 o del oscilador Timer1, si estáactivo.

Cuando se permite el Timer1, los pines RC1/T1OSI/UOE y

RC0/T1OSO/T13CKI se convierten en entradas. Esto significa que se ignoran losvalores de TRISC<1:0> y los pines se leen como ‘0’.

FIGURA 13-1: Diagrama Del Timer1

Nota 1: Cuando el bit de permiso, T1OSCEN, se borra, el inversor del oscilador y la resistencia de regeneración se apagan para eliminar la energía de drenaje.

3.4.13.2. Modo De Lectura/Escritura De 16-Bit Del Timer1

Timer1 se puede configurar para lecturas/escrituras de 16bits. Cuando el bit de

control RD16 (T1CON<7>) se activa, la dirección del TMR1H se mapea con unregistro del almacenamiento intermedio del byte alto del Timer1. Al leer el TMR1Lcargará el contenido del byte alto del Timer1 en el byte alto del Buffer del Timer1. Esto

proporciona al usuario la capacidad de leer exactamente los 16 bits de Timer1 sin tener que determinar si lee el byte alto, seguido del byte bajo, se volverá inválido debido a laslecturas redundantes.

Al escribir el byte alto del Timer1 debe pasar a través del registro dealmacenamiento intermedio de TMR1H. El byte alto del Timer1 se actualiza con elcontenido de TMR1H cuando se escribe el TMR1L. Esto permite que el usuario escribalos 16 bits a los bytes altos y bajos del Timer1 inmediatamente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 210/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

208

No se puede leer o escribir el byte alto de Timer1 directamente en este modo.Toda lectura y escritura debe hacerse a través del registro de almacenamiento

intermedio. Al escribir el TMR1H no se borra el prescaler del Timer1. El prescaler se borra solamente escribiendo el TMR1L.

FIGURA 13-2: Diagrama Del Timer1 (Modo De Lectura/Escritura De 16-Bit)

Nota 1: Cuando el bit de permiso, T1OSCEN, se borra, el inversor del oscilador y la resistencia de regeneración se apagan para eliminar la energía de drenaje.

3.4.13.3. Oscilador Timer1

Se incorpora un circuito oscilador de XTAL en el chip entre los pines T1OSI(entrada) y T1OSO (amplificador de salida). Se permite el oscilador Timer1 activandoel bit, T1OSCEN (T1CON<3>). El oscilador es un circuito de baja potencia paracristales de 32kHz. Continua funcionando en cualquier modo de ahorro energía.

El usuario debe proporcionar por software el retraso para asegurar el inicio

apropiado del oscilador Timer1.

FIGURA 13-3: Componentes Externos Del Oscilador De Timer1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 211/651

GUILLERMO DAVID HERRERO GONZÁLEZ

209

TABLA 13-1: Selección Del Condensador Del Oscilador Del Temporizador

Osc Freq C1 C2

LP 32 kHz 27 pF 27 pF

3.4.13.3.1. Usar Timer1 como Fuente De Reloj

El oscilador Timer1 está también disponible como fuente del reloj en los modosde ahorro de energía. Poniendo los bits, SCS1:SCS0 (OSCCON<1:0>), a ‘01’, eldispositivo cambia al modo SEC_RUN. La CPU y los periférico se controlan con eloscilador Timer1. Si el bit IDLEN (OSCCON<7>) se borra y se ejecuta la instrucciónSLEEP, el dispositivo entra en el modo SEC_IDLE.

Siempre que el oscilador Timer1 proporcione la fuente de reloj, el flag de estadodel reloj del sistema Timer1, T1RUN (T1CON<6>), se activa. Esto se puede utilizar para determinar el modo que controla el dispositivo. Puede indicar también la fuente delreloj que utiliza actualmente el monitor a prueba de fallos. Si se permite el monitor delreloj y el oscilador del Timer1 falla mientras que proporciona la señal de reloj,

preguntando al bit T1RUN sabremos si el reloj lo proporciona el oscilador Timer1 uotra fuente.

3.4.13.3.2. Opción De Baja Potencia Timer1

El oscilador Timer1 puede funcionar en dos niveles distintos de consumo deenergía basado en la configuración de dispositivo. Cuando se setea el bit deconfiguración LPT1OSC, el oscilador Timer1 funciona en un modo de baja potencia.Cuando LPT1OSC no se activa, el Timer1 funciona en un nivel de energía más alto. Elconsumo de energía para un modo particular es relativamente constante, sin importar elmodo del dispositivo. La configuración por defecto del Timer1 es el modo de energíamás alto.

Como el modo de baja potencia Timer1 tiende a ser más sensible a lasinterferencias, los ambientes con mucho de ruido pueden causar una cierta inestabilidaddel oscilador. La opción de baja potencia es, por tanto, más adecuada en aplicaciones de

poco ruido donde la conservación de energía es una consideración de diseño importante.

3.4.13.3.3. Consideraciones Del Layout Del Oscilador Timer1El circuito del oscilador Timer1 crea una energía muy pequeña durante su

operación. Debido a la naturaleza de baja potencia del oscilador, puede provocarseinterferencias rápidamente. El circuito del oscilador debe localizarse lo más cercano

posible al microcontrolador. No puede haber circuitos que pasen por dentro de loslímites del oscilador del circuito con excepción de VSS o de VDD.

Si hay que poner un circuito de alta velocidad cerca del oscilador (por ejemplo el pin CCP1, o el oscilador primario usando el pino OSC2), hay que poner un anillo de puesta a tierra protector alrededor del circuito del oscilador; puede ser útil cuando estáutilizado en PWB de una cara o además de un plano de tierra.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 212/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

210

FIGURA 13-4: Circuito Del Oscilador De Puesta A Tierra

Nota: No está dibujado a escala.

3.4.13.4. Interrupción Timer1

El par de registros TMR1 (TMR1H:TMR1L) incrementan de 0000h a FFFFh yvuelve a 0000h. La interrupción Timer1, si está permitida, se genera en eldesbordamiento que activa el flag de la interrupción, TMR1IF (PIR1<0>). Estainterrupción se puede permitir o inhabilitar activando o borrando el bit, TMR1IE(PIE1<0>).

3.4.13.5. Reset Del Timer1 Usando El Disparador Especial Del Acontecimiento CCP

Si cualquiera de los módulos CCP se configuran como un modo de comparación para generar un disparo especial (CCP1M3:CCP1M0 o CCP2M3:CCP2M0 = 1011),esta señal reseteará el Timer1. El disparo de CCP2 también comenzar una conversiónA/D, si es el módulo A/D está permitido.

El módulo se debe configurar como un temporizador o un contador síncrono para aprovechar esta característica. Cuando se está utilizando de esta manera, el par deregistros CCPRH:CCPRL se convierten en un registro del período del Timer1.

Si Timer1 está funcionando en modo contador asíncrono, esta operación de reset puede que no funcione.

En caso que al escribir el Timer1 coincida con un evento de disparo especial, laoperación de escritura tomará precedencia.

Nota: Los acontecimientos de disparo especiales del módulo CCP2 no activaránel flag de interrupción TMR1IF (PIR1<0>).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 213/651

GUILLERMO DAVID HERRERO GONZÁLEZ

211

3.4.13.6. Usar Timer1 como Reloj De Tiempo Real (RTC)

Añadiendo un oscilador externo al Timer1 da a los usuarios la opción de incluir aplicaciones en tiempo real. Esto se logra con un cristal de reloj para proporcionar unafrecuencia exacta de base y varias líneas de código de la aplicación para calcular eltiempo. Al funcionar en modo sleep y con batería o súper condensador como fuente deenergía, puede eliminar la necesidad de un RTC separado y una batería de reserva.

La rutina del código, RTCisr, demuestra un método simple para incrementar uncontador en intervalos de un segundo usando una rutina de interrupción. Incrementandoel par de registros TMR1 para desbordarlo y provocar la llamada de la interrupción, queincrementa el segundo contador en uno. Los contadores adicionales para minutos yhoras se incrementan al desbordar el contador anterior.

Puesto que el par del registro es de 16 bits de ancho, contando hasta que sedesborde el registro directamente con un reloj de 32,768kHz tardaría 2s. Para forzar eldesbordamiento en intervalos de un segundo, es necesario cargar el temporizador. Elmétodo más simple es fijar el MSb TMR1H con una instrucción BSF. Observar que elregistro TMR1L nunca se carga o se altera; el hacerlo, puede introducir un error acumulativo sobre muchos ciclos.

Para que este método sea exacto, el Timer1 debe funcionar en modo asíncrono yla interrupción del desbordamiento Timer1 debe estar permitida (PIE1<0>=1) según lasindicaciones de rutina, RTCinit. El oscilador Timer1 tiene que estar permitido yfuncionando siempre.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 214/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

212

EJEMPLO 13-1: Poner Un Reloj En Ejecución En Tiempo Real Usando La Interrupción Timer1

RTCinitMOVLW 80h ;Carga del par de registros TMR1 MOVWF TMR1H ;para desbordamiento en 1 segundo

CLRF TMR1LMOVLW b'00001111' ;Configurar el reloj externo,

MOVWF T1OSC ;Operación asíncrono, oscilador externo

CLRF Secs ;Inicializar los registros para la puntualidad

CLRF minsMOVLW d'12'MOVWF hours

BSF PIE1,TMR1IE ;Permitir la interrupción Timer1

RETURNRTCisr

BSF TMR1H,7 ;Carga para desbordamiento de 1s BCF PIR1,TMR1IF ;Flag de interrupción borrado

INCF secs,F ;Incremento de segundos

MOVLW d'59' ;¿Transcurrieron 60 segundos? CPFSGT secsRETURN ;No

CLRF secs ;Si, Borrar segundos

INCF mins,F ;Incremento minutos

MOVLW d' 59' ;¿Transcurrieron 60 minutos? CPFSGT minsRETURN ;No

CLRF mins ;Si, borrado de minutos

INCF hours,F ;Incremento de horas

MOVLW d' 23' ;¿Transcurrieron 24 horas?

CPFSGT hoursRETURN ;No

MOVLW d' 01' ;Si, Reset de las horas a 1

MOVWF hoursRETURN ;Hecho

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 215/651

GUILLERMO DAVID HERRERO GONZÁLEZ

213

TABLA 13-2: Registros Asociados Al Timer1 Como Temporizador/Contador

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

PIR1 SPPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIE1 SPPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR1 SPPIP(1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

TMR1L Timer1 Register Low Byte

TMR1H Timer1 Register High Byte

T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC* TMR1CS TMR1ON

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con Timer0.

Nota 1: Estos bits no están implementados en los dispositivos de 28pines;mantenerlos siempre borrados.

3.4.14. MÓDULO TIMER2

El temporizador Timer2 incorpora las siguientes características:

Ê Registros temporizador y período de 8bit (TMR2 y PR2,respectivamente)Ê Legible y escribible (ambos registros)Ê Prescaler programable por software (1: 1, 1:4 y 1:16)Ê Postscaler programable por software (1: 1 a 1:16)Ê Interrupción en TMR2 unida al PR2Ê Uso opcional como reloj del cambio para el módulo MSSP

El módulo se controla a través del registro T2CON que permite o inhabilita eltemporizador y configura el prescaler y el postscaler. El Timer2 se puede apagar

borrando el bit de control, TMR2ON (T2CON<2>), para reducir al mínimo el consumo

de energía.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 216/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

214

FIGURA 14-1: Diagrama De Bloques Del Timer2

3.4.14.1. Operaciones Del Timer2

En una operación normal, TMR2 se incrementa de 00h en cada pulso del reloj(FOSC/4). Un contador/prescaler de 2bits en la entrada de reloj da la entrada directa, conlas opciones de prescaler divisor por 4 y divisor por 16. Éstos se eligen con los bits,T2CKPS1:T2CKPS0 (T2CON<1:0>). El valor de TMR2 se compara al del registro del

período, PR2, en cada ciclo de reloj. Cuando los dos valores son iguales, el comparador genera una señal de sincronismo como temporizador de salida. Esta señal tambiénresetea el valor de TMR2 a 00h en el ciclo siguiente y controla el contador/postscaler desalida.

Los registros TMR2 y PR2 son directamente legibles y escribibles. El registroTMR2 se borra en cualquier reset del dispositivo, mientras que el registro PR2 seinicializa en FFh. Los contadores del prescaler y del postscaler se borran con lossiguientes acontecimientos:

Ê Al escribir en el registro TMR2Ê Al escribir en el registro T2CONÊ Cualquier reset del dispositivo

El TMR2 no se borra cuando se escribe el T2CON.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 217/651

GUILLERMO DAVID HERRERO GONZÁLEZ

215

REGISTRO 14-1: T2CON: Registro De Control Timer2

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0

U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 6-3 T2OUTPS3:T2OUTPS0: Bits selectores del Postscaler de la salida0000 = 1:1 Postscaler 0001 = 1:2 Postscaler

···

1111 = 1:16 Postscaler BIT 2 TMR2ON: Bit de activación del Timer2

1 = Timer2 está encendido0 = Timer2 está apagado

BIT 1-0 T2CKPS1:T2CKPS0: Bits selectores del Prescaler del reloj00 = Prescaler de 101 = Prescaler de 41x = Prescaler de 16

3.4.14.2. Interrupción Timer2

Timer2 puede generar una interrupción opcional en el dispositivo. La señal desalida Timer2 (TMR2 unida con PR2) proporciona la entrada para elcontador/postscaler de salida de 4 bits. Este contador genera el flag de interrupción delTMR2 que está en TMR2IF (PIR1<1>). La interrupción se permite activando el bit de lainterrupción, TMR2IE (PIE1<1>). Una gama de 16 postscaler (de 1:1 a 1:16 inclusivo)

puede seleccionarse con los bits de control, T2OUTPS3:T2OUTPS0 (T2CON<6:3>).

3.4.14.3. Salida Del TMR2

La salida sin escala del TMR2 está disponible sobre todo para los módulos deCCP, donde se utiliza como base de tiempos de operaciones en modo PWM.

El Timer2 se puede utilizar opcionalmente como fuente del reloj para el móduloMSSP que funciona en modo SPI.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 218/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

216

TABLA 14-1: Los Registros Asociados Al Timer2 trabajando ComoTemporizador/Contador

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

PIR1 SPPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIE1 SPPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR1 SPPIP(1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

TMR2 Timer2 Register

T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0

PR2 Timer2 Period Register

Leyenda: - = no implementado, se lee como ‘0’. Las celdas sombreadas no lasutiliza por módulo Timer2.

Nota 1: Estos bits no están implementados en los dispositivos de 28pines;mantenerlos siempre borrados.

3.4.15. MÓDULO TIMER3

El módulo Timer3 temporizador/contador incorpora las siguientescaracterísticas:

Ê Temporizador de 16bits o contador seleccionable por softwareÊ Registros legibles y escribibles de 8bits (TMR3H y TMR3L)Ê Fuente seleccionable de reloj (interna o externa) con opciones internas

del reloj o del oscilador Timer1Ê Interrupción del dispositivo al desbordarseÊ El módulo de reset en un disparo especial del CCP

El módulo Timer3 es controlado con el registro T3CON. También selecciona lafuente del reloj opciones para los módulos de CCP.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 219/651

GUILLERMO DAVID HERRERO GONZÁLEZ

217

REGISTRO 15-1: T3CON: Registro De Control Del Timer3

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC* TMR3CS TMR3ON

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 RD16: Bit de permiso del modo de lectura/escritura de 16Bits1 = permite la lectura/escritura del Timer3 en una

operación de 16 bits0 = permite la lectura/escritura del Timer3 en dos

operaciones de 8 bitsBIT 6,3 T3CCP2:T3CCP1: Bits de permiso del Timer3 y Timer1 al CCPx

1x = Timer3 es la fuente del reloj para los módulos CCP01 = Timer3 es la fuente del reloj para CCP2; y el

Timer1 para CCP100 = Timer1 es la fuente del reloj para ambos CCP

BIT 5-4 T3CKPS1:T3CKPS0: Bits selectores del Prescaler del reloj de entrada11 = Prescaler de 1:810 = Prescaler de 1:401 = Prescaler de 1:200 = Prescaler de 1:1

BIT 2 T3SYNC*: Bit de control de la sincronización del reloj externo(No se puede usar cuando el reloj del dispositivoes Timer1/Timer3.)Cuando TMR3CS = 1:

1 = no sincroniza la entrada de reloj externa0 = sincroniza la entrada de reloj externa

Cuando TMR3CS = 0:Se ignora este bit. Timer3 utiliza el reloj.

BIT 1 TMR3CS: Bit selector de la fuente de reloj del Timer31 = entrada de reloj externa del oscilador Timer1 o de

T13CKI (en el flanco de subida)0 = reloj interno (FOSC/4)

BIT 0 TMR3ON: Bit de encendido del Timer31 = permite Timer30 = parado Timer3

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 220/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

218

3.4.15.1. Operaciones Del Timer3

El Timer3 puede funcionar en uno de estos modos:Ê Temporizador Ê Contador síncronoÊ Contador asincrónico

El modo de funcionamiento se determina con el bit, TMR3CS (T3CON<1>).Cuando TMR3CS está borrado (=0), el Timer3 incrementa en cada instrucción internaciclo (FOSC/4). Cuando se activa el bit, los incrementos de Timer3 en cada flanco desubida de la entrada de reloj externa Timer1 o el oscilador Timer1, si está permitido.

Como el Timer1, los pines RC1/T1OSI/UOE RC0/T1OSO/T13CKI seconvierten en entradas cuando el oscilador Timer1 se permite. Esto significa se ignoran

los valores de TRISC<1:0> y los pines se leen ‘0’.

FIGURA 15-1: Diagrama De Bloques Del Timer3

Nota 1: Cuando el bit de permiso, T1OSCEN, se borra, el inversor y laresistencia de regeneración se apagan para eliminar la energía de drenaje.

3.4.15.2. Modo De Lectura/Grabación De 16bit

Timer3 se puede configurar para que lea y escriba 16bits. Cuando el bit RD16(T3CON<7>) se activa, la dirección del TMR3H se mapea con un registro de

almacenamiento intermedio con el byte alto de Timer3. Al leer TMR3L cargará elcontenido del byte alto de Timer3 en el byte alto del registro de almacenamientointermedio. Esto proporciona al usuario la capacidad de leer los 16 bits sin tener quedeterminar si es el byte alto, seguido por el byte bajo, las lecturas redundantes provocanque sea inválido.

Al escribir el byte alto del Timer3 debe pasar a través del registro dealmacenamiento intermedio de TMR3H. El byte alto del Timer3 se actualiza con elcontenido de TMR3H cuando se escribe el TMR3L. Esto permite que el usuario escribalos 16 bits a los bytes altos y bajos de Timer3 inmediatamente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 221/651

GUILLERMO DAVID HERRERO GONZÁLEZ

219

No se puede leer o escribir el byte alto de Timer3 directamente en este modo.Toda lectura y escritura debe hacerse a través del registro de almacenamiento

intermedio. Al escribir el TMR3H no se borra el prescaler del Timer3. El prescaler se borra solamente escribiendo el TMR3L.

FIGURA 15-2: Diagrama Del Timer3 (Modo De Lectura/Escritura De 16-Bit)

Nota 1: Cuando el bit de permiso, T1OSCEN, se borra, el inversor y laresistencia de regeneración se apagan para eliminar la energía de drenaje.

3.4.15.3. Usar El Oscilador Timer1 como Fuente De Reloj Timer3

El oscilador interno Timer1 se puede utilizar como el reloj fuente del Timer3. Eloscilador Timer1 se activa seteando el bit T1OSCEN (T1CON<3>). Para utilizarlocomo fuente de reloj del Timer3, el bit TMR3CS debe estar activado. Esto configura elTimer3 para que incremente en cada flanco de subida de la fuente del oscilador.

3.4.15.4. Interrupción Timer3El par de registros TMR3 (TMR3H:TMR3L) incrementa de 0000h a FFFFh y se

desborda a 0000h. La interrupción Timer3, si está permitida, se genera en eldesbordamiento y activa en el flag de interrupción, TMR3IF (PIR2<1>). Estainterrupción puede permitirse o inhabilitarse activando o borrando el bit de interrupcióndel Timer3, TMR3IE (PIE2<1>).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 222/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

220

3.4.15.5. Reset Del Timer3 usando El Disparador Especial De Acontecimientos Del CCP

Si el módulo CCP2 se configura para generar el disparador especial deacontecimiento en el modo de comparación (CCP2M3:CCP2M0=1011), esta señalreseteará el Timer3. También comenzará una conversión A/D si el módulo A/D estáactivado.

El módulo se debe configurar como temporizador o contador síncrono paraaprovecharse de esta característica. Cuando se está utilizando este modo, el par deregistros CCPR2H:CCPR2L se convierten en un registro de período del Timer3.

Si Timer3 está funcionando en modo contador asíncrono, el reset puede que nofuncione.

En caso que coincida una escritura en el Timer3 con el disparo especial de unmódulo de CCP, la escritura tiene preferencia.

Nota: Los acontecimientos de disparo especiales del módulo CCP2 no activaránel flag TMR3IF (PIR2<1>).

TABLA 15-1: Los Registros Asociados Al Timer3 Trabajando ComoTemporizador/Contador

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

TMR3L Timer3 Register Low Byte

TMR3H Timer3 Register High Byte

T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC* TMR1CS TMR1ON

T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC* TMR3CS TMR3ON

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con Timer3.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 223/651

GUILLERMO DAVID HERRERO GONZÁLEZ

221

3.4.16. MÓDULOS CAPTURA /COMPARACIÓN /PWM (CCP)

Los dispositivos PIC18F2455/2550/4455/4550 tienen dos módulos CCP(Captura/Comparación/PWM). Cada módulo contiene un registro de 16 bits, que puedefuncionar como registro de captura de 16bit, registro de comparación de 16bit o unregistro PWM maestro/esclavo.

En dispositivos de 28pines, los dos módulos estándares CCP (CCP1 y CCP2)funcionan según lo descrito en este capítulo. En los dispositivos 40/44pines, CCP1 seimplementa como módulo CCP mejorado, con los modos de captura y comparaciónestándar y PWM mejorado.

Las operaciones captura y comparación descritas en este capítulo se aplican a losmódulos CCP estándares y al mejorado.

REGISTRO 16-1: CCPxCON: Registro De Control Estándar De CCPx

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0

U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 5-4 DCxB1:DCxB0: Bit 1 y 0 del Duty Cicle PWM del módulo CCPxModo de captura: No utilizado.Modo comparación: No utilizado.

Modo PWM:Estos bits son los dos LSbs (bit 1 y 0 bit) delos10bits del PWM. Los ocho MSbs seencuentran en CCPR1L.

BIT 3-0 CCPxM3:CCPxM0: Bits selectores del modo del módulo CCPx0000= CCPX inhabilitado (CCPx en los resets)0001= reservado0010= modo comparación: salida activa al igualarse

(se activa el bit CCPxIF)0011= reservado0100= Modo captura: cada flanco de bajada0101= Modo captura: cada flanco de subida0110= Modo captura: cada 4º flanco de subida0111= Modo captura: cada 16º flanco de subida1000= modo comparación: inicializa el pin bajo de

CCPx; al igualar, se fuerza el pin alto de CCPx(Se activa el bit CCPxIF)

1001= modo comparación: inicializa el pin alto deCCPx; al igualar, se fuerza el pin bajo de CCPx(Se activa el bit CCPxIF)

1010= modo comparación: genera interrupción por

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 224/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

222

software al igualar (se activa el bit CCPxIF, el pinCCPx refleja el estado de la entrada-salida)

1011= modo comparación: accionar elacontecimiento especial, resetea el contador detiempo, comienza la conversión A/D al igualar CCP2 (Se activa el bit de CCPxIF)

11xx = modo PWM

3.4.16.1. Configuración Del Módulo CCP

A cada módulo Captura/Comparación/PWM se le asocia un registro de control(genéricamente, CCPxCON) y registro de datos (CCPRx). El registro de datos,alternadamente, abarca dos registros de 8bit: CCPRxL (byte bajo) y CCPRxH (byte

alto). Todos los registros son legibles y escribibles.3.4.16.1.1. Recursos De Los Módulos CCP Y Del Temporizador

Los módulos CCP utilizan los temporizadores 1, 2 ó 3, dependiendo del modoseleccionado. Timer1 y Timer3 están disponibles en los módulos de los modos captura ocomparación, mientras que Timer2 está disponible para los módulos en modo PWM.

La asignación de un temporizador particular a un módulo se determina con el bitde permiso del temporizador a CCP del registro T3CON. Ambos módulos puedenactivarse en cualquier momento y pueden compartir el mismo recurso del temporizador si se configuran para funcionar en el mismo modo (la captura/comparación o PWM) al

mismo tiempo. La captura no estará disponible con el Timer1 en modo asíncrono.TABLA 16-1: Recursos De Los Modos CPP Y Temporizador

Modo CCP/ECCP Recurso temporizador

Captura Timer1 o Timer3

Comparación Timer1 o Timer3

PWM Timer2

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 225/651

GUILLERMO DAVID HERRERO GONZÁLEZ

223

TABLA 16-2: Interacciones Entre CCP1 y CCP2 Para Los Recursos Del Temporizador

Modo CCP1 Modo CCP2 Interacción

Captura CapturaCada modulo puede usar TMR1 o TMR3 como base de tiempos. La base de tiempos puede

ser distinta para cada CCP.

Captura Comparación

CCP2 se puede configurar para resetear TMR1 o TMR3 en el disparo de un evento especial(dependiendo de la base de tiempos utilizada). Se pueden hacer conversiones A/D

automáticas en el disparo. Puede afectar a las operaciones de CCP1 si tienen la misma base detiempos.

Comparación CapturaCCP1 se configure para resetear TMR1 o TMR3 en el disparo de un evento especial

(dependiendo de la base de tiempos utilizada). Puede afectar a las operaciones de CCP2 sitienen la misma base de tiempos.

Comparación Comparación Cada modulo se puede configurar para que resetee la base de tiempos en un disparo de unevento especial. Se pueden utilizar las conversiones A/D automáticas en el CCP2. Puedehaber conflictos si los dos módulos usan la misma base de tiempos.

Captura PWM(1) Ninguno

Comparación PWM(1) Ninguno

PWM(1) Captura Ninguno

PWM(1) Comparación Ninguno

PWM(1) PWM Ambos PWMs tendrán la misma frecuencia y ratio de actualización (interrupción TMR2).

Nota 1: Incluye las operaciones PWM estándar y mejorado.

3.4.16.1.2. CCP2 Asignación De Pin

La asignación de pines para el CCP2 (la entrada de captura, salida decomparación y PWM) puede cambiar, basado en la configuración del dispositivo. El bitde configuración CCP2Mx determina qué pin CCP2 se multiplexa. Por defecto, estáasignado a RC1 (CCP2Mx=1). Si el bit de configuración se borra, CCP2 se multiplexacon RB3. Cambiar la asignación del CCP2 no cambia automáticamente los requisitosdel puerto del pin. Los usuarios deben verificar siempre que el registro TRIS seconfigura correctamente con la operación CCP2, sin importar donde se localiza.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 226/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

224

3.4.16.2. MODO CAPTURA

En el modo captura, el par de registros CCPRxH:CCPRxL capturan el valor de16bits del TMR1 o del TMR3 cuando ocurre un acontecimiento en el pincorrespondiente CCPx. Un acontecimiento se define como:

Ê cada flanco de bajadaÊ cada flanco de subidaÊ cada 4º flanco de subidaÊ cada 16º flanco de subida

El acontecimiento se selecciona con los bits de selección del modo,CCPxM3:CCPxM0 (CCPxCON<3:0>). Cuando se hace una captura, el flag de peticiónde la interrupción, CCPxIF, se activa; se debe borrar por software. Si ocurre otra captura

antes de que el valor en el registro CCPRx se lea, el valor anterior capturado sesobrescribe con el valor nuevo.

3.4.16.2.1. Configuración Del Pin CCP

En el modo captura, el pin apropiado CCPx debe configurarse como entradaactivando el bit correspondiente del TRIS.

Nota: Si se configura RB3/CCP2 o RC1/CCP2 como salida, al escribir en el puerto puede causar una condición de captura.

3.4.16.2.2. Selección De Modo Timer1/Timer3

Los temporizadores que se deben utilizar con la característica de captura(Timer1 y/o Timer3) deben funcionar en modo temporizador o modo contador síncrono.En el modo contador asíncrono, la captura no funcionará. El temporizador que se utilicecon cada módulo CCP se selecciona en el registro T3CON.

3.4.16.2.3. Interrupción Por Software

Cuando se cambia el modo captura, se puede generar una interrupción falsa decaptura. El usuario debe mantener el bit de permiso de interrupción CCPxIE borrado

para evitar falsas interrupciones. El flag de interrupción, CCPxIF, tiene que borrarsedespués de cualquier modo de funcionamiento.

3.4.16.2.4. CCP Prescaler

Hay cuatro ajustes del prescaler en el modo captura. Se especifican como partedel modo de funcionamiento seleccionado por los bits selectores del modo(CCPxM3:CCPxM0). Siempre que el módulo CCP se apague o el modo captura sedesactiva, el contador del prescaler se borra. Esto significa que cualquier reset borrará elcontador del prescaler.

El cambio de un prescaler de captura a otro puede generar una interrupción.También, el contador del prescaler no se borra, por lo tanto, la primera captura puedeser de un prescaler diferente a cero.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 227/651

GUILLERMO DAVID HERRERO GONZÁLEZ

225

EJEMPLO 16-1: Cambio Entre Prescalers De Captura (Mostrado CCP2)

CLRF CCP2CON ;Desconecta el CCP2

MOVLW NEW_CAPT_PS ;Carga el WREG con el valor del nuevo;prescaler y CCP encendido

MOVWF CCP2CON ;Carga CCP2CON con este valor

FIGURA 16-1: Diagrama De Bloques De Las Operaciones Del Modo Captura

3.4.16.3. Modo Comparación

En el modo comparación, el valor del registro CCPRx de 16 bits se comparaconstantemente con el valor del par de registros de TMR1 o de TMR3. Cuando seigualan, el pin de CCPx:

Ê Se pone en altoÊ Se pone en bajoÊ flip-flop (alto-a-bajo o bajo-a-alto)Ê sin cambiar (es decir, refleja el estado del latch de la E/S)

La acción del pin se basa en el valor del modo seleccionado con los bits(CCPxM3:CCPxM0). Al mismo tiempo, se fija el flag de interrupción, CCPxIF.

3.4.16.3.1. Tipo De Conexión CCP

El usuario debe configurar el pin CCPx como salida borrando el bit apropiadodel TRIS.

Nota: Borrar el registro CCP2CON forzará el latch de comparación de salida deRB3 o RC1 (dependiendo de la configuración del dispositivo) a nivel bajo por defecto.Éste no es el PORTB o el latch de E/S de PORTC.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 228/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

226

3.4.16.3.2. Selección De Modo Timer1/Timer3

Timer1 y/o Timer3 deben funcionar en modo temporizador, o modo contador síncrono, si el módulo CCP usa la característica de comparación. En modo contador asíncrono, no funciona la comparación.

3.4.16.3.3. Modo De Interrupción Por Software

Cuando se elige el modo de interrupción por software(CCPxM3:CCPxM0=1010), no varia el pin correspondiente al CCPx. Solamente segenera una interrupción CCP, si está permitida, y se activa el bit CCPxIE.

3.4.16.3.4. Disparador De Acontecimiento Especial

Ambos módulos CCP se equipan con un disparador de acontecimiento especial.Es una señal interna del hardware generada en el modo comparación para disparar acciones de otros módulos. El disparador de acontecimiento especial se activaseleccionando el modo del disparador de acontecimiento especial de comparación(CCPxM3:CCPxM0=1011).

Para cualquier módulo CCP, el disparador de acontecimiento especial resetea el par de registros del temporizador en cualquier recurso de temporizador asignado como base de tiempo. Esto permite que los registros CCPRx sirvan como un registro de período programable para cualquier temporizador.

El disparador de acontecimiento especial del CCP2 puede comenzar una

conversión A/D. Para hacer esto, el convertidor A/D tiene que estar activado. FIGURA 16-2: Diagrama De Bloques De Las Operaciones Del Módulo Comparación

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 229/651

GUILLERMO DAVID HERRERO GONZÁLEZ

227

TABLA 16-3: Registros Asociados A La Captura Y A La Comparación, Timer1 yTimer3

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

RCON IPEN SBOREN(1) — RI* TO* PD* POR* BOR*

PIR1 SPPIF(2) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIE1 SPPIE(2) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR1 SPPIP(2) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0

TRISC TRISC7 TRISC6 — — — TRISC2 TRISC1 TRISC0

TMR1L Timer1 Register Low Byte

TMR1H Timer1 Register High Byte

T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC* TMR1CS TMR1ON

TMR3H Timer3 Register High Byte

TMR3L Timer3 Register Low Byte

T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC* TMR3CS TMR3ON

CCPR1L Capture/Compare/PWM Register 1 Low Byte

CCPR1H Capture/Compare/PWM Register 1 High Byte

CCP1CON P1M1(2)

P1M0(2)

DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0

CCPR2L Capture/Compare/PWM Register 2 Low Byte

CCPR2H Capture/Compare/PWM Register 2 High Byte

CCP2CON — — DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con Captura/Comparación, Timer1 o Timer3.

Nota 1: El bit SBOREN sólo está disponible cuando BOREN<1:0>=01; enotro caso, se lee ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 230/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

228

2: Este bit no se implementa en los dispositivos de 28pines; mantenerlosiempre a ‘0’.

3.4.16.4. Modo PWM

En modo de modulación del ancho del pulso (PWM), el pin CCPx produce unasalida PWM de hasta 10bits de resolución. Como el pin CCP2 se multiplexa con elPORTB o el latch del PORTC, el bit apropiado de TRIS tiene que borrarse paraconfigurar el pin CCP2 como salida.

Nota: Borrar el registro CCP2CON forzará el latch de comparación de salida deRB3 o RC1 (dependiendo de la configuración del dispositivo) a nivel bajo por defecto.Éste no es el PORTB o el latch de E/S de PORTC.

Una salida PWM tiene un tiempo base (periodo) y un tiempo en el que la salida permanece en nivel alto (Duty cicle). La frecuencia del PWM es la inversa del periodo.

FIGURA 16-3: Diagrama De Bloques Simplificado Del PWM

Nota 1: el valor de 8bits de Timer2 se concatena con los 2bits del reloj interno Qo 2bits del prescaler, para crear los 10bit del tiempo base

FIGURA 16-4: Salida PWM

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 231/651

GUILLERMO DAVID HERRERO GONZÁLEZ

229

3.4.16.4.1. Periodo Del PWM

El periodo se especifica escribiendo el registro PR2. El periodo se calcula con lafórmula:

ECUACIÓN 16-1:

)2 _ _ _ _ (4]1)2[( _ TMRde presaler del Valor T PR PWM Periodo OSC •••+=

La frecuencia de PWM se define como 1/[período de PWM].

Cuando TMR2 es igual a PR2, ocurren los tres acontecimientos siguientes en elsiguiente ciclo de incremento:

Ê TMR2 se borraÊ Se activa el pin CCPx (excepción: si el duty cicle de PWM=0%, el pin

CCPx no se activa)Ê El duty cicle de PWM se asigna de CCPRxL a CCPRxH

Nota: Los postscalers Timer2 no se utilizan para calcular la frecuencia de PWM.El postscaler se podía utilizar para tener una frecuencia de salida diferente.

3.4.16.4.2. Duty Cicle PWM

El ciclo trabajo de PWM se especifica escribiendo en el registro CCPRxL y los bits CCPxCON<5:4>. Tiene una resolución de 10bits. El CCPRxL contiene los ochoMSbs y los bits CCPxCON<5:4> los dos LSbs. Este valor de 10bits se representa con

CCPRxL:CCPxCON<5:4>. La ecuación siguiente se utiliza para calcular el ciclo detrabajo:

ECUACIÓN 16-2:

)2 _ _ _ ()4:5:( _ _ TMR prescaler del Valor T CCPXCON CCPRXL PWM Cicle Duty OSC ••><=

CCPRxL y CCPxCON<5:4> se pueden escribir en cualquier momento, pero elvalor del duty cicle no se grabará en CCPRxH hasta después de que se igualen PR2 yTMR2 (es decir, se complete el período). En modo PWM, CCPRxH es un registroinalterable.

El registro CCPRxH y un latch interno de 2bits se utilizan como buffer doble del

ciclo de trabajo de PWM. El buffer doble es esencial en los problemas técnicos delPWM.

Cuando se igualan los 2bits del latch de TMR2 y CCPRxH, se concatenan conun reloj interno de 2bits Q o 2bits del prescaler de TMR2, el pin de CCPx se borra.

La máxima resolución de PWM (bits) para una frecuencia PWM dada se calculacon la ecuación:

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 232/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

230

ECUACIÓN 16-3:

bits F

F

PWM

OSC

)2log(

)log(M _máxima_PWResolución =

Nota: Si el valor del ciclo de trabajo de PWM es mayor que el periodo, el pinCCPx no se borrará.

TABLA 16-4: Ejemplo De Frecuencias Y Resoluciones A 40MHz

Frecuencia del PWM 2,44kHz 9,77kHz 39,06kHz 156,25kHz 312,50kHz 416,67kHz

Timer Prescaler (1, 4, 16) 16 4 1 1 1 1

PR2 Valor FFh FFh FFh 3Fh 1Fh 17h

Resolución máxima (bits) 10 10 10 8 7 6,58

3.4.16.4.3. PWM Auto-Apagado (CCP1 Solamente)

Las características del auto-apagado del PWM mejorado del módulo CCP estántambién disponibles en el CCP1 de los dispositivos de 28pines.

Las características del auto-apagado no están disponibles en el CCP2.

3.4.16.4.4. Configuración Del PWM

Hay que seguir los siguientes pasos para configurar el PWM:

a. Fijar el período de PWM escribiendo el registro PR2.b. Fijar el ciclo trabajo de PWM escribiendo el registro CCPRxL y los bits

CCPxCON<5:4>.c. Configurar el pin CCPx como salida borrando el bit del TRIS.d. Fijar el valor del prescaler TMR2, después permitir el Timer2

escribiendo el T2CON.e. Configurar el módulo CCPx para la operación PWM.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 233/651

GUILLERMO DAVID HERRERO GONZÁLEZ

231

TABLA 16-5: Registros Asociados Al PWM Y Al Timer2

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

RCON IPEN SBOREN(1) — RI* TO* PD* POR* BOR*

PIR1 SPPIF(2) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIE1 SPPIE(2) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR1 SPPIP(2) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0

TRISC TRISC7 TRISC6 — — — TRISC2 TRISC1 TRISC0

TMR2 Timer2 Register

PR2 Timer2 Period Register

T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0

CCPR1L Capture/Compare/PWM Register 1 Low Byte

CCPR1H Capture/Compare/PWM Register 1 High Byte

CCP1CON P1M1(2) P1M0(2) DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0

CCPR2L Capture/Compare/PWM Register 2 Low Byte

CCPR2H Capture/Compare/PWM Register 2 High Byte

CCP2CON — — DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0

ECCP1AS ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1(2) PSSBD0(2)

ECCP1DEL PRSEN PDC6(2) PDC5(2) PDC4(2) PDC3(2) PDC2(2) PDC1(2) PDC0(2)

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con PWM o Timer2.

Nota 1: El bit SBOREN sólo está disponible cuando BOREN<1:0>=01; enotro caso, se lee ‘0’.

2: Este bit no se implementa en los dispositivos de 28pines; mantenerlosiempre a ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 234/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

232

3.4.17. MÓDULO MEJORADO DE CAPTURA /COMPARACIÓN /PWM

(ECCP)Nota: El módulo de ECCP se implementa en los dispositivos de 40/44pines.

En los dispositivos PIC18F4455/4550, CCP1 se implementa como móduloestándar CCP con capacidades mejoradas de PWM. Incluyen la disposición para 2 ó 4canales de salida, la polaridad seleccionable por el usuario, el control de banda-muerta yla parada automática y el reinicio. La captura, comparación y las funciones de salidasimple de PWM del módulo ECCP son iguales al módulo estándar CCP.

El registro de control para el módulo mejorado diferencia de los registrosCCPxCON de los dispositivos PIC18F2255/2550 en que los dos bits más significativosestán implementados para controlar el PWM.

Además de la gama mejorada de los modos disponibles a través del registro deCCP1CON, el módulo ECCP tiene dos registros adicionales asociados a lascaracterísticas de las operaciones mejoradas y de la auto-parada de PWM. Son:

Ê ECCP1AS (configuración de la banda-muerta)

Ê ECCP1DEL (Configuración de la auto-parada)

3.4.17.1. Salidas Y Configuración Del ECCP

El módulo mejorado de CCP puede tener hasta cuatro salidas PWM,dependiendo del modo de funcionamiento seleccionado. Estas salidas, señaladas P1A aP1D, se multiplexan con los pines de entrada-salida de PORTC y PORTD. Las salidasactivas dependen del modo de funcionamiento del CCP seleccionado.

Para configurar los pines de entrada-salida como salidas PWM, se debeseleccionar el modo apropiado PWM activando los bits P1M1:P1M0 yCCP1M3:CCP1M0. Se tienen que activar los bits apropiados de TRISC y de TRISD

para configurarlos como salidas.

3.4.17.1.1. Recursos Del Temporizador Y Módulo ECCP

Como los módulos estándar CCP, el módulo ECCP puede utilizar lostemporizadores 1, 2 ó 3, dependiendo del modo seleccionado. Timer1 y Timer3 estándisponibles para los modos captura o comparación, mientras que Timer2 está disponible

para el modo PWM. Las interacciones entre el estándar y los módulos mejorados CCPson idénticas a las descritas para los módulos estándares CCP.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 235/651

GUILLERMO DAVID HERRERO GONZÁLEZ

233

REGISTRO 17-1: CCP1CON: Registro De Control Del ECCP

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

P1M1 P1M0 DC0B1 DC0B0 CCP0M3 CCP0M2 CCP0M1 CCP0M0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7-6 P1M1:P1M0: Bits de configuración del PWM mejoradoSi CCP1M3:CCP1M2=00, 01, 10:

xx= P1A se asigna como E/S deCaptura/Comparación; P1B, P1C, P1D puertosSi CCP1M3:CCP1M2=00, 01, 10:

00= Salida simple: P1A modula, el resto pines01= Salida Full-Bridge: P1D modula, P1A activa y

P1B y P1C inactivas10= Salida Half_Bridge: P1A y P1B modulan con

control de banda-muerta; P1C y P1D puertos11= Salida Full-Bridge inversa: P1B modula, P1C

activa y P1A y P1D inactivasBIT 5-4 DC1B1:DC1B0: Bit 1 y 0 del Duty Cicle PWM del módulo CCP1

Modo de captura: No utilizado.Modo comparación: No utilizado.Modo PWM:

Estos bits son los dos LSbs (bit 1 y 0 bit) delos10bits del PWM. Los ocho MSbs se

encuentran en CCPR1L.BIT 3-0 CCP1M3:CCP1M0: Bits selectores del modo del módulo CCP10000= CCPx inhabilitado (resetea ECCP)0001= reservado0010= modo comparación: salida activa al igualarse

(se activa el bit CCP1IF)0011= reservado0100= Modo captura: cada flanco de bajada0101= Modo de captura: cada flanco de subida0110= Modo de captura: cada 4º flanco de subida0111= Modo de captura: cada 16º flanco de subida1000= modo comparación: inicializa el pin bajo de

CCP1; al igualar, se fuerza el pin alto de CCP1(Se activa el bit CCP1IF)

1001= modo comparación: inicializa el pin alto deCCP1; al igualar, se fuerza el pin bajo de CCP1(Se activa el bit CCP1IF)

1010= modo comparación: genera interrupción por software al igualar (se activa el bit CCP1IF, el pinCCP1 refleja el estado de la entrada-salida)

1011= modo comparación: accionar elacontecimiento especial, resetea el contador detiempo, comenzar la conversión A/D al igualar CCP2 (Se activa el bit de CCP1IF)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 236/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

234

1100 = modo PWM: P1A, P1C activo-alto, P1B,P1D activo-alto

1101 = modo PWM: P1A, P1C activo-alto, P1B,P1D activo-bajo1110 = modo PWM: P1A, P1C activo-bajo, P1B,

P1D activo-alto1111 = modo PWM: P1A, P1C activo-bajo, P1B,

P1D activo-bajo

3.4.17.2. Modos Captura Y Comparación

Los modos captura y comparación, a excepción de la operación del disparador de acontecimiento especial, del módulo ECCP son idénticos a los del CCP.

3.4.17.2.1. Disparador De Acontecimiento EspecialLa salida del disparador del acontecimiento especial de ECCP resetea el par de

registros TMR1 o TMR3, dependiendo de cual es la fuente de tiempo seleccionada. Losregistros CCPR1H:CCPR1L permiten programar un periodo de 16bits fácilmente paraTimer1 o Timer3.

3.4.17.3. El Modo Estándar De PWM

Cuando está configurado en un solo modo de salida, el módulo ECCP funcionaigual que el módulo estándar CCP en modo PWM. Esto también se llama modo “CCPcompatible”.

TABLA 17-1: Asignación De Pines Para Varios ECCP1

Modo ECCP Configuración CCP1CON RC2 RD5 RD6 RD7

dispositivos PIC18F4455/4550

Compatible CCP 00xx 11xx CCP1 RD5/SPP5 RD6/SPP6 RD7/SPP7

Dual PWM 10xx 11xx P1A P1B RD6/SPP6 RD7/SPP7

Quad PWM x1xx 11xx P1A P1B P1C P1D

Leyenda: x = no ocurre. Las celdas sombreadas no se utilizan con ECCP.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 237/651

GUILLERMO DAVID HERRERO GONZÁLEZ

235

3.4.17.4. El Modo PWM Mejorado

El modo PWM mejorado proporciona opciones adicionales de salida PWM paraampliar las aplicaciones de control. El módulo es una versión compatible del móduloestándar CCP y ofrece hasta cuatro salidas, señaladas de P1A a P1D. Los usuarios

pueden seleccionar la polaridad de la señal (activo-alto o activo-bajo). El modo y la polaridad de la salida del módulo se configuran determinando los bits P1M1:P1M0 yCCP1M3:CCP1M0 del registro CCP1CON.

Todos los registros de control tienen un doble buffer y se cargan al principio deun nuevo ciclo de PWM (el límite del período cuando se resetea Timer2) para prevenir interferencias en las salidas. La excepción es el registro de retraso “banda-muerta”PWM, ECCP1DEL, que se carga en el límite del duty cicle o en el límite del período (elque llegue primero). Debido al buffer, el módulo espera hasta los resets asignados del

temporizador en vez de comenzar inmediatamente. Esto significa que las formas deonda de PWM mejorado no son exactamente las formas de onda estándares PWM, perose compensa con un ciclo completo de la instrucción (4TOSC).

Como antes, el usuario debe configurar manualmente los bits apropiados deTRIS como salida.

FIGURA 17-1: Diagrama De Bloques Simplificado Del Módulo PWM Mejorado

Nota 1: el valor de 8bits de Timer2 se concatena con los 2bits del reloj interno Qo 2bits del prescaler, para crear los 10bit del tiempo base.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 238/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

236

3.4.17.4.1. Periodo De PWM

El periodo se especifica escribiendo el registro PR2. El periodo se calcula con lafórmula:

ECUACIÓN 17-1:

)2 _ _ _ _ (]1)2[( _ TMRde presaler del Valor T PR PWM Periodo OSC ••+=

La frecuencia de PWM se define como 1/[período de PWM].

Cuando TMR2 es igual a PR2, ocurren los tres acontecimientos siguientes en elsiguiente ciclo de incremento:

Ê TMR2 se borraÊ Se activa el pin CCP1 (excepción: si el duty cicle de PWM=0%, el pin

CCP1 no se activa)Ê El duty cicle de PWM se asigna de CCPR1L a CCPR1H

Nota: Los postscalers Timer2 no se utilizan para calcular la frecuencia de PWM.El postscaler se podía utilizar para tener una frecuencia de salida diferente.

3.4.17.4.2. Duty Cicle PWM

El ciclo trabajo de PWM se especifica escribiendo en el registro CCPR1L y los bits CCP1CON<5:4>. Tiene una resolución de 10bits. El CCPR1L contiene los ocho

MSbs y los bits CCP1CON<5:4> los dos LSbs. Este valor de 10 bits se representa conCCPR1L:CCP1CON<5:4>. La ecuación siguiente se utiliza para calcular el ciclo detrabajo:

ECUACIÓN 17-2:

)2 _ _ _ ()4:51:1( _ _ TMR prescaler del Valor T CON CCP LCCPR PWM Cicle Duty OSC ••><=

CCPR1L y CCP1CON<5:4> se pueden escribir en cualquier momento, pero elvalor del duty cicle no se grabará en CCPR1H hasta después de que se igualen PR2 yTMR2 (es decir, se complete el período). En modo PWM, CCPR1H es un registroinalterable.

El registro CCPR1H y un latch interno de 2 bits se utilizan como buffer dobledel ciclo de trabajo de PWM. El buffer doble es esencial en los problemas técnicos delPWM. Cuando se igualan los 2bits del latch de TMR2 y CCPR1H, se concatenan conun reloj interno de 2 bits Q o 2 bits del prescaler de TMR2, el pin de CCP1 se borra.

La máxima resolución de PWM (bits) para una frecuencia PWM dada se calculacon la ecuación:

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 239/651

GUILLERMO DAVID HERRERO GONZÁLEZ

237

ECUACIÓN 17-3:

bits F

F

PWM máxima solición PWM

OSC

)2log(

)log( _ _ Re =

Nota: Si el valor del ciclo de trabajo de PWM es mayor que el periodo, el pinCCPx no se borrará.

TABLA 17-2: EJEMPLO DE FRECUENCIAS Y RESOLUCIONES A 40mhz

Frecuencia del PWM 2,44kHz 9,77kHz 39,06kHz 156,25kHz 312,50kHz 416,67kHz

Timer Prescaler (1, 4, 16) 16 4 1 1 1 1

PR2 Valor FFh FFh FFh 3Fh 1Fh 17h

Resolución máxima (bits) 10 10 10 8 7 6,58

3.4.17.4.3. Configuraciones De La Salida De PWM

Los bits P1M1:P1M0 del registro CCP1CON permiten una de cuatroconfiguraciones:

Ê Salida simpleÊ Salida half-bridge (medio-puente)Ê Salida full-bridge (puente-completo); modo directoÊ Salida full-bridge; modo inverso

FIGURA 17-2: Relaciones De La Salida PWM (Estado Activo-Alto)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 240/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

238

FIGURA 17-3: Relaciones De La Salida PWM (Estado Activo-Bajo)

3.4.17.4.4. El Modo Half-Bridge

En el modo de salida half-bridge, dos pines se utilizan como salidas paracontrolar cargas en dos sentidos. La señal de salida PWM sale por el pin P1A, mientrasque la señal de salida complementaria sale por el pin P1B. Este modo se puede utilizar

para aplicaciones de half-bridge, o en aplicaciones full-bridge donde cuatrointerruptores se modulan con dos señales PWM.

En modo de salida half-bridge, el retraso programable banda-muerta se puedeutilizar para prevenir los picos de corriente. El valor de los bits PDC6:PDC0 determinanel número de ciclos de la instrucción antes de que la salida se active. Si el valor esmayor que el ciclo de trabajo, la salida correspondiente no se activa durante el cicloentero.

Como las salidas P1A y P1B se multiplexan con los latch PORTC<2> yPORTD<5>, los bits TRISC<2> y TRISD<5> se tienen que borrar para configurar P1Ay P1B como salidas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 241/651

GUILLERMO DAVID HERRERO GONZÁLEZ

239

FIGURA 17-4: Salidas Del Half-Bridge

td= Retraso banda-muerta

Nota 1: En este momento el registro TMR2 es igual al registro PR2

2: Las salidas se muestran en activo-alto

FIGURA 17-5: Ejemplos De Los Modos De Aplicación Del Half-Bridge

3.4.17.4.5. Modo Full-Bridge

En la salida del modo Full-Bridge, los cuatro pines se utilizan como salidas; condos entradas activas a la vez. En el modo directo, el pin P1A está activo y el pin P1Dmodula. En el modo inverso, el pin P1C está activo y el pin P1B modula.

Las salidas P1A, P1B, P1C y P1D se multiplexan con los latchs de datosPORTC<2>, PORTD<5>, PORTD<6> y PORTD<7>. Los bits TRISC<2>, TRISD<5>,TRISD<6> y TRISD<7> deben borrarse para configurar los pines como salidas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 242/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

240

FIGURA 17-6: Salida Full-Bridge

Nota 1: En este momento el registro TMR2 es igual al registro PR2

2: Las salidas se muestran en activo-alto

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 243/651

GUILLERMO DAVID HERRERO GONZÁLEZ

241

FIGURA 17-7: Ejemplo De Aplicación Full-Bridge

Cambio De Dirección En El Modo Full-Bridge

En el modo Full-Bridge, el bit P1M1 del registro CCP1CON permite que elusuario controle la dirección directa/inversa. Cuando el firmware cambia este bit de

control de dirección, el módulo asumirá la nueva dirección en el siguiente ciclo PWM.Momentos antes del final del período actual de PWM, las salidas moduladas

(P1B y P1D) se ponen en estado inactivo, mientras que las salidas no moduladas (P1A yP1C) se cambian a la dirección opuesta. Esto ocurre en un intervalo del tiempo de(4TOSC*(valor de Timer2 Prescaler)) antes de que comience el próximo período dePWM. El prescaler del Timer2 será 1, 4 ó 16, dependiendo del valor de los bitsT2CKPS1:T2CKPS0 (T2CON<1:0>). Durante el intervalo del cambio de las salidas nomoduladas al principio del siguiente período, las salidas moduladas (P1B y P1D) siguenestando inactivas.

Observar que en el modo de salida Full-Bridge, el módulo ECCP no proporciona

ningún retraso “banda-muerta”. Generalmente, porque sólo modula una salida, y no senecesita el retraso. Sin embargo, hay una situación donde si se necesita. Esta situaciónocurre cuando las condiciones siguientes son verdaderas:

1. La dirección de la salida PWM cambia cuando el ciclo de trabajo de lasalida está cerca o es el 100%.

2. El momento del apagado, incluyendo el circuito del dispositivo y delconductor de energía, es mayor que el tiempo de encendido.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 244/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

242

Si hay que cambiar la dirección en una aplicación con el duty cicle alto, hay quecumplir una de estas condiciones:

1. Reducir el periodo de PWM antes de cambiar las direcciones.2. Utilizar conmutaciones más rápidas.

Pueden existir otras opciones para prevenir el pico de corriente.

FIGURA 17-8: Cambio De Dirección

Nota 1: el bit de dirección del registro de control CCP1 (CCP1CON<7>) seescribe en cualquier momento del ciclo PWM.

2: Cuando se cambian las direcciones, las señales P1A y P1C cambianantes del final del ciclo PWM en intervalos de 4TOSC, 16TOSC o 64TOSC, dependiendo

del valor del prescaler de Timer2. Las señales de modulación de P1B y P1D estáninactivas.

FIGURA 17-9: Cambio De Dirección Con Un Duty Cicle Cerca Del 100%

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 245/651

GUILLERMO DAVID HERRERO GONZÁLEZ

243

Nota 1: Todas las señales se muestran como activa-alto

2: tON es el retraso del cambio de QC

3: tOFF es el retraso del cambio de QD

3.4.17.4.6. Retraso Programable “Banda-Muerta”

Nota: El retraso programable “banda-muerta” no se implementa en losdispositivos de 28pin con los módulos CCP estándares.

En las aplicaciones Half-Bridge donde todos los conmutadores se modulan conla frecuencia de PWM, los conmutadores, normalmente, necesitan más tiempo paraapagarse. Si los conmutadores cambian al mismo tiempo (uno se activa y el otro seapaga), ambos pueden estar activos en un período de tiempo corto hasta que un

conmutador se apague. Durante este breve intervalo, puede haber un pico muy grandede corriente en ambos conmutadores, poniendo en cortocircuito la fuente del puente.Para evitar este pico destructivo, primero se apaga el conmutador activo y, después deun retraso, se activa el otro.

En el modo de salida Half-Bridge, existe un retraso digital programable “banda-muerta” para evitar los picos de los cambios. El retraso ocurre en la transición de laseñal del estado inactivo al estado activo. Los bits PDC6:PDC0 del registro ECCP1DELdeterminan el periodo del retraso en términos de ciclos de instrucción delmicrocontrolador (TCY o 4 TOSC). Estos bits no están disponibles en los dispositivos de28pines, pues el módulo estándar CCP no soporta la operación Half-Bridge.

REGISTRO 17-2: ECCP1 del: Registro Del Retraso “Banda-Muerta”

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

PRSEN PDC6(1) PDC5(1) PDC4(1) PDC3(1) PDC2(1) PDC1(1) PDC0(1)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 PRSEN: Bit de permiso de reinicio de PWM1 = sobre el auto-apagado, los bits ECCPASE se borran automáticamente cuando se ejecuta el

evento de apagado; el PWM reiniciaautomáticamente0 = sobre el auto-apagado, los ECCPASE se tienen

que borrar por software para reiniciar el PWMBIT 6-0 PDC6:PDC0: Bits de cuenta del retraso(1)

Tiempo de retraso, en ciclos FOSC/4 (4*TOSC), entrela programación y el tiempo actual de una señal dePWM de la transición a activo.

Nota 1: Reservado en los dispositivos de 28pines; mantener estos bits borrados.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 246/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

244

3.4.17.4.7. PWM Mejorado Auto-Apagado

Cuando se programa ECCP con un modo PWM mejorado, los pines activos desalida se pueden configurar para un auto-apagado. El auto-apagado colocainmediatamente los pines de salida del PWM mejorados en un estado definido deapagado cuando ocurre un acontecimiento de apagado.

Un acontecimiento de apagado se puede provocar con los módulos delcomparador, con un nivel bajo en el pin RB0/AN12/INT0/FLT0/SDI/SDA, o decualquier combinación de estas tres fuentes. Los comparadores se pueden utilizar parasupervisar una entrada de tensión proporcional a una corriente supervisada por elcircuito del puente. Si la tensión excede un umbral, el comparador cambia de estado yacciona un apagado. Alternativamente, una señal numérica en el pin INT0 puede

provocar un apagado. La característica del auto-apagado se puede inhabilitar al no

seleccionar ninguna fuente de auto-apagado. Las fuentes de auto-apagado que seutilizarán se seleccionan usando los bits ECCPAS2:ECCPAS0 (bits<6:4> del registroECCP1AS).

Cuando ocurre un apagado, los pines de salida se colocan asíncronamente en suestado de apagado, especificados por los bits PSSAC1:PSSAC0 y PSSBD1:PSSBD0(ECCP1AS3:ECCP1AS0). Cada pareja de pines (P1A/P1C y P1B/P1D) se puedeactivar para conducir en alto, conducir en bajo o un tercer estado (no conduce).

El bit ECCPASE (ECCP1AS<7>) también se activa para llevar a cabo lassalidas mejoradas de PWM a sus estados de parada.

El bit ECCPASE se activa por hardware cuando ocurre un acontecimiento de parada. Si el reinicio automático no está activo, el bit ECCPASE lo borra el firmwarecuando cesa la causa de apagado. Si el reinicio automático está activo, el bit ECCPASEse borra automáticamente cuando cesa la causa de apagado.

Si se activa el bit ECCPASE cuando comienza un periodo de PWM, las salidasdel PWM siguen estando en su estado de apagado durante el periodo entero de PWM.Cuando el bit ECCPASE está borrado, las salidas del PWM volverán al funcionamientonormal al principio del periodo siguiente de PWM.

Nota: El escribir el bit ECCPASE se desactiva cuando una condición deapagado está activa.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 247/651

GUILLERMO DAVID HERRERO GONZÁLEZ

245

REGISTRO 17-3: ECCP1AS: Registro De Control Del Auto-Apagado Del ECCP Mejorado

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1(1) PSSBD0(1)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 ECCPASE: Bit de estado del evento auto-apagado del ECCP1= A ocurrido un acontecimiento de apagado; las

salidas del ECCP están en estado de apagado0= las salidas del ECCP están funcionando

BIT 6-4 ECCPAS2:ECCPAS0: Bits selectores de la fuente del

Auto-apagado del ECCP111= FLT0 o comparador 1 o comparador 2110= FLT0 o comparador 2101= FLT0 o comparador 1100= FLT0011= cualquier comparador 1 ó 2010= salida del comparador 2001= salida del comparador 1000= Auto-apagado desactivado

BIT 3-2 PSSAC1:PSSAC0: Bits de control del estado de los pines A y C en unapagado

1x= los pines A y C en un tercer estado01= los pines A y C a ‘1’00= los pines A y C a ‘0’

BIT 1-0 PSSBD1:PSSBD0: Bits de control del estado de los pines B y D en unapagado(1)

1x= pin B y D tercer estado01= los pines B y D a ‘1’00= los pines B y D a ‘0’

Nota 1: Reservado en los dispositivos de 28pines; mantener estos bits borrados.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 248/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

246

El Auto-Apagado Y El Auto-Reinicio

La característica del auto-apagado se puede configurar para permitir el reinicioautomático del módulo después de un acontecimiento de apagado. Esto se permiteactivando el bit PRSEN del registro ECCP1DEL (ECCP1DEL<7>).

En modo del apagado con PRSEN=1, el bit ECCPASE seguirá activo mientrascontinúe la causa de apagado. Cuando la condición de apagado desaparece, el bitECCP1ASE se borra. Si PRSEN=0, cuando ocurre la condición de parada, el bitECCPASE sigue activo hasta que se borra por firmware. Cuando ECCPASE se borra, elPWM mejorado parará al principio del siguiente periodo PWM.

Nota: El escribir el bit ECCPASE se desactiva cuando la condición de apagadoesté activa.

Independientemente del ajuste del bit PRSEN, si la fuente del auto-apagado esuno de los comparadores, la condición de la parada es un nivel. El bit ECCPASE no

puede borrarse mientras dure la causa del apagado.

El modo auto-apagado puede forzarse escribiendo un ‘1’ en el bit ECCPASE.

FIGURA 17-10: Auto-Apagado (PRSEN=1, Auto-Reinicio Activo)

FIGURA 17-11: Auto-Apagado (PRSEN=0, Auto-Reinicio Desactivado)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 249/651

GUILLERMO DAVID HERRERO GONZÁLEZ

247

3.4.17.4.8. Consideraciones De Reinicio

Cuando el módulo ECCP se utiliza en el modo PWM, el hardware de laaplicación debe utilizar las resistencias apropiadas pull-up y/o pull-down en los pines desalida del PWM. Cuando el microcontrolador se reinicia, todos los pines de E/S están enel estado de alta impedancia. Los circuitos externos deben mantener los componentes de

potencia apagados hasta que el microcontrolador conduzca los pines de E/S con losniveles apropiados de señal o activar las salidas del PWM.

Los bits CCP1M1:CCP1M0 (CCP1CON<1:0>) permiten que el usuario elija silas señales de salida de PWM sean activa-alto o activa-bajo para cada par de pines desalida (P1A/P1C y P1B/P1D). Las polaridades de la salida de PWM deben seleccionarseantes de que los pines de PWM se configuren como salidas. Cambiar la configuraciónde la polaridad mientras que los pines de PWM están como salidas no se recomiendan,

puesto que puede dar lugar a daño a los circuitos de la aplicación.Los latch de salida P1A, P1B, P1C y P1D pueden no estar en el estado

apropiados al iniciarse el módulo PWM. Activar los pines del PWM como salida almismo tiempo que el módulo ECCP puede causar daño al circuito de la aplicación. Elmódulo ECCP debe permitirse en el modo de salida apropiado y terminar un ciclocompleto antes de configurar los pines como salidas. El final de un ciclo completo seindica con el bit TMR2IF que permanece activo cuando el segundo periodo comienza.

3.4.17.4.9. Pasos Para Configurar El PWM

Hay que tomar los siguientes pasos para configurar el módulo ECCP en el modoPWM:

1. Configurar los pines de PWM, P1A y P1B (y P1C y P1D, si se utilizan),como entradas activando los bits correspondientes de TRIS.

2. Fijar el período de PWM cargando el registro PR2.3. Si se requiere el Auto-apagado:

9 Inhabilita el Auto-apagado (ECCPASE = 0)9 Configurar la fuente (FLT0, comparador 1 o comparador 2)9 Esperar una condición de no apagado

4. Configurar el módulo ECCP con el modo PWM deseado y configurar elregistro CCP1CON cargando los valores apropiados:

9 Seleccionar una de las configuraciones y de las direccionesdisponibles de salida con los bits P1M1:P1M0.

9 Seleccionar las polaridades de las señales de salida de PWM conlos bits CCP1M3:CCP1M0.

5. Fijar el ciclo de trabajo de PWM cargando el registro CCPR1L y los bitsCCP1CON<5:4>.

6. Para el modo de salida Half-Bridge, fijar el retraso “banda-muerta”cargando el valor apropiado en ECCP1DEL<6:0>.

7. Si se necesita el auto-apagado, cargar el registro ECCP1AS:9 Seleccionar las fuentes del auto-apagado usando los bits

ECCPAS2:ECCPAS0.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 250/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

248

9 Selecciona los estados de parada de los pines de salida usando los bits PSSAC1:PSSAC0 y PSSBD1:PSSBD0.

9 Activar el bit ECCPASE (ECCP1AS<7>).9 Configurar los comparadores con el registro CMCON.9 Configurar las entradas del comparador como entradas

analógicas.8. Si se necesita el auto-reinicio, activar el bit PRSEN (ECCP1DEL<7>).9. Configurar y comenzar TMR2:

9 Borrar el flag de interrupción de TMR2 borrando el bit TMR2IF(PIR1<1>).

9 Determinar el valor del prescaler de TMR2 cargando los bitsT2CKPS (T2CON<1:0>).

9 Permitir el Timer2 activando el bit TMR2ON (T2CON<2>).

10. Permitir las salidas del PWM después de que un nuevo ciclo de PWMhaya comenzado:9 Esperar hasta que se desborda TMRn (bit TMRnIF permitido).9 Activar los pines de salidas CCP1/P1A, P1B, P1C y/o P1D

borrando los bits respectivos de TRIS.9 Borrar el bit ECCPASE (ECCP1AS<7>).

3.4.17.4.10. Operando En Los Modos De Ahorro De Energía

En el modo sleep, todas las fuentes del reloj están desactivadas. El Timer2 no seincrementará y el estado del módulo no cambiará. Si el pin de ECCP está conduciendo

un valor, continuará conduciendo ese valor. Cuando el dispositivo despierta, continuaráen este estado. Si se permiten el reinicio a dos velocidades, la frecuencia inicial dereinicio del INTOSC y del postscaler puede que no sean estables inmediatamente.

En el modo PRI_IDLE, el reloj primario continuará registrando el módulo ECCPsin cambios. En el resto de los modos de ahorro de energía, el reloj del ahorro deenergía seleccionado gobernará el Timer2. Los relojes de otros modos de ahorro deenergía tendrán una frecuencia diferente a la del reloj primario.

La Operación Con El Monitor De Reloj A Prueba De Fallos

Si el monitor de reloj a prueba de fallos está activo, un fallo del reloj forzará al

dispositivo al modo RC_RUN y el bit OSCFIF (PIR2<7>) se activará. Al ECCP locontrolará la fuente del oscilador interno de reloj, que puede tener diversas frecuenciasde reloj.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 251/651

GUILLERMO DAVID HERRERO GONZÁLEZ

249

3.4.17.4.11. Efectos De Un Reset

Los resets por aumento de energía y por resets sucesivos forzarán a los puertosal modo entrada y el CCP a su estado de reset.

Esto fuerza el módulo CCP mejorado a resetear a un estado compatible con elmódulo CCP estándar.

TABLA 17-3: Registros Asociados A Los Módulos ECCP, Timer1 y Timer3

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

RCON IPEN SBOREN(1) — RI* TO* PD* POR* BOR*

IPR1 SPPIP(2) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

PIR1 SPPIF(2)

ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IFPIE1 SPPIE(2) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0

TRISC TRISC7 TRISC6 — — — TRISC2 TRISC1 TRISC0

TRISD(2) TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0

TMR1L Timer1 Register Low Byte

TMR1H Timer1 Register High Byte

T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC* TMR1CS TMR1ON

TMR2 Timer2 Module Register

T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0

PR2 Timer2 Period Register

TMR3L Timer3 Register Low Byte

TMR3H Timer3 Register High Byte

T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC* TMR3CS TMR3ON

CCPR1L Capture/Compare/PWM Register 1 (LSB)

CCPR1H Capture/Compare/PWM Register 1 (MSB)

CCP1CON P1M1(2) P1M0(2) DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0ECCP1AS ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1(2) PSSBD0(2)

ECCP1DEL PRSEN PDC6(2) PDC5(2) PDC4(2) PDC3(2) PDC2(2) PDC1(2) PDC0(2)

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con ECCP.

Nota 1: El bit SBOREN sólo está disponible cuando BOREN<1:0>=01

2: Este bit no se implementa en los dispositivos de 28pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 252/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

250

3.4.18. BUS SERIE UNIVERSAL (USB)

3.4.18.1. Descripción Del Periférico USB

La familia de dispositivos PIC18FX455/X550 contiene una interfaz seriecompatible con el SIE (serial interface engine, máquina con comunicación serie) USB“full-speed” (2.0) y “de poca velocidad” (1.0) que permite la comunicación rápida entrecualquier dispositivo USB y el microcontrolador PIC®.

El SIE puede interconectarse directamente al USB, utilizando el transmisor-receptor interno, o puede conectarse a través un transmisor-receptor externo. El PICtiene un regulador interno de 3,3V para accionar el transmisor-receptor interno enaplicaciones de 5V.

Se han incluido algunas características especiales en el hardware para mejorar elfuncionamiento. Se proporciona memoria de puerto dual en la memoria de datos deldispositivo (RAM del USB) para tener acceso directo a la memoria desde el núcleo delmicrocontrolador y desde el SIE. También se proporcionan unos buffer para que el

programador elija libremente el final de la memoria dentro del espacio de la RAM delUSB. Existe un puerto paralelo para transmitir datos grandes, por ejemplo datos al

puerto paralelo, se ha proporcionado la ayuda de transferencia ininterrumpida devolúmenes de datos grandes, por ejemplo datos síncronos, a los buffer de memoriaexternos.

FIGURA 18-1: Periférico Y Opciones Del USB

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 253/651

GUILLERMO DAVID HERRERO GONZÁLEZ

251

Nota 1: Esta señal solo está disponible si el transmisor interno está desactivado(UTRDIS=1)

2: Las resistencias internas pull-up se tienen que desactivar (UPUEN=0)

3: No hay que activar el regulador interno cuando se utiliza una fuente de3,3V externa.

3.4.18.2. Estado Y Control Del USB

Las operaciones del módulo USB se configuran y controlan con tres registros.En total hay 22 registros para manejar las transacciones del USB. Los registros son:

Ê Registro de control del USB (UCON)Ê Registro de configuración del USB (UCFG)

Ê Registro de estado de la transferencia del USB (USTAT)Ê Registro de dirección de dispositivo USB (UADDR)Ê Registros del número del frame (UFRMH: UFRML)Ê Registros activadores de los Endpoints de 0 a 15 (UEPn)

3.4.18.2.1. Registro De Control Del USB (UCON)

El registro de control del USB UCON contiene los bits necesarios para dirigir elcomportamiento del módulo durante las transferencias. El registro contiene los bits quegobiernan lo siguiente:

Ê Permiso del periférico principal del USB

Ê Reset de los punteros tipo ping-pongÊ Control del modo al suspender Ê Desactivar la transferencia de paquetes

Además, el registro de control del USB contiene un bit de estado, SE0(UCON<5>), que se utiliza para indicar el estado del bus, si sólo se manda un cero.Cuando se permite el módulo USB, este bit debe supervisarse para determinar si laslíneas de datos han salido de una condición de single-ended cero (sólo se manda cero).Esto ayuda a distinguir el estado de ciclo inicial de la señal de reset del USB.

La operación total del módulo USB se controla con el bit USBEN (UCON<3>).Activar este bit setea el módulo y resetea todos los bits PPBI en el Buffer a ‘0’. Este bit

también activa el regulador de tensión del chip y conecta las resistencias pull-up, si se permiten. Así, este bit puede utilizarse como una unión/separación al USB. Aunque seignoran todos los estados y bits de control si este bit está borrado, el módulo necesita

preconfigurarse antes de activar este bit.

El bit PPBRST (UCON<6>) controla el estado del reset cuando se utiliza elmodo del Doble-Buffering (buffer ping-pong). Cuando se activa el bit PPBRST, todoslos buffers ping-pong se fijan a los buffers intermedios. El PPBRST tiene que borrarse

por firmware. Este bit se ignora en los modos de buffer que no usen el buffer ping-pong.

El bit PKTDIS (UCON<4>) es un flag que indica si el SIE ha inhabilitado latransmisión y la recepción de paquetes. Este lo bit activa el SIE cuando recibe un

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 254/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

252

SETUP para permitir su procesamiento. Este bit no lo puede activar elmicrocontrolador, sólo borrar; al despejarlo el SIE continua la transmisión y/o

recepción. Cualquier acontecimiento pendiente dentro de buffer intermedio todavíaestará disponible, indicado dentro del registro USTAT en el buffer FIFO.

El bit RESUME (UCON<2>) permite al periférico realizar un reinicioejecutando la señal resume. Para generar un reinicio válido, por firmware se debeactivar el RESUME durante 10ms y entonces borrar el bit.

El bit SUSPND (UCON<1>) coloca el módulo y soporte del circuito (es decir,regulador de tensión) en un modo de baja potencia. El reloj de entrada al SIE sedesactiva. Este bit debe activarse por software dentro de la respuesta a una interrupciónIDLEIF. Debe borrarse por firmware después de observar una interrupción ACTVIF.Cuando este bit está activo, sigue estando el dispositivo unido al bus pero las salidas del

transmisor-receptor permanecen en reposo. La tensión en el pin VUSB puede variar dependiendo del valor de este bit. Activar este bit antes de un IDLEIF dará lugar acomportamiento imprevisible del bus.

Nota: Cuando esté en el modo de suspensión, el bus del dispositivo USB selimita al 500µA de corriente. Ésta es la corriente completa cedida por el dispositivo PICy su circuito de soporte. Hay que tener cuidado de ceder la corriente mínima cuando eldispositivo entre en el modo de suspensión.

REGISTRO 18-1: UCON: Registro De Control Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- PPBRST SE0 PKTDIS USBEN RESUME SUSPND -

U-0 R/W-0 R-x R/C-0 R/W-0 R/W-0 R/W-0 U-0

BIT 6 PPBRST: Bit de protección contra el ping-pong de datos:1 = Reset todos los punteros del buffer ping-pong0 = Buffer ping-pong no se resetean

BIT 5 SE0: Flag de Single-Ended cero:1 = Single-ended cero activo en el bus USB0 = No se ha detectado single-ended

BIT 4 PKTDIS: Bit de inhabilitación de transferencias de paquetes:1 = SIE y procesamiento de paquetes desactivado, seactiva automáticamente cuando recibe un SETUP

0 = SIE y procesamiento de paquetes permitidoBIT 3 USBEN: Bit de permiso del módulo USB

1 = módulo USB y soporte del circuito activados(dispositivo unido)

0 = módulo USB y soporte del circuito desactivados(dispositivo separado)

BIT 2: RESUME: Bit de permiso de la señal RESUME1 = Señal RESUME activada

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 255/651

GUILLERMO DAVID HERRERO GONZÁLEZ

253

0 = Señal RESUME desactivadaBIT 1 SUSPND: Bit para suspender el USB

1 = módulo del USB y el soporte del circuito están enel modo de conservación de energía, reloj SIE inactivo

0 = módulo USB y el soporte del circuito estánoperando normalmente, reloj SIE controlado con elratio asignado

3.4.18.2.2. Registro De Configuración Del USB (UCFG)

Antes de comunicarse con el USB, se tiene que configurar el módulo delhardware interno y/o externo. La mayor parte de la configuración se realiza con elregistro UCFG. El regulador de tensión del USB se maneja con la configuración de los

registros.El registro UFCG contiene la mayor parte de los bits que dirigen el

comportamiento del módulo USB. Éstos incluyen:

Ê Velocidad del bus (“velocidad completa” contra “poca velocidad”)Ê Permiso de las resistencias pull-up del chipÊ Permiso del transmisor del chipÊ Uso del buffer ping-pong

El registro UCFG también contiene dos bits que ayudan a probar el módulo,eliminando errores y certificaciones del USB. La salida de control de estos bits permiteel monitor de estado y generación de patrones “de ojo”.

Nota: La velocidad del USB, la transmisión y las pull-up deben configurasesolamente durante la fase de activación del módulo. No se recomienda cambiar estosajustes mientras que el módulo esté funcionando.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 256/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

254

REGISTRO 18-2: UCFG: Registro De Configuración Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

UTEYE UOEMON(1) - UPUEN(2,3) UTRDIS(2) FSEN(2) PPB1 PPB0

R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 UTEYE: Bit de permiso del test patrón “de ojo” del USB1 = prueba del patrón “de ojo” permitido0 = prueba del patrón “de ojo” inhabilitado

BIT 6 UOEMON: Bit de permiso del monitor OE* del USB(1) 1 = señal del UOE* activa; indica los intervalos durante

los cuales las líneas D+/D- están conduciendo

0 = señales del UOE* inactivasBIT 4 UPUEN: Bit de permiso del pull-up del chip(2,3)

1 = Pull-up del chip permitido (pull-up en D+ conFSEN=1 o en D- con FSEN=0)

0 = Pull-up del chip desactivadoBIT 3 UTRDIS: Bit inhabilitador del transmisor del chip(2)

1 = Transmisor del chip inhabilitado; la interfaz digitaldel transmisor permitida

0 = transmisor del chip activoBIT 2 FSEN: Bit de permiso del Full-Speed(2)

1 = dispositivo Full-speed: controla los flancos deltransmisor; requiere un reloj de 48MHz

0 = dispositivo de poca velocidad: controla los flancosdel transmisor; requiere un reloj de 6MHz

BIT 1-0 PPB1:PPB0: Bits de configuración de los buffer ping-pong11 = buffers ping-pong permitidos en los End-Points

1 a 1510 = buffers ping-pong permitidos en todos los End-

Points01 = buffer ping-pong permitido en los End-Points

de salida 0

00 = buffers ping-pong inhabilitadosNota 1: Si se activa UTRDIS, la señal UOE* estará activa independiente del

ajuste del bit UOEMON.

2: Los bits UPUEN, UTRDIS y FSEN no deben cambiarse mientras el móduloUSB esté permitido. Estos valores se deben preconfigurar antes de permitir el módulo.

3: Este bit solamente es válido cuando el transmisor del chip está activo(UTRDIS = 0); si no, se ignora.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 257/651

GUILLERMO DAVID HERRERO GONZÁLEZ

255

Transmisor Interno

El periférico USB tiene, USB 2.0, full-speed y un transmisor de poca velocidad,internamente conectado al SIE. Esta característica es útil en aplicaciones baratas con unchip. El bit UTRDIS (UCFG<3>) controla el transmisor; está permitido por defecto(UTRDIS = 0). El bit FSEN (UCFG<2>) controla la velocidad del transmisor; activar el

bit permite las operaciones “full-speed”.

Las resistencias pull-up del chip del USB se controlan con el bit UPUEN(UCFG<4>). Pueden seleccionarse solamente cuando se permite el transmisor del chip.

Las especificaciones del USB requieren 3,3V en las comunicaciones; sinembargo, el resto del chip puede funcionar con una tensión más alta. Así, la fuente deenergía del transmisor es una fuente separada, VUSB.

Transmisor Externo

Este módulo proporciona ayuda para el uso de un transmisor fuera del chip. Eltransmisor externo se utiliza en aplicaciones donde las condiciones físicas dictan lalocalización del transmisor lejos del SIE. Por ejemplo, aplicaciones que requieren elaislamiento del USB podía utilizar un transmisor externo con algunos aislamientos en elSIE del microcontrolador. Las operaciones con un transmisor externo se permitenactivando el bit UTRDIS.

FIGURA 18-2: Transmisor Externo Con Aislamientos

Hay 6 señales en el módulo para comunicar y controlar un transmisor externo:

Ê VM: Entrada de la línea single-ended D-

Ê VP: Entrada de la línea single-ended D+Ê RCV: La entrada del receptor diferencialÊ VMO: Salida a la línea diferencial del conductor Ê VPO: Salida a la línea diferencial del conductor Ê UOE: Salida permitida

Las señales VPO y VMO son salidas del SIE al transmisor externo. La señal delRCV es la salida del transmisor externo al SIE; representa las señales diferenciales del

bus serie traducido en un tren de pulsos. Las señales VM y VP se utilizan para divulgar condiciones en el bus serie al SIE que no se puede capturar con la señal del RCV.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 258/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

256

La señal UOE* indica el estado del transmisor externo. A esta línea la pone ennivel bajo el dispositivo para activar las transmisiones de datos del SIE con un

dispositivo externo.

TABLA 18-1: Salidas Diferenciales Al Transmisor

VPO VMO Estado del bus

0 0 Single-Ended Cero

0 1 Diferencial ‘0’

1 0 Diferencial ‘1’

1 1 Condición Ilegal

TABLA 18-2: Entradas Single-Ended Del Transmisor

VP VM Estado del Bus

0 0 Single-Ended Cero

0 1 Baja velocidad

1 0 Toda velocidad

1 1 Error

Resistencias Internas Pull-Up

Los dispositivos PIC18FX455/X550 tienen unas resistencias pull-up internasdiseñadas para conocer los requerimientos del USB “baja velocidad” y “todavelocidad”. El bit UPUEN (UCFG<4>) activa las pull-up internas.

Resistencias Externas Pull-Up

Se pueden necesitar resistencias externas pull-up. El pin VUSB se puede utilizar para aumentar D+ o D-. La resistencia pull-up tiene que ser de 15k Ω.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 259/651

GUILLERMO DAVID HERRERO GONZÁLEZ

257

FIGURA 18-3: Circuito Externo

El diseño muestra una aplicación con USB “a toda velocidad” utilizando elregulador interno y una resistencia pull-up externa.

Permiso De La Salida Del Monitor Del USB

El monitor del USB OE* proporciona información de la operación del SIE siestá escuchando el bus o está conduciendo por el bus. Esto se permite por defecto alusar un transmisor externo o cuando UCFG<6>=1. La supervisión del USB OE* es útil

para el eliminar errores del sistema inicial.

Permiso Del Test Patrón “De Ojo”

Se genera una prueba automática al activar el bit UCFG<7> del patrón “de ojo”.La salida del patrón “de ojo” dependerá de los ajustes del módulo, significando que elusuario es el primer responsable de configurar los ajustes del reloj SIE, las resistencias

pull-up y el modo transmisor. Además, el módulo tiene que estar permitido.

Una vez que se active UTEYE, el módulo emula un cambio a una recepción paratransmitir el estado y comenzará a transmitir una secuencia de bits J-K-J-K (K-J-K-J en“velocidad completa”). La secuencia se repetirá indefinidamente mientras que el test

patrón “de ojo” esté permitido.

Observar que este bit no se debe activar mientras que el módulo está conectadocon un sistema real USB. Este modo de prueba se utiliza para ayudar con las

verificaciones internas de las pruebas de certificación USB. Se utiliza para depurar losfallos obtenidos por el ruido de las señales que pueden afectar los flancos del sistema,uniones de impedancias mal hechas y proximidad a otros componentes. No compruebacorrectamente la transición de un estado de recepción a uno de transmisión. Aunque el

patrón de ojo no significa que se sustituya la prueba más compleja de certificación delUSB, pero ayuda durante el primer test para eliminar errores del sistema.

Regulador Interno

Los dispositivos PIC18FX455/X550 tienen un regulador incorporado 3,3V para proporcionar energía al transmisor interno y proporcionar una fuente para el pull-up

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 260/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

258

interno y externo. Para que el regulador sea estable se necesita un condensador externode 220nF (±20%).

Nota: La corriente de VUSB es suficiente para controlar un pull-up externo y eltransmisor interno.

El regulador se activa por defecto y puede inhabilitarse a través del bit deconfiguración VREGEN. Cuando está activo, la tensión es visible en el pin V USB.Cuando el regulador está desactivado, se tiene que conectar una fuente de 3,3V al pinVUSB para alimentar el transmisor interno. Si el transmisor interno no se utiliza, VUSB tampoco se activa.

Nota 1: No permitir el regulador interno si el regulador externo está conectadoa VUSB.

2: VDD debe ser mayor que VUSB en cualquier momento, o igual con elregulador inhabilitado.

3.4.18.2.3. Registro De Estado Del USB (USTAT)

El registro de estado del USB divulga el estado de las transacciones dentro delSIE. Cuando el SIE publica una interrupción de transferencia completa por el USB, hayque leer USTAT para determinar el estado de la transferencia. USTAT contiene elnúmero del Endpoint de la transferencia, dirección y valor del puntero del buffer ping-

pong (si está utilizado).

Nota: Los datos en el registro de estado del USB son válidos solamente cuando

el flag de interrupción TRNIF está activo.El registro USTAT es realmente una ventana legible de los cuatro bytes de

estado FIFO mantenida por el SIE. Permite al microcontrolador procesar unatransferencia mientras que SIE procesa los Endpoints adicionales. Cuando el SIEtermina con un buffer de lectura o escritura de datos, actualiza el registro USTAT. Si serealiza otra transferencia USB antes de realizar una interrupción de transaccióncompleta, el SIE almacenará el estado de la transferencia siguiente en el estado FIFO.

Despejando el flag de la transferencia completa, TRNIF, provoca al SIE queavance el FIFO. Si los datos siguientes en el registro FIFO son válidos, el SIEinmediatamente reafirma la interrupción. Si no hay datos adicionales presentes, TRNIF

seguirá borrado; los datos de USTAT puede que no sean correctos.Nota: Si se recibe una petición de Endpoint mientras que el USTAT FIFO este

lleno, el SIE publica automáticamente un NAK de nuevo al anfitrión.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 261/651

GUILLERMO DAVID HERRERO GONZÁLEZ

259

FIGURA 18-4: USAT FIFO

REGISTRO 18-3: USTAT: Registro De Estado Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- ENDP3 ENDP2 ENDP1 ENDP0 DIR PPBI(1) -

U-0 R-x R-x R-x R-x R-x R-x U-0

BIT 6-3 ENDP3:ENDP0: Bits de actividad del número codificado del últimoEndpoint (representa el número del BDT actualizado

por la última transferencia del USB)1111 = Endpoint 151110 = Endpoint 14….0001 = Endpoint 10000 = Endpoint 0

BIT 2 DIR: Bit puntero de la última dirección BD1 = la última transacción era de entrada0 = la última transacción era de salida o de SETUP

BIT 1 PPBI: Bit puntero del puntero ping-pong BD(1)

1 = la transacción pasada estaba al banco Odd de BD0 = la transacción pasada estaba al banco Even de BD

Nota 1: Este bit es solamente válido para los Endpoints con registros Even yOdd BD disponibles.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 262/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

260

3.4.18.2.4. Control De Los Endpoints Del USB

Cada uno de los 16 Endpoints bidireccionales posibles tiene un registro decontrol independiente, UEPn (donde ‘n’ representa el número del Endpoint). Cadaregistro tiene los mismos bits de control.

El bit EPHSHK (UEPn<4>) controla el protocolo de intercambio de losEndpoints; activar este bit permite el protocolo de intercambio del USB. Típicamente,este bit se setea siempre excepto al usar Endpoints síncronos.

El bit EPCONDIS (UEPn<3>) se utiliza para permitir o inhabilitar lasoperaciones de control del USB (SETUP) con Endpoint. Borrar este bit permite lastransacciones SETUP. Observar que los bits EPINEN y EPOUTEN se deben activar

para permitir las transacciones de entrada y de salida. Para el Endpoint 0, este bit debe

estar siempre borrado por que las especificaciones del USB identifican el Endpoint 0como el Endpoint de control por defecto.

El bit EPOUTEN (UEPn<2>) se utiliza para permitir o para inhabilitar lastransacciones de salida del anfitrión. Activar este bit permite transacciones de salida.Semejantemente, el bit EPINEN (UEPn<1>) permite o inhabilita las transacciones deentrada al anfitrión.

El bit EPSTALL (UEPn<0>) se utiliza para indicar la condición STALL para elEndpoint. Si se ejecuta una STALL en un Endpoint particular, el bit EPSTALL para eseEndpoint lo activará el SIE. Este bit permanece hasta que se borre por software o hastaque ocurra un reset del SIE.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 263/651

GUILLERMO DAVID HERRERO GONZÁLEZ

261

REGISTRO 18-4: UEPn: Registro De Control Del Endpoint n Del USB (UEP0 HastaUEP15)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - EPSHK EPCONDIS EPOUTEN EPINEN EPSTALL(1)

U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 4 EPHSHK: Bit de permiso del protocolo de intercambio1= se permite el protocolo de intercambio del Endpoint0= se inhabilita (utilizado con los Endpoints síncronos)

BIT 3 EPCONDIS: Bit bidireccional de control del EndpointSi EPOUTEN=1 y EPINEN=1:

1= inhabilita las transferencias de control delEndpoint n; sólo permite las de entrada y las de salida

0= permite las transferencias de control (SETUP) y lasde entrada y salida del Endpoint n

BIT2 EPOUTEN: Bit de permiso de la salida del Endpoint1= la salida del Endpoint n permitida0= la salida del Endpoint n inhabilitada

BIT 1 EPINEN: Bit de permiso de la entrada del Endpoint1= la entrada del Endpoint n permitida0= la entrada del Endpoint n inhabilitada

BIT 0 EPSTALL: Bit de permiso de la parada del Endpoint(1) 1= se puede parar el Endpoint n0= el Endpoint n no se puede parar

Nota 1: Válido solamente si se permite el Endpoint n; si no, se ignora el bit.

3.4.18.2.5. Registro De Dirección Del USB (UADDR)

El registro de dirección del USB contiene la única dirección del USB que el periférico descifra cuando está activo. UADDR se pone a 00h cuando recibe un reset delUSB, indicado por URSTIF, o con un reset al microcontrolador. La dirección del USBla tiene que escribir el microcontrolador durante la fase de setup del USB como partedel firmware del USB de la ayuda de microchip.

3.4.18.2.6. Registros Del Número Del Frame Del USB (UFRMH:UFRML)

Los registros del número del frame contienen los 11bits del número del frame.El byte de orden inferior está en UFRML, mientras que los tres bits de orden superior

permanecen en UFRMH. El par de registros se actualizan con el número de frame actualcuando recibe un SOF. Para el microcontrolador, estos registros son sólo de lectura. Elregistro del número del frame se utiliza sobre todo para transferencias síncronas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 264/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

262

3.4.18.3. RAM Del USB

Los datos del USB se mueven entre el núcleo del microcontrolador y el SIE através de una memoria conocida como USB RAM. Ésta es una memoria de puerto dualespecial que está mapeada en la memoria normal de datos en los bancos de 4 a 7 (400h a7FFh) para un total de 1kbyte.

El banco 4 (400h con 4FFh) se utiliza específicamente en el control del buffer del Endpoint, mientras que los bancos de 5 a 7 están disponibles para los datos del USB.Dependiendo del tipo de buffer que se utilice, los 8 bytes del banco 4 pueden estar disponibles para utilizarlos como buffer del USB.

Aunque la RAM del USB está disponible en el microcontrolador como memoriade datos, las secciones que está modificando el SIE no las puede usar el

microcontrolador. Se utiliza un mecanismo de semáforos para determinar el acceso a un buffer en un momento dado.

FIGURA 18-5: Implementación De La RAM Del USB En La Espacio De Memoria De Datos

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 265/651

GUILLERMO DAVID HERRERO GONZÁLEZ

263

3.4.18.4. Buffer Descriptor Y Tabla Del Buffer Descriptor

Los registros del banco 4 se utilizan específicamente para el control del buffer del Endpoint en una estructura conocida como Tabla del Buffer descriptor (BDT). Esto proporciona un método flexible a los usuarios para construir y para controlar los Buffersdel Endpoint de varias longitudes y configuraciones.

Los BDT se componen de los Buffers descriptores (BD) que se utilizan paradefinir y controlar los Buffers reales del Espacio de la RAM del USB. Cada BD,alternadamente, consiste en cuatro registros, donde n representa uno de los 64 BDs

posibles (gama de 0 a 63):

Ê BDnSTAT: Registro de estado de BDÊ BDnCNT: Registro del byte de cuenta de BDÊ

BDnADRL: Registro bajo de la dirección de BDÊ BDnADRH: Registro alto de la dirección de BD

BDs ocurre siempre como bloque de cuatro bytes en la secuencia,BDnSTAT:BDnCNT:BDnADRL:BDnADRH. La dirección de BDnSTAT es siempreuna compensación de (4n-1) (en hexadecimal) de 400h, con n como el número delBuffer descriptor.

Dependiendo de la configuración del buffering utilizada, hay 32, 33 ó 64sistemas de Buffer descriptores. El BDT debe ser por lo menos 8 bytes de largo. Esto sedebe a que la especificación del USB asigna que por mandato debe tener cadadispositivo el Endpoint0 configurado como entrada y salida en la disposición inicial.

Dependiendo del Endpoint y de la configuración buffering, el BDT puede ser de 256 bytes de largo.

Aunque se puede creer que los buffers descriptores y los registros de direcciónson registros de funciones especiales que no están mapeados en hardware, como lo estánlos SFRs convencionales en el banco 15 del microcontrolador. Si el Endpointcorrespondiente a un BD particular no está permitido, sus registros no se utilizan. Envez de aparecer como direcciones no implementadas, aparecen como RAM disponible.Solamente cuando un Endpoint está permitido, activando el bit UEPn<1>, se consigueque la memoria de esas direcciones funcione como BD. Como los registros BD tienencualquier dirección en la memoria de datos en un reset, también tienen un valor indeterminado.

Un sistema particular de los registros BD son solamente válidos si el Endpointcorrespondiente está permitido usando el registro UEPn. Todos los registros BD estándisponibles en la RAM del USB. El BD para cada Endpoint debe configurarse antes de

permitirlo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 266/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

264

FIGURA 18-6: Ejemplo De Un Buffer Descriptor

3.4.18.4.1. Estado Y Configuración De Los BD

Los Buffer descriptores no sólo definen el tamaño de un Buffer Endpoint, sinotambién determina su configuración y control. La mayor parte de la configuración sehace con el registro de estado del BD, BDnSTAT. Cada BD tiene su propio registrocorrespondientemente numerado BDnSTAT.

No como otros registros de control, la configuración de los bits del registroBDnSTAT depende del contexto. Hay dos configuraciones distintas, dependiendo de siel microcontrolador o el módulo del USB está modificando el BD y Buffer en unmomento dado. Solamente se comparten tres definiciones de bit entre los dos.

Propiedad Del Buffer

Porque los Buffers y su BDs los comparten la CPU y el módulo del USB, seutiliza un semáforo para distinguir el BD y los Buffers asociados en memoria que se

permiten actualizar.

Esto se logra con el bit UOWN (BDnSTAT<7>). UOWN es el único bitcompartido entre las dos configuraciones BDnSTAT.

Cuando UOWN está borrado, la entrada de BD la dirige por el núcleo delmicrocontrolador. Cuando se activa el bit UOWN, la entrada del BD y la memoria delBuffer los controla por el periférico USB. El núcleo no debe modificar el BD o su

Buffer correspondiente en este momento. Observar que el núcleo del microcontrolador puede leer BDnSTAT mientras que el SIE controla el Buffer y viceversa.

Los Buffer descriptores tienen varios significados dependiendo de la fuente deactualización del registro. Antes de poner en sus manos el periférico del USB, el usuario

puede configurar las operaciones básicas del periférico con los bits BDnSTAT. Duranteeste tiempo, el byte de control de la cuenta y los registros de direccionamiento delBuffer también pueden fijarse.

Cuando se activa UOWN, el usuario puede depender de los valores escritos enlos BDs. El SIE actualiza el BDs cuanto es necesario, sobrescribiendo los valores

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 267/651

GUILLERMO DAVID HERRERO GONZÁLEZ

265

originales del BD. El registro BDnSTAT lo actualiza el SIE con el PID; la cuenta de latransferencia, BDnCNT, se actualiza también.

El byte BDnSTAT del BDT debe ser el último byte que se actualice al prepararse para armar un Endpoint. El SIE borrará el bit UOWN cuando se termine unatransacción. La única excepción es cuando KEN y/o BSTALL están permitidos.

No existe ningún mecanismo por hardware para bloquear el acceso cuando sesetea el bit UOWN. Así, puede ocurrir un comportamiento inesperado si elmicrocontrolador intenta modificar la memoria cuando el SIE lo posee.Semejantemente, leyendo tal memoria se pueden obtener datos inexactos hasta que el

periférico USB devuelve la propiedad al microcontrolador.

Registro BDnSTAT (Modo CPU)

Cuando UOWN=0, el núcleo del microcontrolador posee BD. En este punto, losotros siete bits del registro toman las funciones de control.

El bit, KEN (BDnSTAT<5>), determina si un BD permanece activo. Si se seteael bit, una vez que el bit UOWN esté activo, seguirá controlado el SIE independiente dela actividad del Endpoint. Esto previene a la FIFO USTAT de actualizarse, así comoactivar la interrupción de transacción completa para el Endpoint. Esta característica sedebe permitir solamente cuando el puerto paralelo se selecciona como canal de entrada-salida de datos en lugar de la RAM del USB.

El bit inhabilita el incremento de la dirección, INCDIS (BDnSTAT<4>), que

controla el direccionamiento automático por incremento del SIE. Activar INCDISinhabilita el auto incremento de la dirección del Buffer por el SIE para cada bytetransmitido o recibido. Esta característica sólo se tiene que utilizar con el puerto

paralelo, donde cada byte de datos se procesa a/desde la misma posición de memoria.

El bit de permiso de la sincronización de palabras, DTSEN (BDnSTAT<3>), seencarga de comprobar la paridad de los datos. Activar DTSEN permite la sincronizacióncon el SIE. Cuando está permitido, comprueba la paridad del paquete de los datos contrael valor de DTS (BDnSTAT<6>). Si un paquete llega con una sincronización incorrecta,los datos se ignoran. No se escriben en la RAM del USB y el flag de interrupción detransferencia completa del USB no se activará. Sin embargo, el SIE enviará un ACK alanfitrión para reconocer el recibo.

E bit del buffer de parada, BSTALL (BDnSTAT<2>), proporciona ayuda en elcontrol de las transferencias, generalmente una parada en el Endpoint 0. También

proporciona ayuda con los comandos SET_FEATURE/CLEAR_FEATURE;típicamente, paradas continuas en cualquier Endpoint con excepción del Endpoint decontrol por defecto.

El bit BSTALL también permite las paradas del Buffer. Activar BSTALL haceque el SIE devuelva un STALL al anfitrión si el símbolo recibido utilizaría el BD en esalocalización. Cuando se activa el bit EPSTALL en el registro de control correspondienteUEPn se genera una interrupción STALL cuando se manda la STALL al anfitrión. El bitUOWN activado y el BDs no se cambia a menos que se reciba un SETUP. En este caso,

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 268/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

266

la condición de la STALL se borra y la propiedad del BD se devuelve al núcleo delmicrocontrolador.

Los bits BD9:BD8 (BDnSTAT<1:0>) guardan los dos dígitos más significativosdel byte de la cuenta del SIE; los 8 dígitos más bajos se almacenan en el registrocorrespondiente BDnCNT.

TABLA 18-3: Efecto Del Bit DTSEN En La Recepción De Paquetes Pares/Impares(Data0/Data1)

ConfiguraciónBDnSTAT

Respuesta del dispositivo después de recibir el paqueteSalida del paquete

del HostDTSEN DTS Protocolo UOWN TRNIF BDnSTAT y USTAT Estado

DATA0 1 0 ACK 0 1 Actualizado

DATA1 1 0 ACK 1 0 No Actualizado

DATA0 1 1 ACK 0 1 Actualizado

DATA1 1 1 ACK 1 0 No Actualizado

Otro 0 x ACK 0 1 Actualizado

Otro, con error x x NAK 1 0 No Actualizado

REGISTRO 18-5: BDnSTAT: Registro Del Estado Del Buffer Descriptor N (BD0STAT Hasta BD63STAT), Modo CPU (Los Datos Se Escriben Al Lado)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

UOWN(1) DTS(2) KEN INCDIS DTSEN BSTALL BC9 BC8

R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x

BIT 7 UOWN: Bit de posesión del USB(1) 0 = el núcleo del microcontrolador posee el BD y su

Buffer correspondiente

BIT 6 DTS: Bit de sincronización de los datos(2) 1 = paquete de datos 10 = paquete de datos 0

BIT 5 KEN: Bit de permiso de la subsistencia de BD1 = USB guardará el BD indefinidamente una vez que

UOWN se active (requerido en la configuración de losEndpoint del SPP)

0 = USB guardará el último símbolo procesadoBIT 4 INCDIS: Bit de inhabilitación del incremento de la dirección

1 = el incremento de la dirección inhabilitado (requeridoen la configuración de los Endpoint del SPP)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 269/651

GUILLERMO DAVID HERRERO GONZÁLEZ

267

0 = incremento de la dirección permitidoBIT 3 DTSEN: Bit de permiso de la sincronización

1 = sincronización de los datos permitida; los paquetesde los datos con valor incorrecto de la sinc. se ignoranexcepto un SETUP, que se acepta

0 = ninguna sincronización de los datosBIT 2 BSTALL: Bit de permiso de paradas en el Buffer

1 = parada del Buffer permitida; el protocolo de laSTALL publica si se recibe un símbolo que utilizaríael BD en la localización dada (UOWN se activa, elresto sin cambios)

0 = parada del Buffer inhabilitadoBIT 1-0 BC9:BC8: Bits del byte de cuenta 9 y 8

Los bits de cuenta del byte representan el número de bytes que se transmitirán con un símbolo IN orecibidos durante un símbolo OUT. Junto conBC<7:0>, las cuentas de byte válidas son 0-1023.

Nota 1: Este bit debe inicializarlo el usuario con el valor deseado antes de permitir el módulo USB.

2: Se ignora este bit a menos que DTSEN = 1.

Registros BDnSTAT (Modo SIE)

Cuando los BDs y su Buffer los gobierna el SIE, la mayoría de los bits deBDnSTAT toman distintos significados. Al activarse UOWN, cualquier dato o ajuste decontrol escritos por el usuario se sobrescriben con datos del SIE.

El registro BDnSTAT lo actualiza el SIE con el identificador del paquete (PID)se almacena en BDnSTAT<5:3>. Se actualiza la cuenta de la transferencia en el registroBDnCNT correspondiente. Los valores que desbordan el registro de 8 bits setransportan a los dos dígitos más significativos de la cuenta, almacenados enBDnSTAT<1:0>.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 270/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

268

REGISTRO 18-6: BDnSTAT: Registro De Estado Del Buffer Descriptor N (BD0STAT A BD63STAT), Modo SIE (Datos Devueltos Por El Lado Del Microcontrolador)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

UOWN - PID3 PID2 PID1 PID0 BC9 BC8

R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x

BIT 7 UOWN: Bit de posesión del USB1= el SIE gobierna el BD y el buffer correspondiente

BIT 5-2 PID3:PID0: Bits identificadores del paqueteEl valor recibido del símbolo PID de la última

transferencia (sólo IN, OUT o SETUP)

BIT 1-0 BC9:BC8: Bits del byte de cuenta 9 y 8Esto bits los actualiza el SIE para reflejar al número de

bytes recibidos en una transferencia OUT y el númerode bytes transmitidos en una IN.

3.4.18.4.2. Byte De Cuenta De BD

El byte de cuenta representa el número total de bytes que se transmitirán duranteuna IN. Después de la transferencia IN, el SIE devolverá el número de bytes enviados alanfitrión.

Para una transferencia OUT, el byte de cuenta representa número máximo de los

bytes que se pueden recibir y almacenar en la RAM del USB. Después de unatransferencia OUT, el SIE devolverá el número real de bytes recibidos. Si este númeroexcede el byte de cuenta correspondiente, el paquete de datos se rechazará y se generaráun protocolo de intercambio NAK. Cuando sucede esto, el byte de cuenta no seactualiza.

El byte de cuenta de 10 bits se distribuye sobre dos registros. Los 8 bits más bajos de la cuenta residen en el registro BDnCNT. Los dos altos en BDnSTAT<1:0>.Esto representa una gama válida para el byte de 0 a 1023.

3.4.18.4.3. Validación De La Dirección De BD

El par de registros de dirección de BD contiene la dirección de comienzo de laRAM para el Buffer del Endpoint correspondiente. Para que una localización quecomienza en el Endpoint sea válida, debe estar en la gama de la RAM del USB, 400h a7FFh. No hay ningún mecanismo por hardware para comprobar la dirección del BD.

Si el valor de la dirección de BD no señala a una dirección de la RAM del USB,o si señala a una dirección dentro del Buffer de otro Endpoint, es probable que se

pierdan los datos o que se sobrescriban. Semejantemente, solapando un Buffer derecepción (Endpoint de salida) con una localización de BD en uso se obtienenresultados inesperados. Cuando se desarrollan aplicaciones USB, el usuario puedeincluir software para validar las direcciones en el código.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 271/651

GUILLERMO DAVID HERRERO GONZÁLEZ

269

3.4.18.4.4. Buffering Ping-Pong

Un Endpoint se define para tener un Buffer ping-pong cuando tiene dos sistemasde entradas de BD: un sistema para una transferencia par y otro para una transferenciaimpar. Esto permite a la CPU procesar un BD mientras que el SIE procesa el otro BD.El doble buffering BD, permite un rendimiento de procesamiento máximo del/al USB.

El módulo USB apoya cuatro modos de operación:

Ê Ninguna ayuda del ping-pongÊ Ayuda del Buffer del ping-pong del OUT Endpoint 0 solamenteÊ Ayuda del Buffer del ping-pong para todas los Endpoints

Ê Ayuda del Buffer del ping-pong para el resto de los Endpoints excepto el 0

Los ajustes del Buffer ping-pong se configuran con los bits PPB1:PPB0 en elregistro UCFG.

El módulo USB no pierde de vista el puntero ping-pong de cada Endpoint.Todos los punteros están reseteados inicialmente al BD par cuando se activa el módulo.Al terminar una transacción (SIE borra UOWN), el puntero se une al BD impar. Alterminar la transacción siguiente, el puntero se une de nuevo al BD par y asísucesivamente.

El estado par/impar de la transacción realizada se almacena en el bit PBI delregistro USTAT. El usuario puede resetear todos los punteros ping-pong al par con el

bit PPBRST.

Cada BD tiene una relación fija con un Endpoint particular, dependiendo de laconfiguración del buffering. Esta relación significa también que pueden aparecer vacíosen las BDT si los Endpoints no se activan contiguamente. Esto significa en teoría, quelos BDs de los Endpoints desactivados podían utilizarse como espacio de Buffer. En la

práctica, los usuarios deben evitar usar tales espacios en el BDT a menos que el métodode validar direcciones de BD esté en ejecución.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 272/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

270

FIGURA 18-7: Tablas Del Buffer Descriptor Mapeadas Para Los Modos De Los Buffer

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 273/651

GUILLERMO DAVID HERRERO GONZÁLEZ

271

TABLA 18-4: Asignación De Los Buffers Descriptores A Los Diferentes Modos De Buffering

BDs asignados a Endpoint

Modo 0(No Ping-Pong)

Modo 1(Ping-Pong enEP0 OUT)

Modo 2(Ping-Pong en todosEPs)

Modo 3(Ping-Pong entodos EPs, excepto EP0)

Endpoint

Out In Out In Out In Out In

0 0 1 0(E), 1(O) 2 0(E), 1(O) 2(E), 3(O) 0 1

1 2 3 3 4 4(E), 5(O) 6(E), 7(O) 2(E), 3(O) 4(E), 5(O)

2 4 5 5 6 8(E), 9(O)10(E),

11(O)6(E), 7(O) 8(E), 9(O)

3 6 7 7 8 12(E), 13(O)14(E),15(O)

10(E),11(O)

12(E),13(O)

4 8 9 9 10 16(E), 17(O)18(E),19(O)

14(E),15(O)

16(E),17(O)

5 10 11 11 12 20(E), 21(O)22(E),23(O)

18(E),19(O)

20(E),21(O)

6 12 13 13 14 24(E), 25(O)26(E),27(O)

22(E),23(O)

24(E),25(O)

7 14 15 15 16 28(E), 29(O)30(E),31(O)

26(E),27(O)

28(E),29(O)

8 16 17 17 18 32(E), 33(O)34(E),35(O)

30(E),31(O)

32(E),33(O)

9 18 19 19 20 36(E), 37(O)38(E),39(O)

34(E),35(O)

36(E),37(O)

10 20 21 21 22 40(E), 41(O)42(E),43(O)

38(E),39(O)

40(E),41(O)

11 22 23 23 24 44(E), 45(O)

46(E),

47(O)

42(E),

43(O)

44(E),

45(O)

12 24 25 25 26 48(E), 49(O)50(E),51(O)

46(E),47(O)

48(E),49(O)

13 26 27 27 28 52(E), 53(O)54(E),55(O)

50(E),51(O)

52(E),53(O)

14 28 29 29 30 56(E), 57(O)58(E),59(O)

54(E),55(O)

56(E),57(O)

15 30 31 31 32 60(E), 61(O)62(E),63(O)

58(E),59(O)

60(E),61(O)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 274/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

272

Leyenda: (E) =Buffer de transacción par, (O) = Buffer de transacción impar

TABLA 18-5: Sumario De Los Registros De Los BDT Del USBNombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

BDnSTAT(1) UOWN DTS(4) PID3(2) KEN(3)

PID2(2) INCDIS(3)

PID1(2) DTSEN(3)

PID0(2) BSTALL(3)

BC9 BC8

BDnCNT(1) Byte cuenta

BDnADRL(1) Buffer dirección bajo

BDnADRH(1) Buffer dirección alto

Nota 1: En los registros de los BD, la n es un valor de 0 a 63. Los 64 registrosson semejantes. Todos tienen valores indeterminados en los reset.

2: Del bit 5 al 2 del BDnSTAT lo utiliza el SIE para devolver los valoresPID3:PID0 una vez el registro haya cambiado al SIE (Activar el bit UOWN). Cuandolos registros estén bajo el control del SIE, los valores de KEN, DTSEN, INCDIS yBSTALL no tienen validez.

3: Antes de activar el bit UOWN, los bits 5 al 2 del BDnSTATconfiguran KEN, DTSEN, INCDIS y BSTALL.

4: Se ignora este bit a menos que DTSEN=1

3.4.18.5. Interrupciones Del USBEl módulo USB puede generar condiciones de interrupción múltiples. Para

acomodar todas estas fuentes de interrupción, el módulo proporciona su propia lógica deestructura de interrupción, similar a la del microcontrolador. Las interrupciones delUSB se activan con un sistema de registros de control y registradas con un sistemaseparado de flags. Todas las fuentes se concentran en una sola petición de interrupcióndel USB, USBIF (PIR2<5>).

Hay dos capas de registros de interrupción en el módulo USB. El nivel superior consiste en todas las interrupciones de estado del USB; éstos se permiten y se señalan

por medio de un flag en los registros UIE y UIR, respectivamente. El segundo nivelconsiste en las condiciones de error del USB, se permiten y señalan por medio de unflag en los registros UEIR y UEIE. Ninguna condición de interrupción en estos provocala activación del flag de interrupción por error del USB (UERRIF) en el nivel superior.

Las interrupciones se pueden utilizar para detectar acontecimientos rutinarios enuna transacción USB.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 275/651

GUILLERMO DAVID HERRERO GONZÁLEZ

273

FIGURA 18-8: Embudo De La Lógica De La Interrupción Del USB

FIGURA 18-9: Ejemplo De Los Eventos Transacción E Interrupción

Nota 1: La transferencia de control mostrada es sólo un ejemplo que muestra los

eventos que ocurren en cada transacción. El control típico de la transferencia se puedeextender a varios frames.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 276/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

274

3.4.18.5.1. Registro De Estado De Las Interrupciones Del USB (UIR)

El registro de estado de las interrupciones del USB contiene los flags para elestado de cada fuente de interrupción. Cada una de estas interrupciones tiene un bit de permiso en el registro UIE correspondiente. Todos los flags de estado del USB sesuman para generar el flag de interrupción USBIF para el túnel de interrupción delmicro.

Una vez que el SIE active un bit de interrupción, se tiene que borrar por softwareescribiendo un ‘0’. Los flags se pueden activar por software para ayudar en la búsquedade errores del firmware.

REGISTRO 18-7: UIR: Registro De Estado De Las Interrupciones Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- SOFIF STALLIF IDLEIF(1) TRNIF(2) ACTVIF(3) UERRIF(4) URSTIF

U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 6 SOFIF: Bit de interrupción del símbolo START-OF-FRAME1= START-OF-FRAME recibido por el SIE0= ningún START-OF-FRAME recibido por el SIE

BIT 5 STALLIF: Bit de interrupción del protocolo de STALL1= protocolo de STALL enviado por el SIE0= protocolo de intercambio STALL no se ha enviado

BIT 4 IDLEIF: Bit de interrupción detector de reposo(1) 1= Reposo detectado (estado de reposo de 3ms o más)0= ninguna condición de reposo detectada

BIT 3 TRNIF: Bit de interrupción de transacción completa(2) 1= transacción pendiente completa; leer el registro

USTAT para información del Endpoint0= transacción pendiente no completada o no hay

BIT 2 ACTVIF: Bit de interrupción de detección de la actividad del bus(3)

1= actividad detectada en las líneas D+/D-0= ninguna actividad detectada en las líneas D+/D-

BIT 1 UERRIF: Bit de interrupción de la condición de error del USB(4) 1= ha ocurrido una condición de error desenmascarada0= no ha ocurrido ninguna condición de error.

BIT 0 URSTIF: Bit de interrupción de reset del USB1= Ha ocurrido un reset en el USB, 00h se carga en el

registro UADDR 0= no ha ocurrido ningún reset del USB

Nota 1: Una vez que se detecte un estado de reposo, el usuario puede colocar al módulo USB en este modo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 277/651

GUILLERMO DAVID HERRERO GONZÁLEZ

275

2: Borrar este bit hará avanzar la USTAT FIFO (válido solamente con lossímbolos IN, OUT y SETUP).

3: Este bit es desenmascarado al detectar un acontecimiento deinterrupción UIDLE.

4: Solamente las condiciones de error permitidas a través del registroUEIE activarán este bit. Este bit es bit de estado y no lo puede modificar el usuario.

Bit De Interrupción De Detección De La Actividad Del Bus (ACTVIF)

El bit ACTVIF no se puede ser borrar inmediatamente después de despertar almódulo USB del modo reposo o cuando se suspende. Se necesita un retraso parasincronizar el estado interno del hardware antes de que el bit ACTVIF pueda borrarse

por firmware. Borrar el bit ACTVIF antes de sincronizar el hardware puede que nocause efecto. Además, si el módulo USB utiliza una fuente de reloj de 96MHz PLL,después se borra el bit SUSPND, el módulo del USB puede ser operacionalinmediatamente mientras que espera los 96MHz PLL.

EJEMPLO 18-1: Borrado Del Bit ACTVIF (UIR<2>)

Ensamblador:

BCF UCON, SUSPNDLOOP:

BTFSS UIR, ACTVIFBRA DONEBCF UIR, ACTVIFBRA LOOP

DONE:

C:

UCONbits.SUSPND=0;while (UIRbits.ACTVIF) UIRbits.ACTVIF=0;

3.4.18.5.2. Registro De Permiso De Las Interrupciones (UIE)

El registro de permiso de la interrupción del USB contiene los bits de permiso

del estado de las fuentes de interrupción USB. No fijar ninguno de estos bits permitirá lainterrupción elegida en el registro UIR.

Los valores en este registro afectan solamente la propagación de una condiciónde interrupción a la lógica de interrupción del microcontrolador. Los flags todavía estánactivados por su condición de interrupción, permite que sean interrogados y semantienen sin realmente la interrupción.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 278/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

276

REGISTRO 18-8: UIE: Registro De La Interrupción Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- SOFIE STALLIE IDLEIE TRNIE ACTVIE UERRIE URSTIE

U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 6 SOFIE: Bit de permiso de la interrupción delSTART-OF-FRAME

1 = interrupción permitida0 = interrupción inhabilitada

BIT 5 STALLIE: Bit de permiso de la interrupción del protocolo STALL1 = interrupción permitida

0 = interrupción inhabilitadaBIT 4 IDLEIE: Bit de permiso de la interrupción de reposo

1 = interrupción permitida0 = interrupción inhabilitada

BIT 3 TRNIE: Bit de permiso de la interrupción de transaccióncompleta

1 = interrupción permitida0 = interrupción inhabilitada

BIT 2 ACTVIE: Bit de permiso de la interrupción de detección de laactividad del bus

1 = interrupción permitida0 = interrupción inhabilitada

BIT 1 UERRIE: Bit de permiso de la interrupción de error del USB1 = interrupción permitida0 = interrupción inhabilitada

BIT 0 URSTIE: Bit de permiso de la interrupción del reset del USB1 = interrupción permitida0 = interrupción inhabilitada

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 279/651

GUILLERMO DAVID HERRERO GONZÁLEZ

277

3.4.18.5.3. Registro De Estado De Las Interrupciones Por Error DelUSB (UEIR)

El registro de estado de las interrupciones de error del USB contiene los flags para cada fuente de error del periférico USB. Cada una de estas fuentes se controla conel bit de permiso de interrupción correspondiente del registro UEIE. Todas los flags deerror de USB se suman para generar el flag de interrupción de error del USB (UERRIF)en el nivel superior de la lógica de interrupción.

Cada bit de error se activa cuando se detecta la condición de interrupción. Así, lainterrupción normalmente no corresponde con el final de un símbolo que se acaba de

procesar.

Una vez que un bit de interrupción haya activado el SIE, tiene que borrarse por

software escribiendo un ‘0’. REGISTRO 18-9: UEIR: Registro De Estado De Las Interrupciones De Error Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

BTSEF - - BTOEF DFN8EF CRC16EF CRC5EF PIDEF

R/C-0 U-0 U-0 R/C-0 R/C-0 R/C-0 R/C-0 R/C-0

BIT 7 BTSEF: Flag de error del bit mercancía1= Error detectado

0= No se ha detectado error BIT 4 BTOEF: Flag de error de espera en el procesamiento del bus1= error detectado (han llegado más de 16bits de reposo

antes de un EOP)0= error no detectado

BIT 3 DFN8EF: Flag de error del tamaño de los datos1= error detectado (no era un número entero de bytes)0= error no detectado

BIT 2 CRC16EF: Flag de fallo CRC161= error detectado0= error no detectado

BIT 1 CRC5EF: Flag de error del anfitrión CRC51= error detectado (paquete simbólico rechazado)0= error no detectado

BIT 0 PIDEF: Flag de prueba de fallo de PID1= error detectado0= error no detectado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 280/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

278

3.4.18.5.4. Registro De Permiso De Las Interrupciones De Error (UEIE)

El registro de permiso de las interrupciones de error (UEIE) contiene los bits deactivación para cada fuente de interrupción de error del USB. Activando cualquiera deestos bits se activa la fuente de la interrupción respectiva.

Como el registro UIE, los bits activos sólo afectan la propagación de lacondición de la interrupción. Los flags se activan cuando se cumplen sus condiciones.

REGISTRO 18-10: UEIE: Registro De Permiso De La Interrupción De Error Del USB

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

BTSEE - - BTOEE DFN8EE CRC16EE CRC5EE PIDEE

R/C-0 U-0 U-0 R/C-0 R/C-0 R/C-0 R/C-0 R/C-0

BIT 7 BTSEF: Bit de permiso de interrupción del error del bitmercancía

1= Interrupción permitida0= Interrupción no permitida

BIT 4 BTOEF: Bit de permiso de interrupción del error de espera enel procesamiento del bus

1= Interrupción permitida0= Interrupción no permitida

BIT 3 DFN8EF: Bit de permiso de interrupción del error del tamaño

de los datos1= Interrupción permitida0= Interrupción no permitida

BIT 2 CRC16EF: Bit de permiso de interrupción del fallo CRC161= Interrupción permitida0= Interrupción no permitida

BIT 1 CRC5EF: Bit de permiso de interrupción del error del anfitriónCRC5

1= Interrupción permitida0= Interrupción no permitida

BIT 0 PIDEF: Bit de permiso de interrupción del prueba de fallo dePID

1= Interrupción permitida0= Interrupción no permitida

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 281/651

GUILLERMO DAVID HERRERO GONZÁLEZ

279

3.4.18.6. Modos De Energía Del USB

Las aplicaciones USB tendrán diferentes requisitos y configuración de energía.Los casos más comunes son los presentados aquí.

3.4.18.6.1. Sólo Energía En El Bus

En modo de sólo energía en el bus. Es el método más simple de energía para eldispositivo.

FIGURA 18-10: Sólo Energía En El Bus

3.4.18.6.2. Sólo Self-Power

En modo sólo SELF-POWER, el uso del USB proporciona su propia energía,con la energía muy pequeña cedida por el USB. Observar que indica cuando el USB ha

estado conectado. FIGURA 17-11: Sólo Self-Power

3.4.18.6.3. Energía Dual Con Dominancia Self-Power

Algunas aplicaciones necesitan una opción con dos energías. La aplicaciónutiliza la fuente de energía interna como primaria, pero cambia a la energía del USBcuando no se dispone de una fuente lineal.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 282/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

280

FIGURA 18-12: Energía Dual Con Dominancia Self-Power

Nota: Los usuarios deben tener presente los límites de energía del USB. Según la

especificación del USB 2.0, no puede exceder 100mA en un dispositivo de baja potencia ó 500mA en uno de alta.

3.4.18.7. Streaming Parallel Port (SPP)

El puerto paralelo (SPP) es una ruta alternativa de los datos además de la RAMdel USB. Usando el SPP, un Endpoint se puede configurar para enviar o para recibir datos directamente del hardware externo.

Este método presenta posibilidades de diseño donde el microcontrolador actúacomo encargado de los datos, permitiendo al SPP pasar bloques grandes de datos sinque el micro regule lo que procesa realmente. Un ejemplo de aplicación puede incluir

un sistema de adquisición de datos, donde los datos fluyen de una FIFO externa a travésdel USB al ordenador. En este caso, el control del Endpoint lo realiza elmicrocontrolador y los movimientos de datos en bruto se procesan externamente.

El SPP se permite como puerto de un Endpoint del USB a través del BDasociado al Endpoint. El Endpoint tiene que activarse de la siguiente manera:

1. Activar BDnADRL:BDnADRH direccionado a FFFFh.2. Activar KEN (BDnSTAT<5>) par que el SIE controle el Buffer.3. Activar INCDIS (BDnSTAT<4>) para inhabilitar el incremento de

dirección automático.

Nota 1: Si un Endpoint se configura para utilizar el SPP, el módulo SPP debeconfigurarse para utilizar el módulo USB. Si no, puede ocurrir una operacióninesperada.

2: Además, si un Endpoint se configura para utilizar el SPP, el tipo detransferencia de datos de ese Endpoint debe ser síncrona.

3.4.18.8. Oscilador

El módulo USB necesita una señal específica de reloj. En operaciones full-speed, el reloj tiene que ser de 48MHz. El microcontrolador y los periféricos no tienen

porque tener la misma frecuencia de reloj o la misma fuente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 283/651

GUILLERMO DAVID HERRERO GONZÁLEZ

281

TABLA 18-6: Registros Asociados A Las Operaciones Del Módulo USB(1)

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —

UCFG UTEYE UOEMON — UPUEN UTRDIS FSEN PPB1 PPB0

USTAT — ENDP3 ENDP2 ENDP1 ENDP0 DIR PPBI —

UADDR — ADDR6 ADDR5 ADDR4 ADDR3 ADDR2 ADDR1 ADDR0

UFRML FRM7 FRM6 FRM5 FRM4 FRM3 FRM2 FRM1 FRM0

UFRMH — — — — — FRM10 FRM9 FRM8UIR — SOFIF STALLIF IDLEIF TRNIF ACTVIF UERRIF URSTIF

UIE — SOFIE STALLIE IDLEIE TRNIE ACTVIE UERRIE URSTIE

UEIR BTSEF — — BTOEF DFN8EF CRC16EF CRC5EF PIDEF

UEIE BTSEE — — BTOEE DFN8EE CRC16EE CRC5EE PIDEE

UEP0 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP1 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP2 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP3 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP4 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP5 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALLUEP6 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP7 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP8 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP9 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP10 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP11 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP12 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP13 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP14 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

UEP15 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL

Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadasno se utilizan con el módulo USB.

Nota 1: Esta tabla incluye solamente las localizaciones SFRs mapeadas en el banco 15 de la memoria de datos. Los registros de los BD, que están mapeados en el banco 4 y no son SFRs verdaderos, están en la tabla 18-5.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 284/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

282

3.4.18.9. Descripción Del USB

Esta sección presenta algunos conceptos básicos del USB e información útilnecesaria para diseñar un dispositivo USB. Así, se anima al lector que refiera a lasespecificaciones del USB para más información (www.usb.org). Si estás muy alcorriente de los detalles de USB, entonces ésta sección sirve como recuerdo básico, dealto nivel del USB.

3.4.18.9.1. Esquema De Capas

La funcionalidad del dispositivo del USB se estructura en un esquema de capas.Cada nivel se asocia a un nivel funcional dentro del dispositivo. La capa más alta, conexcepción del dispositivo, es la de configuración. Un dispositivo puede tener configuraciones múltiples. Por ejemplo, un dispositivo particular puede tener requisitos

de energía múltiples basados en Self-Power o modos de energía sólo del bus.Para cada configuración, puede haber múltiple interfaces. Cada interfaz podía

apoyar un modo particular de esa configuración.

Debajo del interfaz están los Endpoints. Los datos se mueven directamente a estenivel. Puede haber 16 Endpoints bidireccionales. El Endpoint 0 es siempre el Endpointde control por defecto; cuando el dispositivo está en el bus, el Endpoint 0 debe estar disponible para configurarlo.

FIGURA 18-13: Capas Del USB

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 285/651

GUILLERMO DAVID HERRERO GONZÁLEZ

283

3.4.18.9.2. Frames

La información que se comunica en el bus se agrupa en ranuras de 1ms,designadas frames. Cada frame puede contener muchas transacciones a variosdispositivos y Endpoints.

3.4.18.9.3. Transferencias

Hay cuatro tipos de transferencias definidas en las especificaciones del USB.

Ê Síncrona: Este tipo proporciona un método de transferencia paracantidades de datos grandes (hasta 923 bytes) con la entrega puntualasegurada; sin embargo, la integridad de los datos no se asegura. Es

bueno en aplicaciones donde los datos son pequeños y la pérdida no es

crítica, por ejemplo audio.Ê Bulk: Este método de transferencia permite grande cantidades de datosque se transferirán asegurando la integridad de los datos; sin embargo, la

puntualidad de la entrega no se asegura.Ê Interrupción: Este tipo de transferencia prevé la entrega puntual

asegurada para bloques pequeños de datos, se asegura la integridad de losdatos.

Ê Control: Este tipo prevé la disposición de dispositivo control.

Mientras que los dispositivos “full-speed” soportan todos los tipos detransferencia, los dispositivos “de poca velocidad” se limitan a las transferenciasinterrupción y control.

3.4.18.9.4. Energía

La energía se puede obtener del USB. Las especificaciones del USB definen losrequisitos de energía del bus. Los dispositivos pueden ser self-powered o alimentados

por bus. Los dispositivos Self-powered consiguen energía de una fuente externa,mientras que los dispositivos alimentados por bus utilizan la energía del bus.

La especificación del USB limita la energía tomada del bus. Cada dispositivo seasegura 90mA y 5V (una unidad de carga). La energía adicional puede solicitarse, hastaun máximo de 500mA. Observar que ceder más energía que la de una unidad de cargaes una petición y el anfitrión o el hub no tiene que proporcionarla obligatoriamente. Así,un dispositivo capaz de consumir más de una unidad de carga debe ser capaz demantener una configuración de baja potencia de una unidad carga o menos, en caso denecesidad.

La especificación del USB también define un modo de reposo. En esta situación,la corriente se debe limitar a 500µA, sobre 1 segundo. Un dispositivo se debe incorporar al estado de reposo después de 3ms de inactividad (es decir, ningún símbolo SOF en3ms). El entrar el dispositivo en el modo reposo debe caer la consumición actual en los10ms siguientes. Asimismo, al señalar un reinicio, el dispositivo debe señalarlo en los10ms cediendo corriente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 286/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

284

3.4.18.9.5. Enumeración

Cuando el dispositivo se une al bus, el anfitrión crea un proceso de enumeraciónen un intento por identificar el dispositivo. Esencialmente, el anfitrión interroga aldispositivo, recopila información tal como el consumo de energía, tarifas y tamaños delos datos, protocolo y otra información descriptiva, que contienen los descriptores. El

proceso de enumeración sería:

1. Reset del USB: Resetear el dispositivo. Así, el dispositivo no seconfigura y no tiene una dirección (dirección 0).

2. Conseguir el descriptor del dispositivo: El anfitrión solicita una pequeña parte del descriptor del dispositivo.

3. Reset del USB: Resetear el dispositivo otra vez.4. Fijar la dirección: El anfitrión asigna una dirección al dispositivo.

5. Conseguir el descriptor del dispositivo: El anfitrión recupera el descriptor del dispositivo, recolectando la información, por ejemplo fabricante, tipode dispositivo, control máximo del tamaño de los paquetes.

6. Conseguir los descriptores de configuración.7. Conseguir cualquier otro descriptor.8. Fijar una configuración.

El proceso exacto de enumeración depende del anfitrión.

3.4.18.9.6. Descriptores

Hay ocho estándares del descriptor de cuál cinco son los más importantes paraeste dispositivo.

Descriptor Del Dispositivo

El descriptor del dispositivo proporciona la información de carácter general, por ejemplo fabricante, número del producto, número de serie, la clase del dispositivo y elnúmero de configuraciones. Hay solamente un descriptor del dispositivo.

Descriptor De La Configuración

El descriptor de la configuración proporciona la información de los requisitos deenergía del dispositivo y cuántos interfaces diferentes soporta cuando está en estaconfiguración. Puede haber más de una configuración del dispositivo (es decir,configuraciones de baja potencia y de alta potencia).

Descriptor De La Interfaz

El descriptor de la interfaz detalla el número de Endpoints utilizados en estainterfaz, así como la clase de la interfaz. Puede haber más de una interfaz en laconfiguración.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 287/651

GUILLERMO DAVID HERRERO GONZÁLEZ

285

Descriptor Del Endpoint

El descriptor del Endpoint identifica el tipo de transferencia y dirección, tambiénalgunos otros específicos del Endpoint. Puede haber muchos Endpoints en undispositivo y los Endpoints pueden compartirse en diversas configuraciones.

Descriptor De La Secuencia

Muchos de los descriptores anteriores se refieren a uno o más descriptores de lasecuencia. Los descriptores de la secuencia proporcionan información legible por unhumano sobre la capa que pueden describir. Estas secuencias muestran en el anfitriónuna ayuda para identificar el dispositivo. Los descriptores de la secuencia songeneralmente opcionales para ahorrar memoria y se codifican en formato unicode.

3.4.18.9.7. Velocidad Del BusCada dispositivo USB debe indicar su presencia del bus y su velocidad al

anfitrión. Esto se logra con una resistencia de 1,5k Ω que se conecta al bus en elmomento del acoplamiento.

Dependiendo de la velocidad del dispositivo, la resistencia une la línea D+ o D-a 3,3V. En dispositivos de poca velocidad, la resistencia se conecta a la línea D-. En losdispositivos full-speed, la resistencia se conecta a la línea D+.

3.4.18.9.8. Especificaciones De Clase Y Drivers

Las especificaciones del USB incluyen las especificaciones de clase que losvendedores del sistema operativo apoyan opcionalmente. Los ejemplos de clasesincluyen el audio, memoria de masa, comunicaciones e interfaz humano (HID). En lamayoría de los casos, se requiere un driver en el lado del anfitrión para comunicarse conel dispositivo USB. En aplicaciones de encargo, se puede necesitar un driver convertido.Afortunadamente, los drivers están disponibles para la mayoría de los sistemasanfitriones comunes para las clases más comunes de los dispositivos. Así, estos driversse pueden reutilizar.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 288/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

286

3.4.19. PUERTO PARALELO STREAMING (SPP)

Nota: El puerto paralelo streaming está solamente disponible en los dispositivosde 40/44-pines.

Los dispositivos USB PIC18F4455/4550 proporcionan un Puerto ParaleloStreaming como interfaz de alta velocidad para mover datos a y desde un sistemaexterno. Este puerto paralelo funciona como puerto principal, completo con un chipselect y salidas de reloj para controlar el movimiento de los datos a los dispositivosauxiliares. Los datos se pueden dirigir directamente al SIE del USB o al núcleo delmicroprocesador.

FIGURA 19-1: Trayectoria De Datos Del SPP

Además, el SPP puede proporcionar tiempo multiplexado tratando lainformación junto con los datos usando segunda salida estroboscopia. Así, el númerodel Endpoint del USB se puede escribir conjuntamente con los datos en ese Endpoint.

3.4.19.1. Configuración Del SPP

La operación del SPP se controla con dos registros: SPPCON y SPPCFG. Elregistro SPPCON dirige la operación total del puerto paralelo y determina si funciona

bajo el control del USB o del microcontrolador. El registro SPPCFG controla laconfiguración del tiempo y los pines de salida.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 289/651

GUILLERMO DAVID HERRERO GONZÁLEZ

287

3.4.19.1.1. Permitir El SPP

Para permitir el SPP, activar el bit SPPEN (SPPCON<0>). Además, los bits delTRIS del SPP correspondientes los pines se deben configurar correctamente. El mínimo:

Ê Bits TRISD<7:0> se deben activar (= 1)Ê Bits TRISE<2:1> se deben borrar (= 0)

Si se utiliza CK1SPP:

Ê El bit TRISE<0> se debe borrar(= 0)

Si se utiliza CSPP:

Ê El bit TRISB<4> se debe borrar (= 0)

REGISTRO 19-1: SPPCON: Registro De Control Del SPP

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - - - - SPPOWN SPPEN

U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0

BIT2 EPOUTEN: Bit de permiso de la salida del Endpoint1= la salida del Endpoint n permitida

BIT1 SPPOWN: Bit de propiedad del SPP1= El periférico USB controla el SPP0= El microcontrolador controla directamente el SPP

BIT0 SPPEN: Bit de permiso del SPP1 = se permite0 = se desactiva

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 290/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

288

REGISTRO 19-2: SPPCFG: Registro De La Configuración Del SPP

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

CLKCFG1 CLKCFG0 CSEN CLK1EN WS3 WS2 WS1 WS0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7-6 CLKCFG1:CLKCFG0: Bits de configuración del reloj del SPP1x= CLK1 cambia a lectura o escritura una dirección

impar de Endpoint; CLK2 cambia a lectura o escriturauna dirección par de Endpoint.

01= CLK1 cambia a escritura; CLK2 cambia a lectura00= CLK1 cambia sólo en la dirección del Endpoint de

escritura; CLK2 cambia en la lectura o escritura dedatos

BIT 5 CSEN: Bit de permiso del pin selector del chip del SPP1 = RB4 lo controla el módulo SPP y funciona como

salida CS del SPP0 = RB4 funciona como un puerto digital de E/S

BIT 4 CLK1EN: Bit de permiso del pin del SPP CLK11 = RE0 lo controla el módulo SPP y funciona como la

salida del SPP CLK10 = RE0 funciona como un puerto digital de E/S

BIT 3-0 WS3:WS0: Bits de los estados espera del SPP1111 = 30 estados de espera adicionales1110 = 28 estados de espera adicionales…. …...0001 = 2 estados de espera adicionales0000 = 0 estados de espera adicionales

3.4.19.1.2. Registro De Datos

El SPP tiene cuatro salidas del control:

Ê Dos salidas de reloj separadas (CK1SPP y CK2SPP)Ê Salida permitida (OESPP)Ê Chip select (CSSPP)

Después, permiten diversas configuraciones para controlar el flujo de datos a losdispositivos auxiliares. Cuando se utilizan todas las salidas de control, las tres opciones

principales son:

Ê CLK1 controla la información del Endpoint direccionado cuando CLK2controla los datos.

Ê CLK1 controla las operaciones de escritura mientras que CLK2 controlalas de lectura.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 291/651

GUILLERMO DAVID HERRERO GONZÁLEZ

289

Ê CLK1 controla los datos en las direcciones impares mientras que CLK2controla las de los pares.

Las opciones de control adicionales derivan inhabilitando las salidas CK1SPP yCSSPP. Se permiten o inhabilitan con los bits CLK1EN y CSEN, respectivamente.

3.4.19.1.3. Estados De Espera

El SPP se diseña con la capacidad de agregar estados de espera para lasoperaciones de lectura y de escritura. Esto permite el acceso paralelo a los dispositivosque requieren más tiempo para acceder.

Registrar el estado de espera se basa en el reloj de la fuente de datos. Si el SPPse configura para funcionar como Endpoint del USB, entonces los estados de espera se

basan en el reloj del USB. Asimismo, si el SPP se configura para funcionar desde elmicrocontrolador, entonces los estados de espera se basa en el ratio de instrucción(FOSC/4).

Los bits WS3:WS0 activaron los estados de espera utilizados por el SPP, conuna gama de ningunos estado de espera a 30 estados de espera, en múltiplos de dos. Losestados de espera se agregan simétricamente en todas las transacciones, con una mitadañadida a cada uno de los dos ciclos de reloj requeridos para la transacción.

3.4.19.1.4. SPP Pull-Ups

Las líneas de datos del SPP (SPP<7:0>) se equipan con pull-ups internas para

aplicaciones que puedan salir del puerto en condiciones e alta impedancia. Los pull-upsse permiten con el bit de control, RDPU (PORTE<7>).

FIGURA 19-2: Sincronización Para El Microcontrolador Escribe Dirección, Escribe Datos Y Lee Datos (Ningún Estado De Espera)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 292/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

290

FIGURA 19-3: Sincronización Para El USB Escribe Dirección Y Datos (Estados De Espera)

FIGURA 19-4: Sincronización Para El USB Escribe Dirección Y Lee Datos (Estados De Espera)

3.4.19.2. Sistema Para El Control Del USB

Cuando el SPP se configura para operar como USB, los datos se puedencontrolar directamente a y desde el periférico USB sin la intervención delmicrocontrolador; así, no requiere tiempo de procesado. Los datos se manejan a o haciafuera del SPP con la información del Endpoint (dirección) primero, seguido por uno o

más bytes de datos. Esto es ideal en aplicaciones que requieren transmisión síncrona, degran capacidad. Los siguientes pasos se requieren para configurar el SPP para controlar el USB:

1. Configurar el SPP según lo deseado, incluyendo estados de espera yrelojes.

2. Activar el bit SPPOWN para la propiedad del USB.3. Activar el descriptor del buffer que comienza la dirección

(BDnADRL:BDnADRH) a FFFFh.4. Activar el bit KEN (BDnSTAT<5>) pero el buffer descriptor lo se

guarda indefinidamente el SIE.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 293/651

GUILLERMO DAVID HERRERO GONZÁLEZ

291

5. Activar el bit INCDIS (BDnSTAT<4>) para inhabilitar el incrementoautomático de la dirección del buffer.

6. Activar el bit SPPEN para permitir el módulo.Nota: Si un Endpoint del USB se configura para utilizar el SPP, el tipo de la

transferencia de datos de ese Endpoint debe ser síncrona.

FIGURA 19-5: Transferencia De Datos Entre USB SIE Y SPP

3.4.19.3. Sistema Para El Control Del Microcontrolador

El SPP puede actuar como puerto paralelo del microcontrolador. En este modo,el registro SPPEPS proporciona el estado y la dirección de control de escritura. Losdatos se escriben y se leen en el registro SPPDATA. Cuando el SPP lo gobierna elmicrocontrolador, el reloj del SPP lo controla el reloj de instrucción (FOSC/4). Los pasossiguientes se requieren para configurar el SPP para operación del microcontrolador:

1. Configurar el SPP según lo deseado, incluyendo estados de espera y

relojes.2. Borrar el bit SPPOWN.3. Activar SPPEN para permitir el módulo.

3.4.19.3.1. Interrupciones SPP

Cuando lo controla el núcleo del microcontrolador, el control puede generar unainterrupción para notificar la aplicación cuando termina cada operación de lectura yescritura. El flag de interrupción es SPPIF (PIR1<7>) y se permite con el bit SPPIE(PIE1<7>). Como el resto de prioridades de interrupciones del microcontrolador, se

puede fijar a un nivel bajo o prioritario. Esto se hace con el bit SPPIP (IPR1<7>).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 294/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

292

3.4.19.3.2. Escribir El SPP

Una vez que esté configurado, la escritura del SPP se realiza escribiendo losregistros SPPEPS y SPPDATA. Si el SPP se configura para registrar la dirección de losEndpoint OUT con los datos, escribiendo el registro SPPEPS inicia el ciclo de escrituraen la dirección. Si no, la escritura comienza escribiendo los datos al registro SPPDATA.El bit SPPBUSY indica el estado de la dirección y los datos de los ciclos de escritura.

Lo que sigue es un ejemplo de secuencia de escritura:

1. Escribir la dirección de 4 bits al registro SPPEPS. El SPP comienzaautomáticamente escribiendo la dirección. Si la escritura de la dirección nose utiliza, vamos al paso 3.

2. Supervisar el bit SPPBUSY para determinar cuando se ha enviado la

dirección. La duración depende en los estados de espera.3. Escribir los datos al registro SPPDATA. El SPP comienza automáticamentea escribir los datos.

4. Supervisar el bit SPPBUSY para determinar cuando se han enviado losdatos. La duración depende de los estados de espera.

5. Ir de nuevo a los pasos 1 ó 3 para escribir una nueva dirección o datos.

Nota: Se debe comprobar el bit SPPBUSY para asegurarse de que las sucesivasescrituras a los registros SPPEPS o SPPDATA no invadan el tiempo de espera debido alajuste del estado de espera.

3.4.19.3.3. Lectura Del SPP

La lectura del SPP implica leer el registro SPPDATA. Leyendo el registro por primera vez inicia la operación de lectura. Cuando la lectura ha finalizado, se indica conel bit SPPBUSY, el SPPDATA se habrá cargado con los datos actuales.

Ejemplo de secuencia de lectura:

1. Escribir la dirección de 4bits al registro SPPEPS. El SPP comienzaautomáticamente escribiendo la dirección. Si la dirección escrita no seusa saltemos al paso 3.

2. Supervisar el bit SPPBUSY para determinar cuando se ha enviado ladirección. La duración depende de los estados de espera.

3. Leer los datos del registro SPPDATA; se devuelven los datos de laoperación de lectura anterior. El SPP comienza automáticamente lalectura para el próximo ciclo de lectura.

4. Supervisar el bit SPPBUSY para determinar cuando se han leído losdatos. La duración depende de los estados de espera.

5. Ir al paso 3 para leer el byte actual del SPP y empezar el siguiente ciclode lectura.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 295/651

GUILLERMO DAVID HERRERO GONZÁLEZ

293

REGISTRO 19-3: SPPEPS: Dirección Del Endpoint Del SPP Y Registro De Estado

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

RDSPP WRSPP - SPPBUSY ADDR3 ADDR2 ADDR1 ADDR0

R-0 R-0 U-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 RDSPP: Bit del estado de lectura del SPP (válido cuandoSPPCON<SPPOWN>=1, USB)

1 = la transacción anterior del SPP era de lectura0 = la transacción anterior del SPP no era de lectura

BIT 6 WRSPP: Bit de estado de escritura del SPP (válido cuandoSPPCON<SPPOWN>=1, USB)

1 = la transacción anterior del SPP era de escritura0 = la transacción anterior del SPP no era de escritura

BIT 4 SPPBUSY: Bit de ocupación del bus del SPP1 = El SPP está ocupado0 = El SPP está listo para aceptar otras peticiones de

lectura y escrituraBIT 3-0 ADDR3:ADDR0: Bits de dirección del Endpoint del SPP

1111 = Endpoint 15…

00010000 = Endpoint 0

TABLA 19-1: Registros Asociados Al Puerto Paralelo Streaming

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

SPPCON(3) — — — — — — SPPOWN SPPEN

SPPCFG(3) CLKCFG1 CLKCFG0 CSEN CLK1EN WS3 WS2 WS1 WS0

SPPEPS(3) RDSPP WRSPP — SPPBUSY ADDR3 ADDR2 ADDR1 ADDR0

SPPDATA(3) DATA7 DATA6 DATA5 DATA4 DATA3 DATA2 DATA1 DATA0

PIR1 SPPIF(3) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIE1 SPPIE(3) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR1 SPPIP(3) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

PORTE RDPU(3) — — — RE3(1,2) RE2(3) RE1(3) RE0(3)

Leyenda: -=no implementado, se leen ‘0’. Las casillas sombreadas no se utilizancon el SPP.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 296/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

294

Nota 1: Implementado cuando el Master Clean está desactivado (configuracióndel bit MCLRE=0).

2: RE3 es el único bit de PORTE implementado en dispositivos de 28 pines y de 40/44 pines. El resto de pines se implementan si existen el resto del PORTE(es decir, en los dispositivos de 40/44 pines).

3: Estos registros y/o bits no están implementados en los dispositivos de28 pines.

3.4.20. MÓDULO CONVERTIDOR DE 10-BIT ANALÓGICO A DIGITAL

(A/D)

El módulo conversor de analógico a digital (A/D) tiene 10 entradas con los

dispositivos de 28 pines y 13 en los de 40/44 pines. Este módulo permite la conversiónde una señal de entrada analógica a un número digital de 10bits.

El módulo tiene cinco registros:

Ê Registro alto del resultado A/D (ADRESH)Ê Registro bajo del resultado A/D (ADRESL)Ê Registro de control A/D 0 (ADCON0)Ê Registro de control A/D 1 (ADCON1)Ê Registro de control A/D 2 (ADCON2)

El registro ADCON0, gobierna las operaciones del módulo A/D. El registroADCON1 configura las funciones de los puertos. El registro ADCON2 configura elreloj, programa el tiempo de adquisición y justificación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 297/651

GUILLERMO DAVID HERRERO GONZÁLEZ

295

REGISTRO 20-1: ADCON0: Registro De Control A/D 0

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - CHS3 CHS2 CHS1 CHS0 GO/DONE* ADON

U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 5-2 CHS3:CHS0: Bits selectores del canal analógico0000 = canal 0 (AN0)0001 = canal 1 (AN1)0010 = canal 2 (AN2)0011 = canal 3 (AN3)0100 = canal 4 (AN4)

0101 = canal 5 (AN5)(1,2) 0110 = canal 6 (AN6)(1,2) 0111 = canal 7 (AN7)(1,2) 1000 = canal 8 (AN8)1001 = canal 9 (AN9)1010 = canal 10 (AN10)1011 = canal 11 (AN11)1100 = canal 12 (AN12)1101 = No implementado(2) 1110 = No implementado(2) 1111 = No implementado(2)

BIT 1 GO/DONE*: Bit A/D del estado de la conversiónCuando ADON=1:

1 = conversión A/D en marcha0 = A/D en reposo

BIT 0 ADON: Bit de permiso del A/D1 = módulo A/D permitido0 = módulo A/D no permitido

Nota 1: Estos canales no se implementan en los dispositivos de 28pines.

2: La ejecución de una conversión en los canales no implementadosdevolverá una medida flotante de la entrada.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 298/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

296

REGISTRO 20-2: ADCON1: Registro De Control A/D 1

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

U-0 U-0 R/W-0 R/W-0 R/W-0(1) R/W(1) R/W(1) R/W(1)

BIT 5 VCFG1: Bit de configuración de la tensión de referencia(fuente de VREF-)

1 = VREF- (AN2)0 = VSS

BIT 4 VCFG0: Bit de configuración de la tensión de referencia(fuente de VREF+)

1 = VREF+ (AN3)0 = VDD

BIT 3-0 PCFG3:PCFG0: Bits de configuración de los puertos A/D:

PCFG3:PCFG0

AN12 AN11 AN10 AN9 AN8 AN7(2) AN6(2) AN5(2) AN4 AN3 AN2 AN1 AN0

0000(1) A A A A A A A A A A A A A

0001 A A A A A A A A A A A A A

0010 A A A A A A A A A A A A A

0011 D A A A A A A A A A A A A

0100 D D A A A A A A A A A A A

0101 D D D A A A A A A A A A A

0110 D D D D A A A A A A A A A

0111(1) D D D D D A A A A A A A A

1000 D D D D D D A A A A A A A

1001 D D D D D D D A A A A A A

1010 D D D D D D D D A A A A A

1011 D D D D D D D D D A A A A

1100 D D D D D D D D D D A A A

1101 D D D D D D D D D D D A A

1110 D D D D D D D D D D D D A

1111 D D D D D D D D D D D D D

A= Entrada analógica

D= E/S digital

Nota 1: El valor de POR de los bits PCFG depende del valor del bit deconfiguración PBADEN. Cuando PBADEN=1, PCFG<3: 0>=0000; cuandoPBADEN=0, PCFG<3: 0>=0111.

2: AN5 con AN7 están disponibles solamente en los dispositivos40/44pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 299/651

GUILLERMO DAVID HERRERO GONZÁLEZ

297

REGISTRO 20-3: ADCON2: Registro De Control A/D 2

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

ADFM - ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0

R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 ADFM: Bit selecto del formato A/D del resultado1 = derecho justificado0 = izquierdo justificado

BIT 5-3 ACQT2:ACQT0: Bits selectores del tiempo de adquisición111 = 20 TAD 110 = 16 TAD

101 = 12 TAD 100 = 8 TAD 011 = 6 TAD 010 = 4 TAD 001 = 2 TAD 000 = 0 TAD

(1) BIT 2-0 ADCS2:ADCS0: Bits selectores del reloj de conversión

111= FRC (reloj A/D derivado del oscilador RC)(1) 110= FOSC/64101= FOSC/16100= FOSC/4011= FRC (reloj A/D derivado del oscilador RC)(1) 010= FOSC/32001= FOSC/8000= FOSC/2

Nota 1: Si se selecciona la fuente de reloj A/D FRC, se añade un retraso de unTCY (ciclo de instrucción) antes de que el reloj A/D comience. Esto permite que lainstrucción SLEEP se ejecute antes de comenzar una conversión.

La tensión analógica de referencia es seleccionable por software es cualquier fuente de tensión positiva y negativa del dispositivo (VDD y VSS) o el nivel de tensión enlos pines RA3/AN3/VREF+ y RA2/AN2/VREF-/CVREF.

El convertidor A/D tiene la característica de poder funcionar mientras que eldispositivo está en modo sleep. Al funcionar en sleep, el reloj de conversión A/D debederivar del oscilador interno RC A/D.

La salida de la muestra y del asimiento es la entrada en el convertidor, quegenera el resultado vía aproximaciones sucesivas.

Un reset del dispositivo fuerza todos los registros a su estado de reset. Esto provoca que el módulo A/D se apague y la conversión en marcha se aborte.

Cada pin del puerto asociado al convertidor A/D puede configurarse comoentrada analógica o como entrada-salida digital. Los registros ADRESH y ADRESL

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 300/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

298

contienen el resultado de la conversión A/D. Cuando la conversión A/D se completa, elresultado se carga en el par de registros ADRESH:ADRESL, el bit GO/DONE*

(registro ADCON0) se borra y se activa el flag de interrupción A/D, ADIF.

FIGURA 20-1: Diagrama De Bloques Del A/D

Nota 1: Los canales de 5 a 7 no están disponibles en los dispositivos de28pines.

2: Los pines de E/S tienen un diodo de protección a VDD y VSS.

El valor en los registros ADRESH:ADRESL no se modifica con un POR. Losregistros ADRESH:ADRESL contendrán datos desconocidos después de un POR.

Después de que el módulo A/D se haya configurado según lo deseado, el canalseleccionado debe adquirir antes de que comience la conversión. Los canales de entradaanalógica deben tener sus bits TRIS correspondientes seleccionados como entrada.Después de esta adquisición el tiempo ha transcurrido, la conversión A/D puede

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 301/651

GUILLERMO DAVID HERRERO GONZÁLEZ

299

comenzar. Se puede programar un periodo de adquisición para que ocurra entre activar el bit GO/DONE* y el comienzo real de la conversión.

Hay que seguir los siguientes pasos para realizar la conversión A/D:

1. Configurar el módulo A/D:Ê Configura los pines analógicos, referencia de tensión y entrada-salida

digital (ADCON1)Ê Seleccionar el canal A/D de entrada (ADCON0)Ê Seleccionar el tiempo de adquisición A/D (ADCON2)Ê Seleccionar el reloj e la conversión A/D (ADCON2)Ê Cambiar el módulo A/D (ADCON0)

2. Configuran la interrupción A/D (si se desea):Ê Borrar el bit ADIF

Ê Activar el bit ADIEÊ Activar el bit GIE

3. Esperar el tiempo requerido de adquisición (si procede).4. Comienzo de la conversión:

Ê Activar el bit GO/DONE* (registro ADCON0)5. Esperar que termine la conversión A/D, por cualquiera:

Ê La interrogación del bit GO/DONE* para ver si está borradoÊ Esperar la interrupción A/D

6. Leer los registros del resultado A/D (ADRESH:ADRESL); borrar el bit ADIF, si procede.

7. Para la conversión siguiente, ir al paso 1 o al paso 2, al que se necesite. Eltiempo de la conversión A/D por bit es definido como TAD. Se necesita esperar como mínimo 3TAD antes de comenzar la siguiente adquisición.

FIGURA 20-2: Función De Transferencia A/D

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 302/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

300

FIGURA 20-3: Modelo De Entrada Analógica

3.4.20.1. Requisitos De La Adquisición A/D

En el convertidor A/D, para satisfacer su exactitud especifica, el condensador que mantiene la entrada (CHOLD) se tiene que cargar completamente para que entre elnivel de tensión del canal. La impedancia de la fuente (R S) y la impedancia del cambiodel muestreo interno (R SS) afectan directamente al tiempo requerido para cargar el

condensador CHOLD. La impedancia del cambio del muestreo (R SS) varía sobre la tensióndel dispositivo (VDD). La impedancia de la fuente afecta a la tensión compensando laentrada analógica (debido al pin de salida de corriente). La impedancia recomendadamáxima para las fuentes analógicas es de 2,5k Ω. Después de que el canal de entradaanalógico esté seleccionado (cambiado), el canal se debe muestrear por lo menos eltiempo mínimo de adquisición antes de comenzar una conversión.

Nota: Cuando comienza la conversión, el condensador se desconecta del pin deentrada.

Para calcular el tiempo mínimo de adquisición, se puede usar la ecuación 20-1.Esta ecuación asume que existe el error de 1/2LSb (1024 pasos para el A/D). El error de

1/2LSb es el error máximo permitido del A/D para conseguir su resolución específica.El ejemplo 20-3 muestra el cálculo del tiempo mínimo de adquisición requerido

TACQ. Este cálculo se base con los siguientes datos de aplicación:

CHOLD=25pF

R S=2,5k Ω

Error de la conversión <= 1/2 LSb

VDD=5V

R SS=2k Ω

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 303/651

GUILLERMO DAVID HERRERO GONZÁLEZ

301

Temperatura=85°C (máximo del sistema)

ECUACIÓN 20-1: Adquisición Tiempo

COFF C AMP

HOLD ACQ

T T T

aTemperatur eCoeficient C aC Tiempoor Amplificad ColocaciónTiempoT

++=

=++= _ _ arg _ _ _

ECUACIÓN 20-2: Tiempo Mínimo De Carga A/D

)2048/1())((

)1())2048/(( ))(/(

Ln R R RC T

o

eV V V

S SS IC HOLDC

R R RC T REF REF HOLD

S SS IC HOLDC

++−=

−•−=++−

ECUACIÓN 20-3: Cálculo Del Tiempo De Adquisición Mínimo

sC sC C C sC TempT

sT

T T T T

COFF

AMP

COFF C AMP ACQ

μ μ μ

μ

2,1)/º02,0)(º25º85()/º02,0)(º25(

2

=−=−=

=

++=

El coeficiente de temperatura sólo se necesita para temperaturas >25ºC. Por debajo de 25ºC, TCOFF=0ms.

s s s sT

s s Lnk k k pF s Ln R R RC T

ACQ

S SS IC HOLDC

μ μ μ μ 45,22,105,12,0

05,1)0004883,0()5,221)(25()2048/1())((

=++=

=Ω+Ω+Ω−=++−=

3.4.20.2.

Seleccionar Y Configuración El Tiempo De AdquisiciónTiempo

El registro ADCON2 permite que el usuario seleccione tiempo de adquisiciónque ocurre cada vez que se activa el bit GO/DONE*. También da a los usuarios laopción de utilizar un tiempo de adquisición automáticamente determinado. El tiempo deadquisición se puede determinar con los bits ACQT2:ACQT0 (ADCON2<5: 3>) que

proporcionan una gama de 2 a 20 TAD. Cuando se activa el bit GO/DONE*, el móduloA/D continúa muestreando la entrada con el tiempo de adquisición seleccionado,entonces comienza automáticamente una conversión. Desde que se programa el tiempode adquisición, puede que no ser necesite esperar un periodo de adquisición entre laselección de un canal y activar el bit GO/DONE*.

Se selecciona la adquisición manual cuando ACQT2:ACQT0 = 000. Cuando seactiva el bit GO/DONE*, se para el muestreo y comienza una conversión. El usuario esel responsable de asegurar que ha pasado el tiempo de adquisición requerido entre laselección de la entrada deseada y fijar el bit GO/DONE*. Esta opción es el estado por defecto en un reset de los bits ACQT2:ACQT0 y es compatible con los dispositivos queno ofrecen tiempos de adquisición programables.

En cualquier caso, cuando se termina la conversión, el bit GO/DONE* se borra,se activa el flag ADIF y A/D comienza a muestrear el canal actualmente seleccionado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 304/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

302

otra vez. Si se programa un periodo de adquisición, no hay nada que indique si eltiempo de adquisición ha terminado o si la conversión ha comenzado.

3.4.20.3. Seleccionar El Reloj De Conversión A/D

El tiempo A/D de conversión por bit se define como TAD. La conversión A/Drequiere 11 TAD para la conversión de 10 bits. La fuente de reloj A/D de la conversiónes seleccionable por software. Hay siete opciones posibles para el TAD:

Ê 2 TOSC Ê 4 TOSC Ê 8 TOSC Ê 16 TOSC Ê 32 TOSC

Ê 64 TOSC Ê Oscilador interno RC

Para las conversiones A/D correctas, el reloj de conversión A/D (TAD) debe ser tan corto como sea posible pero mayor que un mínimo TAD (para más información véaseel parámetro 130 en la tabla 28-29).

TABLA 20-1: T AD Vs. Frecuencias De Operación De Los Dispositivos

Fuente del reloj AD (TAD) Máxima frecuencia del dispositivo

Opción ADCS2:ADCS0 PIC18FXXXX PIC18LFXXXX(4)

2 TOSC 000 2.86MHz 1.43MHz

4 TOSC 100 5.71MHz 2.86MHz

8 TOSC 001 11.43MHz 5.72MHz

16 TOSC 101 22.86MHz 11.43MHz

32 TOSC 010 45.71MHz 22.86MHz

64 TOSC 110 48.0MHz 45.71MHz

RC(3) x11 1.00MHz(1) 1.00MHz(2)

Nota 1: La fuente RC tiene un TAD de 4ms.

2: La fuente RC tiene un TAD de 6ms.

3: Para dispositivos con frecuencias alrededor de 1MHz, el dispositivotiene que estar en sleep durante la conversión o la exactitud del A/D está fuera de loespecificado.

4: Dispositivos de baja potencia

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 305/651

GUILLERMO DAVID HERRERO GONZÁLEZ

303

3.4.20.4. Operación En Los Modos De Ahorro De Energía

La selección del tiempo de adquisición automático y el reloj de conversión A/Dse determinado en parte con la fuente de reloj y la frecuencia mientras se trabaje en unmodo de ahorro de energía.

Si se espera que el A/D funcione mientras que el dispositivo esté dentro de unmodo de ahorro de energía, los bits ACQT2:ACQT0 y ADCS2:ADCS0 en ADCON2 sedeben actualizar con la fuente de reloj que se utilizará en este modo. Después de entrar en el modo, una adquisición o la conversión A/D puede comenzar. Una vez que hayacomenzado, el dispositivo debe continuar controlado con la misma fuente de reloj hastaque la conversión termine.

Si se desea, el dispositivo se puede poner en modo reposo durante la conversión.

Si la frecuencia de reloj del dispositivo es menos de 1MHz, se tiene que seleccionar lafuente de reloj RC A/D.

Operar en el modo sleep requiere que se seleccione el reloj A/D FRC. Si los bitsACQT2:ACQT0 se fijan a ‘000’ y comienza una conversión, la conversión tendrá unretraso de un ciclo de instrucción para permitir la ejecución de la instrucción SLEEP yentrada del modo sleep. El bit IDLEN (OSCCON<7>) tiene que estar borrado antes decomenzar la conversión.

3.4.20.5. Configuración De Los Pines De Los Puertos Analógicos

Los registros ADCON1, TRISA, TRISB y TRISE configuran los pines de los

puertos A/D. Los pines tienen que estar como entradas analógicas, deben tener sus bitscorrespondientes del TRIS activos (entrada). Si es el bit TRIS está borrado (salida), elnivel de salida digital (VOH o VOL) se convertirá.

La operación A/D es independiente del estado de los bits CHS3:CHS0 y los bitsTRIS.

Nota 1: Al leer el registro PORT, todos los pines configurados como canalesde entrada analógica se leerán como borrado (un nivel bajo). Los pines configuradoscomo entrada digital convertirán como entradas analógicas. Los niveles analógicos de laentrada digital estarán bien convertidos.

2: Los niveles analógicos en cualquier pin definido como entrada digital

puede causar al buffer de entrada digital que consuma una corriente fuera de los límitesde la especificación de dispositivo.

3: El bit PBADEN en el registro de configuración 3H configura los pinesde PORTB a resetar como pines analógicos o digitales dependiendo de como estén los

bits PCFG0 de ADCON1 después el reset.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 306/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

304

3.4.20.6. Conversiones A/D

La figura 20-4 muestra la operación del convertidor A/D después de que se hayaactivado el bit GO/DONE* y los bits ACQT2:ACQT0 se hayan borrado. Comienza unaconversión después de que la siguiente instrucción permita la entrada en el modo sleepantes de comenzar la conversión.

La figura 20-5 muestra la operación del convertidor A/D después de que sehayan fijado los bits GO/DONE*, y ACQT2:ACQT0 a ‘010’ y seleccionar el tiempo deadquisición a 4TAD antes del comienzo de la conversión.

Despejar el bit GO/DONE* durante una conversión aborta la conversión actual.El par de registros del resultado A/D no se actualiza cuando termina una parte de laconversión A/D. Esto significa que los registros ADRESH:ADRESL continuarán

conteniendo el valor de la conversión anterior (o el último valor escrito en los registrosADRESH:ADRESL).

Después de que termine o se aborte la conversión A/D, se necesita esperar 2TAD antes de que la adquisición siguiente pueda comenzar. Después de esta espera, laadquisición en el canal seleccionado se activa automáticamente.

Nota: El bit de GO/DONE* no se debe activar dentro de la misma instrucciónque activa el A/D.

3.4.20.7. Descarga

La fase de descarga se utiliza para inicializar el valor de la matriz del

condensador. La matriz se descarga antes de cada muestra. Esta característica ayuda aoptimizar la ganancia unitaria del amplificador como el circuito siempre carga la matrizdel condensador, más bien que cargar/descarga se basa en la medida de valoresanteriores.

FIGURA 20-4: Ciclos T AD En La Conversión A/D (ACQT<2:0>=000, T AQT =0)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 307/651

GUILLERMO DAVID HERRERO GONZÁLEZ

305

FIGURA 20-5: Ciclos T AD En La Conversión A/D (ACQT<2:0>=010, T AQT =4T AD )

3.4.20.8. Uso Del Disparador Del CCP2

Una conversión A/D puede empezar con el disparo de un evento especial delmódulo CCP2. Esto requiere que los bits CCP2M3:CCP2M0 (CCP2CON<3:0>) se

programen como ‘1011’ y que el módulo A/D esté activo (ADON esté activo). Cuandoocurre un disparo, el bit GO/DONE* se activará, empezando la adquisición yconversión A/D y el Timer1 (o Timer3) se resetea para repetir automáticamente el

periodo de adquisición A/D con el uso de un mínimo de software (mover ADRESH:ADRESL a las localizaciones deseadas). Se tiene que seleccionar el canal deentrada analógico apropiado y un tiempo de adquisición mínimo elegido por el usuarioo un TACQ apropiado antes de que el disparo del evento especial active el bitGO/DONE* (comience la conversión).

Si el módulo A/D no está permitido (ADON está borrado), el disparo del eventoespecial lo ignora el módulo A/D pero reseteará el contador Timer1 (o Timer3).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 308/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

306

TABLA 20-2: Registros Asociados A Las Operaciones A/D

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

PIR1 SPPIF(4) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIE1 SPPIE(4) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

IPR1 SPPIP(4) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

ADRESH A/D Result Register High Byte

ADRESL A/D Result Register Low Byte

ADCON0 — — CHS3 CHS2 CHS1 CHS0 GO/DONE* ADON

ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

ADCON2 ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0

PORTA — RA6(2) RA5 RA4 RA3 RA2 RA1 RA0

TRISA — TRISA6(2) TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0

PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0

LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0

PORTE RDPU(4) — — — RE3(1,3) RE2(4) RE1(4) RE0(4)

TRISE(4) — — — — — TRISE2 TRISE1 TRISE0

LATE(4) — — — — — LATE2 LATE1 LATE0

Leyenda: -=no implementado, se leen ‘0’. Las casillas sombreadas no se utilizancon el módulo A/D.

Nota 1: Implementado cuando el Master Clean está desactivado (configuracióndel bit MCLRE=0).

2: RA6 y su latch asociado y los bits de dirección se activan como puertos de E/S dependiendo de la configuración del oscilador; en otro caso, se leen ‘0’.

3: El puerto RE3 está disponible sólo como entrada cuando el bit deconfiguración MCLRE es ‘0’.

4: Estos registros y/o bits no están disponibles en los dispositivos de28pines.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 309/651

GUILLERMO DAVID HERRERO GONZÁLEZ

307

3.4.21. MÓDULO COMPARADOR

El módulo comparador analógico contiene dos comparadores que se puedenconfigurar de muchas maneras. Las entradas se pueden elegir de las entradas analógicasmultiplexadas con los pines RA0 a RA5, como el módulo de tensión de referencia delchip. Las salidas digitales (normales o invertidas) están disponibles en los niveles de los

pines o también se pueden leer a través del registro de control.

El registro CMCON selecciona la configuración de la entrada y de la salida delcomparador.

REGISTRO 21-1: CMCON: Registro De Control Del Comparador BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

C2OUT C1OUT C2INV C1INV

CIS

CM2

CM1 CM0

R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-1 R/W-1 R/W-1

BIT 7 C2OUT: Bit de salida del comparador 2Cuando C2INV=0:

1 = C2 VIN+ > C2 VIN-0 = C2 VIN+ < C2 VIN-

Cuando C2INV=1:1 = C2 VIN+ < C2 VIN-0 = C2 VIN+ > C2 VIN-

BIT 6 C1OUT: Bit de salida del comparador 1Cuando C1INV=0:

1 = C1 VIN+ > C1 VIN-0 = C1 VIN+ < C1 VIN-

Cuando C1INV=1:1 = C1 VIN+ < C1 VIN-0 = C1 VIN+ > C1 VIN-

BIT 5 C2INV: Bit inversor de la salida del comparador 21 = salida C2 invertida0 = salida C2 no invertida

BIT 4 C1INV: Bit inversor de la salida del comparador 11 = salida C1 invertida

0 = salida C1 no invertidaBIT 3 CIS: Bit del cambio de la entrada del comprador Cuando CM2:CM0=110:

1 =C1 VIN- se conecta con RA3/AN3/VREF+El C2 VIN- se conecta con RA2/AN2/VREF-/CVREF

0 =C1 VIN- se conecta con RA0/AN0El C2 VIN- se conecta con RA1/AN1

BIT 2-0 CM2:CM0: Bits del modo del comparador La figura 21-1 muestra los modos del comparador ylos ajustes de los bits CM2:CM0.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 310/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

308

FIGURA 21-1: Modos De Operación De Las E/S Del Comparador

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 311/651

GUILLERMO DAVID HERRERO GONZÁLEZ

309

3.4.21.1. Configuración Del Comparador

Hay ocho modos de operación para los comparadores. Los bits CM2:CM0 delregistro CMCON se utilizan para seleccionar estos modos. El registro TRISA controlala dirección de los datos de los pines del comparador en cada modo. si cambia el mododel comparador, el nivel de salida del comparador puede que no sea válido para el modoespecificado de cambio de retraso.

Nota: Las interrupciones del comparador se tienen que desactivar durante elcambio de modo del comparador. En otro caso, puede que ocurra una falsa interrupción.

3.4.21.2. Operaciones Del Comparador

En la figura 21-2 se muestra un comparador simple, junto con la relación entre

los niveles de entrada de datos analógicos y la salida digital. Cuando la entradaanalógica en VIN+ es menor que la entrada analógica VIN-, la salida del comparador esun nivel digital bajo. Cuando la entrada analógica en VIN+ es mayor que la entradaanalógica VIN-, la salida del comparador es un nivel digital alto. Las áreas sombreadasde la salida del comparador en la figura 21-2 representan la incertidumbre, debido a lascompensaciones de la entrada y al tiempo de reacción.

FIGURA 21-2: Comparador Simple

3.4.21.3. Referencia Del Comparador Dependiendo del modo de funcionamiento del comparador, se puede utilizar

cualquier referencia externa o interna de tensión. La señal analógica presente en VIN- secompara con la señal en VIN+ y la salida digital del comparador se ajustaconsecuentemente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 312/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

310

3.4.21.3.1. Señal De Referencia Externa

Cuando son externas se utilizan las referencias de tensión, el módulo delcomparador se puede configurar para tener los comparadores funcionar desde la mismau otra fuente de referencia. Sin embargo, las aplicaciones del detector del umbral

pueden necesitar la misma referencia. La señal de referencia debe estar entre VSS y VDD y se puede aplicar a cualquier pin del/los comparador/es.

3.4.21.3.2. Señal De Referencia Interna

El módulo del comparador también permite la selección de referencia interna detensión interna generada por el módulo comparador de tensión de referencia.

La referencia interna está disponible solamente en el modo donde cuatro

entradas se multiplexan a dos comparadores (CM2:CM0=110). En este modo, la tensióninterna de referencia se aplica al pin VIN+ de ambos comparadores.

3.4.21.4. Tiempo De Respuesta Del Comparador

El tiempo de reacción es el tiempo mínimo, después de seleccionar una nuevatensión de referencia o fuente entrada, antes de que la salida del comparador tenga unnivel válido. Si la referencia interna cambia, se tiene que considerar el máximo retrasode la tensión interna de referencia al usar las salidas del comparador. Si no, se tiene queutilizar el máximo retraso de los comparadores.

3.4.21.5. Salidas Del Comparador

Las salidas del comparador se leen con el registro CMCON. Estos bits soninalterables. Las salidas del comparador se pueden poner directamente a los pines RA4y RA5 de E/S. Cuando está permitido, los multiplexores en la trayectoria de salida delos pines RA4 y RA5 cambiará y la salida de cada pin no estará sincronizada con la delcomparador. La incertidumbre de cada uno de los comparadores se relaciona con latensión compensada de la entrada y el tiempo de reacción dado en las especificaciones.

Los bits TRISA activarán/desactivarán la salida de los pines RA4 y RA5mientras esté en este modo.

La polaridad de las salidas del comparador se puede cambiar usando los bits

C2INV y C1INV (CMCON<5: 4>).Nota 1: Al leer el registro PORT, todos los pines configurados como entradas

analógicas se leerán ‘0’. Los pines configurados como entradas digitales convertir unaentrada analógica según las especificaciones de entrada del disparador Schmitt.

2: Los niveles analógicos de cualquier pin definidos como entrada digital pueden hacer que el buffer de entrada consuma más corriente que la que se especifica.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 313/651

GUILLERMO DAVID HERRERO GONZÁLEZ

311

FIGURA 21-3: Diagrama De Bloques Del Comparador De Salida

3.4.21.6. Interrupciones Del Comparador

Se activa el flag de interrupción del comparador siempre que haya un cambio enel valor de la salida de cualquier comparador. El software necesitará mantener lainformación sobre estado de los bits de la salida, dependiendo de la lectura deCMCON<7:6>, para determinar el cambio real que ha ocurrido. El bit CMIF (PIR2<6>)es el flag de interrupción del comparador. El bit CMIF se tiene que resetear borrándolo.

Puesto que está también posible escribir un ‘1’ en este registro, se puede iniciar unainterrupción simulada.

El bit CMIE (PIE2<6>) y el bit PEIE (INTCON<6>) se tienen que activar para permitir la interrupción. Además, el bit GIE (INTCON<7>) tiene que estar activo. Sininguno de estos bits están activos, no se permiten las interrupciones, aunque el bitCMIF todavía se active si ocurre una condición de interrupción.

Nota: Si un cambio en el registro de CMCON (C1OUT o C2OUT) ocurrecuando se está ejecutando la operación de lectura (comienzo del ciclo Q2), entonces elflag de interrupción CMIF (PIR2<6>) puede que no e active.

El usuario, en la rutina de interrupción, puede borrar la interrupción de la manerasiguiente:

a) Cualquier lectura o escritura de CMCON terminará con condición deerror de unión.

b) Borrar el flag CMIF.

Una condición de error de unión continuará activando el flag CMIF. La lecturade CMCON terminará con la condición de error de unión y permitirá que el flag CMIFse borre.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 314/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

312

3.4.21.7. Operaciones Del Comparador Durante El Modo SLEEP

Cuando un comparador está activo y el dispositivo se pone en modo sleep, elcomparador sigue estando activo y la interrupción es funcional si está permitida. Estainterrupción despertará al dispositivo del modo sleep, cuando está permitida. Cadacomparador operacional consumirá corriente adicional, según las indicaciones de lasespecificaciones del comparador. Para reducir al mínimo el consumo de energía en elmodo sleep, se apagan los comparadores (CM2: CM0 = 111) antes de entrar en el modosleep. Si el dispositivo despierta del sleep, no le afecta al contenido del registroCMCON.

3.4.21.8. Efectos De Un Reset

Un reset del dispositivo fuerza al registro CMCON a su estado de reset,

haciendo que los módulos del comparador se apaguen (CM2:CM0=111). Sin embargo,los pines de entrada (RA0 a RA3) se configuran como entradas analógicas por defecto.La configuración de E/S para éstos pines se determina con el ajuste de los bitsPCFG3:PCFG0 (ADCON1<3:0>). Por lo tanto, la corriente del dispositivo se reduce almínimo cuando las entradas analógicas están presentes en el tiempo de reset.

3.4.21.9. Consideraciones En La Conexión De Las Entradas Analógicas

Como los pines analógicos se conectan a una salida digital, hay diodos polarizados inversamente a VDD y VSS. La entrada analógica, tiene que estar entre la

corriente de salida VSS y VDD. Si la tensión de entrada se desvía de este rango más de0,6V en cualquier dirección, uno de los diodos se polariza directamente y ocurre unacondición de lacth-up. Se recomienda una impedancia máxima de la fuente de 10k Ω

para fuentes analógicas. Cualquier componente externo conectado a un pin de entradaanalógica, como un condensador o un diodo zener, debe tener muy poca pérdida decorriente.

FIGURA 21-4: Modelo De Entrada Del Comparador Analógico

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 315/651

GUILLERMO DAVID HERRERO GONZÁLEZ

313

TABLA 21-1: Registros Asociados Al Módulo Comparador

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0

CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

PORTA — RA6(1) RA5 RA4 RA3 RA2 RA1 RA0

LATA — LATA6(1) LATA5 LATA4 LATA3 LATA2 LATA1 LATA0

TRISA — TRISA6(1) TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0

Leyenda: -=no implementado, se leen ‘0’. Las casillas sombreadas no se utilizancon el módulo comparador.

Nota 1: PORTA<6> y su dirección y bit de latch se configuran

individualmente como pin de puerto en varios modos de oscilador. Cuando estádesactivado estos bits se leen ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 316/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

314

3.4.22. MÓDULO COMPARADOR DE TENSIÓN DE REFERENCIA

La tensión del comparador de referencia es una red de 16 resistencias que proporciona una referencia seleccionable de tensión. Aunque su propósito primario es proporcionar una referencia para los comparadores analógicos, se puede utilizar tambiénindependientemente de ellos.

La red de resistencias se divide en segmentos para proporcionar dos gamas devalores de CVREF y tiene una función de caída de energía para conservar la energíacuando la referencia no se está utilizando. La fuente de referencia del módulo se puedeobtener de dispositivo VDD/VSS o una referencia externa de tensión.

3.4.22.1. Configuración Del Módulo Comparador De Tensión De

ReferenciaEl módulo comparador de tensión de referencia se controla con el registro

CVRCON. El comparador de tensión de referencia proporciona dos gamas de tensión desalida, cada uno con 16 niveles distintos. La gama que se utiliza se selecciona con el bitCVRR (CVRCON<5>). La diferencia primaria entre las gamas es el tamaño de los

pasos seleccionados con los bits CVREF (CVR3:CVR0), con una gama de resoluciónmás fina. Las ecuaciones utilizadas para calcular la salida de referencia de la tensión delcomparador son:

Si CVRR=1:

CVREF

=((CVR3:CVR0)/24)xCVRSRC

Si CVRR=0:

CVREF=(CVRSRC/4)+(((CVR3:CVR0)/32)xCVRSRC)

La tensión de la fuente de referencia del comparador puede venir de VDD y deVSS, o de VREF+ externo y VREF- que se multiplexan con RA2 y RA3. La fuente detensión se selecciona con el bit CVRSS (CVRCON<4>).

Se tiene que considerar el periodo de configuración de comparador de tensión dereferencia al cambiar la salida CVREF.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 317/651

GUILLERMO DAVID HERRERO GONZÁLEZ

315

REGISTRO 22-1: CVRCON: Registro De Control De La Tensión De Referencia Del Comparador

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

CVREN CVROE(1) CVRR CVRSS CVR3 CVR2 CVR1 CVR0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BIT 7 CVREN: Bit de permiso de comparador de tensión de referencia1= Circuito CVREF encendido0= Circuito CVREF apagado

BIT 6 CVROE: Bit de permiso de la salida del comparador VREF(1)

1= El nivel de tensión CVREF también sale por el pin

RA2/AN2/VREF-/CVREF 0= La tensión CVREF se desconecta del pin

RA2/AN2/VREF-/CVREF BIT 5 CVRR: Bit de selección del rango del comparador VREF

1 = 0 a 0,667CVRSRC, con el tamaño de paso CVRSRC/24(gama baja)

0 = 0,25CVRSRC a 0,75CVRSRC, con el tamaño de pasoCVRSRC/32 (alta gama)

BIT 4 CVRSS: Bit de selección de la fuente del comparador VREF 1 = fuente de referencia del comparador,

CVRSRC=(VREF+)-(VREF-)0 = fuente de referencia del comparador,

CVRSRC=VDD –VSS BIT 3-0 CVR3:CVR0: Bits de selección del valor del comparador VREF

(0<=(CVR3:CVR0)<=15)Cuando CVRR=1:

CVREF=((CVR3:CVR0)/24)•(CVRSRC)Cuando CVRR=0:

CVREF=(CVRSRC/4)+((CVR3:CVR0)/32)•(CVRSRC)

Nota 1: CVROE elimina el ajuste del bit TRISA<2>.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 318/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

316

FIGURA 22-1: Diagrama De Bloques Del Comparador De Tensión De Referencia

3.4.22.2. Exactitud/Error De La Tensión De Referencia

La gama completa de la tensión de referencia no se puede observar debido a laconstrucción del módulo. Los transistores en la tapa y el fondo de la red de la escala deresistencias guardan CVREF la referencia de la fuente. La tensión de referencia deriva dela fuente de referencia; por lo tanto, la salida CV

REFcambia con fluctuaciones en esa

fuente.

3.4.22.3. Operación En Modo SLEEP

Cuando el dispositivo despierta del sleep con una interrupción o undesbordamiento del perro guardián, no le afecta al contenido del registro CVRCON.Para reducir al mínimo la consumición actual en el modo sleep, la tensión de referenciadebe desactivarse.

3.4.22.4. Efectos De Un Reset

Un reset del dispositivo inhabilita la referencia de tensión borrando el bit,CVREN (CVRCON<7>). Este reset también desconecta la referencia del pin RA2 borrando el bit, CVROE (CVRCON<6>) y selecciona el rango de alta tensión borrandoel bit, CVRR (CVRCON<5>). El valor de los bits selectores CVR también se borra.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 319/651

GUILLERMO DAVID HERRERO GONZÁLEZ

317

3.4.22.5. Consideraciones De La Conexión

El módulo de tensión de referencia funciona independientemente del módulocomparador. La salida del generador de referencia se puede conectar al pin RA2 si el bitTRISA<2> y el bit CVROE están activos. Permitiendo a la tensión poner la salida enRA2 cuando se configura como una entrada digital aumentará la consumición decorriente. Conectando RA2 como salida digital con CVRSS permitido tambiénaumentará el consumo de corriente.

El pin RA2 se puede utilizar como salida D/A simple con capacidad de controllimitada. Debido a la capacidad limitada de corriente actual, se debe utilizar un buffer en la salida de tensión de referencia para las conexiones externas a VREF.

FIGURA 22-2: Ejemplo De Buffer De Salida Del Comparador De Tensión De

Referencia

Nota 1: R depende de los bits de configuración de la tensión de referencia,CVRCON<5> y CVRCON<3:0>.

TABLA 22-1: Registros Asociados Al Comparador De Tensión De Referencia

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0

CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0

TRISA — TRISA6(1) TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0

Leyenda: -=no implementado, se leen ‘0’. Las casillas sombreadas no se utilizancon el módulo comparador de la tensión de referencia.

Nota 1: PORTA<6> y su dirección y bit de latch se configuranindividualmente como pin de puerto en varios modos de oscilador. Cuando estádesactivado estos bits se leen ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 320/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

318

3.4.23. DETECTOR DE ALTA /BAJA TENSIÓN (HLVD)

Los dispositivos PIC18F2455/2550/4455/4550 tienen un módulo detector dealta/baja tensión (HLVD). Éste es un circuito programable que permite al usuarioespecificarla tensión del cambio del dispositivo y la dirección del cambio en ese punto.Si el dispositivo experimenta un cambio mayor, se activa un flag de interrupción. Si se

permite la interrupción, la ejecución del programa saltará a la dirección de vector deinterrupción y el software responde a la interrupción.

El registro de control que detecta la alta/baja tensión controla totalmente laoperación del Módulo HLVD. Esto permite que el circuito “lo apague” el usuario bajocontrol por software que reduce al mínimo la consumición actual del dispositivo.

REGISTRO 23-1: HLVDCON: Registro De Control Del Detector De Alta/Baja TensiónBIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

VDIRMAG - IRVST HLVDEN HLVDL3 HLVDL2 HLVDL1 HLVDL0

R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-1 R/W-0 R/W-1

BIT 7 VDIRMAG: Bit selector de la magnitud de la dirección de tensión1 = el acontecimiento ocurre cuando la tensión iguala o

excede el punto (HLVDL3:HLDVL0)0 = el acontecimiento ocurre cuando la tensión iguala o

cae por debajo del punto (HLVDL3: HLVDL0)BIT 5 IRVST: Flag de la tensión interna de referencia estable1 = indica que la tensión detectada generará el flag de

interrupción en la gama especificada0 = indica que la tensión detectada no generará el flag

de interrupción en la gama especificada y lainterrupción HLVD no se debe permitir

BIT 4 HLVDEN: Bit de permiso del detector de la alta/baja tensión1 = HLVD permitido0 = HLVD inhabilitado

BIT 3-0 HLVDL3:HLVDL0: Bits del límite de detección de tensión

1111 = se utiliza la entrada analógica externa (la entradaes el pin HLVDIN)

1110 = ajuste máximo...0000 = ajuste mínimo

El módulo se permite activando el bit HLVDEN. Cada vez que se permite elmódulo HLVD, el circuito requiere un cierto tiempo para estabilizarse. El bit IRVST esun bit inalterable y se utiliza para indicar cuando el circuito es estable. El módulo puedegenerar una sola interrupción después de que el circuito sea estable y se activa IRVST.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 321/651

GUILLERMO DAVID HERRERO GONZÁLEZ

319

El bit VDIRMAG determina la operación total del módulo. Cuando se borraVDIRMAG, el módulo supervisa las bajadas en VDD por debajo de un punto

predeterminado. Cuando se activa el bit, la supervisón del módulo se realiza en lassubidas de VDD sobre el punto de ajuste.

3.4.23.1. Operación

Cuando se permite el módulo HLVD, un comparador usa una tensión dereferencia interna generada como puntote ajuste. El punto de ajuste se compara con el

punto de cambio, donde cada nodo en el divisor de la resistencia representa la tensióndel punto de cambio. “La tensión del punto de cambio” es el nivel de tensión en el cualel dispositivo detecta un acontecimiento de subida o bajada de tensión, dependiendo dela configuración del módulo. Cuando la fuente de tensión es igual al punto de cambio, la

tensión que llega a la matriz de resistencias es igual a la tensión de referencia internagenerada por el módulo de tensión de referencia. El comparador entonces genera unaseñal de interrupción activando el bit HLVDIF.

La tensión del punto de cambio es programable por software a cualquiera de los16 valores. El punto de cambio se selecciona programando los bits HLVDL3:HLVDL0(HLVDCON<3: 0>).

El módulo HLVD tiene una característica adicional que permite al usuario proveer la tensión de cambio al módulo mediante una fuente externa. Se permite estemodo cuando los bits, HLVDL3:HLVDL0, se fijan a ‘1111’. En este estado, la entradadel comparador se multiplexa con la entrada del pin externa, HLVDIN. Esto da a los

usuarios flexibilidad porque permite que configuren la interrupción del detector dealta/baja tensión para que ocurra en la gama de tensión en funcionamiento.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 322/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

320

FIGURA 23-1: Diagrama De Bloques Del Módulo HLVD (Con Entrada Externa)

3.4.23.2. Configuración Del HLVD

Se necesitan los siguientes pasos para instalar el módulo HLVD:

1. Inhabilitar el módulo despejando el bit HLVDEN (HLVDCON<4>).2. Escribir el valor del punto de cambio en los bits HLVDL3:HLVDL0.3. Activar el bit VDIRMAG para detectar la subida de tensión

(VDIRMAG=1) o la bajada de tensión (VDIRMAG=0).4. Permitir el módulo HLVD activando el bit HLVDEN.5. Despejar el flag de interrupción HLVD, HLVDIF (PIR2<2>), que puede

estar activo.6. Permitir la interrupción HLVD, si se quieren las interrupciones,

activando los bits HLVDIE y GIE/GIEH (PIE2<2> e INTCON<7>). Unainterrupción se genera hasta que se activa el bit IRVST.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 323/651

GUILLERMO DAVID HERRERO GONZÁLEZ

321

3.4.23.3. Consumición De Corriente

Cuando se permite el módulo, el comparador HLVD y el divisor de tensiónconsumirán parásitos atmosféricos.

Dependiendo de la aplicación, el módulo HLVD no necesita funcionar constantemente. Para disminuir los requisitos actuales, el circuito HLVD puede

permitirse en periodos cortos donde se compruebe la tensión. Después de hacer lacomprobación, el módulo HLVD puede desactivarse.

3.4.23.4. Tiempo De Arranque De HLVD

La tensión interna de referencia del módulo HLVD, la puede utilizar otrocircuito interno, por ejemplo el reset programable por cese de tensión. Si el HLVD u

otros circuitos que usan la tensión de referencia se inhabilitan para bajar la consumiciónactual del dispositivo, la tensión de referencia del circuito requerirá un tiempo para ser estable antes de que una condición de bajada o subida de tensión pueda detectarsefiablemente. Este tiempo de arranque, TIRVST, es un intervalo que es independiente de lavelocidad de reloj del dispositivo.

El flag de interrupción de HLVD permanece desactivado hasta que TIRVST expirey se alcance una tensión estable de referencia. Por esta razón, los excesos leves del

punto de cambio puede que no se detecten.

FIGURA 23-2: Operación De Detección De Bajada De Tensión (VDIRMAG=0)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 324/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

322

FIGURA 23-3: Operación De Detección De Subida De Tensión (VDIRMAG=1)

3.4.23.5. Aplicaciones

En muchas aplicaciones, se desea la capacidad de detectar un pico bajo o lasubida de un umbral particular. Para el ejemplo, el módulo HLVD podía estar configurado para detectar periódicamente la conexión o desconexión del Bus SerieUniversal (USB). Esto asume que el dispositivo se acciona con una fuente de tensiónmás baja que cuando el USB está desconectado. Una activación indicaría que se hadetectado un nivel alto de tensión, por ejemplo, 3,3V a 5V (tensión en el USB) yviceversa al desconectar. Esta característica podía ahorrar el diseño de algún suplementode componentes y una señal de activación (pin de entrada).

En aplicaciones generales con batería, el cuadro 24-4 muestra una curva posiblede tensión. En un cierto tiempo, la tensión del dispositivo disminuye. Cuando la tensióndel dispositivo alcanza la tensión VA, la lógica del HLVD genera una interrupción en eltiempo, TA. La interrupción podía causar la ejecución de un ISR, el cuál permitiría quela paliación realizara “tareas de economización” y realizan una parada controlada antesde que la tensión salga del rango de tensión válida para el dispositivo en TB. El HLVD,así, daría a la aplicación una ventana de tiempo, representada por la diferencia entre T A y TB, para salir con seguridad.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 325/651

GUILLERMO DAVID HERRERO GONZÁLEZ

323

FIGURA 23-4: Aplicación Típica Del Detector De Alta/Baja Tensión

3.4.23.6. Operaciones En El Modo Sleep

Cuando se activa, el circuito HLVD continúa funcionando durante el modosleep. Si la tensión del dispositivo cruza el punto de cambio, el bit HLVDIF se activaráy el dispositivo se despertará del sleep. La ejecución del dispositivo continuará en elvector interrupción si están permitidas las interrupciones globalmente.

3.4.23.7. Efectos De Un Reset Un reset del dispositivo fuerza a los registros a su estado de reset. Esto provoca

que el módulo HLVD se apague.

TABLA 23-1: Registros Asociados Al Módulo Detector De Alta/Baja Tensión

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

HLVDCON VDIRMAG — IRVST HLVDEN HLVDL3 HLVDL2 HLVDL1 HLVDL0

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

PIR2 OSCFIF CMIF USBIF EEIF BCLIF HLVDIF TMR3IF CCP2IF

PIE2 OSCFIE CMIE USBIE EEIE BCLIE HLVDIE TMR3IE CCP2IE

IPR2 OSCFIP CMIP USBIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

Leyenda: -=no implementado, se leen ‘0’. Las casillas sombreadas no se utilizancon el módulo HLVD.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 326/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

324

3.4.24. CARACTERÍSTICAS ESPECIALES DE LA CPU

Los dispositivos PIC18F2455/2550/4455/4550 incluyen varias características para maximizar la confiabilidad y reducir el coste al mínimo con la eliminación decomponentes externos. Éstos son:

Ê Selección del oscilador Ê Resets:

9 Reset por subida de tensión (POR)9 Temporizador de inicio (PWRT)9 Temporizador de inicio del oscilador (OST)9 Reset por cese de tensión (BOR)

Ê Interrupciones

Ê Temporizador perro guardián (WDT)Ê Monitor de reloj a prueba de fallosÊ Arranque a dos velocidadesÊ Código de protecciónÊ Localizaciones de identificaciónÊ Programación serie “en Circuito”

El oscilador se puede configurar para cada aplicación dependiendo de lafrecuencia, la energía, la exactitud y el coste.

Además de sus contadores de tiempo del arranque y del oscilador temporizador de inicio para los resets, los dispositivos PIC18F2455/2550/4455/4550 tienen un

temporizador perro guardián, que se permite permanentemente con los bits deconfiguración o el software de control (si está inhabilitado).

La inclusión de un oscilador interno RC también proporciona ventajasadicionales de un monitor de reloj a prueba de fallos (FSCM) y arranque de dosvelocidades. FSCM proporciona una supervisión oculta del reloj del periférico y uncambio automático en caso de fallo. El arranque a dos velocidades permite al códigoejecutarse casi inmediatamente en el inicio, mientras que la fuente de reloj primariotermina su retraso de inicio.

Todas estas características se permiten y se configuran activando los bitsapropiados del registro de configuración.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 327/651

GUILLERMO DAVID HERRERO GONZÁLEZ

325

3.4.24.1. Bits De Configuración

Los bits de configuración pueden programarse (leerse como ‘0’) o no programarse (leerse como ‘1’) para seleccionar varias configuraciones del dispositivo.Estos bits están mapeados en la posición de memoria del programa 300000h.

El usuario observará que la dirección 300000h está más allá de memoria del programa de usuario. De hecho, pertenece a memoria de la configuración (300000h-3FFFFFh), la cuál puede alcanzarse solamente usando la lectura y escritura de tablas.

La programación de los registros de configuración se hace de manera similar a la programación de la memoria flash. El bit WR del registro EECON1 comienza unaescritura auto-temporizada en el registro de configuración. En modo de operaciónnormal, una instrucción TBLWT, con el TBLPTR señalando al registro de

configuración, selecciona la dirección y los datos para escribir el registro deconfiguración. Al activar el bit WR comienza una “escritura larga” en el registro deconfiguración. En los registros de configuración se escribe un byte a la vez. Al escribir o borrar una célula de configuración, una instrucción TBLWT puede escribir un ‘1’ o un‘0’ en la célula.

TABLA 24-1: Bits De Configuración E Identificadores Del Dispositivo

Nombre del Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Valor por

defecto

300000h CONFIG1L — — USBDIV CPUDIV1 CPUDIV0 PLLDIV2 PLLDIV1 PLLDIV0 --000000

300001h CONFIG1H IESO FCMEN — — FOSC3 FOSC2 FOSC1 FOSC0 00--0101

300002h CONFIG2L — — VREGEN BORV1 BORV0 BOREN1 BOREN0 PWRTEN* --011111

300003h CONFIG2H — — — WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN ---11111

300005h CONFIG3H MCLRE — — — — LPT1OSC PBADEN CCP2MX 1----011

300006h CONFIG4L DEBUG* XINST ICPRT(3) — — LVP — STVREN 100--1-1

300008h CONFIG5L — — — — CP3(1) CP2 CP1 CP0 ----1111

300009h CONFIG5H CPD CPB — — — — — — 11-----

30000Ah CONFIG6L — — — — WRT3(1) WRT2 WRT1 WRT0 ----1111

30000Bh CONFIG6H WRTD WRTB WRTC — — — — — 111----

30000Ch CONFIG7L — — — — EBTR3(1) EBTR2 EBTR1 EBTR0 ----1111

30000Dh CONFIG7H — EBTRB — — — — — — -1-----

3FFFFEh DEVID1 DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0 xxxxxxxx(2)

3FFFFFh DEVID2 DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3 00010010(2)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 328/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

326

Leyenda: x= desconocido; u=sin cambios; -=no implementado, se leen ‘0’

Nota 1: No implementado en los dispositivos PIC18Fx455; mantener el bitactivo

2: Ver los registros 25-13 y 25-14 para los valores de DEVID. Losregistros DEVID sólo se pueden leer y no los puede programar el usuario.

3: Disponible en los PIC18F4455/4550 en encapsulado TQFP de44pines. Mantener este bit borrado en el resto de dispositivos.

REGISTRO 24-1: CONFIG1L: Registro De Configuración Bajo (Dirección Del Byte300000h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - USBDIV CPUDIV1 CPUDIV0 PLLDIV2 PLLDIV1 PPDIV0

U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x

BIT 5 USBDIV: Bit de selección del reloj del USB (usado sólo en elmodo Full-Speed; UCFG: FSEN = 1)

1 = fuente del reloj del USB viene de los 96MHz PLLdivididos por 2

0 = fuente del reloj del USB viene directamente del bloque del oscilador primario sin postscaler

BIT 4-3 CPUDIV1:CPUDIV0: Bits de selección del Postscaler del reloj delsistemaPara modos del oscilador XT, HS, EC y ECIO:

11 = oscilador primario se divide por 4 para obtener elreloj del sistema

10 = oscilador primario se divide por 3 para obtener elreloj del sistema

01 = oscilador primario se divide por 2 para obtener elreloj del sistema

00 = oscilador primario usado directamente en el relojdel sistema (ningún postscaler)

Para modos del oscilador XTPLL, HSPLL, ECPLL yECPIO:11 = 96MHz PLL se divide por 6 para obtener el reloj

del sistema10 = 96MHz PLL se divide por 4 para obtener el reloj

del sistema01 = 96MHz PLL se divide por 3 para obtener el reloj

del sistema00 = 96MHz PLL se divide por 2 para obtener el reloj

del sistemaBIT 2-0 PLLDIV2:PLLDIV0: Bits de selección del Prescaler del PLL

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 329/651

GUILLERMO DAVID HERRERO GONZÁLEZ

327

111 = se divide por 12 (la entrada del oscilador de48MHz)

110 = se divide por 10 (la entrada del oscilador de40MHz)

101 = se divide por 6 (la entrada del oscilador de24MHz)

100 = se divide por 5 (la entrada del oscilador de20MHz)

011 = se divide por 4 (la entrada del oscilador de16MHz)

010 = se divide por 3 (la entrada del oscilador de12MHz)

001 = se divide por 2 (la entrada del oscilador de

8MHz)000 = ningún prescaler (conducen 4MHz de entrada del

oscilador PLL directamente)

REGISTRO 24-2: CONFIG1H: Registro De Configuración Alto (Dirección Del Byte300001h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

IESO FCMEN - - FOSC3(1) FOSC2(1) FOSC1(1) FOSC0(1)

R/P-0 R/P-0 U-0 U-0 R/P-0 R/P-1 R/P-0 R/P-1

BIT 7 IESO: Bit del intercambio interno y externo del oscilador 1 = modo del intercambio del oscilador permitido0 = modo del intercambio del oscilador inhabilitado

BIT 6 FCMEN: Bit de permiso del monitor del reloj a prueba de fallos1 = monitor del reloj a prueba de fallos permitido0 = monitor del reloj a prueba de fallos inhabilitado

BIT 3-0 FOSC3:FOSC0: Bits de selección del oscilador (1) 111x= oscilador HS, PLL permitido (HSPLL)110x= oscilador HS (HS)1011= oscilador interno, oscilador HS utilizado por el

USB (INTHS)1010= oscilador interno, XT utilizado por USB el

(INTXT)1001= oscilador interno, CLKO en RA6, EC

utilizado por el USB (INTCKO)1000= oscilador interno, puerto en RA6, EC utilizado

por el USB (INTIO)0111= Oscilador EC, PLL permitido, CLKO en RA6

(ECPLL)0110= Oscilador EC, PLL permitido, puerto en RA6

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 330/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

328

(ECPIO)0101= Oscilador EC, CLKO en RA6 (EC)

0100 = Oscilador EC, puerto en RA6 (ECIO)001x= oscilador XT, PLL permitido (XTPLL)000x = oscilador de XT (XT)

Nota 1: El microcontrolador y el módulo USB utilizan el oscilador seleccionadocomo su fuente del reloj en los modos XT, HS y EC. El módulo USB utiliza el oscilador indicado XT, HS o EC como su fuente del reloj siempre que el microcontrolador utiliceel oscilador interno.

REGISTRO 24-3: CONFIG2L: Registro De Configuración Bajo (Dirección Del Byte300002h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - VREGEN BORV1 BIRV0 BOREN1(1) BOREN1(1) PWRTEN*(1)

U-0 U-0 R/P-0-0 R/P-1 R/P-1 R/P-1 R/P-1 R/P-1

BIT5 VREGEN: Bit de permiso del regulador interno de tensión del USB1 = regulador de tensión del USB permitido0 = regulador de tensión del USB inhabilitado

BIT 4-3 BORV1:BORV0: Bits de ajuste de la tensión de los resets por caída detensión

11 = ajuste mínimo...

00 = ajuste máximoBIT 2-1 BOREN1:BOREN0: Bit de permiso del reset por caída de tensión

11= reset permitido en hardware solamente(SBOREN desactivado)

10= reset permitido en hardware solamente einhabilitado en modo sleep (SBOREN desactivado)

01= reset permitido y controlado por software

(SBOREN permitido)00= reset desactivado en hardware y softwareBIT 0 PWRTEN: Bit de permiso del temporizador de inicio (PWRT)(1)

1 = PWRT inhabilitado0 = PWRT permitido

Nota 1: El temporizador de inicio se desempareja del reset de caída de tensión, permitiendo que estas características sean controladas independientemente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 331/651

GUILLERMO DAVID HERRERO GONZÁLEZ

329

REGISTRO 24-4: CONFIG2H: Registro De Configuración Alto (Dirección Del Byte300003h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - USBDIV CPUDIV1 CPUDIV0 PLLDIV2 PLLDIV1 PPDIV0

U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x

BIT 4-1 WDTPS3:WDTPS0: Bits selectores del Postscaler del temporizador del perro guardián

1111 = 1:32,7681110 = 1:16,3841101 = 1:8,192

1100 = 1:4,0961011 = 1:2,0481010 = 1:1,0241001 = 1:5121000 = 1:2560111 = 1:1280110 = 1:640101 = 1:320100 = 1:160011 = 1:80010 = 1:40001 = 1:20000 = 1:1

BIT 0 WDTEN: Bit de permiso del temporizador del perro guardián1 = WDT permitido0 = WDT inhabilitado (el bit de control es SWDTEN)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 332/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

330

REGISTRO 24-5: CONFIG3H: Registro De Configuración Alto (Dirección Del Byte300005h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

MCLRE - - - - LPT1OSC PBADEN CCP2MX

R/P-1 U-0 U-0 U-0 U-0 R/P-0 R/P-1 R/P-1

BIT 7 MCLRE: Bit de permiso del pin MCLR*1= pin MCLR permitido, pin RE3 inhabilitado0 = pin RE3 permitido, pin MCLR inhabilitado

BIT 2 LPT1OSC: Bit de permiso de la potencia del oscilador Timer11 = Timer1 configurado como baja potencia

0 = Timer1 configurado como alta potenciaBIT 1 PBADEN: Bit de permiso del PORTB A/D

(Afecta al estado del reset de ADCON1. ADCON1controla la configuración del pin PORTB<4:0>.)

1 = los pines PORTB<4:0> se configuran como canalesde la entrada analógica en el reset

0 = los pines PORTB<4:0> se configuran como E/Sdigital en el reset

BIT 0 CCP2MX: Bit CCP2 MUX1 = la entrada-salida CCP2 se multiplexa con RC10 = la entrada-salida CCP2 se multiplexa con RB3

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 333/651

GUILLERMO DAVID HERRERO GONZÁLEZ

331

REGISTRO 24-6: CONFIG4L: Registro De Configuración Bajo (Dirección Del Byte300006h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DEBUG* XINST ICPRT(1) - - LVP - STVREN

R/P-1 R/P-0 R/P-0 U-0 U-0 R/P-1 U-0 R/P-1

BIT 7 DEBUG*: Bit de permiso de la depuración oculta1 = depuración oculta inhabilitada, RB6 y RB7

configurados como pines E/S generales0 = depuración oculta permitida, RB6 y RB7 se dedica a

eliminar errores “en Circuito”

BIT 6 XINST: Bit de permiso del sistema de instrucciones extendidas1 = extensión del sistema de instrucción y modo de

dirección indexado permitidos0 = extensión del sistema de instrucción y modo de

dirección indexado inhabilitados (modo herencia)BIT 5 ICPRT: Bit de permiso del puerto de programación/depuración

“en Circuito” (ICPORT)(1) 1 = ICPORT permitido0 = ICPORT inhabilitado

BIT 2 LVP: Bit de permiso de un Sólo-Proveedor ICSP™1 = Sólo-Proveedor ICSP permitido0 = Sólo-Proveedor ICSP inhabilitado

BIT 0 STVREN: Bit de permiso de reset por desbordamientosuperior/inferior de la pila

1 = Reset permitido0 = Reset no permitido

Nota 1: Disponible solamente en los dispositivos PIC18F4455/4550 de 44 pinescon encapsulado TQFP. Borrar este bit en el resto de los dispositivos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 334/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

332

REGISTRO 24-7: CONFIG5L: Registro De Configuración Bajo (Dirección Del Byte300008h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - - CP3(1) CP2 CP1 CP0

U-0 U-0 U-0 U-0 R/C-1 R/C-1 R/C-1 R/C-1

BIT 3 CP3: Bit de protección del código (1) 1 = el bloque 3 (006000-007FFFh) no es el código de

protección0 = el bloque 3 (006000-007FFFh) es el código de

protección

BIT 2 CP2: Bit de protección del código1 = el bloque 2 (004000-005FFFh) no es el código de

protección0 = el bloque 2 (004000-005FFFh) es el código de

protecciónBIT 1 CP1: Bit de protección del código

1 = el bloque 1 (002000-003FFFh) no es el código de protección

0 = el bloque 1 (002000-003FFFh) es el código de protección

BIT 0 CP0: Bit de protección del código1 = el bloque 0 (000800-001FFFh) no es el código de

protección0 = el bloque 0 (000800-001FFFh) es el código de

protección

Nota 1: No implementado en los dispositivos PIC18FX455; mantener este bitactivo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 335/651

GUILLERMO DAVID HERRERO GONZÁLEZ

333

REGISTRO 24-8: CONFIG5H: Registro De Configuración Alto (Dirección Del Byte300009h)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

CPD CP8 - - - - - -

R/C-1 R/C-1 U-0 U-0 U-0 U-0 U-0 U-0

BIT 7 CPD: Bit de protección del código de los datos EEPROM1 = la EEPROM no se protege0 = la EEPROM se protege

BIT 6 CPB: Bit de protección del código del bloque de arranque1 = el bloque de arranque (000000-0007FFh) no se

protege0 = el bloque de arranque (000000-0007FFh) se protege

REGISTRO 24-9: CONFIG6L: Registro De Configuración Bajo (Dirección Del Byte30000Ah)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - - WRT3(1) WRT2 WRT1 WRT0

U-0 U-0 U-0 U-0 R/C-1 R/C-1 R/C-1 R/C-1

BIT 3 WRT3: Bit de protección de la escritura(1) 1 = el bloque 3 (006000-007FFFh) no es la protección

contra la escritura0 = el bloque 3 (006000-007FFFh) es la protección

contra la escrituraBIT 2 WRT2: Bit de protección de la escritura

1 = el bloque 2 (004000-005FFFh) no es la proteccióncontra la escritura

0 = el bloque 2 (004000-005FFFh) es la proteccióncontra la escritura

BIT 1 WRT1: Bit de protección de la escritura1 = el bloque 1 (002000-003FFFh) no es la protección

contra la escritura0 = el bloque 1 (002000-003FFFh) es la protección

contra la escrituraBIT 0 WRT0: Bit de protección de la escritura

1 = el bloque 0 (000800-001FFFh) o (001000-001FFFh)no es la protección contra la escritura

0 = el bloque 0 (000800-001FFFh) o (001000-001FFFh)es la protección contra la escritura

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 336/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

334

Nota 1: No implementado en los dispositivos PIC18FX455; mantener este bitactivo.

REGISTRO 24-10: CONFIG6H: Registro De Configuración Alto (Dirección Del Byte30000Bh)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

WRTD WRTB WRTC(1) - - - - -

R/C-1 R/C-1 R/C-1 U-0 U-0 U-0 U-0 U-0

BIT 7 WRTD: Bit de protección de la escritura de datos EEPROM1 = los datos EEPROM no tienen protección de

escritura0 = los datos EEPROM tienen protección de escritura

BIT 6 WRTB: Bit de protección de la escritura en el bloque dearranque

1 = el bloque de arranque (000000-0007FFh) no tiene protección de escritura

0 = el bloque de arranque (000000-0007FFh) tiene protección de escritura

BIT 5 WRTC: Bit de protección de la escritura en el registro deconfiguración(1)

1 = registros (300000-3000FFh) no están protegidos

0 = registros (300000-3000FFh) protegidosNota 1: Este bit es inalterable en modo normal de ejecución; se puede escribir

solamente en modo programación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 337/651

GUILLERMO DAVID HERRERO GONZÁLEZ

335

REGISTRO 24-11: CONFIG7L: Registro De Configuración Bajo (Dirección Del Byte30000Ch)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - - EBTR3(1) EBTR2 EBTR1 EBTR0

U-0 U-0 U-0 U-0 R/C-1 R/C-1 R/C-1 R/C-1

BIT 3 EBTR3: Bit de protección de lectura de tabla(1) 1 = el bloque 3 (006000-007FFFh) no protege contra la

lectura en otros bloques0 = el bloque 3 (006000-007FFFh) protege contra la

lectura en otros bloques

BIT 2 EBTR2: Bit de protección de lectura de tabla1 = el bloque 2 (004000-005FFFh) no protege contra la

lectura en otros bloques0 = el bloque 2 (004000-005FFFh) protege contra la

lectura en otros bloquesBIT 1 EBTR1: Bit de protección de lectura de tabla

1 = el bloque 1 (002000-003FFFh) no protege contra lalectura en otros bloques

0 = el bloque 1 (002000-003FFFh) protege contra lalectura en otros bloques

BIT 0 EBTR0: Bit de protección de lectura de tabla1 = el bloque 0 (000800-001FFFh) no protege contra la

lectura en otros bloques0 = el bloque 0 (000800-001FFFh) protege contra la

lectura en otros bloques

Nota 1: No implementado en los dispositivos PIC18FX455; mantener este bitactivo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 338/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

336

REGISTRO 24-12: CONFIG7H: Registro De Configuración Alto (Dirección Del Byte30000Dh)

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- EBTRB - - - - - -

U-0 R/C-1 U-0 U-0 U-0 U-0 U-0 U-0

BIT 6 EBTRB: Bit de protección de lectura de tabla en el bloque dearranque

1 = el bloque de arranque (000000-0007FFh) no protegecontra la lectura en otros bloques

0 = el bloque del cargador (000000-0007FFh) protege

contra la lectura en otros bloques

REGISTRO 24-13: DEVID1: Registro De Identificación Del Dispositivo Para Los Dispositivos PIC18F2455/2550/4455/4550

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0

R R R R R R R R

BIT 7-5 DEV2:DEV0: Bits de identificación del dispositivo

011 = PIC18F2455010 = PIC18F2550001 = PIC18F4455000 = PIC18F4550

BIT 4-0 REV3:REV0: Bits de identificación de la revisiónEstos bits se utilizan para indicar la revisión del

dispositivo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 339/651

GUILLERMO DAVID HERRERO GONZÁLEZ

337

REGISTRO 24-14: DEVID2: Registro De Identificación Del Dispositivo Para Los Dispositivos PIC18F2455/2550/4455/4550

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DEV10(1) DEV9(1) DEV8(1) DEV7(1) DEV6(1) DEV5(1) DEV4(1) DEV3(1)

R R R R R R R R

BIT 7-0 DEV10:DEV3: Bits de identificación del dispositivo(1) Estos bits se utilizan con los bits DEV2:DEV0 del

DEVID1 para identificar el número de parte.0001 0010 = dispositivos PIC18F2455/2550/4455/4550

Nota 1: Estos valores de DEV10:DEV3 se puede compartir con otrosdispositivos. El dispositivo específico es identificado siempre usando la secuencia de bits DEV10:DEV0.

3.4.24.2. Temporizador Del Perro Guardián (WDT)

En los dispositivos PIC18F2455/2550/4455/4550, el WDT se controla con lafuente INTRC. Cuando está permitido el WDT, la fuente del reloj también lo está. El

período nominal del WDT es de 4ms y tiene la misma estabilidad que Oscilador INTRC.

El período de 4ms del WDT se multiplica por un postscaler de 16bit. Cualquier

salida del postscaler de WDT se selecciona con un multiplexor, controlado con los bitsdel Registro 2H. La gama de periodos disponible es a partir de 4ms a 131,072 segundos(2,18 minutos). El WDT y el postscaler se borra cuando ocurre uno de estosacontecimientos: se ejecuta una instrucción SLEEP o CLRWDT, se cambian los bitsIRCF (OSCCON<6:4>) o falla el reloj.

Nota 1: Las instrucciones CLRWDT y SLEEP borran las cuentas del WDT ydel postscaler.

2: Cambiar el ajuste de los bits IRCF (OSCCON<6:4>) borra las cuentasdel WDT y del postscaler.

3: Cuando se ejecuta una instrucción de CLRWDT, borra la cuenta del

postscaler.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 340/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

338

FIGURA 24-1: Diagrama De Bloques Del WDT

3.4.24.2.1. Registro De ControlEl registro WDTCON es un registro legible y escribible que contiene un bit de

control que permite que el software elimine el bit de permiso del WDT, pero solamentesi el bit de configuración está inhabilitando el WDT.

REGISTRO 24-15: WDTCON: Registro De Control Del WDT

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

- - - - - - - SWDTEN(1)

U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0

BIT 0 SWDTEN: Software del control del bit de permiso del WDT (1) 1 = temporizador del perro guardián está encendido0 = temporizador del perro guardián está apagado

Nota 1: Este bit no tiene ningún efecto si se permite el bit de configuración,WDTEN.

TABLA 24-2: Sumario De Registros Del WDT

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

RCON IPEN SBOREN(1) — RI* TO* PD* POR* BOR*

WDTCON — — — — — — — SWDTEN

Leyenda: -= no implementado, se lee ‘0’; las celdas sombreadas no las utiliza elWDT.

Nota 1: El bit SBOREN sólo está disponible si BOREN<1:0>=01; en otro casose lee ‘0’.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 341/651

GUILLERMO DAVID HERRERO GONZÁLEZ

339

3.4.24.3. Arranque A Dos Velocidades

La característica de arranque de dos velocidades ayuda a reducir al mínimo período del estado latente del inicio del oscilador para la ejecución de código, permitiendo que el microcontrolador utilice el oscilador INTRC como fuente de relojhasta que la fuente de reloj primaria está disponible. Se permite activando el bit IESO.

El arranque de dos velocidades sólo se puede permitir si el modo del oscilador primario es XT, HS, XTPLL o HSPLL (modos basados en XTAL). Las demás fuentesno requieren un retraso de inicio OST; para éstos, hay que inhabilitar el arranque de dosvelocidades.

Cuando está permitido, los resets y reinicios del modo sleep hacen que eldispositivo se configure para que funcione el bloque interno como fuente de reloj,

siguiente, el desbordamiento del temporizador de inicio después de activar un POR.Esto permite la ejecución de código casi de inmediato mientras que el oscilador primario comienza y OST está funcionando. Cuando se sobrepasan los tiempos OST, eldispositivo automáticamente cambia al modo PRI_RUN.

Como el registro OSCCON se borra en los resets, la fuente de reloj INTOSC (o postscaler) no se disponen inicialmente después de un reset; el reloj INTRC se utilizadirectamente en su baja frecuencia. Para utilizar un reloj con velocidad más alta en elinicio, se utilizan las fuentes de reloj INTOSC o postscaler fijando los bits,IRCF2:IRCF0, inmediatamente después del reset. Para los reinicios del sleep, lasfuentes de reloj INTOSC o el postscaler se pueden seleccionar fijando IRCF2:IRCF0antes de entrar en el modo sleep.

En el resto de los modos de ahorro de energía, el arranque a dos velocidades nose utiliza. El dispositivo se controlará con la fuente de reloj seleccionada hasta que lafuente primaria de reloj esté disponible. El ajuste del bit IESO se ignora.

FIGURA 24-2: Transiciones De Tiempo Para El Inicio De Dos Velocidades (INTOSC A HSPLL)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 342/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

340

3.4.24.3.1. Consideraciones Especiales Para Usar Arranque A DosVelocidades

Cuando se usa el oscilador INTRC en el arranque de a velocidades, eldispositivo obedece las secuencias normales del comando para entrar en los modos deahorro de energía, incluyendo la instrucción SLEEP. En la práctica, esto significa que elusuario cambia los bits SCS1:SCS0 con la instrucción SLEEP antes de terminar lostiempos OST. Esto permite un uso brevemente del reinicio, realizar rutinas de“economía doméstica” devuelve del modo sleep antes de que el dispositivo empiece aoperar con el oscilador primario.

El código del usuario puede comprobar si la fuente primaria de reloj estágobernando el dispositivo comprobando el estado del bit OSTS (OSCCON<3>). Si seactiva el bit, el oscilador primario está controlando el reloj. Si no, el bloque interno deloscilador gobierna durante el reinicio del modo sleep o de un reset.

3.4.24.4. Monitor De Reloj A Prueba De Fallos

El Monitor de reloj a prueba de fallos (FSCM) permite al microcontrolador continuar la operación en caso de fallo del oscilador externo automáticamentecambiando el reloj del dispositivo al bloque interno del oscilador. El la función FSCMse permite activando la configuración del bit FCMEN.

Cuando se permite el FSCM, el oscilador INTRC funciona todas las veces quesupervise los relojes de los periféricos y proporcione un reloj de reserva en caso de unfallo del reloj. La supervisión del reloj se logra creando una muestra de la señal, que esla salida de INTRC dividido por 64. Esto da un plazo de tiempo amplio entre la muestrade FSCM y que ocurra un flanco del reloj del periférico. El reloj del dispositivo

periférico y la muestra del reloj se presentan como entradas del latch del monitor dereloj (CM). El CM se activa en el flanco de bajada de la fuente de reloj del dispositivo,

pero borrado en el flanco de subida del reloj de muestreo.

El fallo del reloj se prueba en el flanco de bajada del reloj de muestreo. Si ocurreun flanco de bajada del reloj de muestreo mientras que el CM todavía esté activo, se hadetectado un fallo del reloj. Esto provoca lo siguiente:

Ê el FSCM genera una interrupción de fallo del oscilador activando el bit,

OSCFIF (PIR2<7>);Ê la fuente del reloj del dispositivo se cambia al bloque interno deloscilador (OSCCON no se actualiza para mostrar la fuente actual delreloj - esta es la condición a prueba de fallos);

Ê se resetea el WDT.

Durante el intercambio, la frecuencia del postscaler del bloque interno deloscilador puede que no sea suficientemente estable para aplicaciones sensibles quemiden el tiempo. En estos casos, se puede seleccionar otra configuración del reloj yentrar en un modo de ahorro de energía diferente. Esto se puede hacer para realizar unarecuperación parcial o ejecutar una parada controlada.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 343/651

GUILLERMO DAVID HERRERO GONZÁLEZ

341

Para utilizar una velocidad de reloj más alta en el reinicio, se pueden seleccionar el INTOSC o las fuentes del reloj del postscaler los bits IRCF2:IRCF0 inmediatamente

después del reset. Para los reinicios del sleep, INTOSC o las fuentes del reloj del postscaler se pueden seleccionar fijando IRCF2:IRCF0 antes de entrar en el modo sleep.

El FSCM detectará los fallos de las fuentes de reloj primaria o secundariasolamente. Si el bloque del oscilador interno falla, no se detectaría, y no se puederealizar ninguna acción.

FIGURA 24-3: Diagrama De Bloques Del FSCM

3.4.24.4.1. FSCM Y El Temporizador Perro Guardián

Los FSCM y los WDT se controlan con el Oscilador INTRC. Puesto que elWDT funciona con el divisor separado y el contador, inhabilitar el WDT no tieneningún efecto sobre el oscilador INTRC cuando se activa el FSCM.

Según lo observado ya, la fuente de reloj se cambia al Reloj INTOSC cuando sedetecta un fallo. Dependiendo de la frecuencia seleccionada por los bits IRCF2:IRCF0,

puede significar un cambio substancial en la velocidad de ejecución del código. Si se permite el WDT con un valor pequeño de prescaler, disminuye la velocidad del reloj y permite que ocurra un desbordamiento del WDT y su correspondiente reset deldispositivo. Por esta razón, los acontecimientos del monitor de reloj a prueba de fallostambién resetean el WDT y el postscaler, permitiendo comenzar la sincronización del

cambio de la velocidad de ejecución y disminuyendo la probabilidad de undesbordamiento erróneo.

3.4.24.4.2. Salir De La Operación A Prueba De Fallos

La condición a prueba de fallos termina por cualquier reset o entrando en unmodo de ahorro de energía. En el reset, el regulador comienza con la fuente primaria dereloj especificada en el registro de configuración 1H (con cualquier retraso de inicio querequiera el modo del oscilador, por ejemplo temporizador OST o PLL). El multiplexor INTOSC proporciona el reloj del dispositivo hasta que la fuente primaria de reloj estélista (similar a un arranque de a velocidades). La fuente de reloj entonces se cambia alreloj primario (indicado por el bit OSTS en el registro OSCCON que se activa). El

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 344/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

342

monitor de reloj a prueba de fallos entonces reanuda la supervisión del reloj del periférico.

La fuente primaria de reloj puede que no llegue a estar lista en el inicio. En estecaso, la operación se controla con el multiplexor INTOSC. El registro OSCCON seguiráen reset hasta que entre en un modo de ahorro de energía.

FIGURA 24-4: Diagrama De Tiempos Del FSCM

3.4.24.4.3. Interrupciones De FSCM Dentro De Los Modos De AhorroDe Energía

Entrando en un modo de ahorro de energía, el reloj del multiplexor selecciona la

fuente de reloj elegida en el registro OSCCON. La supervisión del reloj a prueba defallos de los modos de ahorro de energía de la fuente de reloj se reanuda en un modo deahorro de energía.

Si ocurre un fallo del oscilador durante el modo de ahorro de energía, losacontecimientos subsecuentes dependen de si la interrupción de fallo del oscilador está

permitida o no. Si está permitida (OSCFIF=1), la ejecución del código la controlará elmultiplexor INTOSC. No habrá un cambio automático al reloj que ha fallado.

Si la interrupción no está activa, las siguientes interrupciones mientras que estéen modo reposo harán que la CPU comience a ejecutar instrucciones cuando la fuenteINTOSC siga controlando el dispositivo.

3.4.24.4.4. POR O Reinicio Del Sleep

El FSCM se ha diseñado para detectar fallos en el oscilador en cualquier puntodespués de salir el dispositivo de un reset por aumento de energía (POR) o del modo de

baja potencia sleep. Cuando el reloj primario del dispositivo es EC o INTRC, lasupervisión puede comenzar inmediatamente después de estos acontecimientos.

En los modos del oscilador que implican un cristal o un resonador (HS, HSPLLo XT), la situación es algo diferente. Puesto que el oscilador puede necesitar un retrasode inicio considerablemente más de largo que el tiempo de reloj de la muestra deFCSM, se puede detectar un fallo falso del reloj. Para prevenir esto, el bloque del

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 345/651

GUILLERMO DAVID HERRERO GONZÁLEZ

343

oscilador interno se configura automáticamente como el reloj y las funciones deldispositivo hasta que el reloj primario es estable (los contadores de tiempo OST y PLL

se han desbordado). Esto es igual al modo de inicio de dos velocidades. Una vez que elreloj primario es estable, el INTRC vuelve a ser la fuente de FSCM.

Nota: La misma lógica que previene el oscilador de falsas interrupciones por fallo en un POR o al despertar del sleep también prevendrá la detección del fallo deloscilador en todos los acontecimientos que siguen a estos. Esto se puede evitar supervisando el bit OSTS y usar la rutina de sincronización para determinar si eloscilador está tardando demasiado en comenzar. Sin embargo, la interrupción de nofallo del oscilador se señalará.

También es posible seleccionar otra configuración del reloj e incorporar unmodo de ahorro de energía suplente mientras que el reloj primario sea estable. Cuando

el nuevo modo de ahorro de energía se selecciona, el reloj primario se desactiva.

3.4.24.5. Verificación Del Programa Y Código De Protección

La estructura total del código de protección de los dispositivos PIC18F difieresignificativamente de otros dispositivos PICmicro®.

La memoria de programa del usuario se divide en cinco bloques. Uno de estos esel bloque de arranque de 2kb. El resto de la memoria se divide en cuatro bloques enlímites binarios.

Cada uno de estos cinco bloques tiene tres códigos de protección asociados a

ellos. Son:Ê Bit de protección del código (CPn)Ê Bit de protección de la escritura (WRTn)Ê Bit de lectura del bloque de tabla externa (EBTRn)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 346/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

344

FIGURA 24-5: CÓDIGO De Protección De La Memoria De Programa Para Los PIC18F2455/2550/4455/4550

TABLA 24-3: Sumario De Los Registros Del Código De Protección

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

300008h CONFIG5L — — — — CP3(1) CP2 CP1 CP0

300009h CONFIG5H CPD CPB — — — — — —

30000Ah CONFIG6L — — — — WRT3(1) WRT2 WRT1 WRT0

30000Bh CONFIG6H WRTD WRTB WRTC — — — — —

30000Ch CONFIG7L — — — — EBTR3(1) EBTR2 EBTR1 EBTR0

30000Dh CONFIG7H — EBTRB — — — — — —

Leyenda: las celdas sombreadas no están implementadas.

Nota 1: No implementado en los dispositivos PIC18Fx455; mantener este bitactivo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 347/651

GUILLERMO DAVID HERRERO GONZÁLEZ

345

3.4.24.5.1. Memoria De Programa Código De Protección

La memoria de programa se puede leer o escribir en cualquier localizaciónusando las instrucciones de lectura y escritura en tabla. La identificación del dispositivose puede leer con la lectura de tabla. Los registros de configuración se pueden leer yescribir con la lectura y escritura de tabla.

En el modo normal de ejecución, los bits CPn no tienen ningún efecto directo.Los bits CPn inhiben la lectura y escritura externa. El bloque de memoria del usuario se

puede proteger contra la escritura de tabla si el bit de configuración WRTn está a ‘0’.Los bits EBTRn controlan la lectura de tabla. Para un bloque de memoria del usuariocon el bit EBTRn a ‘0’, se permite una instrucción de lectura de tabla ejecutada dentrode ese bloque. Una instrucción de lectura de tabla que se ejecuta en una localizaciónexterior de ese bloque no se permite y da lugar a ‘0’s.

Nota: Los bits de protección del código se pueden escribir solamente de un ‘0’ aun ‘1’. No es posible a escribir un ‘1’ en un bit a ‘0’. Los bits del código de protecciónse activan solamente con un borrado completo del chip o al borrar el bloque función. El

borrado completo del chip y el borrado del bloque función sólo se pueden realizar por medio de ICSP o de un programador externo.

FIGURA 24-6: Escritura En Tabla Rechazada (WRTn)

Resultado: Todas las escrituras en tabla desactivadas en el Blockn cuandoWRTn=0.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 348/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

346

FIGURA 24-7: Lectura Externa De Tabla Rechazada (EBTRn)

Resultados: Todas las lecturas de los bloques externas al Blockn estándesactivadas cuando EBTRn=0. El registro TABLAT devolverá ‘0’.

FIGURA 24-8: Lectura Externa De Tabla Permitida (EBTRn)

Resultados: Lecturas en tabla permitidas al Blockn, incluso cuando EBTRBn=0.El registro TABLAT devolverá el valor del dato en la localización TBLPTR.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 349/651

GUILLERMO DAVID HERRERO GONZÁLEZ

347

3.4.24.5.2. Datos EEPROM Código De Protección

Los datos EEPROM se protegen contra lecturas y escrituras externas con dos bits: CPD y WRTD. CPD inhibe lecturas y escrituras externas en los datos EEPROM. YWRTD inhibe escrituras internas y externas en los datos EEPROM. La CPU puedecontinuar leyendo y escribiendo datos en la EEPROM sin importar el ajuste de los bitsde protección.

3.4.24.5.3. Configuración Del Registro De Protección

Los registros de configuración pueden protegerse contra la escritura. El bitWRTC controla la protección de los registros de configuración. En modo de ejecuciónnormal, el bit WRTC es solamente legible. WRTC sólo se puede escribir vía ICSP o conun programador externo.

3.4.24.6. Localizaciones De Identificación

En ocho posiciones de memoria (200000h-200007h) se guardan comolocalizaciones de identificación, en donde el usuario puede almacenar versiones u otrosnúmeros de identificación del código. Éstas localizaciones son legibles y escribiblesdurante la ejecución normal con las instrucciones TBLRD y TBLWT o durante

programación/verificación. Las localizaciones de identificación se pueden leer cuandose protege el código del dispositivo.

3.4.24.7. Programación Serie In-Circuit

Los microcontroladores PIC18F2455/2550/4455/4550 pueden programarse enserie en el circuito de la aplicación. Esto se hace simplemente con dos líneas para elreloj y los datos y tres otras líneas para la energía, tierra y tensión de programación.Esto permite que los clientes fabriquen las placas con los dispositivos sin programar yentonces programar el microcontrolador momentos antes de enviar el producto. Estotambién permite los firmwares más recientes o firmwares de encargo.

3.4.24.8. Depuración In-Circuit

Cuando el bit de configuración DEBUG* se programa con un ‘0’, lafuncionalidad de la depuración “en Circuito” se permite. Esto permite funciones simples

para eliminar errores cuando se utiliza MPLAB®

IDE. Cuando el microcontrolador tieneesta característica permitida, algunos recursos no están disponibles en el uso general.

Para utilizar la función In-Circuit de la depuración del microcontrolador, eldiseño debe implementar las conexiones de la programación In-Circuit:MCLR*/VPP/RE3, VDD, VSS, RB7 y RB6. Esto interconectará al módulo depuraciónIn-Circuit disponible de microchip o de una de las compañías de herramientas dedesarrollo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 350/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

348

TABLA 24-4: Recursos De Depuración

Pines E/S: RB6, RB7

Pila: 2 niveles

Memoria de programa: 512 bytes

Memoria de datos: 10 bytes

3.4.24.9. Características Especiales De Icport (Señalando PaquetesSolamente)

Bajo circunstancias específicas, los pines que no se conectan (NC) de los

dispositivos PIC18F4455/4550 de 44pines en encapsulado TQFP pueden proporcionar funcionalidad adicional. Éstas características se controlan con los bits de configuracióndel dispositivo y están disponibles solamente en este tipo de encapsulado y número de

pines.

3.4.24.9.1. Puerto Dedicado ICD/ICSP

Los dispositivos de 44pines con encapsulado TQFP pueden utilizar los pines NC para proporcionar un puerto alterno para depuración In-Circuit (ICD) y la programaciónserie In-Circuit (ICSP). Estos pines se conocen como el puerto dedicado ICSP/ICD,

puesto que no comparten ninguna otra función del dispositivo.

Cuando se implementa, el puerto dedicado activa tres pines NC para proporcionar un reset del dispositivo, datos y puertos del reloj alternos. Ningunos deestos puertos se solapan con los pines estándares de E/S, poniendo los pines de E/S adisposición de la aplicación del usuario.

El puerto dedicado ICSP/ICD se permite activando el bit de configuraciónICPRT. El puerto funciona de la misma manera que el puerto de herencia ICSP/ICD enRB6/RB7.

Aun cuando el puerto dedicado está permitido, el ICSP y las funciones de ICDsiguen funcionando en el puerto de herencia. Cuando se detecta VIH en el pinMCLR*/VPP/RE3, el estado de ICRST/ICVPP se ignora.

Nota 1: El bit de configuración ICPRT puede estar programado con puertoICSP por defecto.

2: El bit de configuración ICPRT debe mantenerse borrado en losdispositivos de 28pines y 40pines; si no, pueden ocurrir operaciones inesperadas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 351/651

GUILLERMO DAVID HERRERO GONZÁLEZ

349

TABLA 24-5: Equivalencia De Pines Entre Los Puertos Dedicados Y Herencia ICD/ICSP

Nombre del pin

Puertoherencia

Puertodedicado

Tipode pin

Función delpin

MCLR*/VPP/RE3

NC/ICRST*/ICVPP

Energía

Reset deldispositivo y permiso de

programación

RB6/KBI2/PGC

NC/ICCK/ICPGC

Entrada Reloj serie

RB7/KBI3/PGD

NC/ICDT/ICPGD

E/S Datos serie

3.4.24.9.2. Emulación De 28 Pines

Los dispositivos PIC18F4455/4550 de 44 pines con encapsulado TQFP tienen lacapacidad de cambiar su configuración bajo control externo para depurar errores. Esto

permite que el dispositivo se comporte como si fuera un PIC18F2455/2550 de 28pines.

Este modo de configuración de 28pines se controla a través de un solo pin, NC/ICPORTS. Conectar este pin a VSS fuerza al dispositivo para que funcione como undispositivo de 28pines. Las características asociadas a los dispositivos de 40/44pines sedesactivan junto a sus registros y bits de control correspondientes. Esto incluye PORTDy PORTE, los SPP y la funcionalidad PWM mejorado del CCP1. Por otra parte,conectar el pin a VDD fuerza al dispositivo que funcione en su configuración por defecto.

La opción de configuración sólo está disponible cuando se permite la depuraciónoculta y el puerto dedicado ICD/ICSP (bit DEBUG* está borrado y se activa el bitICPRT). Cuando está inhabilitado, NC/ICPORTS es un pin NC.

3.4.24.10. Suministro Único De La Programación ICSP

El bit de configuración LVP permite el suministro único de la programaciónICSP (conocida antes como Programación ICSP de baja tensión o LVP). Cuando elsuministro único de programación se permite, el microcontrolador puede programarsesin requerir la tensión alta que se aplica al pin MCLR*/VPP/RE3, pero el pinRB5/KBI1/PGM se dedica a controlar la entrada del modo de programa y no estádisponible como pin de entrada-salida.

Cuando se programa usando el suministro único de programación, VDD se aplicaal pin MCLR*/VPP/RE3 como en el modo de ejecución normal. Para entrar en modo de

programación, VDD se aplica al pin PGM.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 352/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

350

Nota 1: La programación de alta tensión siempre está disponible, sin importar el estado del bit LVP, aplicando VIHH al pin MCLR*.

2: Mientras que en la programación de baja tensión del modo ICSP, el pin RB5 no puede utilizarse más como pin de entrada-salida y deber llevarse a un puntode tensión bajo durante la operación normal.

3: Al usar la programación de baja tensión ICSP (LVP) y se permiten los pull-ups del PORTB, el bit 5 en el registro TRISB debe borrarse para inhabilitar los pull-ups en RB5 y asegurar el funcionamiento correcto del dispositivo.

4: Si el Master Clear está desactivado, verificar que lo siguiente seacorrecto para asegurar la entrada apropiada en el modo ICSP:

a) inhabilita la programación de baja tensión (CONFIG4L<2>=0);

b) RB5/KBI1/PGM está en nivel bajo durante la entrada de ICSP.Si el modo de programación suministro único ICSP no se utiliza, el bit LVP

puede borrarse. RB5/KBI1/PGM entonces esta disponible como pin de E/S digital,RB5. El bit LVP puede activarse o borrarse solamente al usar la programación estándar de alta tensión (VIHH aplicado al pin MCLR*/VPP/RE3). Una vez que se hayainhabilitado LVP, solamente la programación de alta tensión estándar está disponible ydebe utilizarse para programar el dispositivo.

La memoria sin código de protección puede borrarse usando el borrado de un bloque, o borrar fila por fila, entonces escrita en cualquier VDD especificada. Si sequiere borrar la memoria protegida, se necesita borrar un bloque. Si se realiza el borrado

de un bloque al usar la programación de baja tensión, el dispositivo necesita una VDD de4,5V a 5,5V.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 353/651

GUILLERMO DAVID HERRERO GONZÁLEZ

351

3.5. F USES D E P ROGRAMACIÓN DE LA F AMILIA PIC18F XX 5 X

Los fuses son los variables que hay que configurar dependiendo de la aplicación.Existe el fuse del oscilador, de los prescaler…

3.5.1. PIC18F2455

3.5.1.1. Bits Selectores Del Prescaler Del PLL:

PLLDIV = 1Sin prescaler (Entrada de oscilador de 4MHz conduce el PLLdirectamente)

PLLDIV = 2 Divide por 2 (8 MHz oscilador de entrada)

PLLDIV = 3 Divide por 3 (12 MHz oscilador de entrada)

PLLDIV = 4 Divide por 4 (16 MHz oscilador de entrada)

PLLDIV = 5 Divide por 5 (20 MHz oscilador de entrada)

PLLDIV = 6 Divide por 6 (24 MHz oscilador de entrada)

PLLDIV = 10 Divide por 10 (40 MHz oscilador de entrada)

PLLDIV = 12 Divide por 12 (48 MHz oscilador de entrada)

3.5.1.2. Postcaler Del Reloj Del Sistema CPU:

CPUDIV = OSC1_PLL2 [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]

CPUDIV = OSC2_PLL3 [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]

CPUDIV = OSC3_PLL4 [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]

CPUDIV = OSC4_PLL6 [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]

3.5.1.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed;UCFG:FSEN=1)

USBDIV = 1 La fuente de reloj es el oscilador primario sin postscaler

USBDIV = 2 La fuente de reloj viene de los 96MHz PLL y los divide por 2

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 354/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

352

3.5.1.4. Bits Selectores Del Oscilador:

FOSC = XT_XT XT oscilador, XT usado por USB

FOSC = XTPLL_XT XT oscilador, PLL activo, XT usado por USB

FOSC = ECIO_EC Reloj externo, funciona como puerto RA6, EC usado por USB

FOSC = EC_EC Reloj externo, CLKOUT en RA6, EC usado por USB

FOSC = ECPLLIO_EC Reloj externo, PLL activo, funciona como puerto RA6, EC usado por USB

FOSC = ECPLL_EC Reloj externo, PLL activo, CLKOUT en RA6, EC usado por USB

FOSC = INTOSCIO_EC Oscilador interno, funciona como puerto RA6, EC usado por SB

FOSC = INTOSC_EC Oscilador interno, CLKOUT en RA6, EC usado por USB

FOSC = INTOSC_XT Oscilador interno, XT usado por USB

FOSC = INTOSC_HS Oscilador interno, HS usado por USB

FOSC = HS HS oscilador, HS usado por USB

FOSC = HSPLL_HS HS oscilador, PLL activo, HS usado por USB

3.5.1.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

3.5.1.6. Bit De Cambio Del Oscilador Interno/Externo:

IESO = OFF Modo de cambio del oscilador desactivado

IESO = ON Modo de cambio del oscilador activo

3.5.1.7. Bit De Permiso Del Retraso En El Inicio:

PWRT = ON PWRT activo

PWRT = OFF PWRT desactivado

FCMEM = OFF Monitor de reloj de seguridad desactivado

FCMEM = ON Monitor de reloj de seguridad activo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 355/651

GUILLERMO DAVID HERRERO GONZÁLEZ

353

3.5.1.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

BOR = OFF BOR desactivado en hardware y software

BOR = SOFTBOR activo y controlado por software

(SBOREN activo)

BOR = ON_ACTIVEBOR activo sólo en hardware y desactivado en modo Sleep(SBOREN está desactivado)

BOR = ONBOR activo sólo en hardware

(SBOREN desactivado)

3.5.1.9. Bits De Tensión BOR:BORV = 0 Configuración máxima

BORV = 1

BORV = 2

BORV = 3 Configuración mínima

3.5.1.10. Bit De Permiso Del Regulador De Tensión USB:

3.5.1.11. Bit De Permiso Del Temporizador Watchdog:

WDT = OFF HW Desactivado - SW Controlado

WDT = ON HW Activo - SW Desactivado

VREGEN = OFF Regulador de tensión USB desactivado

VREGEN = ON Regulador de tensión USB activo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 356/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

354

3.5.1.12. Bits Selectores Del Postscaler Del Watchdog:

WDTPS = 1 1:1

WDTPS = 2 1:2

WDTPS = 4 1:4

WDTPS = 8 1:8

WDTPS = 16 1:16

WDTPS = 32 1:32

WDTPS = 64 1:64

WDTPS = 128 1:128

WDTPS = 256 1:256

WDTPS = 512 1:512

WDTPS = 1024 1:1024

WDTPS = 2048 1:2048

WDTPS = 4096 1:4096

WDTPS = 8192 1:8192

WDTPS = 16384 1:16384

WDTPS = 32768 1:32768

3.5.1.13. Bit De Permiso Del Pin MCLR:

MCLRE = OFF RE3 pin de entrada activo; MCLR desactivado

MCLRE = ON MCLR pin activo; RE3 pin de entrada desactivado

3.5.1.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

LPT1OSC = OFF Timer 1 configurado para la operación de alta potencia

LPT1OSC = ON Timer 1 configurado para baja potencia

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 357/651

GUILLERMO DAVID HERRERO GONZÁLEZ

355

3.5.1.15. Bit De Permiso PORTB A/D:

PBADEN = OFF Los pines PORTB<4:0> se configuran como E/S digitales en elReset

PBADEN = ONLos pines PORTB<4:0> se configuran como entradasanalógicas en el Reset

3.5.1.16. CCP2 MUX Bit:

CCP2MX = OFF E/S CCP2 se multiplexa con RB3

CCP2MX = ON E/S CCP2 se multiplexa con RC1

3.5.1.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

STVREN = OFF Llenado/vaciado de la pila no provoca el Reset

STVREN = ON Llenado/vaciado de la pila provoca el Reset

3.5.1.18. Bit De Permiso Del ICSP:

3.5.1.19. Bit De Permiso Del Juego De Instrucciones Extendido:

XINST = OFFJuego de instrucciones extendido y modo de direccionamientoindexado desactivado (Modo legado)

XINST = ONJuego de instrucciones extendido y modo de direccionamientoindexado activo

3.5.1.20. Bit De Permiso Del Debugger Oculto:

DEBUG = ON Debugger oculto: activo, RB6 y RB7 se dedican al Debug En-Circuito

DEBUG = OFFDebugger oculto: desactivado, RB6 y RB7 configurados como pines de E/S de

propósito general

LVP = OFF ICSP desactivado

LVP = ON ICSP activo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 358/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

356

3.5.1.21. Bit Del Código De Protección En El Bloque 0:

CP0 = ON Bloque 0 (000800-001FFFh) con código de protección

CP0 = OFF Bloque 0 (000800-001FFFh)

3.5.1.22. Bit Del Código De Protección En El Bloque 1:

CP1 = ON Bloque 1 (002000-003FFFh) con código de protección

CP1 = OFF Bloque 1 (002000-003FFFh) sin código de protección

3.5.1.23. Bit Del Código De Protección En El Bloque 2:

CP2 = ON Bloque 2 (004000-005FFFh) con código de protección

CP2 = OFF Bloque 2 (004000-005FFFh) sin código de protección

3.5.1.24. Bit Del Código De Protección En El Bloque De Inicio:

CPB = ON Bloque de inicio (000000-0007FFh) con código de protección

CPB = OFF Bloque de inicio (000000-0007FFh) sin código de protección

3.5.1.25. Bit Del Código De Protección En La EEPROM De Datos:

CPD = ON EEPROM de datos con código de protección

CPD = OFF EEPROM de datos sin código de protección

3.5.1.26. Bit De Protección Contra Escritura 0:

WRT0 = ON Bloque 0 (000800-001FFFh) con protección contra escritura

WRT0 = OFF Bloque 0 (000800-001FFFh) sin protección contra escritura

3.5.1.27. Bit De Protección Contra Escritura 1:WRT1 = ON Bloque 1 (002000-003FFFh) con protección contra escritura

WRT1 = OFF Bloque 1 (002000-003FFFh) sin protección contra escritura

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 359/651

GUILLERMO DAVID HERRERO GONZÁLEZ

357

3.5.1.28. Bit De Protección Contra Escritura 2:

WRT2 = ON Bloque 2 (004000-005FFFh) con protección contra escritura

WRT2 = OFF Bloque 2 (004000-005FFFh) sin protección contra escritura

3.5.1.29. Bit De Protección Contra Escritura En El Bloque De Inicio:

3.5.1.30. Bits De Protección Contra Escritura En Los Registros DeConfiguración:

3.5.1.31. Bits De Protección Contra Escritura En La EEPROM De Datos:

3.5.1.32. Bit De Protección De La Lectura De Tabla Del Bloque 0:

EBTR0 = ONBloque 0 (000800-001FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR0 = OFF Bloque 0 (000800-001FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.1.33. Bit De Protección De La Lectura De Tabla Del Bloque 1:

EBTR1 = ONBloque 1 (002000-003FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR1 = OFFBloque 1 (002000-003FFFh) sin protección de la lectura detabla ejecutado en otros bloques

WRTC = ONBloque de inicio (000000-0007FFh) con protección contraescritura

WRTC = OFFBloque de inicio (000000-0007FFh) sin protección contraescritura

WRTB = ONRegistros de configuración (300000-3000FFh) con proteccióncontra escritura

WRTB = OFFRegistros de configuración (300000-3000FFh) sin proteccióncontra escritura

WRTD = ON EEPROM de datos con protección contra escritura

WRTD = OFF EEPROM de datos sin protección contra escritura

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 360/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

358

3.5.1.34. Bit De Protección De La Lectura De Tabla Del Bloque 2:

EBTR2 = ON Bloque 2 (004000-005FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR2 = OFFBloque 2 (004000-005FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.1.35. Protección Contra La Lectura De Tabla Del Bloque De Inicio:

EBTRB = ONBloque de inicio (000000-0007FFh) con protección de lalectura de tabla ejecutado en otros bloques

EBTRB = OFF Bloque de inicio (000000-0007FFh) sin protección de la lecturade tabla ejecutado en otros bloques

3.5.2. PIC18F2550

3.5.2.1. Bits Selectores Del Prescaler Del PLL:

PLLDIV = 1Sin prescaler (Entrada de oscilador de 4MHz conduce el PLLdirectamente)

PLLDIV = 2 Divide por 2 (8 MHz oscilador de entrada)

PLLDIV = 3 Divide por 3 (12 MHz oscilador de entrada)

PLLDIV = 4 Divide por 4 (16 MHz oscilador de entrada)

PLLDIV = 5 Divide por 5 (20 MHz oscilador de entrada)

PLLDIV = 6 Divide por 6 (24 MHz oscilador de entrada)

PLLDIV = 10 Divide por 10 (40 MHz oscilador de entrada)

PLLDIV = 12 Divide por 12 (48 MHz oscilador de entrada)

3.5.2.2. Postcaler Del Reloj Del Sistema CPU:

CPUDIV = OSC1_PLL2 [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]

CPUDIV = OSC2_PLL3 [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]

CPUDIV = OSC3_PLL4 [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]

CPUDIV = OSC4_PLL6 [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 361/651

GUILLERMO DAVID HERRERO GONZÁLEZ

359

3.5.2.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed;UCFG:FSEN=1)

USBDIV = 1 La fuente de reloj es el oscilador primario sin postscaler

USBDIV = 2 La fuente de reloj viene de los 96MHz PLL y los divide por 2

3.5.2.4. Bits Selectores Del Oscilador:

FOSC = XT_XT XT oscilador, XT usado por USB

FOSC = XTPLL_XT XT oscilador, PLL activo, XT usado por USB

FOSC = ECIO_EC Reloj externo, funciona como puerto RA6, EC usado por USB

FOSC = EC_EC Reloj externo, CLKOUT en RA6, EC usado por USB

FOSC = ECPLLIO_ECReloj externo, PLL activo, funciona como puerto RA6, ECusado por USB

FOSC = ECPLL_ECReloj externo, PLL activo, CLKOUT en RA6, EC usado por USB

FOSC = INTOSCIO_ECOscilador interno, funciona como puerto RA6, EC usado por USB

FOSC = INTOSC_EC Oscilador interno, CLKOUT en RA6, EC usado por USB

FOSC = INTOSC_XT Oscilador interno, XT usado por USB

FOSC = INTOSC_HS Oscilador interno, HS usado por USB

FOSC = HS HS oscilador, HS usado por USB

FOSC = HSPLL_HS HS oscilador, PLL activo, HS usado por USB

3.5.2.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

3.5.2.6. Bit De Cambio Del Oscilador Interno/Externo:

IESO = OFF Modo de cambio del oscilador desactivado

IESO = ON Modo de cambio del oscilador activo

FCMEM = OFF Monitor de reloj de seguridad desactivado

FCMEM = ON Monitor de reloj de seguridad activo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 362/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

360

3.5.2.7. Bit De Permiso Del Retraso En El Inicio:

PWRT = ON PWRT activo

PWRT = OFF PWRT desactivado

3.5.2.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

BOR = OFF BOR desactivado en hardware y software

BOR = SOFT BOR activo y controlado por software (SBOREN está activo)

BOR = ON_ACTIVEBOR activo sólo en hardware y desactivado en modo Sleep(SBOREN desactivado)

BOR = ON BOR activo sólo en hardware (SBOREN está desactivado)

3.5.2.9. Bits De Tensión BOR:

BORV = 0 Configuración máxima

BORV = 1

BORV = 2

BORV = 3 Configuración mínima

3.5.2.10. Bit De Permiso Del Regulador De Tensión USB:

VREGEN = OFF Regulador de tensión USB desactivado

VREGEN = ON Regulador de tensión USB activo

3.5.2.11. Bit De Permiso Del Temporizador Watchdog:

WDT = OFF HW Desactivado - SW Controlado

WDT = ON HW Activo - SW Desactivado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 363/651

GUILLERMO DAVID HERRERO GONZÁLEZ

361

3.5.2.12. Bits Selectores Del Postscaler Del Watchdog:

WDTPS = 1 1:1

WDTPS = 2 1:2

WDTPS = 4 1:4

WDTPS = 8 1:8

WDTPS = 16 1:16

WDTPS = 32 1:32

WDTPS = 64 1:64

WDTPS = 128 1:128

WDTPS = 256 1:256

WDTPS = 512 1:512

WDTPS = 1024 1:1024

WDTPS = 2048 1:2048

WDTPS = 4096 1:4096

WDTPS = 8192 1:8192

WDTPS = 16384 1:16384

WDTPS = 32768 1:32768

3.5.2.13. Bit De Permiso Del Pin MCLR:

MCLRE = OFF RE3 pin de entrada activo; MCLR desactivado

MCLRE = ON MCLR pin activo; RE3 pin de entrada desactivado

3.5.2.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

LPT1OSC = OFF Timer 1 configurado para alta potencia

LPT1OSC = ON Timer 1 configurado para baja potencia

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 364/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

362

3.5.2.15. Bit De Permiso PORTB A/D:

PBADEN = OFF Los pines PORTB<4:0> se configuran como E/S digitales en elReset

PBADEN = ONLos pines PORTB<4:0> se configuran como entradasanalógicas en el Reset

3.5.2.16. CCP2 MUX Bit:

CCP2MX = OFF E/S CCP2 se multiplexa con RB3

CCP2MX = ON E/S CCP2 se multiplexa con RC1

3.5.2.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

STVREN = OFF Llenado/vaciado de la pila no provoca el Reset

STVREN = ON Llenado/vaciado de la pila provoca el Reset

3.5.2.18. Bit De Permiso Del ICSP:

LVP = OFF ICSP desactivado

LVP = ON ICSP activo

3.5.2.19. Bit De Permiso Del Juego De Instrucciones Extendido:

XINST = OFFJuego de instrucciones extendido y modo de direccionamientoindexado desactivado (Modo legado)

XINST = ONJuego de instrucciones extendido y modo de direccionamientoindexado activo

3.5.2.20. Bit De Permiso Del Debugger Oculto:

DEBUG = ONDebugger oculto: activo, RB6 y RB7 se dedican al Debug En-Circuito

DEBUG = OFFDebugger oculto: desactivado, RB6 y RB7 configurados como pines de E/S de propósito general

3.5.2.21. Bit Del Código De Protección En El Bloque 0:

CP0 = ON Bloque 0 (000800-001FFFh) con código de protección

CP0 = OFF Bloque 0 (000800-001FFFh) sin código de protección

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 365/651

GUILLERMO DAVID HERRERO GONZÁLEZ

363

3.5.2.22. Bit Del Código De Protección En El Bloque 1:

CP1 = ON Bloque 1 (002000-003FFFh) con código de protección

CP1 = OFF Bloque 1 (002000-003FFFh) sin código de protección

3.5.2.23. Bit Del Código De Protección En El Bloque 2:

CP2 = ON Bloque 2 (004000-005FFFh) con código de protección

CP2 = OFF Bloque 2 (004000-005FFFh) sin código de protección

3.5.2.24. Bit Del Código De Protección En El Bloque 3:

CP3 = ON Bloque 3 (006000-007FFFh) con código de protección

CP3 = OFF Bloque 3 (006000-007FFFh) sin código de protección

3.5.2.25. Bit Del Código De Protección En El Bloque De Inicio:

CPB = ON Bloque de inicio (000000-0007FFh) con código de protección

CPB = OFF Bloque de inicio (000000-0007FFh) sin código de protección

3.5.2.26. Bit Del Código De Protección En La EEPROM De Datos:

CPD = ON EEPROM de datos con código de protección

CPD = OFF EEPROM de datos sin código de protección

3.5.2.27. Bit De Protección Contra Escritura 0:

WRT0 = ON Bloque 0 (000800-001FFFh) con protección contra escritura

WRT0 = OFF Bloque 0 (000800-001FFFh) sin protección contra escritura

3.5.2.28. Bit De Protección Contra Escritura 1:WRT1 = ON Bloque 1 (002000-003FFFh) con protección contra escritura

WRT1 = OFF Bloque 1 (002000-003FFFh) sin protección contra escritura

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 366/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

364

3.5.2.29. Bit De Protección Contra Escritura 2:

WRT2 = ON Bloque 2 (004000-005FFFh) con protección contra escritura

WRT2 = OFF Bloque 2 (004000-005FFFh) sin protección contra escritura

3.5.2.30. Bit De Protección Contra Escritura 3:

WRT3 = ON Bloque 3 (006000-007FFFh) con protección contra escritura

WRT3 = OFF Bloque 3 (006000-007FFFh) sin protección contra escritura

3.5.2.31. Bit De Protección Contra Escritura En El Bloque De Inicio:

WRTB = ONRegistros de configuración (300000-3000FFh) con proteccióncontra escritura

WRTB = OFFRegistros de configuración (300000-3000FFh) sin proteccióncontra escritura

3.5.2.32. Bits De Protección Contra Escritura En Los Registros DeConfiguración:

WRTC = ONBloque de inicio (000000-0007FFh) con protección contraescritura

WRTC = OFFBloque de inicio (000000-0007FFh) sin protección contraescritura

3.5.2.33. Bits De Protección Contra Escritura En La EEPROM De Datos:

WRTD = ON EEPROM de datos con protección contra escritura

WRTD = OFF EEPROM de datos sin protección contra escritura

3.5.2.34. Bit De Protección De La Lectura De Tabla Del Bloque 0:

EBTR0 = ONBloque 0 (000800-001FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR0 = OFFBloque 0 (000800-001FFFh) sin protección de la lectura detabla ejecutado en otros bloques

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 367/651

GUILLERMO DAVID HERRERO GONZÁLEZ

365

3.5.2.35. Bit De Protección De La Lectura De Tabla Del Bloque 1:

EBTR1 = ON Bloque 1 (002000-003FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR1 = OFFBloque 1 (002000-003FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.2.36. Bit De Protección De La Lectura De Tabla Del Bloque 2:

EBTR2 = ONBloque 2 (004000-005FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR2 = OFFBloque 2 (004000-005FFFh) sin protección de la lectura de

tabla ejecutado en otros bloques

3.5.2.37. Bit De Protección De La Lectura De Tabla Del Bloque 3:

EBTR3 = ONBloque 3 (006000-007FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR3 = OFFBloque 3 (006000-007FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.2.38. Protección Contra La Lectura De Tabla Del Bloque De

Inicio:EBTRB = ON

Bloque de inicio (000000-0007FFh) con protección de lalectura de tabla ejecutado en otros bloques

EBTRB = OFFBloque de inicio (000000-0007FFh) sin protección de la lecturade tabla ejecutado en otros bloques

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 368/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

366

3.5.3. PIC18F4455

3.5.3.1. Bits Selectores Del Prescaler Del PLL:

PLLDIV = 1Sin prescaler (Entrada de oscilador de 4MHz conduce el PLL

directamente)

PLLDIV = 2 Divide por 2 (8 MHz oscilador de entrada)

PLLDIV = 3 Divide por 3 (12 MHz oscilador de entrada)

PLLDIV = 4 Divide por 4 (16 MHz oscilador de entrada)

PLLDIV = 5 Divide por 5 (20 MHz oscilador de entrada)

PLLDIV = 6 Divide por 6 (24 MHz oscilador de entrada)

PLLDIV = 10 Divide por 10 (40 MHz oscilador de entrada)

PLLDIV = 12 Divide por 12 (48 MHz oscilador de entrada)

3.5.3.2. Postcaler Del Reloj Del Sistema CPU:

CPUDIV = OSC1_PLL2 [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]

CPUDIV = OSC2_PLL3 [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]

CPUDIV = OSC3_PLL4 [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]

CPUDIV = OSC4_PLL6 [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]

3.5.3.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed;UCFG:FSEN=1)

USBDIV = 1 La fuente de reloj es el oscilador primario sin postscaler

USBDIV = 2 La fuente de reloj viene de los 96MHz PLL y los divide por 2

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 369/651

GUILLERMO DAVID HERRERO GONZÁLEZ

367

3.5.3.4. Bits Selectores Del Oscilador:

FOSC = XT_XT XT oscilador, XT usado por USB

FOSC = XTPLL_XT XT oscilador, PLL activo, XT usado por USB

FOSC = ECIO_EC Reloj externo, funciona como puerto RA6, EC usado por USB

FOSC = EC_EC Reloj externo, CLKOUT en RA6, EC usado por USB

FOSC = ECPLLIO_ECReloj externo, PLL activo, funciona como puerto RA6, ECusado por USB

FOSC = ECPLL_ECReloj externo, PLL activo, CLKOUT en RA6, EC usado por USB

FOSC = INTOSCIO_ECOscilador interno, funciona como puerto RA6, EC usado por USB

FOSC = INTOSC_EC Oscilador interno, CLKOUT en RA6, EC usado por USB

FOSC = INTOSC_XT Oscilador interno, XT usado por USB

FOSC = INTOSC_HS Oscilador interno, HS usado por USB

FOSC = HS HS oscilador, HS usado por USB

FOSC = HSPLL_HS HS oscilador, PLL activo, HS usado por USB

3.5.3.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

FCMEM = OFF Monitor de reloj de seguridad desactivado

FCMEM = ON Monitor de reloj de seguridad activo

3.5.3.6. Bit De Cambio Del Oscilador Interno/Externo:

IESO = OFF Modo de cambio del oscilador desactivado

IESO = ON Modo de cambio del oscilador activo

3.5.3.7. Bit De Permiso Del Retraso En El Inicio:

PWRT = ON PWRT activo

PWRT = OFF PWRT desactivado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 370/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

368

3.5.3.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

BOR = OFF BOR desactivado en hardware y software

BOR = SOFT BOR activo y controlado por software (SBOREN está activo)

BOR = ON_ACTIVEBOR activo sólo en hardware y desactivado en modo Sleep(SBOREN desactivado)

BOR = ON BOR activo sólo en hardware (SBOREN está desactivado)

3.5.3.9. Bits De Tensión BOR:

BORV = 0 Configuración máxima

BORV = 1

BORV = 2

BORV = 3 Configuración mínima

3.5.3.10. Bit De Permiso Del Regulador De Tensión USB:

VREGEN = OFF Regulador de tensión USB desactivado

VREGEN = ON Regulador de tensión USB activo

3.5.3.11. Bit De Permiso Del Temporizador Watchdog:

WDT = OFF HW Desactivado - SW Controlado

WDT = ON HW Activo - SW Desactivado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 371/651

GUILLERMO DAVID HERRERO GONZÁLEZ

369

3.5.3.12. Bits Selectores Del Postscaler Del Watchdog:

WDTPS = 1 1:1

WDTPS = 2 1:2

WDTPS = 4 1:4

WDTPS = 8 1:8

WDTPS = 16 1:16

WDTPS = 32 1:32

WDTPS = 64 1:64

WDTPS = 128 1:128

WDTPS = 256 1:256

WDTPS = 512 1:512

WDTPS = 1024 1:1024

WDTPS = 2048 1:2048

WDTPS = 4096 1:4096

WDTPS = 8192 1:8192

WDTPS = 16384 1:16384

WDTPS = 32768 1:32768

3.5.3.13. Bit De Permiso Del Pin MCLR:

MCLRE = OFF RE3 pin de entrada activo; MCLR desactivado

MCLRE = ON MCLR pin activo; RE3 pin de entrada desactivado

3.5.3.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

LPT1OSC = OFF Timer 1 configurado para alta potencia

LPT1OSC = ON Timer 1 configurado para baja potencia

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 372/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

370

3.5.3.15. Bit De Permiso PORTB A/D:

PBADEN = OFF Los pines PORTB<4:0> se configuran como E/S digitales en elReset

PBADEN = ONLos pines PORTB<4:0> se configuran como entradasanalógicas en el Reset

3.5.3.16. CCP2 MUX Bit:

CCP2MX = OFF E/S CCP2 se multiplexa con RB3

CCP2MX = ON E/S CCP2 se multiplexa con RC1

3.5.3.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

STVREN = OFF Llenado/vaciado de la pila no provoca el Reset

STVREN = ON Llenado/vaciado de la pila provoca el Reset

3.5.3.18. Bit De Permiso Del ICSP:

LVP = OFF ICSP desactivado

LVP = ON ICSP activo

3.5.3.19. Bit De Permiso Del Debug En-Circuito/Puerto De Programación (ICPORT):

ICPRT = OFF ICPORT desactivado

ICPRT = ON ICPORT activo

3.5.3.20. Bit De Permiso Del Juego De Instrucciones Extendido:

XINST = OFFJuego de instrucciones extendido y modo de direccionamiento

indexado desactivado (Modo legado)

XINST = ONJuego de instrucciones extendido y modo de direccionamientoindexado activo

3.5.3.21. Bit De Permiso Del Debugger Oculto:

DEBUG = ONDebugger oculto: activo, RB6 y RB7 se dedican al Debug En-Circuito

DEBUG = OFFDebugger oculto: desactivado, RB6 y RB7 configurados como pines de E/S de propósito general

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 373/651

GUILLERMO DAVID HERRERO GONZÁLEZ

371

3.5.3.22. Bit Del Código De Protección En El Bloque 0:

CP0 = ON Bloque 0 (000800-001FFFh) con código de protección

CP0 = OFF Bloque 0 (000800-001FFFh) sin código de protección

3.5.3.23. Bit Del Código De Protección En El Bloque 1:

CP1 = ON Bloque 1 (002000-003FFFh) con código de protección

CP1 = OFF Bloque 1 (002000-003FFFh) sin código de protección

3.5.3.24. Bit Del Código De Protección En El Bloque 2:

CP2 = ON Bloque 2 (004000-005FFFh) con código de protección

CP2 = OFF Bloque 2 (004000-005FFFh) sin código de protección

3.5.3.25. Bit Del Código De Protección En El Bloque De Inicio:

3.5.3.26. Bit Del Código De Protección En La EEPROM De Datos:CPD = ON EEPROM de datos con código de protección

CPD = OFF EEPROM de datos sin código de protección

3.5.3.27. Bit De Protección Contra Escritura 0:

3.5.3.28. Bit De Protección Contra Escritura 1:

WRT1 = ON Bloque 1 (002000-003FFFh) con protección contra escritura

WRT1 = OFF Bloque 1 (002000-003FFFh) sin protección contra escritura

CPB = ON Bloque de inicio (000000-0007FFh) con código de protección

CPB = OFF Bloque de inicio (000000-0007FFh) sin código de protección

WRT0 = ON Bloque 0 (000800-001FFFh) con protección contra escritura

WRT0 = OFF Bloque 0 (000800-001FFFh) sin protección contra escritura

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 374/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

372

3.5.3.29. Bit De Protección Contra Escritura 2:

WRT2 = ON Bloque 2 (004000-005FFFh) con protección contra escritura

WRT2 = OFF Bloque 2 (004000-005FFFh) sin protección contra escritura

3.5.3.30. Bit De Protección Contra Escritura En El Bloque De Inicio:

WRTB = ONRegistros de configuración (300000-3000FFh) con proteccióncontra escritura

WRTB = OFFRegistros de configuración (300000-3000FFh) sin proteccióncontra escritura

3.5.3.31. Bits De Protección Contra Escritura En Los Registros DeConfiguración:

WRTC = ONBloque de inicio (000000-0007FFh) con protección contraescritura

WRTC = OFFBloque de inicio (000000-0007FFh) sin protección contraescritura

3.5.3.32. Bits De Protección Contra Escritura En La EEPROM De Datos:

WRTD = ON EEPROM de datos con protección contra escritura

WRTD = OFF EEPROM de datos sin protección contra escritura

3.5.3.33. Bit De Protección De La Lectura De Tabla Del Bloque 0:

EBTR0 = ONBloque 0 (000800-001FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR0 = OFFBloque 0 (000800-001FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.3.34. Bit De Protección De La Lectura De Tabla Del Bloque 1:

EBTR1 = ONBloque 1 (002000-003FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR1 = OFFBloque 1 (002000-003FFFh) sin protección de la lectura detabla ejecutado en otros bloques

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 375/651

GUILLERMO DAVID HERRERO GONZÁLEZ

373

3.5.3.35. Bit De Protección De La Lectura De Tabla Del Bloque 2:

EBTR2 = ON Bloque 2 (004000-005FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR2 = OFFBloque 2 (004000-005FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.3.36. Protección Contra La Lectura De Tabla Del Bloque De Inicio:

EBTRB = ONBloque de inicio (000000-0007FFh) con protección de lalectura de tabla ejecutado en otros bloques

EBTRB = OFF Bloque de inicio (000000-0007FFh) sin protección de la lecturade tabla ejecutado en otros bloques

3.5.4. PIC18F4550

3.5.4.1. Bits Selectores Del Prescaler Del PLL:

PLLDIV = 1Sin prescaler (Entrada de oscilador de 4MHz conduce el PLLdirectamente)

PLLDIV = 2 Divide por 2 (8 MHz oscilador de entrada)

PLLDIV = 3 Divide por 3 (12 MHz oscilador de entrada)

PLLDIV = 4 Divide por 4 (16 MHz oscilador de entrada)

PLLDIV = 5 Divide por 5 (20 MHz oscilador de entrada)

PLLDIV = 6 Divide por 6 (24 MHz oscilador de entrada)

PLLDIV = 10 Divide por 10 (40 MHz oscilador de entrada)

PLLDIV = 12 Divide por 12 (48 MHz oscilador de entrada)

3.5.4.2. Postcaler Del Reloj Del Sistema CPU:

CPUDIV = OSC1_PLL2 [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]

CPUDIV = OSC2_PLL3 [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]

CPUDIV = OSC3_PLL4 [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]

CPUDIV = OSC4_PLL6 [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 376/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

374

3.5.4.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed;UCFG:FSEN=1)

USBDIV = 1 La fuente de reloj es el oscilador primario sin postscaler

USBDIV = 2 La fuente de reloj viene de los 96MHz PLL y los divide por 2

3.5.4.4. Bits Selectores Del Oscilador:

FOSC = XT_XT XT oscilador, XT usado por USB

FOSC = XTPLL_XT XT oscilador, PLL activo, XT usado por USB

FOSC = ECIO_EC Reloj externo, funciona como puerto RA6, EC usado por USB

FOSC = EC_EC Reloj externo, CLKOUT en RA6, EC usado por USB

FOSC = ECPLLIO_ECReloj externo, PLL activo, funciona como puerto RA6, ECusado por USB

FOSC = ECPLL_ECReloj externo, PLL activo, CLKOUT en RA6, EC usado por USB

FOSC = INTOSCIO_ECOscilador interno, funciona como puerto RA6, EC usado por USB

FOSC = INTOSC_EC Oscilador interno, CLKOUT en RA6, EC usado por USB

FOSC = INTOSC_XT Oscilador interno, XT usado por USB

FOSC = INTOSC_HS Oscilador interno, HS usado por USB

FOSC = HS HS oscilador, HS usado por USB

FOSC = HSPLL_HS HS oscilador, PLL activo, HS usado por USB

3.5.4.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

FCMEM = OFF Monitor de reloj de seguridad desactivado

FCMEM = ON Monitor de reloj de seguridad activo

3.5.4.6. Bit De Cambio Del Oscilador Interno/Externo:

IESO = OFF Modo de cambio del oscilador desactivado

IESO = ON Modo de cambio del oscilador activo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 377/651

GUILLERMO DAVID HERRERO GONZÁLEZ

375

3.5.4.7. Bit De Permiso Del Retraso En El Inicio:

PWRT = ON PWRT activo

PWRT = OFF PWRT desactivado

3.5.4.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

BOR = OFF BOR desactivado en hardware y software

BOR = SOFT BOR activo y controlado por software (SBOREN está activo)

BOR = ON_ACTIVEBOR activo sólo en hardware y desactivado en modo Sleep(SBOREN desactivado)

BOR = ON BOR activo sólo en hardware (SBOREN está desactivado)

3.5.4.9. Bits De Tensión BOR:

BORV = 0 Configuración máxima

BORV = 1

BORV = 2

BORV = 3 Configuración mínima

3.5.4.10. Bit De Permiso Del Regulador De Tensión USB:

VREGEN = OFF Regulador de tensión USB desactivado

VREGEN = ON Regulador de tensión USB activo

3.5.4.11. Bit De Permiso Del Temporizador Watchdog:

WDT = OFF HW Desactivado - SW Controlado

WDT = ON HW Activo - SW Desactivado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 378/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

376

3.5.4.12. Bits Selectores Del Postscaler Del Watchdog:

WDTPS = 1 1:1

WDTPS = 2 1:2

WDTPS = 4 1:4

WDTPS = 8 1:8

WDTPS = 16 1:16

WDTPS = 32 1:32

WDTPS = 64 1:64

WDTPS = 128 1:128

WDTPS = 256 1:256

WDTPS = 512 1:512

WDTPS = 1024 1:1024

WDTPS = 2048 1:2048

WDTPS = 4096 1:4096

WDTPS = 8192 1:8192

WDTPS = 16384 1:16384

WDTPS = 32768 1:32768

3.5.4.13. Bit De Permiso Del Pin MCLR:

MCLRE = OFF RE3 pin de entrada activo; MCLR desactivado

MCLRE = ON MCLR pin activo; RE3 pin de entrada desactivado

3.5.4.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

LPT1OSC = OFF Timer 1 configurado para alta potencia

LPT1OSC = ON Timer 1 configurado para baja potencia

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 379/651

GUILLERMO DAVID HERRERO GONZÁLEZ

377

3.5.4.15. Bit De Permiso PORTB A/D:

PBADEN = OFF Los pines PORTB<4:0> se configuran como E/S digitales en elReset

PBADEN = ONLos pines PORTB<4:0> se configuran como entradasanalógicas en el Reset

3.5.4.16. CCP2 MUX Bit:

CCP2MX = OFF E/S CCP2 se multiplexa con RB3

CCP2MX = ON E/S CCP2 se multiplexa con RC1

3.5.4.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

STVREN = OFF Llenado/vaciado de la pila no provoca el Reset

STVREN = ON Llenado/vaciado de la pila provoca el Reset

3.5.4.18. Bit De Permiso Del ICSP:

LVP = OFF ICSP desactivado

LVP = ON ICSP activo

3.5.4.19. Bit De Permiso Del Debug En-Circuito/Puerto De Programación (ICPORT):

ICPRT = OFF ICPORT desactivado

ICPRT = ON ICPORT activo

3.5.4.20. Bit De Permiso Del Juego De Instrucciones Extendido:

XINST = OFFJuego de instrucciones extendido y modo de direccionamiento

indexado desactivado (Modo legado)

XINST = ONJuego de instrucciones extendido y modo de direccionamientoindexado activo

3.5.4.21. Bit De Permiso Del Debugger Oculto:

DEBUG = ONDebugger oculto: activo, RB6 y RB7 se dedican al Debug En-Circuito

DEBUG = OFFDebugger oculto: desactivado, RB6 y RB7 configurados como pines de E/S de propósito general

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 380/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

378

3.5.4.22. Bit Del Código De Protección En El Bloque 0:

CP0 = ON Bloque 0 (000800-001FFFh) con código de protección

CP0 = OFF Bloque 0 (000800-001FFFh) sin código de protección

3.5.4.23. Bit Del Código De Protección En El Bloque 1:

CP1 = ON Bloque 1 (002000-003FFFh) con código de protección

CP1 = OFF Bloque 1 (002000-003FFFh) sin código de protección

3.5.4.24. Bit Del Código De Protección En El Bloque 2:

CP2 = ON Bloque 2 (004000-005FFFh) con código de protección

CP2 = OFF Bloque 2 (004000-005FFFh) sin código de protección

3.5.4.25. Bit Del Código De Protección En El Bloque 3:

3.5.4.26. Bit Del Código De Protección En El Bloque De Inicio:CPB = ON Bloque de inicio (000000-0007FFh) con código de protección

CPB = OFF Bloque de inicio (000000-0007FFh) sin código de protección

3.5.4.27. Bit Del Código De Protección En La EEPROM De Datos:

CPD = ON EEPROM de datos con código de protección

CPD = OFF EEPROM de datos sin código de protección

3.5.4.28. Bit De Protección Contra Escritura 0:

WRT0 = ON Bloque 0 (000800-001FFFh) con protección contra escritura

WRT0 = OFF Bloque 0 (000800-001FFFh) sin protección contra escritura

CP3 = ON Bloque 3 (006000-007FFFh) con código de protección

CP3 = OFF Bloque 3 (006000-007FFFh) sin código de protección

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 381/651

GUILLERMO DAVID HERRERO GONZÁLEZ

379

3.5.4.29. Bit De Protección Contra Escritura 1:

WRT1 = ON Bloque 1 (002000-003FFFh) con protección contra escritura

WRT1 = OFF Bloque 1 (002000-003FFFh) sin protección contra escritura

3.5.4.30. Bit De Protección Contra Escritura 2:

WRT2 = ON Bloque 2 (004000-005FFFh) con protección contra escritura

WRT2 = OFF Bloque 2 (004000-005FFFh) sin protección contra escritura

3.5.4.31. Bit De Protección Contra Escritura 3:

WRT3 = ON Bloque 3 (006000-007FFFh) con protección contra escritura

WRT3 = OFF Bloque 3 (006000-007FFFh) sin protección contra escritura

3.5.4.32. Bit De Protección Contra Escritura En El Bloque De Inicio:

WRTC = ONBloque de inicio (000000-0007FFh) con protección contraescritura

WRTC = OFFBloque de inicio (000000-0007FFh) sin protección contraescritura

3.5.4.33. Bits De Protección Contra Escritura En Los Registros DeConfiguración:

3.5.4.34.

Bits De Protección Contra Escritura En La EEPROM De Datos:

WRTD = ON EEPROM de datos con protección contra escritura

WRTD = OFF EEPROM de datos sin protección contra escritura

WRTB = ONRegistros de configuración (300000-3000FFh) con proteccióncontra escritura

WRTB = OFFRegistros de configuración (300000-3000FFh) sin proteccióncontra escritura

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 382/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

380

3.5.4.35. Bit De Protección De La Lectura De Tabla Del Bloque 0:

EBTR0 = ON Bloque 0 (000800-001FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR0 = OFFBloque 0 (000800-001FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.4.36. Bit De Protección De La Lectura De Tabla Del Bloque 1:

EBTR1 = ONBloque 1 (002000-003FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR1 = OFFBloque 1 (002000-003FFFh) sin protección de la lectura de

tabla ejecutado en otros bloques

3.5.4.37. Bit De Protección De La Lectura De Tabla Del Bloque 2:

EBTR2 = ONBloque 2 (004000-005FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR2 = OFFBloque 2 (004000-005FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.4.38. Bit De Protección De La Lectura De Tabla Del Bloque 3:

EBTR3 = ON Bloque 3 (006000-007FFFh) con protección de la lectura detabla ejecutado en otros bloques

EBTR3 = OFFBloque 3 (006000-007FFFh) sin protección de la lectura detabla ejecutado en otros bloques

3.5.4.39. Protección Contra La Lectura De Tabla Del Bloque De Inicio:

EBTRB = ONBloque de inicio (000000-0007FFh) con protección de la lecturade tabla ejecutado en otros bloques

EBTRB = OFFBloque de inicio (000000-0007FFh) sin protección de la lecturade tabla ejecutado en otros bloques

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 383/651

4. LENGUAJE DE PROGRAMACIÓN

C18

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 384/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 385/651

383

4. LENGUAJE DE PROGRAMACIÓN C18

4.1. I NTRODUCCIÓN

El lenguaje C fue creado en los años 70 para escribir el código del sistemaoperativo UNIX. Tanto por su origen como por sus características, es un lenguaje muyadecuado para la programación de sistemas, ya que combina la abstracción de loslenguajes de alto nivel con la eficiencia del lenguaje máquina.

La amplia utilización de C para distintos tipos de computadores ocasionómuchas variantes. Éstas eran similares, pero a menudo incompatibles, lo que se volvióun problema serio para los desarrolladores que necesitaban escribir programas que se

ejecutaran en distintas plataformas. Entonces, se hizo evidente la necesidad de unaversión estándar de C. En 1983, se creó el comité técnico X3J11 bajo la supervisión deAmerican National Standards Comitte on Computer and Information Processing (X3),

para “proporcionar una definición del lenguaje clara e independiente de lacomputadora”. En 1989, el estándar fue aprobado. ANSI cooperó con la InternationalOrganization for Standardization (ISO) para estandarizar C a nivel mundial; eldocumento conjunto del estándar se publicó en 1990 y se conoce comoANSI/ISO9899:1990 o ANSI C.

Entre las características de este lenguaje cabe citar que es altamente portable, esmuy flexible, genera código muy eficiente y permite escribir código muy compacto (se

pueden realizar muchas funciones escribiendo pocas líneas de código).

El C18 es una versión del C creada específicamente para los microcontroladoresPIC18, que por sus características resulta demasiado complicado la programación en sulenguaje de bajo nivel, el Assambler.

4.2. COMPILADOR MPLAB C18

4.2.1. INTRODUCCIÓN

El compilador MPLAB C18 es un compilador que optimiza el estándar ANSI Cen los microcontroladores PIC18. El compilador modifica el estándar ANSI X3.159-

1989 sólo en los puntos en los que se puedan crear conflictos con el soporte delmicrocontrolador.

El MPLAB C18 tiene las siguientes características:

Ê Compatibilidad ANSI ’89.

Ê Integración con el MLAB IDE para una mayor facilidad de realización ydebugg de proyectos.

Ê Admite ensamblador empotrado.

Ê Gran variedad de librerías.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 386/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

384

Ê Optimización multinivel.

Ê Acceso transparente en la lectura/escritura de la memoria.

Ê Versión estudiante gratuita.

En este manual, aparecen en verde y con tipo de letra Comic Sans MS elcódigo fuente y en verde con tipo de letra Times New Roman las notas del código.

4.2.2. TIPOS DE DATOS

Los datos de más de un byte de longitud, se almacenan en memoria como en elensamblador, con el criterio Little Indian; es decir, los bytes menos significativos sealmacenan en las posiciones de memoria bajas.

4.2.2.1. Enteros

Tipo Tamaño Mínimo Máximo

Char 8 bits -128 127

Signedchar 8 bits -128 127

Unsigned char 8 bits 0 255

Int 16 bits -32768 32767

Unsigned Int 16 bits 0 65535

Short 16 bits -32768 32767

Unsigned Short 16 bits 0 65535

Short long 24 bits -8.388.608 8.388.607

Unsigned short long 24 bits 0 16.777.215

Long 32 bits -2.147.483.648 2.147.483.647Unsigned long 32 bits 0 4.294.967.295

4.2.2.2. Reales

Tipo Tamaño Exponente Mínimo Exponente Máximo

Float 32 bits -126 128

Double 32 bits -126 128

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 387/651

GUILLERMO DAVID HERRERO GONZÁLEZ

385

4.2.2.3. Estructuras

Se permiten las estructuras de datos. Su utilidad es el acceso a bits.union tpuerto

unsigned char valor;struct

unsigned bit0:1;unsigned bit1:1;unsigned bit2:1;unsigned bit3:1;unsigned bit4:1;unsigned bit5:1;unsigned bit6:1;unsigned bit7:1;

;byte;

En este ejemplo se declara tpuerto como byte que contiene:

Ê Una variable tipo char llamada valor.

Ê Un conjunto de bits.

4.2.2.4. Almacenamiento

El compilador reconoce los modificadores establecidos en la norma ANSI:

Ê Auto:

9 Las variables se declaran globales si se ha hecho fuera de lasfunciones y locales si se realiza en las funciones.

9 Tienen prioridad las locales. Todas las variables no inicializadastienen un valor indefinido.

Ê Externa:

9 La variable declarada pertenece a otro módulo, por lo que noreserva memoria para ella.

9 Sirve para acceder a una variable aunque no se haya declaradotodavía.

9 Se inicializan a cero.

Ê Register:

9 La variable se guarda en uno de los registros del procesador.

9 Si no se puede almacenar en un registro, se comporta como Auto.

9 Útil para optimizar el tiempo de ejecución de algunas funciones.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 388/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

386

Ê Static:

9 Variables locales que retiene su valor al salir de la función en laque se ha declarado.

9 Se inicializan a cero.

9 Ahorra número de instrucciones para acceder a las variables.

Ê Typedef:

9 Asigna un nuevo nombre a un tipo de datos.

Ê Overlay:

9 Declara las variables locales Static pero se inicializan cada vezque se llama la función.

9 Ahorra espacio de memoria.

4.2.2.5. Calificadores

Ê Const: Definición de una constante.

Ê Volatile: El contenido de la variable puede cambiar.

Ê Far: Los datos se encuentran en un banco lejano, hay que cambiar de banco o de acceso indirecto para acceder a la variable. Si se declaracódigo, podemos acceder a objetos por encima de 64KB.

Ê Near: La variable se declara en el banco de acceso. Si se declara código,accedemos a una zona inferior de 64KB.

Ê RAM: La variable se sitúa en la memoria de datos.

Ê ROM: La variable se sitúa en la memoria de programa.

4.2.3. ESTRUCTURAS DE CONTROL

4.2.3.1. Repetitivas

4.2.3.1.1. Sentencia While

Las instrucciones se ejecutan repetidamente hasta que el valor de la expresión,que se comprueba al comenzar el bucle, sea falso, es decir cero.

while (expresión) Instrucción 1Instrucción 2...Instrucción n

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 389/651

GUILLERMO DAVID HERRERO GONZÁLEZ

387

4.2.3.1.2. Sentencia Do

Las instrucciones se ejecutan repetidamente hasta que el valor de la expresión,que se comprueba al final del bucle, sea falso, es decir cero.

do Instrucción 1Instrucción 2...Instrucción n while ( expresión );

4.2.3.1.3. Sentencia For

Las instrucciones se ejecutan repetidamente hasta que el valor de la exp2 seafalso, es decir cero.

exp1 sirve para inicializar el contador del bucle.

exp3 controla el contador del bucle. Se evalúa al final del mismo.

for( exp1; exp 2; exp 3) Instrucción 1Instrucción 2...Instrucción n

4.2.3.1.4. Sentencia IfLa expresión se evalúa y si es verdadera (distinta de cero) se ejecutan las

instrucciones.

If( expresión ) Instrucción 1Instrucción 2...Instrucción n

4.2.3.1.5. Sentencia If-Else

La expresión se evalúa, si es verdadera se ejecutan las instrucciones A, en casocontrario las Instrucciones B.

If( expresión ) Instrucciones A elseInstrucciones B

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 390/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

388

4.2.3.1.6. Sentencia SwitchPermite realizar selecciones múltiples. switch ( expresión ) case const1:

Instrucción 1;break;

case const2:Instrucción 2;break;

...default:

Instrucción n

break;

4.2.3.1.7. Sentencia Break

Interrumpe la ejecución de un bucle while, do-while o for.

Ejemplo: ¿ cómo salir de un bucle infinito for?

For (;;) if( a==0) break;

a=PORTA;

4.2.3.1.8. Sentencia Continue

Se utiliza en los bucles para pasar a la siguiente repetición.

For (;;) if( a!=0) continue; break;

4.2.3.1.9. Sentencia GotoTransfiere incondicionalmente el control a la sentencia etiquetada por el

identificador.

goto identificador;

identificador: instrucciones;

Es una sentencia propia del lenguaje Basic. No se recomienda su utilización yaque varía la estructura del programa.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 391/651

GUILLERMO DAVID HERRERO GONZÁLEZ

389

4.2.4. PUNTEROS

Un puntero es una variable que contiene la dirección a una zona de memoria enla que se almacena una variable.

Los punteros ocupan 16Bits.

char car; //variable de tipo char

char *pcar; //puntero a una variable char

car=0xAA //almacena el dato hexadecimal AA

pcar=&car //almacena la dirección de la variable car, & devuelve la dirección

Otra forma de acceso:

char *pcar;//puntero a una variable char

pcar=(char*)0x501 //almaceno en el puntero la dirección de memoria 501

*pcar=0xAA //almaceno en la dirección de memoria que tiene el puntero, el dato 0xAA

Optimizando este código:

#define CAR (*(char*)0x501)

CAR=0xAA

Al optimizarlo se ahorran las direcciones de memoria del puntero.

Hay que tener cuidado ya que el compilador no comprueba errores.

4.2.5. CADENAS DE CONSTANTES

Las cadenas de constantes se pueden almacenar en la memoria de programa.

Existen instrucciones especiales para moverlas entre la RAM y la ROM:

Ê char *strcpy (auto char *s1, auto const char *s2). Copia dos cadenasambas de la RAM.

Ê char *strcpypgm2ram (auto char *s1, auto rom const char *s2). Copiados cadenas, la original de la memoria de programa y la copia en la

RAM.Ê rom char *strcpyram2pgm (auto rom char *s1, auto const char *s2).

Copia dos cadenas, la original en la RAM y la copia en la memoria de programa.

Ê rom char *strcpypgm2pgm (auto rom char *s1, auto const rom char *s2).Copia dos cadenas ambas en la memoria de programa.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 392/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

390

4.3. L IBRERÍAS D EL C18

Una librería es una colección de funciones agrupadas por referencia y facilidadde llamada.

En este apartado aparecen las librerías utilizadas en el proyecto.

Las librerías relacionadas con el USB no se instalan con el compilador, teniendoque descargarse de la página del fabricante; el resto se encuentran en la carpeta libdentro de la carpeta de instalación del MPLAB C18.

4.3.1. ABREVIATURAS EN LAS LIBRERÍAS DE MICROCHIP

A

ACM Modelo abstracto de control

ACT Actividad, activa

ADR Dirección

ALLOC Asignación

ALT Alterno

AUX Auxiliar

B

BD Buffer Descriptor BDT Tabla del buffer descriptor

BUFF Buffer

C

CDC Clase del dispositivo

CFG Configuración

CLR borrar

CLS ClaseCTRL Control

D

DC Clase del dispositivo

DEF Definición

DEFS ver DEF

DEV Dispositivo

DIR Dirección

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 393/651

GUILLERMO DAVID HERRERO GONZÁLEZ

391

DSC Descriptor

E ENDP Endpoint

EP Endpoint

EXT Externo

F

FN funcional

FS Full-Speed

H HID Dispositivo interfaz humana

I

INIT inicializar

INT Interrupción/interno

INTF Interfaz

IO Entrada-salida

ISOCH SíncronoISR Rutina del servicio de interrupción

L

LANG Lenguaje

LEN Longitud

LS Low-speed

M

MAX MáximoMCHP Tecnología de microchip

MEM Memoria

MFR Fabricante, fabricación, fabricación

MGT Gerencia

MIN Mínimo

MSD Dispositivo de almacenamiento masivo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 394/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

392

N

NUM Número

O

OP Operacional

P

PKT Paquete

PID Paquete de identificación

PP Ping-pong

PREP Preparación

PTR Puntero

R

RDY listo

REG registro

REQ Petición

RCPT Receptor

RPT InformeRWU Reinicio remoto

RX recibir

S

SIE Motor de la interfaz serie

STAT Estado

STD Estándar

SYNCH síncrono, sincronización

SYS Sistema

T

TEL Teléfono

TR Emisor

TRF Transferencia

TX transmisión

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 395/651

GUILLERMO DAVID HERRERO GONZÁLEZ

393

U

USB Bus serie universal

UTIL Utilidad

V

VAR Variable

VAL Valor

VEND Vendedor

Z

ZLP Paquete cero de longitud

4.3.2. ADC.H: LIBRERÍA DE LOS CONVERSORES A/D

Con esta libraría se tratan los conversores analógico-digitales, desde suconfiguración hasta su lectura.

Para poder llamar a las funciones, como se indica en el código, hay que incluir lalibrería de la siguiente forma:

#include <adc.h>

4.3.2.1. Descripción De Las Funciones

char BusyADC(void)

Comprueba si el conversor está realizando una conversión o no. Devuelve un 1si el conversor A/D realiza la conversión y un 0 si no lo hace.

BusyADC();

void CloseADC(void)

Desactiva el conversor A/D y el mecanismo de interrupción.

CloseADC();

void ConvertADC(void)

Esta función comienza la conversión A/D. Se puede utilizar BusyADC() paradetectar el final de la conversión.

ConvertADC();

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 396/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

394

void OpenADC(unsigned char config, unsigned char config2, unsigned char portconfig)

Esta función resetea los registros asociados al conversor A/D al estado POR yconfigura el reloj, el formato del resultado, tensión de referencia, puerto y canal.

Hay variaciones dependiendo del microcontrolador. Lo que se expone aquí es para la mayoría de los micros.

config:

Fuente de reloj:

ADC_FOSC_2 FOSC/2

ADC_FOSC_4 FOSC/4

ADC_FOSC_8 FOSC/8

ADC_FOSC_16 FOSC/16

ADC_FOSC_32 FOSC/32

ADC_FOSC_64 FOSC/64

ADC_FOSC_RC FOSC/RC

Justificación del resultado A/D:

ADC_RIGHT_JUST Resultado en los bits menos significativos

ADC_LEFT_JUST Resultado en los bits más significativosSelectores del tiempo de adquisición A/D:

ADC_0_TAD 0 Tad

ADC_2_TAD 2 Tad

ADC_4_TAD 4 Tad

ADC_6_TAD 6 Tad

ADC_8_TAD 8 Tad

ADC_12_TAD 12 Tad

ADC_16_TAD 16 Tad

ADC_20_TAD 20 Tad

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 397/651

GUILLERMO DAVID HERRERO GONZÁLEZ

395

config2:

Canal:

ADC_CH0 Canal 0

ADC_CH1 Canal 1

ADC_CH2 Canal 2

ADC_CH3 Canal 3

ADC_CH4 Canal 4

ADC_CH5 Canal 5

ADC_CH6 Canal 6

ADC_CH7 Canal 7ADC_CH8 Canal 8

ADC_CH9 Canal 9

ADC_CH10 Canal 10

ADC_CH11 Canal 11

ADC_CH12 Canal 12

ADC_CH13 Canal 13

ADC_CH14 Canal 14

ADC_CH15 Canal 15

Interrupciones A/D:

ADC_INT_ON Interrupciones activadas

ADC_INT_OFF Interrupciones desactivadas

Configuración de tensiones A/D:

ADC_VREFPLUS_VDD VREF+=AVDD

ADC_VREFPLUS_EXT VREF+=externa

ADC_VREFMINUS_VDD VREF-=AVDD

ADC_VREFMINUS_EXT VREF-=externa

portconfig:

El valor de portconfig es un valor de 0 a 15. Corresponde con los bits 0 a 3 delregistro ADCON1, que son los bits de configuración de los puertos.

OpenADC(ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD, DC_CH0 &ADC_INT_OFF, 15;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 398/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

396

int ReadADC(void)

Esta función devuelve los 16 bits con signo resultado de la conversión A/D.Basándose en la configuración del conversor A/D, el resultado puede almacenarse enlos bits menos o más significativos.

int resultado;resultado=ReadADC();

void SetChanADC(unsigned char channel)

Selecciona al canal que se va a utlizar en el código.

Si se han activado los canales AN0 y AN1, antes de leer el AN1 hay que llamar esta función para que se lea al AN1 y no el AN0.

channel:

ADC_CH0 Canal 0

ADC_CH1 Canal 1

ADC_CH2 Canal 2

ADC_CH3 Canal 3

ADC_CH4 Canal 4

ADC_CH5 Canal 5

ADC_CH6 Canal 6ADC_CH7 Canal 7

ADC_CH8 Canal 8

ADC_CH9 Canal 9

ADC_CH10 Canal 10

ADC_CH11 Canal 11

ADC_CH12 Canal 12

ADC_CH13 Canal 13

ADC_CH14 Canal 14

ADC_CH15 Canal 15

SetChanADC(ADC_CH1);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 399/651

GUILLERMO DAVID HERRERO GONZÁLEZ

397

4.3.3. P WM.H: FUNCIONES DEL PWM Y EPWM

Esta librería trata la modulación de ancho de pulso tanto de los CCP como de losmejorados.

Todas las funciones aparecen con una x, esta corresponde al número del CCPque se está utilizando.

La forma de invocar las funciones está escrita en verde (código). Antes de llamar las funciones hay que incluir la librería:

#include <pwm.h>

Para que la modulación funcione correctamente hay que activar el Timer 2, se

explica en este capítulo. 4.3.3.1. Descripción De Las Funciones

void ClosePWMx(void) y void CloseEPWM1(void)

Esta función desactiva el canal PWM específico. La x corresponde al canal.

ClosePWM2();

void OpenPWMx(char period) y void OpenEPWM1(char period)

Esta función configura el canal PWM específico por periodo y por base de

tiempos. El PWM sólo utiliza el Timer2.Para que funcione el PWM, antes hay que abrir el Timer2 con la función

OpenTimer2(…).

period:

Puede ser un valor de 0x00 a 0xFF. Este dato determina la frecuencia del PWMmediante la fórmula:

)2 _ _ _ _ (4]1)[( _ TMRde prescaler del Valor T period PWM Periodo OSC •••+=

OpenPWM2(0xFF);

void SetDCPWMx(unsigned int dutycicle) y void SetDCPEPWM1(unsignedint dutycicle)

Esta función escribe un valor nuevo del ciclo de trabajo en el canal PWMespecificado.

dutycicle:

El valor de dutycicle puede ser de 10 bits, si es mayor sólo se almacenarán los10 bits de menos peso.

SetDCPWM2(0x0F0);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 400/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

398

void SetOutputEPWM1(unsigned char outputconfig, unsigned char outputmode)

Esta función configura la salida del módulo EPWM.

outputconfig:

SINGLE_OUT Salida simple

FULL_OUT_FWD Salida full-bridge forward

FULL_OUT_REV Salida full-bridge reverse

HALF_OUT Salida half-bridge

outputmode:

PWM_MODE_1 P1A, P1B, P1C y P1D activo por altosPWM_MODE_2 P1A y P1C activo por altos y P1B y P1D activo por bajos

PWM_MODE_3 P1A y P1C activo por bajos y P1B y P1D activo por altos

PWM_MODE_4 P1A, P1B, P1C y P1D activo por bajos

SetOutputEPWM1(SIGNED_OUT, PWM_MODE_1);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 401/651

GUILLERMO DAVID HERRERO GONZÁLEZ

399

4.3.4. TIMERS.H: FUNCIONES DE LOS TEMPORIZADORES

Esta librería es la encargada de los temporizadores.

En esta traducción de la librería de Microchip sólo aparecen las palabras deconfiguración válidas para la familia PIC18Fxx5x, ya que varía dependiendo delmicroprocesador.

Para incluirla hay que escribir al principio del archivo:

#include <timers.h>

4.3.4.1. Descripción de las funciones

void CloseTimerx(void)Esta función desactiva el temporizador x y su interrupción.

CloseTimer2();

void OpenTimer0(unsigned char config);

Esta función configura el Timer0 de acuerdo con las opciones especificadas y loactiva.

config:

Interrupción Timer0:TIMER_INT_ON Activa

TIMER_INT_OFF Desactiva

Tamaño del Temporizador:

T0_8BIT Modo 8bits

T0_16BIT Modo 16bits

Fuente de reloj:

T0_SOURCE_EXT Fuente esterna

T0_SOURCE_INT Fuente interna

(TOSC)

Disparador del reloj externo (de la fuente externa):

T0_EDGE_FALL Flanco de bajada

T0_EDGE_RISE Flanco de subida

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 402/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

400

Valor del Prescaler:

T0_PS_1_1 Prescaler 1:1

T0_PS_1_2 Prescaler 1:2

T0_PS_1_4 Prescaler 1:4

T0_PS_1_8 Prescaler 1:8

T0_PS_1_16 Prescaler 1:16

T0_PS_1_32 Prescaler 1:32

T0_PS_1_64 Prescaler 1:64

T0_PS_1_128 Prescaler 1:128

T0_PS_1_256 Prescaler 1:256OpenTimer0(TIMER_INT_OFF & T0_8BIT & T0_SOURCE_INT & T0_PS_1_32)

void OpenTimer1(unsigned char config);

Esta función configura el Timer1 de acuerdo con las opciones especificadas y loactiva.

config:

Interrupción Timer1:

TIMER_INT_ON Activa

TIMER_INT_OFF Desactiva

Tamaño del Temporizador:

T1_8BIT_RW Modo 8bits

T1_16BIT_RW Modo 16bits

Fuente de reloj:

T1_SOURCE_EXT Fuente esterna

T1_SOURCE_INT Fuente interna

(TOSC)

Valor del Prescaler:

T0_PS_1_1 Prescaler 1:1

T0_PS_1_2 Prescaler 1:2

T0_PS_1_4 Prescaler 1:4

T0_PS_1_8 Prescaler 1:8

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 403/651

GUILLERMO DAVID HERRERO GONZÁLEZ

401

Oscilador:

T1_OSC1EN_ON Activo

T1_OSC1EN_OFF Desactivo

Sincronización del reloj de entrada:

T1_SYNC_EXT_ON Sincronización de la entrada del reloj ext.

T1_SYNC_EXT_OFF Sin sinc.

Uso con CCP:

Dispositivos con 1 ó 2 CCP:

T3_SOURCE_CCP Timer3 fuente de ambos CCP

T1_CCP1_T3_CCP2 Timer1 fuente del CCP1 y Timer3 del CCP2T1_SOURCE_CCP Timer1 fuente de ambos CCP

OpenTimer1(TIMER_INT_OFF & T1_8BIT_RW & T1_SOURCE_EXT & T1_PS_1_1 &T1_OSC1EN_OFF & T1_SYNC_EXT_OFF & T1_SOURCE_CPP)

void OpenTimer2(unsigned char config);

Esta función configura el Timer2 de acuerdo con las opciones especificadas y loactiva.

config:

Interrupción Timer2:

TIMER_INT_ON Activa

TIMER_INT_OFF Desactiva

Valor del Prescaler:

T2_PS_1_1 Prescaler 1:1

T2_PS_1_2 Prescaler 1:2

T2_PS_1_4 Prescaler 1:4

T2_PS_1_16 Prescaler 1:16

Valor del Postscaler:T2_PS_1_1 Postscaler 1:1

T2_PS_1_2 Postscaler 1:2

T2_PS_1_15 Postscaler 1:15

T0_PS_1_16 Prescaler 1:16

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 404/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

402

Uso con CCP:

Dispositivos con 1 ó 2 CCP:

T3_SOURCE_CCP Timer3 fuente de ambos CCP

T1_CCP1_T3_CCP2 Timer1 fuente del CCP1 y Timer3 del CCP2

T1_SOURCE_CCP Timer1 fuente de ambos CCP

OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_8)

void OpenTimer3(unsigned char config);

Esta función configura el Timer3 de acuerdo con las opciones especificadas y loactiva.

config: Interrupción Timer3:

TIMER_INT_ON Activa

TIMER_INT_OFF Desactiva

Tamaño del Temporizador:

T3_8BIT_RW Modo 8bits

T3_16BIT_RW Modo 16bits

Fuente de reloj:

T3_SOURCE_EXT Fuente esternaT3_SOURCE_INT Fuente interna (TOSC)

Valor del Prescaler:

T3_PS_1_1 Prescaler 1:1

T3_PS_1_2 Prescaler 1:2

T3_PS_1_4 Prescaler 1:4

T3_PS_1_8 Prescaler 1:8

Sincronización del reloj de entrada:

T3_SYNC_EXT_ON Sincronización de la entrada del reloj ext.

T3_SYNC_EXT_OFF Sin sinc.

Uso con CCP:

Dispositivos con 1 ó 2 CCP:

T3_SOURCE_CCP Timer3 fuente de ambos CCP

T1_CCP1_T3_CCP2 Timer1 fuente del CCP1 y Timer3 del CCP2

T1_SOURCE_CCP Timer1 fuente de ambos CCP

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 405/651

GUILLERMO DAVID HERRERO GONZÁLEZ

403

OpenTimer3(TIMER_INT_OFF & T3_8BIT_RW & T3_SOURCE_EXT & T3_PS_1_1 &T3_SYNC_EXT_OFF & T1_SOURCE_CPP)

unsigned int/char ReadTimerx(void)

Esta función lee el valor del registro/registros del temporizador respectivodependiendo si es de 8bits o de 16bits.

Cuando se utiliza un temporizador de 16bits en el modo de 8bits, el byte alto puede que no sea cero. El usuario tiene que almacenar el resultado en un char para quesea correcto.

unsigned int resultado;resultado=ReadTimer0(); //el resultado es un int porque el Timer0 es de 16bits

unsigned char resultado;resultado=ReadTimer2(); //el resultado es un char porque el Timer2 es de 8bits

void WriteTimerx(unsigned int/char timer)

Esta función escribe un valor en el/los registros específicos del temporizador.

timer: Es el valor que se va a almacenar en el temporizador.

Es un int si el temporizador es de 16bits, aunque trabaje en modo 8bits; y unchar si el temporizador es de 8bits.

WriteTimer0(10000);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 406/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

404

4.3.5. DELAYS.H: RETRASOS POR SOFTWARE

Las funciones delay ejecutan un código de un número específico de ciclos deinstrucciones. Hay que tener en cuenta la frecuencia del procesador.

Para usarla primero hay que incluirla en el programa:

#include <delays.h>

4.3.5.1. Descripción De Las Funciones

void Delay1TCY(void)

Esta función es una definición de la instrucción NOP. Cuando se encuentra en el

código, el compilador inserta un NOP.Delay1TCY();

void Delay10TCYx(unsigned char unit)

Esta función crea un retraso en múltiplos de 10 ciclos de instrucción.

unit:

El valor de unit puede ser de 8bits; en un rango de [1,255].

El retraso será de (10*unit) ciclos.

Si unit=0 el retraso será de 2 560 ciclos.Delay10TCYx();

void Delay100TCYx(unsigned char unit)

Esta función crea un retraso en múltiplos de 100 ciclos de instrucción.

Esta función utiliza la variable global DelayCounter1. Si se utliza la función enlas interrupciones y en el código, la variable anterior se tiene que almacenar y recuperar en el código de la interrupción. Darse cuenta de que otras funciones de retrasos utilizanla variable DelayCounter1.

unit:

El valor de unit puede ser de 8bits; en un rango de [1,255].

El retraso será de (100*unit) ciclos.

Si unit=0 el retraso será de 25 600 ciclos.

Delay100TCYx();

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 407/651

GUILLERMO DAVID HERRERO GONZÁLEZ

405

void Delay1KTCYx(unsigned char unit)

Esta función crea un retraso en múltiplos de 1 000 ciclos de instrucción.Esta función utiliza la variable global DelayCounter1 y DelayCounter2. Si se

utliza la función en las interrupciones y en el código, las variables anteriores se tienenque almacenar y recuperar en el código de la interrupción. Darse cuenta de que otrasfunciones de retrasos utilizan las variables DelayCounter1 y DelayCounter2.

unit:

El valor de unit puede ser de 8bits; en un rango de [1,255].

El retraso será de (1 000*unit) ciclos.

Si unit=0 el retraso será de 256 000 ciclos.

Delay1KTCYx();

void Delay10KTCYx(unsigned char unit)

Esta función crea un retraso en múltiplos de 10 000 ciclos de instrucción.

Esta función utiliza la variable global DelayCounter1 y DelayCounter2. Si seutliza la función en las interrupciones y en el código, las variables anteriores se tienenque almacenar y recuperar en el código de la interrupción. Darse cuenta de que otrasfunciones de retrasos utilizan las variables DelayCounter1 y DelayCounter2.

unit:

El valor de unit puede ser de 8bits; en un rango de [1,255].

El retraso será de (10 000*unit) ciclos.

Si unit=0 el retraso será de 2 560 000 ciclos.

Delay1KTCYx();

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 408/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

406

4.3.6. LIBRERÍAS DEL USB

Las librerías que aquí aparecen son un ejemplo. Dependiendo de la clase (HID,MSD, GEN, BOOT o CDC) hay algunas variaciones.

En rojo aparecen los datos que hay que cambiar en cada firmware. En azul laslíneas que dependen de la clase. Y en verde la parte de la librería que es código, aunqueel texto en rojo y en azul también es código.

Para realizar una conexión sin características específicas, lo recomendable esutilizar la clase genérica (GEN) ya que permite una velocidad más alta que la claseCDC, aunque esta última se utiliza por resultar más fácil la programación del host. Paraello se copian todas las librerías de esta clase que suministra Microchip y se modifican

las líneas que aquí aparecen en rojo. Lo más importante es definir bien las interfaces ylos Endpoints.

Para realizar una aplicación en una clase determinada, lo más sencillo es copiar todas las librerías de esa clase, corregirlas y modificar las librerías user.h y las aquícomentadas. Haciendo esto, nos evitamos tener que modificar el código al cambiar laclase del dispositivo.

Para más información visitar la página web de microchip, en la que hayejemplos de cada clase.

4.3.6.1. Usb.h

Esta librería proporciona la forma de incluir todos los archivos necesarios delfirmware del USB de Microchip.

En realidad, es la única librería que hay que incluir en el programa de inicio, yaque se encarga de añadir las demás.

El orden de inclusión es importante, ya que se resuelven los conflictos dedependencia con el orden correcto:

#include "autofiles\usbcfg.h"#include "system\usb\usbdefs\usbdefs_std_dsc.h"

#include "autofiles\usbdsc.h"

#include "system\usb\usbdefs\usbdefs_ep0_buff.h"#include "system\usb\usbmmap.h"

#include "system\usb\usbdrv\usbdrv.h"#include "system\usb\usbctrltrf\usbctrltrf.h"#include "system\usb\usb9\usb9.h"

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 409/651

GUILLERMO DAVID HERRERO GONZÁLEZ

407

Si USB_USE_HID está definida se incluye la librería hid.h

#if defined(USB_USE_HID) Ver autofiles\usbcfg.h

#include "system\usb\class\hid\hid.h"#endif

Si USB_USE_MSD está definida se incluye la librería msd.h

#if defined(USB_USE_MSD) Ver autofiles\usbcfg.h

#include "system\usb\class\msd\msd.h"#endif

Si USB_USE_CDC está definida se incluye la librería cdc.h#if defined(USB_USE_CDC) Ver autofiles\usbcfg.h

#include "system\usb\class\cdc\cdc.h"#endif

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 410/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

408

4.3.6.2. Usbcfg.h: Configuración

Esta librería es la encargada de la configuración del buffer por defecto, delEndpoint 0, de los Endpoints utilizados en la comunicación… Hay que modificarla encada aplicación.

4.3.6.2.1. Definiciones

Tamaño del buffer del Endpoint 0 (8, 16 32 ó 64):

#define EP0_BUFF_SIZE 8

Número máximo de interrupciones:

#define MAX_NUM_INT 1

Definición de parámetros descritos en usbdrv.h:

Modo Ping-Pong:

#define MODE_PP _PPBM0

Valor de configuración:

#define UCFG_VAL _PUEN|_TRINT|_FS|MODE_PP

E/S auto-alimentadas:

#define USE_SELF_POWER_SENSE_IO

E/S dependientes del bus USB:#define USE_USB_BUS_SENSE_IO

Las dos definiciones anteriores se realizarán cuando sea necesario, siendototalmente independiente una de la otra.

4.3.6.2.2. Uso de la clase del dispositivo

Dependiendo de la aplicación hay que definir la clase que vamos a utilizar.

9 Uso de la interfaz humana del dispositivo USB: #define USB_USE_HID9 Uso del CDC del dispositivo: #define USB_USE_CDC

9 Uso de la clase Almacenamiento masivo: #define USB_USE_MSD MUID = Microchip USB Clase ID

Se utiliza para identificar la clase del USB de la sesión actual de control de latransferencia del EP0:

#define MUID_NULL 0 Ninguna #define MUID_USB9 1 USB9

#define MUID_HID 2 Interfaz humana

#define MUID_CDC 3 Clase de comunicación del dispositivo

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 411/651

GUILLERMO DAVID HERRERO GONZÁLEZ

409

4.3.6.2.3. Distribución de los Endpoint#define HID_INTF_ID 0x00 Identificación de la interfaz #define HID_UEP UEP1 Endpoints que se utlizan #define HID_BD_OUT ep1Bo Buffer descriptor de salida #define HID_INT_OUT_EP_SIZE 3 Tamaño de la interrupción del Endpoint de salida

#define HID_BD_IN ep1Bi Buffer descriptor de entrada #define HID_INT_IN_EP_SIZE 3 Tamaño de la interrupción del Endpoint de

entrada#define HID_NUM_OF_DSC 1 Número de descriptores #define HID_RPT01_SIZE 50 Tamaño del informe

Macros HID

Ver la dirección del descriptor HID:#define mUSBGetHIDDscAdr(ptr)if(usb_active_cfg == 1)ptr = (rom byte*)&cfg01.hid_i00a00;

Ver la dirección del informe del descriptor HID:

#define mUSBGetHIDRptDscAdr(ptr)if(usb_active_cfg == 1)ptr = (rom byte*)&hid_rpt01;

Ver el tamaño del informe del descriptor HID:

#define mUSBGetHIDRptDscSize(count)if(usb_active_cfg == 1)count = sizeof(hid_rpt01);

Número máximo de Endpoints:

#define MAX_EP_NUMBER 1 //UEP1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 412/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

410

4.3.6.3. Usbdefs_std_dsc.h: Definiciones estándar de los descriptores:

Mediante esta libraría se crean las estructuras de los descriptores estándar, sedefinen constantes para realizar el código más rápidamente, etc.

En general, no hay que modificar nada de la librería. En nuestra aplicacióncopiaremos la que cede Microchip que corresponda con nuestra clase.

4.3.6.3.1. Incluye:#include "system\typedefs.h" Librería en la que se definen tipos de datos

4.3.6.3.2. Definiciones

Tipos de descriptores:#define DSC_DEV 0x01 Descriptor del dispositivo #define DSC_CFG 0x02 Descriptor de configuración #define DSC_STR 0x03 Descriptor de la secuencia #define DSC_INTF 0x04 Descriptor de la interfaz #define DSC_EP 0x05 Descriptor del Endpoint

Definición de los Endpoint (sólo usarse con los descriptores, para cualquier otrouso utilizar los definidos en usbdrv.h):

#define _EP01_OUT 0x01#define _EP01_IN 0x81#define _EP02_OUT 0x02#define _EP02_IN 0x82#define _EP03_OUT 0x03#define _EP03_IN 0x83#define _EP04_OUT 0x04#define _EP04_IN 0x84#define _EP05_OUT 0x05#define _EP05_IN 0x85#define _EP06_OUT 0x06

#define _EP06_IN 0x86#define _EP07_OUT 0x07#define _EP07_IN 0x87#define _EP08_OUT 0x08#define _EP08_IN 0x88#define _EP09_OUT 0x09#define _EP09_IN 0x89#define _EP10_OUT 0x0A#define _EP10_IN 0x8A#define _EP11_OUT 0x0B#define _EP11_IN 0x8B

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 413/651

GUILLERMO DAVID HERRERO GONZÁLEZ

411

#define _EP12_OUT 0x0C#define _EP12_IN 0x8C

#define _EP13_OUT 0x0D#define _EP13_IN 0x8D#define _EP14_OUT 0x0E#define _EP14_IN 0x8E#define _EP15_OUT 0x0F#define _EP15_IN 0x8F

Atributos de configuración:

#define _DEFAULT 0x01<<7 Valor por defecto (El Bit 7 se activa)

#define _SELF 0x01<<6 Auto-alimentado (Mantener si está activo) #define _RWU 0x01<<5 Reinicio remoto (Mantener si está activo)

Tipo de transferencia del Endpoint:

#define _CTRL 0x00 Transferencia de control

#define _ISO 0x01 Transferencia síncrona #define _BULK 0x02 Transferencia Bulk

#define _INT 0x03 Transferencia interrupción

Tipo de sincronización del Endpoint de transferencia síncrona:

#define _NS 0x00<<2 Sin sincronización #define _AS 0x01<<2 Asíncrona #define _AD 0x02<<2 Adaptivo

#define _SY 0x03<<2 Síncrona Utilización del Endpoint tipo síncrono:

#define _DE 0x00<<4 Endpoint de datos #define _FE 0x01<<4 Endpoint retroalimentado #define _IE 0x02<<4 Endpoint de datos y retroalimentado

4.3.6.3.3. Estructuras

Estructura de los descriptores del dispositivo USB (ver usbdsc.c):

typedef struct _USB_DEV_DSC

Longitud; Tipo de descriptor; Bcd del USB;byte bLength; byte bDscType; word bcdUSB;Clase del dispositivo; Subclase del dispositivo; Protocolo del dispositivo;byte bDevCls; byte bDevSubCls; byte bDevProtocol;Tamaño máximo del paquete; Identificador del fabricante; Identificación del

producto;byte bMaxPktSize0; word idVendor; word idProduct;Bcd del dsipositivo; Información de la manufactura; Información del producto;word bcdDevice; byte iMFR; byte iProduct; Número de serie; Número de configuración;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 414/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

412

byte iSerialNum; byte bNumCfg; USB_DEV_DSC;

Estructura del descriptor de configuración del USB:

typedef struct _USB_CFG_DSC

Longitud; Tipo de descriptor; Longitud total;byte bLength; byte bDscType; word wTotalLength; Número de interfaz; Valor de configuración; Información de

configuración;byte bNumIntf; byte bCfgValue; byte iCfg;Atributos; Máxima energía;byte bmAttributes; byte bMaxPower;

USB_CFG_DSC;

Estructura de la interfaz del dispositivo USB:

typedef struct _USB_INTF_DSC

Longitud; Tipo de descriptor; Número de interfaz;byte bLength; byte bDscType; byte bIntfNum;Configuración alterna; Número de Endpoints; Clase de interfaz;byte bAltSetting; byte bNumEPs; byte bIntfCls;Subclase de interfaz; Protocolo de la interfaz; Información de la interfaz;byte bIntfSubCls; byte bIntfProtocol; byte iIntf;

USB_INTF_DSC;

Estructura del Descriptor del Endpoint del USB:

typedef struct _USB_EP_DSC

Longitud; Tipo de descriptor; Dirección del Endpoint;byte bLength; byte bDscType; byte bEPAdr;Atributos; Tamaño máximo del paquete; Intervalo;byte bmAttributes; word wMaxPktSize; byte bInterval;

USB_EP_DSC;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 415/651

GUILLERMO DAVID HERRERO GONZÁLEZ

413

4.3.6.4. Usbdsc.h: Descriptores

Esta es una de las librerías más importantes, ya que en ella se definen losdescriptores.

Como hemos visto anteriormente, los descriptores definen la interfaz, la clase, elfabricante, etc.

Esta librería suele ser totalmente distinta en cada aplicación.

4.3.6.4.1. Librerías que incluye#include "system\typedefs.h"#include "autofiles\usbcfg.h"

#include "system\usb\usb.h"

4.3.6.4.2. Definiciones#define CFG01 rom struct Configuración 01

USB_CFG_DSC cd01; Descriptor de configuración

USB_INTF_DSC i00a00; Descriptor de la interfaz

USB_EP_DSC ep01o_i00a00; Endpoint descriptor de salida

USB_EP_DSC ep01i_i00a00; Endpoint descriptor de entrada

cfg01

4.3.6.4.3. Externasextern rom USB_DEV_DSC device_dsc;extern CFG01;extern rom structbyte bLength;byte bDscType;word string[1];sd000;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 416/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

414

4.3.6.5. Usbdefs_ep0_buff.h: Descripciones Del Buffer Del Endpoint 0

La librería actual recopila las características del Endpoint 0 y de su buffer, nohay que modificarla ya que las variables se han declarado en otras librerías.

4.3.6.5.1. Incluye#include "system\typedefs.h"#include "autofiles\usbcfg.h"

Control de transferencias setup

Cada paquete setup tiene 8bytes. Sin embargo, el tamaño del buffer del Endpoint0 es el especificado en la librería usbcfg.h.

El tamaño del buffer puede ser de 8, 16, 32 ó 64.

Los primeros 8bytes se definen para direccionarse directamente para mejorar lavelocidad y reducir el tamaño del código. El resto de bytes se direccionanindirectamente.

typedef union _CTRL_TRF_SETUP

Matriz para el direccionamiento indirectostruct

byte _byte[EP0_BUFF_SIZE];;

Respuestas estándar del dispositivostructbyte bmRequestType; Tipo de respuesta byte bRequest; Respuesta

word wValue; Valor

word wIndex; Índice

word wLength; Longitud

;structunsigned :8;unsigned :8;WORD W_Value; Valor

WORD W_Index; Índice

WORD W_Length; Longitud ;struct

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 417/651

GUILLERMO DAVID HERRERO GONZÁLEZ

415

unsigned Recipient:5; Dispositivo, Interfaz, Endpoint, Otro unsigned RequestType:2; Estándar, Clase, Fabricante, Reservado

unsigned DataDir:1; Host-al-dispositivo, Dispositivo-al-hostunsigned :8;byte bFeature; Reinicio remoto, Paro del Endpoint unsigned :8;unsigned :8;unsigned :8;unsigned :8;unsigned :8;;structunsigned :8;unsigned :8;byte bDscIndex; Sólo para configuración y String del descriptor byte bDscType; Dispositivo, Configuración, String

word wLangID; Identificación de idioma unsigned :8;unsigned :8;;struct

unsigned :8;unsigned :8;BYTE bDevADR; Dirección del dispositivo 0-127

byte bDevADRH; Tiene que ser cero

unsigned :8;unsigned :8;unsigned :8;unsigned :8;;struct

unsigned :8;unsigned :8;byte bCfgValue; Valor de configuración 0-255 byte bCfgRSD; Tiene que ser cero (Reservado)

unsigned :8;unsigned :8;unsigned :8;unsigned :8;;struct

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 418/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

416

unsigned :8;unsigned :8;

byte bAltID; Valor alterno de configuración 0-255byte bAltID_H; Tiene que ser cero

byte bIntfID; Valor del número de interfaz 0-255 byte bIntfID_H; Tiene que ser cero

unsigned :8;unsigned :8;;structunsigned :8;unsigned :8;

unsigned :8;unsigned :8;byte bEPID; Identificación del Endpoint ID (Número y Dirección)byte bEPID_H; Tiene que ser cerounsigned :8;unsigned :8;;structunsigned :8;unsigned :8;unsigned :8;unsigned :8;unsigned EPNum:4; Número del Endpoint 0-15unsigned :3;unsigned EPDir:1; Dirección del Endpoint: 0-OUT, 1-INunsigned :8;unsigned :8;unsigned :8;;

CTRL_TRF_SETUP;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 419/651

GUILLERMO DAVID HERRERO GONZÁLEZ

417

Control de transferencia de datostypedef union _CTRL_TRF_DATA

Matriz para el direccionamiento indirecto:structbyte _byte[EP0_BUFF_SIZE];;

Los primeros 8bytes direccionables directamente:structbyte _byte0;byte _byte1;

byte _byte2;byte _byte3;byte _byte4;byte _byte5;byte _byte6;byte _byte7;;structword _word0;word _word1;word _word2;word _word3;;

CTRL_TRF_DATA;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 420/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

418

4.3.6.6. Usbmmap.h

Esta librería define constantes y estructuras utilizadas por otras.

El programador, salvo excepción, no tiene que modificarla utilizándola tal ycomo aparece.

4.3.6.6.1. Incluye#include "system\typedefs.h"

4.3.6.6.2. Definiciones

Parámetros de inicialización del descriptor del registro estado:

#define _BSTALL 0x04 Parada del buffer activa#define _DTSEN 0x08 Dato de sincronización activo

#define _INCDIS 0x10 Incremento de dirección desactivado

#define _KEN 0x20 Guardado del buffer descriptor por elSIE activo

#define _DAT0 0x00 Paquete DATA0 esperando el siguiente

#define _DAT1 0x40 Paquete DATA1 esperando el siguiente

#define _DTSMASK 0x40 Máscara DTS

#define _USIE 0x80 El SIE controla el buffer

#define _UCPU 0x00 La CPU controla el buffer

Estados del dispositivo USB. Para utilizarlos con [byte usb_device_state]:#define DETACHED_STATE 0 Sin conexión

#define ATTACHED_STATE 1 Conectado #define POWERED_STATE 2 Alimentado #define DEFAULT_STATE 3 Por defecto #define ADR_PENDING_STATE 4 Pendiente de dirección #define ADDRESS_STATE 5 Direccionado #define CONFIGURED_STATE 6 Configurado

Tipos de memoria para el control de transferencias, utilizado enUSB_DEVICE_STATUS:

#define _RAM 0#define _ROM 1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 421/651

GUILLERMO DAVID HERRERO GONZÁLEZ

419

4.3.6.6.3. Tipostypedef union _USB_DEVICE_STATUS Estado del dispositivo

byte _byte;structunsigned RemoteWakeup:1; [0]Desactivado [1]Activado: Ver usbdrv.h, usb9.h

unsigned ctrl_trf_mem:1; [0]RAM [1]ROM

; USB_DEVICE_STATUS;

typedef union _BD_STAT Estado del buffer descriptor byte _byte;structunsigned BC8:1;unsigned BC9:1;unsigned BSTALL:1; Parada del buffer activa

unsigned DTSEN:1; Dato de sincronización activo

unsigned INCDIS:1; Incremento de dirección desactivado unsigned KEN:1; Guardado del buffer descriptor por el SIE activo

unsigned DTS:1; Valor del dato de sincronización

unsigned UOWN:1; Propiedad del USB ;structunsigned BC8:1;unsigned BC9:1;unsigned PID0:1;unsigned PID1:1;unsigned PID2:1;unsigned PID3:1;unsigned :1;unsigned UOWN:1;;structunsigned :2;unsigned PID:4; Paquete de identificación unsigned :2;;

BD_STAT;

typedef union _BDT Tabla del buffer descriptor

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 422/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

420

struct

BD_STAT Stat;byte Cnt;byte ADRL; Dirección del buffer baja

byte ADRH; Dirección del buffer alta

;structunsigned :8;unsigned :8;byte* ADR; Dirección del Buffer

; BDT;

4.3.6.6.4. Externasextern byte usb_device_state;extern USB_DEVICE_STATUS usb_stat;extern byte usb_active_cfg;extern byte usb_alt_intf[MAX_NUM_INT];

extern volatile far BDT ep0Bo; Buffer descriptor del Endpoint #0 Out

extern volatile far BDT ep0Bi; Buffer descriptor del Endpoint #0 In

extern volatile far BDT ep1Bo; Buffer descriptor del Endpoint #1 Out extern volatile far BDT ep1Bi; Buffer descriptor del Endpoint #1 In extern volatile far BDT ep2Bo; Buffer descriptor del Endpoint #2 Out extern volatile far BDT ep2Bi; Buffer descriptor del Endpoint #2 In extern volatile far BDT ep3Bo; Buffer descriptor del Endpoint #3 Out extern volatile far BDT ep3Bi; Buffer descriptor del Endpoint #3 In extern volatile far BDT ep4Bo; Buffer descriptor del Endpoint #4 Out extern volatile far BDT ep4Bi; Buffer descriptor del Endpoint #4 In extern volatile far BDT ep5Bo; Buffer descriptor del Endpoint #5 Out extern volatile far BDT ep5Bi; Buffer descriptor del Endpoint #5 In extern volatile far BDT ep6Bo; Buffer descriptor del Endpoint #6 Out

extern volatile far BDT ep6Bi; Buffer descriptor del Endpoint #6 In extern volatile far BDT ep7Bo; Buffer descriptor del Endpoint #7 Out

extern volatile far BDT ep7Bi; Buffer descriptor del Endpoint #7 In extern volatile far BDT ep8Bo; Buffer descriptor del Endpoint #8 Out extern volatile far BDT ep8Bi; Buffer descriptor del Endpoint #8 In

extern volatile far BDT ep9Bo; Buffer descriptor del Endpoint #9 Out extern volatile far BDT ep9Bi; Buffer descriptor del Endpoint #9 In extern volatile far BDT ep10Bo; Buffer descriptor del Endpoint #10 Out extern volatile far BDT ep10Bi; Buffer descriptor del Endpoint #10 In extern volatile far BDT ep11Bo; Buffer descriptor del Endpoint #11 Out

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 423/651

GUILLERMO DAVID HERRERO GONZÁLEZ

421

extern volatile far BDT ep11Bi; Buffer descriptor del Endpoint #11 In extern volatile far BDT ep12Bo; Buffer descriptor del Endpoint #12 Out

extern volatile far BDT ep12Bi; Buffer descriptor del Endpoint #12 In extern volatile far BDT ep13Bo; Buffer descriptor del Endpoint #13 Out extern volatile far BDT ep13Bi; Buffer descriptor del Endpoint #13 In

extern volatile far BDT ep14Bo; Buffer descriptor del Endpoint #14 Out extern volatile far BDT ep14Bi; Buffer descriptor del Endpoint #14 In

extern volatile far BDT ep15Bo; Buffer descriptor del Endpoint #15 Out extern volatile far BDT ep15Bi; Buffer descriptor del Endpoint #15 In

extern volatile far CTRL_TRF_SETUP SetupPkt;extern volatile far CTRL_TRF_DATA CtrlTrfData;

#if defined(USB_USE_HID) Si está definido USB_USE_HIDextern volatile far unsigned char hid_report_out[HID_INT_OUT_EP_SIZE];extern volatile far unsigned char hid_report_in[HID_INT_IN_EP_SIZE];#endif

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 424/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

422

4.3.6.7. Usbdrv.h: Driver Del USB

Esta librería es la encargada de definir la configuración inicial.

Lo único que hay que modificar es la corrección de la errata en la original deMicrochip, como se comenta más adelante.

4.3.6.7.1. Incluye#include "system\typedefs.h"#include "system\usb\usb.h"

4.3.6.7.2. Definiciones

Parámetros de configuración iniciales:#define _PPBM0 0x00 Buffer Ping-pong Modo 0

#define _PPBM1 0x01 Buffer Ping-pong Modo 1

#define _PPBM2 0x02 Buffer Ping-pong Modo 2

#define _LS 0x00 Modo USB Low-Speed

#define _FS 0x04 Modo USB Full-Speed

#define _TRINT 0x00 Transmisor-receptor interno

#define _TREXT 0x08 Transmisor-receptor externo

#define _PUEN 0x10 Usar resistencias pull-up internas #define _OEMON 0x40 Usar el indicador de salida SIE #define _UTEYE 0x80 Usar el test “Patrón de ojo”

Parámetros de los Endpoint iniciales:

#define EP_CTRL 0x06 Pipe de control

#define EP_OUT 0x0C Pipe de salida

#define EP_IN 0x0A Pipe de entrada

#define EP_OUT_IN 0x0E Pipe de entrada y salida #define HSHK_EN 0x10 Activar paquetes de protocolo

Los paquetes de protocolo se tienen que desactivar en lasíncronas

Definiciones de los Endpoints PICmicroEl formato de la dirección de los EP PICmicro:

X:EP3:EP2:EP1:EP0:DIR:PPBI:X

Esto se utiliza cuando se comprueba el valor leído de la USTAT.

NOTA: estas definiciones no se usan en los descriptores porque tienen distintoformato. Se definen en : "system\usb\usbdefs\usbdefs_std_dsc.h"

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 425/651

GUILLERMO DAVID HERRERO GONZÁLEZ

423

#define OUT 0#define IN 1

#define PIC_EP_NUM_MASK 0b01111000 Número de máscara del Endpoint

#define PIC_EP_DIR_MASK 0b00000100 Dirección de la máscara del Endpoint

NOTA: la librería tiene una errata en la definición de los Endpoints, lo correctoes:

#define EP00_OUT ((0x00<<3)|(OUT<<2))#define EP00_IN ((0x00<<3)|(IN<<2))#define EP01_OUT ((0x01<<3)|(OUT<<2))

#define EP01_IN ((0x01<<3)|(IN<<2))#define EP02_OUT ((0x02<<3)|(OUT<<2))#define EP02_IN ((0x02<<3)|(IN<<2))#define EP03_OUT ((0x03<<3)|(OUT<<2))#define EP03_IN ((0x03<<3)|(IN<<2))#define EP04_OUT ((0x04<<3)|(OUT<<2))#define EP04_IN ((0x04<<3)|(IN<<2))#define EP05_OUT ((0x05<<3)|(OUT<<2))#define EP05_IN ((0x05<<3)|(IN<<2))#define EP06_OUT ((0x06<<3)|(OUT<<2))#define EP06_IN ((0x06<<3)|(IN<<2))#define EP07_OUT ((0x07<<3)|(OUT<<2))#define EP07_IN ((0x07<<3)|(IN<<2))#define EP08_OUT ((0x08<<3)|(OUT<<2))#define EP08_IN ((0x08<<3)|(IN<<2))#define EP09_OUT ((0x09<<3)|(OUT<<2))#define EP09_IN ((0x09<<3)|(IN<<2))#define EP10_OUT ((0x0A<<3)|(OUT<<2))#define EP10_IN ((0x0A<<3)|(IN<<2))#define EP11_OUT ((0x0B<<3)|(OUT<<2))#define EP11_IN ((0x0B<<3)|(IN<<2))

#define EP12_OUT ((0x0C<<3)|(OUT<<2))#define EP12_IN ((0x0C<<3)|(IN<<2))#define EP13_OUT ((0x0D<<3)|(OUT<<2))#define EP13_IN ((0x0D<<3)|(IN<<2))#define EP14_OUT ((0x0E<<3)|(OUT<<2))#define EP14_IN ((0x0E<<3)|(IN<<2))#define EP15_OUT ((0x0F<<3)|(OUT<<2))#define EP15_IN ((0x0F<<3)|(IN<<2))

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 426/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

424

mInitializeUSBDriver()

Configura el modulo USB.La definición de UCFG_VAL está en autofiles\usbcfg.h

Este registro determina: velocidad del USB Speed, selección de las resistencias pull-up del chip, selección del transmisor-receptor del chip, modo de chequeo “patrónde ojo”, buffer modo Ping-pong

#define mInitializeUSBDriver() UCFG = UCFG_VAL;usb_device_state = DETACHED_STATE;usb_stat._byte = 0x00;

usb_active_cfg = 0x00;

void mDisableEP1to15()

Esta macro desactiva todos los Endpoints menos el 0.

Hay que invocar esta macro cada vez que el host envíe una señal de RESET ouna respuesta a SET_CONFIGURATION

#define mDisableEP1to15() ClearArray((byte*)&UEP1,15);

O lo que es lo mismo:#define mDisableEP1to15() UEP1=0x00;UEP2=0x00;UEP3=0x00;

UEP4=0x00;UEP5=0x00;UEP6=0x00;UEP7=0x00;UEP8=0x00;UEP9=0x00;UEP10=0x00;UEP11=0x00;UEP12=0x00;UEP13=0x00;UEP14=0x00;UEP15=0x00;

mUSBBufferReady(buffer_dsc)

Precondición:

Endpoint IN: El buffer está cargado y listo para enviar.

Endpoint OUT: El buffer puede escribir al SIE.Entrada: byte buffer_dsc: Nombre del grupo del buffer descriptor (e.j. ep0Bo,

ep1Bi) declarado en usbmmap.h. Los nombres se pueden cambiar por legibilidad; ver los ejemplos en usbcfg.h (#define HID_BD_OUT ep1Bo)

Esta macro se tiene que llamar cada vez que ocurra:

1. Que se llene un buffer de un Endpoint, que no sea el EP0, con datos.2. Que se lea un buffer de un Endpoint, que no sea el EP0.

Esta macro convierte la propiedad del buffer al SIE para dar servicio; además,cambia el bit DTS para sincronización.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 427/651

GUILLERMO DAVID HERRERO GONZÁLEZ

425

#define mUSBBufferReady(buffer_dsc)

buffer_dsc.Stat._byte &= _DTSMASK; Guarda sólo el bit DTSbuffer_dsc.Stat.DTS = !buffer_dsc.Stat.DTS; Cambia el bit DTS

buffer_dsc.Stat._byte |= _USIE|_DTSEN; Cambia la propiedad al SIE

4.3.6.7.3. Prototipos públicosvoid USBCheckBusStatus(void);void USBDriverService(void);void USBRemoteWakeup(void);void USBSoftDetach(void);

void ClearArray(byte* startAdr,byte count);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 428/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

426

4.3.6.8. Usbctrltrf.h: Control de transferencias del USB

Esta librería es la encargada de definir los tipos de transferencia. Se utiliza desdeotras librerías al declarar la interfaz, la transferecia, etc.

No hay que modificarla

4.3.6.8.1. Incluye#include "system\typedefs.h"

4.3.6.8.2. Definiciones

Estado de las transferencias de control

#define WAIT_SETUP 0 Espera Setup#define CTRL_TRF_TX 1 Transf. de control de transmisión

#define CTRL_TRF_RX 2 Transf. de control de recepción

Tipos de Tokens:

#define SETUP_TOKEN 0b00001101 Token setup

#define OUT_TOKEN 0b00000001 Token de salida

#define IN_TOKEN 0b00001001 Token de entrada

Definición de los tipos de respuesta:

#define HOST_TO_DEV 0 Host-al-Dispositivo

#define DEV_TO_HOST 1 Dispositivo-al-Host #define STANDARD 0x00#define CLASS 0x01 Clase #define VENDOR 0x02 Fabricante #define RCPT_DEV 0 Dispositivo destinatario #define RCPT_INTF 1 Destinatario de la interfaz #define RCPT_EP 2 Destinatario del Endpoint #define RCPT_OTH 3

4.3.6.8.3. Externas

extern byte ctrl_trf_session_owner;extern POINTER pSrc;extern POINTER pDst;extern WORD wCount;

4.3.6.8.4. Prototipos públicosvoid USBCtrlEPService(void);void USBCtrlTrfTxService(void);void USBCtrlTrfRxService(void);void USBCtrlEPServiceComplete(void);void USBPrepareForNextSetupTrf(void);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 429/651

GUILLERMO DAVID HERRERO GONZÁLEZ

427

4.3.6.9. Usb9.h

Gracias a esta librería obtenemos la dirección del dispositivo, entre otrascaracterísticas.

No se tiene que modificar.

4.3.6.9.1. Incluye#include "system\typedefs.h"

4.3.6.9.2. Definiciones

Códigos de respuesta estándar:

#define GET_STATUS 0 Obtiene estado#define CLR_FEATURE 1 Borra característica

#define SET_FEATURE 3 Fija característica

#define SET_ADR 5 Fija dirección #define GET_DSC 6 Obtiene descriptor #define SET_DSC 7 Fija descriptor #define GET_CFG 8 Obtiene configuración #define SET_CFG 9 Fija configuración #define GET_INTF 10 Obtiene interfaz #define SET_INTF 11 Fija interfaz #define SYNCH_FRAME 12 Marco de sincronismo

Características de los selectores estándar:

#define DEVICE_REMOTE_WAKEUP 0x01 Reinicio remoto del dispositivo #define ENDPOINT_HALT 0x00 Paro del Endpoint

mUSBCheckAdrPendingState()

Rutina de chequeo especializado, comprueba si el dispositivo está en el estado“Pendiente de dirección” y le da servicio si está.

#define mUSBCheckAdrPendingState()

if(usb_device_state==ADR_PENDING_STATE)UADDR = SetupPkt.bDevADR._byte;if(UADDR > 0)usb_device_state=ADDRESS_STATE;elseusb_device_state=DEFAULT_STATE;

4.3.6.9.3. Prototipos públicosvoid USBCheckStdRequest(void);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 430/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

428

4.3.6.10. Usbgen.h: USB Genérico

Esta es la librería de la clase genérica. Se definen las transferencias creandofunciones para realizarlas.

No hay que modificarla.

4.3.6.10.1. Incluye#include "system\typedefs.h"

4.3.6.10.2. Definiciones

(bit) mUSBGenRxIsBusy(void)

Esta macro se utiliza para comprobar que el Endpoint de salida está ocupado (locontrola el SIE) o no.

Uso típico: if(mUSBGenRxIsBusy())

#define mUSBGenRxIsBusy() USBGEN_BD_OUT.Stat.UOWN

(bit) mUSBGenTxIsBusy(void)

Esta macro se utiliza para comprobar que el Endpoint de entrada está ocupado(lo controla el SIE) o no.

Uso típico: if(mUSBGenTxIsBusy())#define mUSBGenTxIsBusy() USBGEN_BD_IN.Stat.UOWN

byte mUSBGenGetRxLength(void)

Salida: mUSBGenGetRxLength devuelve usbgen_rx_len (longitude de Rx).

mUSBGenGetRxLength se utiliza para recuperar el número de bytes copiados al buffer del usuario en la última llamada a la función USBGenRead.

#define mUSBGenGetRxLength() usbgen_rx_len

4.3.6.10.3.

Externasextern byte usbgen_rx_len;

4.3.6.10.4. Prototipos Públicosvoid USBGenInitEP(void);void USBGenWrite(byte *buffer, byte len);byte USBGenRead(byte *buffer, byte len);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 431/651

GUILLERMO DAVID HERRERO GONZÁLEZ

429

4.3.6.11. Msd.h: Almacenamiento Masivo

Esta es la librería de la clase MSD. Se definen las transferencias creandofunciones para realizarlas.

No hay que modificarla.

4.3.6.11.1. Incluye#include "system\typedefs.h"#include "io_cfg.h" Mapa de pines E/S

4.3.6.11.2. Definiciones

Código de la clase de interfaz MSD:#define MSD_INTF 0x08

Código de la subclase de la interfas de clase MSD:

#define MSD_INTF_SUBCLASS 0x06

Código de protocolo de la clase de la interfaz MSD:

#define MSD_PROTOCOL 0x50

Comandos de la clase:

#define MSD_RESET 0xff

#define GET_MAX_LUN 0xfe

#define BLOCKLEN_512 0x0200

#define STMSDTRIS TRISD0#define STRUNTRIS TRISD1#define STMSDLED LATDbits.LATD0#define STRUNLED LATDbits.LATD1#define ToggleRUNLED() STRUNLED = !STRUNLED;

Set de commandos de código de la subclase transparente SCSI:

#define INQUIRY 0x12#define READ_FORMAT_CAPACITY 0x23#define READ_CAPACITY 0x25#define READ_10 0x28#define WRITE_10 0x2A#define REQUEST_SENSE 0x03#define MODE_SENSE 0x1A#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E#define TEST_UNIT_READY 0x00#define VERIFY 0x2F

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 432/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

430

#define STOP_START 0x1B

Varios estados del Firmware de almacenamiento masivo:

#define MSD_WAIT 0 Esperando para un CBW válido

#define MSD_DATA_IN 2 Estado de datos IN (Dispositivo-> Host)

#define MSD_DATA_OUT 3 Estado de datos OUT (Host -> Device)

#define MSD_CSW_SIZE 0x0d Datos CSW de 10 bytes CSW

#define MSD_CBW_SIZE 0x1f Datos CSW de 31 bytes CBW

#define INVALID_CBW 1#define VALID_CBW !INVALID_CBW#define MAX_LUN 0

Clave de los códigos de error Sense

#define S_NO_SENSE 0x0#define S_RECOVERED_ERROR 0x1#define S_NOT_READY 0x2#define S_MEDIUM_ERROR 0x3#define S_HARDWARE_ERROR 0X4#define S_ILLEGAL_REQUEST 0x5#define S_UNIT_ATTENTION 0x6#define S_DATA_PROTECT 0x7#define S_BLANK_CHECK 0x8#define S_VENDOR_SPECIFIC 0x9#define S_COPY_ABORTED 0xA#define S_ABORTED_COMMAND 0xB#define S_OBSOLETE 0xC#define S_VOLUME_OVERFLOW 0xD#define S_MISCOMPARE 0xE

#define S_CURRENT 0x70#define S_DEFERRED 0x71

Códigos ASC ASCQ para datos (sólo el que vamos a utilizar)

Con una respuesta de clave sense ilegal de un comando no soportado:

#define ASC_INVALID_COMMAND_OPCODE 0x20#define ASCQ_INVALID_COMMAND_OPCODE 0x00

Con una respuesta de clave sense ilegal para probar si la unidad está disponible:

#define ASC_LOGICAL_UNIT_NOT_SUPPORTED 0x25#define ASCQ_LOGICAL_UNIT_NOT_SUPPORTED 0x00

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 433/651

GUILLERMO DAVID HERRERO GONZÁLEZ

431

Con una clave sense Not ready

#define ASC_LOGICAL_UNIT_DOES_NOT_RESPOND 0x05#define ASCQ_LOGICAL_UNIT_DOES_NOT_RESPOND 0x00

#define ASC_MEDIUM_NOT_PRESENT 0x3a#define ASCQ_MEDIUM_NOT_PRESENT 0x00

#define ASC_LOGICAL_UNIT_NOT_READY_CAUSE_NOT_REPORTABLE 0x04#define ASCQ_LOGICAL_UNIT_NOT_READY_CAUSE_NOT_REPORTABLE 0x00

#define ASC_LOGICAL_UNIT_IN_PROCESS 0x04#define ASCQ_LOGICAL_UNIT_IN_PROCESS 0x01

#define ASC_LOGICAL_UNIT_NOT_READY_INIT_REQD 0x04#define ASCQ_LOGICAL_UNIT_NOT_READY_INIT_REQD 0x02

#define ASC_LOGICAL_UNIT_NOT_READY_INTERVENTION_REQD 0x04#define ASCQ_LOGICAL_UNIT_NOT_READY_INTERVENTION_REQD 0x03

#define ASC_LOGICAL_UNIT_NOT_READY_FORMATTING 0x04#define ASCQ_LOGICAL_UNIT_NOT_READY_FORMATTING 0x04

#define ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21#define ASCQ_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x00

#define ASC_WRITE_PROTECTED 0x27#define ASCQ_WRITE_PROTECTED 0x00

(bit) mMSDRxIsBusy(void)

Esta macro se utiliza para comprobar si el Endpoint MSD OUT está ocupado(controlado por el SIE) o no.

Uso típico: if(mMSDRxIsBusy())

#define mMSDRxIsBusy() MSD_BD_OUT.Stat.UOWN

(bit) mMSDTxIsBusy(void)

Esta macro se utiliza para comprobar si el Endpoint MSD IN está ocupado(controlado por el SIE) o no.

Uso típico: if(mMSDTxIsBusy())

#define mMSDTxIsBusy() MSD_BD_IN.Stat.UOWN

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 434/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

432

(bit) mMin(void)

Esta macro se utiliza para encontrar el menor de dos argumentos.Uso típico: mMin(A, B)

#define mMin(A,B) (A<B)?A:B

4.3.6.11.3. Estructurastypedef struct _USB_MSD_CBW 31 bytes totales CBW

dword dCBWSignature; 55 53 42 43h

dword dCBWTag; Enviado por el host, el dispositivo se hace eco

con el valor en CSW (asociado a CSW con CBW)dword dCBWDataTransferLength; Número de bytes de datos que el host espera

transferir byte bCBWFlags; Flags CBW, bit 7 = 0 salida de datos del host-

dispositivo; bit 7=1 dispositivo-host, el resto de bits 0

byte bCBWLUN; MS1bits son siempre cero, 0 en nuestro caso esuna

sola unidad lógicabyte bCBWCBLength; MS3bits son cero

byte CBWCB[16]; Bloque de comando que ejecuta el dispositivo

USB_MSD_CBW;

typedef struct /Bloque de comando para leer 10 (0x28) yescribir 10

(0x2a) comandosbyte Opcode;byte Flags; b7-b5 lectura protegida, b4 DPO, b3 FUA,

b2 Reservado, b1 FUA_NV, b0 ObsoletoDWORD LBA;

byte GroupNumber; b4-b0 es el número de grupo el resto reservados

WORD TransferLength;

byte Control; ReadWriteCB;

typedef struct Formato del comando Inquiry byte Opcode;byte EVPD; sólo b0 enable vital product data

byte PageCode;word AllocationLength;byte Control;

InquiryCB;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 435/651

GUILLERMO DAVID HERRERO GONZÁLEZ

433

typedef struct capacidad de lectura 10

byte Opcode;

byte Reserved1;dword LBA; Bloque de dirección lógico

word Reserved2;byte PMI; Partial medium Indicator sólo b0

byte Control; ReadCapacityCB;

typedef struct Respuesta Sense 0x03

byte Opcode;byte Desc;word Reserved;byte AllocationLength;byte Control;

RequestSenseCB;

typedef struct Modo Sense 0x1A

byte Opcode;byte DBD; Actualmente sólo se utiliza b3 como bloque

descriptor desactivadobyte PageCode; b7,b6 PC=página de control, b5-b0 página de

códigoPágina de Control bits 00=> valor actual,

01=>valores modificables,10=>valor por defecto,11=>valores guardados

byte SubPageCode;byte AllocationLength;byte Control;

ModeSenseCB;

typedef struct Prevenir el permiso de retirada del medio 0x1E

byte Opcode;byte Reserved[3];byte Prevent; Sólo se previenen b1-b0, el resto reservados

byte Control; PreventAllowMediumRemovalCB;

typedef struct Unidad de prueba disponible 0x00

byte Opcode;dword Reserved;byte Control;

TestUnitReadyCB;

typedef struct Verificar 10 Comando 0x2F byte Opcode;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 436/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

434

byte VRProtect; b7-b5 VRProtect, b4 DPO, b3-b2,Reservado, b1 BYTCHK, b0 Obsoleto

dword LBA;byte GroupNumber; Número del grupo b4-b0, el resto reservado word VerificationLength;byte Control;

VerifyCB;

typedef struct STOP_START 0x1B

byte Opcode;byte Immed;word Reserved;byte Start; b7-b4 Condición de energía, b3-b2 reservedo,

b1 LOEJ, b0 Startbyte Control;

StopStartCB;

typedef struct _USB_MSD_CSW CSW

dword dCSWSignature; 55 53 42 53h firma del paquete de CSW

dword dCSWTag; eco dCBWTag del paquete CBW

dword dCSWDataResidue; diferencia en los datos esperados(dCBWDataTransferLength)y la cantidad actual procesada/enviada

byte bCSWStatus; 00h Comando aprobado, 01h Comando Fallido,02h Error de fase, el resto obsoleto/reservado

USB_MSD_CSW;

typedef struct

byte Peripheral; Clasificador del periférico:3;Periférico_DevType:5;

byte Removble; medio removible bit7 = 0 medio no removible,resto reservado

byte Version; versión

byte Response_Data_Format; b7,b6 Obsoleto, b5 Acceso de controlcoordinado, b4 direccionamiento jerárquico soportado b3:0 respuesta al formato de datos 2 indica que larespuesta esta en el formato definido por spec

byte AdditionalLength; longitud en bytes de los datos que quedan de laindagación estándar

byte Sccstp; b7 SCCS, b6 ACC, b5-b4 TGPS, b3 3PC, b2-b1 Reservado, b0 Protegido

byte bqueetc; b7 bque, b6- EncServ, b5-VS, b4-MultiP, b3-MChngr, b2-b1 Obsoleto, b0-Addr16

byte CmdQue; b7-b6 Obsoleto, b5-WBUS, b4-Sync, b3-Linked,

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 437/651

GUILLERMO DAVID HERRERO GONZÁLEZ

435

b2 Obsoleto, b1 Cmdque, b0-VSchar vendorID[8];

char productID[16];char productRev[4]; InquiryResponse;

typedef struct byte ModeDataLen;byte MediumType;unsigned Resv:4;unsigned DPOFUA:1; 0 indica que no soporta los bits DPO y FUA

unsigned notused:2;unsigned WP:1; 0 indica que no protege la escritura

byte BlockDscLen; Longitud del Bloque Descriptor tModeParamHdr;

Modo corto del bloque descriptor LBA (ver Página 1009, SBC-2)

typedef struct byte NumBlocks[4];byte Resv; reservado

byte BlockLen[3]; tBlockDescriptor;

/* Page_0 mode page format */typedef struct

unsigned PageCode:6; SPC-3 7.4.5

unsigned SPF:1; SubPageFormat=0 medio Page_0 formato

unsigned PS:1; Parámetros salvables

byte PageLength; si 2..n bytes del modo parámetro PageLength=n-1

byte ModeParam[]; modo parámetros

tModePage;

typedef struct tModeParamHdr Header;tBlockDescriptor BlockDsc;tModePage modePage;

ModeSenseResponse;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 438/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

436

Formato fijado si el bit Desc de la respuesta sense CBW es 0

typedef union struct byte _byte[18];;struct unsigned ResponseCode:7; b6-b0 es el código de respuesta fijado o el

formatodel descriptor

unsigned VALID:1; Poner a 1 indica que el campo de informacióntiene un valor válido

byte Obsolete;unsigned SenseKey:4; Referencia SPC-3 Sección 4.5.6

unsigned Resv:1;unsigned ILI:1; Indicador de la longitud incorrecta unsigned EOM:1; Fin del medio

unsigned FILEMARK:1; para los comandos READ y SPACE

DWORD Information; Tipo de dispositivo o comando específico(SPC-33.1.18)

byte AddSenseLen; Número de bytes sense adicionales quesiguen <=244

DWORD CmdSpecificInfo; depende del comando de la excepción ocurrida

byte ASC; código sense adicional

byte ASCQ; código sense adicional sección clasificada4.5.2.1 SPC-3

byte FRUC;byte SenseKeySpecific[3]; SKSV son los msb de la clave sense específica de

campo válido fijado=>SKS válido.Los 18-n bytessense adicionales se pueden definir más tarde

18bytesde respuesta sense de formato fijado

; RequestSenseResponse;

4.3.6.11.4. Externasextern CSD gblCSDReg; declarado en sdcard.c

4.3.6.11.5. Prototipos públicosvoid USBCheckMSDRequest(void);void ProcessIO(void);void SDCardInit(void);void MSDInitEP(void);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 439/651

GUILLERMO DAVID HERRERO GONZÁLEZ

437

4.3.6.12. Cdc.h: Dispositivos De Comunicación

Esta es la librería de la clase CDC. Se definen las transferencias creandofunciones para realizarlas.

No hay que modificarla.

4.3.6.12.1. Incluye#include "system\typedefs.h"

4.3.6.12.2. Definiciones

Repuesta de clase específica:

#define SEND_ENCAPSULATED_COMMAND 0x00#define GET_ENCAPSULATED_RESPONSE 0x01#define SET_COMM_FEATURE 0x02#define GET_COMM_FEATURE 0x03#define CLEAR_COMM_FEATURE 0x04#define SET_LINE_CODING 0x20#define GET_LINE_CODING 0x21#define SET_CONTROL_LINE_STATE 0x22#define SEND_BREAK 0x23

Notificaciones

Nota: las notificaciones se obtienen de la interface de comunicación (EndpointInterrupción)

#define NETWORK_CONNECTION 0x00#define RESPONSE_AVAILABLE 0x01#define SERIAL_STATE 0x20

Código de la clase del dispositivo:

#define CDC_DEVICE 0x02

Código de la clase de la interfaz de comunicación

#define COMM_INTF 0x02Código de la subclase de la interfaz de comunicación

#define ABSTRACT_CONTROL_MODEL 0x02

Código del protocolo de control de la clase de la interfaz de comunicación

#define V25TER 0x01 Comandos comunes AT ("Hayes(TM)")

Código de la clase de la interfaz de datos

#define DATA_INTF 0x0A

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 440/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

438

Código del protocolo de la clase de la interfaz de datos

#define NO_PROTOCOL 0x00 No necesita un protrocolo de clase específico

Código selector de las características de la comunicación

#define ABSTRACT_STATE 0x01#define COUNTRY_SETTING 0x02

Descriptores funcionales

Tipos de valor del campo bDscType

#define CS_INTERFACE 0x24#define CS_ENDPOINT 0x25

bDscSubType en descriptores funcionales

#define DSC_FN_HEADER 0x00#define DSC_FN_CALL_MGT 0x01#define DSC_FN_ACM 0x02 ACM – Administración de control

abstracta#define DSC_FN_DLM 0x03 DLM – Dirección de línea directa

#define DSC_FN_TELEPHONE_RINGER 0x04#define DSC_FN_RPT_CAPABILITIES 0x05#define DSC_FN_UNION 0x06#define DSC_FN_COUNTRY_SELECTION 0x07#define DSC_FN_TEL_OP_MODES 0x08

#define DSC_FN_USB_TERMINAL 0x09Estados de tranferencia CDC Bulk IN

#define CDC_TX_READY 0#define CDC_TX_BUSY 1#define CDC_TX_BUSY_ZLP 2 ZLP: Paquete de longitud cero #define CDC_TX_COMPLETING 3

BOOL mUSBUSARTIsTxTrfReady(void)

Esta macro se utiliza para comprobar si la clase CDC está disponible para enviar mas datos.

Uso típico: if(mUSBUSARTIsTxTrfReady())

#define mUSBUSARTIsTxTrfReady() (cdc_trf_state == CDC_TX_READY)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 441/651

GUILLERMO DAVID HERRERO GONZÁLEZ

439

(bit) mCDCUsartRxIsBusy(void)

Esta macro se utiliza para comprobar si el Endpoint CDC Bulk OUT estáocupado (controlado por el SIE) o no.

Uso típico: if(mCDCUsartRxIsBusy())

#define mCDCUsartRxIsBusy() CDC_BULK_BD_OUT.Stat.UOWN

(bit) mCDCUsartTxIsBusy(void)

Esta macro se utiliza para comprobar si el Endpoint CDC Bulk IN está ocupado(controlado por el SIE) o no.

Uso típico: if(mCDCUsartTxIsBusy())

#define mCDCUsartTxIsBusy() CDC_BULK_BD_IN.Stat.UOWN

byte mCDCGetRxLength(void)

Salida: devuelve cdc_rx_len

mCDCGetRxLength se utiliza para recuperar el número de bytes que se hancopiado al buffer del usuario en la última llamada a la función getsUSBUSART.

#define mCDCGetRxLength() cdc_rx_len

void mUSBUSARTTxRam(byte *pData, byte len)

Precondición: cdc_trf_state tiene que estar en el estado CDC_TX_READY.El valor de ‘len’ tiene que se igual o menor de 255bytes.

Entrada: pDdata: Puntero al comienzo de la localización de los bytes de datos.

len: número de bytes que se van a transferir.

Esta macro se utiliza para transferir datos localizados en la memoria de datos.

Utilizar esta macro cuando:

1. La longitud de la transferencia se conoce2. Los datos no terminan con uno nulo

Nota: Esta macro sólo manipula la transferencia setup. La transferencia actual lamanipula CDCTxService().

#define mUSBUSARTTxRam(pData,len)

pCDCSrc.bRam = pData;cdc_tx_len = len;cdc_mem_type = _RAM;cdc_trf_state = CDC_TX_BUSY;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 442/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

440

void mUSBUSARTTxRom(rom byte *pData, byte len)

Precondición: cdc_trf_state tiene que estar en el estado CDC_TX_READY.El valor de ‘len’ tiene que se igual o menor de 255bytes.

Entrada: pDdata: Puntero al comienzo de la localización de los bytes de datos.

len: número de bytes que se van a transferir.

Esta macro se utiliza para transferir datos localizados en la memoria de programa.

Utilizar esta macro cuando:

3. La longitud de la transferencia se conoce4. Los datos no terminan con uno nulo

Nota: Esta macro sólo manipula la transferencia setup. La transferencia actual lamanipula CDCTxService().

#define mUSBUSARTTxRom(pData,len)

pCDCSrc.bRom = pData;cdc_tx_len = len;cdc_mem_type = _ROM;cdc_trf_state = CDC_TX_BUSY;

4.3.6.12.3. Estructuras

Estructura de la línea de codificación

#define LINE_CODING_LENGTH 0x07

typedef union _LINE_CODING

structbyte _byte[LINE_CODING_LENGTH];

;structDWORD dwDTERate; Estructura de datos compleja byte bCharFormat;byte bParityType;byte bDataBits;;

LINE_CODING;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 443/651

GUILLERMO DAVID HERRERO GONZÁLEZ

441

typedef union _CONTROL_SIGNAL_BITMAP

byte _byte;structunsigned DTE_PRESENT; [0] No Presente [1] Presente unsigned CARRIER_CONTROL; [0] Desactiva [1] Activa

; CONTROL_SIGNAL_BITMAP;

Descriptor de cabecera funcional

typedef struct _USB_CDC_HEADER_FN_DSC

byte bFNLength;byte bDscType;byte bDscSubType;word bcdCDC;

USB_CDC_HEADER_FN_DSC;

Descriptor funcional de dirección de control abstracto

typedef struct _USB_CDC_ACM_FN_DSC

byte bFNLength;byte bDscType;byte bDscSubType;byte bmCapabilities;

USB_CDC_ACM_FN_DSC;

Descriptor funcional de unión

typedef struct _USB_CDC_UNION_FN_DSC

byte bFNLength;byte bDscType;byte bDscSubType;

byte bMasterIntf;byte bSaveIntf0; USB_CDC_UNION_FN_DSC;

Descriptor funcional de control de llamadas

typedef struct _USB_CDC_CALL_MGT_FN_DSC

byte bFNLength;byte bDscType;byte bDscSubType;byte bmCapabilities;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 444/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

442

byte bDataInterface; USB_CDC_CALL_MGT_FN_DSC;

4.3.6.12.4. Externasextern byte cdc_rx_len;

extern byte cdc_trf_state;extern POINTER pCDCSrc;extern byte cdc_tx_len;extern byte cdc_mem_type;

4.3.6.12.5. Prototipos publicos

void USBCheckCDCRequest(void);void CDCInitEP(void);byte getsUSBUSART(char *buffer, byte len);void putrsUSBUSART(const rom char *data);void putsUSBUSART(char *data);void CDCTxService(void);#endif CDC_H

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 445/651

GUILLERMO DAVID HERRERO GONZÁLEZ

443

4.3.6.13. Hid.h: Dispositivo interfaz con humanos

Esta es la librería de la clase HID. Se definen las transferencias creandofunciones para realizarlas.

No hay que modificarla.

4.3.6.13.1. Incluye#include "system\typedefs.h"

4.3.6.13.2. Definiciones

Repuestas de clase específicas:

#define GET_REPORT 0x01 Obtener informe#define GET_IDLE 0x02 Obtener reposo #define GET_PROTOCOL 0x03 Obtener protocolo #define SET_REPORT 0x09 Fijar informe #define SET_IDLE 0x0A Fijar reposo #define SET_PROTOCOL 0x0B Fijar protocolo

Tipos de clase de descriptor:

#define DSC_HID 0x21 Descriptor HID #define DSC_RPT 0x22 Descriptor informe #define DSC_PHY 0x23

Selección de protocolo:

#define BOOT_PROTOCOL 0x00 Protocolo de inicio #define RPT_PROTOCOL 0x01 Informe de protocolo

Código de clase de interfaz HID:

#define HID_INTF 0x03 Interfaz HID

Código de subclase de interfaz HID:

#define BOOT_INTF_SUBCLASS 0x01

Código de protocolo de clase de interfaz:#define HID_PROTOCOL_NONE 0x00 Ninguno #define HID_PROTOCOL_KEYBOAD 0x01 Teclado #define HID_PROTOCOL_MOUSE 0x02 Ratón

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 446/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

444

(bit) mHIDRxIsBusy()

Esta macro comprueba si el Endpoint de salida del HID está ocupado(controlado por el SIE) o no.

Aplicación típica: if(mHIDRxIsBusy())

#define mHIDRxIsBusy() HID_BD_OUT.Stat.UOWN

(bit) mHIDTxIsBusy()

Esta macro comprueba si el Endpoint de entrada del HID está coupado(controlado por el SIE) o no.

Aplicación típica: if(mHIDTxIsBusy())

#define mHIDTxIsBusy() HID_BD_IN.Stat.UOWN

byte mHIDGetRptRxLength()

Salida: mHIDGetRptRxLength devuelve un informe de la longitud del receptor HID (hid_rpt_rx_len).

La mHIDGetRptRxLength se utiliza para recuperar el número de bytescopiándolos al buffer de usuario en orden de la última llamada a la funciónHIDRxReport.

#define mHIDGetRptRxLength() hid_rpt_rx_len

4.3.6.13.3. Estructurastypedef struct _USB_HID_DSC_HEADER Cabecera del descriptor HID

byte bDscType; Tipo de descriptor word wDscLength; Longitud del descriptor

USB_HID_DSC_HEADER;

typedef struct _USB_HID_DSC Descriptor HID

Longitud Tipo de descriptor Bcd del HID

byte bLength; byte bDscType; word bcdHID;Código de territorio Número del descriptor byte bCountryCode; byte bNumDsc;USB_HID_DSC_HEADER hid_dsc_header[HID_NUM_OF_DSC];

HID_NUM_OF_DSC se define en autofiles\usbcfg.h USB_HID_DSC;

4.3.6.13.4. Externasextern byte hid_rpt_rx_len;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 447/651

GUILLERMO DAVID HERRERO GONZÁLEZ

445

4.3.6.13.5. Prototipos públicosvoid HIDInitEP(void);void USBCheckHIDRequest(void);void HIDTxReport(char *buffer, byte len);byte HIDRxReport(char *buffer, byte len);

4.3.6.14. Io_cfg.h

En esta librería se definen los puertos utilizados en la aplicación USB.

Si no se desea incluir hay que definir el apartado del USB ya que si no, lacompilación daría un error al no definir los puertos Bus Sense y Power Sense.

4.3.6.14.1. Incluye#include "autofiles\usbcfg.h"

4.3.6.14.2. Tris#define INPUT_PIN 1#define OUTPUT_PIN 0

4.3.6.14.3. USB#define tris_usb_bus_sense TRISAbits.TRISA1 entrada

#if defined(USE_USB_BUS_SENSE_IO)#define usb_bus_sense PORTAbits.RA1#else#define usb_bus_sense 1#endif

#define tris_self_power TRISAbits.TRISA2 entrada

#if defined(USE_SELF_POWER_SENSE_IO)#define self_power PORTAbits.RA2#else

#define self_power 1#endif

Interfaz del transmisor externo

#define tris_usb_vpo TRISBbits.TRISB3 Salida #define tris_usb_vmo TRISBbits.TRISB2 Salida #define tris_usb_rcv TRISAbits.TRISA4 Entrada #define tris_usb_vp TRISCbits.TRISC5 Entrada #define tris_usb_vm TRISCbits.TRISC4 Entrada #define tris_usb_oe TRISCbits.TRISC1 Salida

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 448/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

446

#define tris_usb_suspnd TRISAbits.TRISA3 Salida

4.3.6.14.4. LED#define mInitAllLEDs() LATD &= 0xF0; TRISD &= 0xF0;#define mLED_1 LATDbits.LATD0#define mLED_2 LATDbits.LATD1#define mLED_3 LATDbits.LATD2#define mLED_4 LATDbits.LATD3#define mLED_1_On() mLED_1 = 1;#define mLED_2_On() mLED_2 = 1;#define mLED_3_On() mLED_3 = 1;#define mLED_4_On() mLED_4 = 1;

#define mLED_1_Off() mLED_1 = 0;#define mLED_2_Off() mLED_2 = 0;#define mLED_3_Off() mLED_3 = 0;#define mLED_4_Off() mLED_4 = 0;#define mLED_1_Toggle() mLED_1 = !mLED_1;#define mLED_2_Toggle() mLED_2 = !mLED_2;#define mLED_3_Toggle() mLED_3 = !mLED_3;#define mLED_4_Toggle() mLED_4 = !mLED_4;

4.3.6.14.5. Interruptores#define mInitAllSwitches() TRISBbits.TRISB4=1;TRISBbits.TRISB5=1;

#define mInitSwitch2() TRISBbits.TRISB4=1;#define mInitSwitch3() TRISBbits.TRISB5=1;//#define sw2 PORTBbits.RB4#define sw3 PORTBbits.RB5

4.3.6.14.6. Potenciómetro#define mInitPOT()TRISAbits.TRISA0=1;ADCON0=0x01;ADCON2=0x3C;

4.3.6.14.7. SPI: Líneas de Chip Select

#define tris_cs_temp_sensor TRISBbits.TRISB2 Salida #define cs_temp_sensor LATBbits.LATB2#define tris_cs_sdmmc TRISBbits.TRISB3 Salida #define cs_sdmmc LATBbits.LATB3

4.3.6.14.8. SDMMC#define TRIS_CARD_DETECT TRISBbits.TRISB4 Entrada #define CARD_DETECT PORTBbits.RB4#define TRIS_WRITE_DETECT TRISAbits.TRISA4 Entrada #define WRITE_DETECT PORTAbits.RA4

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 449/651

GUILLERMO DAVID HERRERO GONZÁLEZ

447

4.3.6.15. interrupt.h

En esta librería se incluye todo lo referente a las interrupciones. El usuario lamodificará dependiendo de la aplicación.

4.3.6.15.1. Incluye#include "system\typedefs.h"

4.3.6.15.2. Definiciones#define mEnableInterrupt() INTCONbits.GIE = 1;

4.3.6.15.3. Prototipos

void low_isr(void);void high_isr(void);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 450/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

448

4.3.6.16. Usb_compile_time_validation.h: Validación Del Tiempo De

CompiladoEsta librería se utiliza para comprobar errores en la compilación. Es totalmente

opcional.

4.3.6.16.1. Incluye#include "system\typedefs.h"#include "system\usb\usb.h"

4.3.6.16.2. Validación del USB#if (EP0_BUFF_SIZE != 8) && (EP0_BUFF_SIZE != 16) &&

(EP0_BUFF_SIZE != 32) && (EP0_BUFF_SIZE != 64)#error(Tamaño del buffer del Endpoint 0 incorrecto, comprueba "autofiles\usbcfg.h")#endif

#if defined(HID_INT_OUT_EP_SIZE)#if (HID_INT_OUT_EP_SIZE > 64)

#error(El tamaño del Endpoint de salida de HID no puede ser mayor de 64,comprueba "autofiles\usbcfg.h")

#endif#endif

#ifdef HID_INT_IN_EP_SIZE#if (HID_INT_IN_EP_SIZE > 64)

#error(El tamaño del Endpoint de entrada de HID no puede ser mayor de 64,comprueba "autofiles\usbcfg.h")

#endif#endif

4.3.7. LIBRERÍAS DEL MICROPROCESADOR

Al instalar el compilador MPLAB C18 se crea una carpeta llamada lkr, en la

cual hay unos archivos que se pueden añadir al proyecto.Estos archivos definen todos los puertos, registros, bits… del microprocesador

que utilicemos en el proyecto.

Es recomendable añadir este archivo ya que todas las librerías trabajan con lasdefiniciones hechas en él.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 451/651

GUILLERMO DAVID HERRERO GONZÁLEZ

449

4.4. M ACROS D EL COMPILADOR C18

Una macro es un conjunto de funciones declaradas en un programa. Se declaran por ser funciones muy utilizadas para ahorrar tiempo al programar.

Para poder trabajar con las funciones definidas en las macros, hay que definir laslibrerías. En éstas hay un apartado llamado prototipos públicos en los que se declara lamacro como función.

Las macros que no aparecen en el apartado de prototipos públicos, son funcionesinternas que no se pueden llamar desde otro archivo.

En este punto se comentan las macros de Microchip relativas al puerto USB.

Como en las librerías, aparecen en rojo los datos que hay que modificar en cadaaplicación, en azul los referentes a la clase y en verde todo el código fuente.

4.4.1. USBDRV.C: DRIVERS USB

En este archive el fabricante ha creado el código relativo a la comunicacióninicial. En el cual se declaran los estados del USB, los comprueba y determina en cualestá la aplicación.

4.4.1.1. Incluye#include <p18cxxx.h>

#include "system\typedefs.h"#include "system\usb\usb.h"#include "io_cfg.h" Se necesita para USBCheckBusStatus()

4.4.1.2. Variables#pragma udata

4.4.1.3. Prototipos privadosvoid USBModuleEnable(void);void USBModuleDisable(void);

void USBSuspend(void);void USBWakeFromSuspend(void);

void USBProtocolResetHandler(void);void USB_SOF_Handler(void);void USBStallHandler(void);void USBErrorHandler(void);

4.4.1.4. Declaraciones#pragma code

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 452/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

450

4.4.1.4.1. void USBCheckBusStatus(void)

Esta rutina activa/desactiva el módulo USB comprobado la señal de energía.void USBCheckBusStatus(void)

Detección de la conexión/desconexión del bus

usb_bus_sense es un puerto de E/S definido en io_cfg.h

#define USB_BUS_ATTACHED 1#define USB_BUS_DETACHED 0

if(usb_bus_sense == USB_BUS_ATTACHED) ¿Está el USB conectado?

if(UCONbits.USBEN == 0) ¿Está el módulo apagado? USBModuleEnable(); Está apagado, actívalo

elseif(UCONbits.USBEN == 1) ¿Está el módulo encendido?

USBModuleDisable(); Está encendido, desactívalo

end if(usb_bus_sense...)

Después de activar el modulo USB, hay un retardo para que la tensión de laslíneas D+ o D- se pongan en alto lo suficiente para que salga de la condición SE0.

La interrupción de Reset del USB tiene que estar enmascarada hasta que lacondición SE0 esté borrada. Esto ayuda a prevenir que el firmware confunda este eventocon un reset del host.

if(usb_device_state == ATTACHED_STATE)

if(!UCONbits.SE0)

UIR = 0; Borra todas las interrupciones del USB UIE = 0; Enmascara todas las interrupciones del

USBUIEbits.URSTIE = 1; Desenmascara la interrupción RESET

UIEbits.IDLEIE = 1; Desenmascara la interrupción IDLE

usb_device_state = POWERED_STATE; end if Lo demás espera hasta que SE0 esté

borrado end if(usb_device_state == ATTACHED_STATE)

end USBCheckBusStatus

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 453/651

GUILLERMO DAVID HERRERO GONZÁLEZ

451

4.4.1.4.2. void USBModuleEnable(void)

Esta rutina activa el módulo USB.Sólo se puede llamar esta rutina desde USBCheckBusStatus().

void USBModuleEnable(void)

UCON = 0;UIE = 0; Enmascara todas las interrupciones USB UCONbits.USBEN = 1; Activa el modulo y une el bus usb_device_state = ATTACHED_STATE; Definido en usbmmap.c y .h

end USBModuleEnable

4.4.1.4.3.

void USBModuleDisable(void)Esta rutina desactiva el modulo USB.

Sólo se puede llamar esta rutina desde USBCheckBusStatus().

void USBModuleDisable(void)

UCON = 0; Desactiva el modulo y desconecta del bus

UIE = 0; Enmascara todas las interrupciones USB usb_device_state = DETACHED_STATE; Definido en usbmmap.c y .h

end USBModuleDisable

4.4.1.4.4. void USBSoftDetach(void)

Efectos secundarios: El dispositivo se tiene que reenumerar.

USBSoftDetach desconecta eléctricamente el dispositivo del bus. Se utiliza paradejar de suministrar tensión VUSB a las resistencias pull-up. Las resistencias pull-downen el lado del host pondrán las señales diferenciales en bajo y el host registrará el eventocomo una desconexión.

Como el cable USB no se desconecta físicamente, la energía suministrada através de él la puede detectar el dispositivo. Cuando se llame la función

USBCheckBusStatus(), se reconectará el dispositivo al bus.void USBSoftDetach(void)

USBModuleDisable(); end USBSoftDetach

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 454/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

452

4.4.1.4.5. void USBDriverService(void)

Esta rutina es el corazón del firmware. Controla las interrupciones USB.Nota: Las transiciones de estado del dispositivo son las siguientes:

Desconectado->Conectado->Alimentado->Por defecto->Pendiente de dirección-> ->Direccionado->Configurado->Listo

void USBDriverService(void) Punto para continuar dando servicio si el cable del USB no está unido.

if(usb_device_state == DETACHED_STATE) return;

Tarea A: Servicio de la interrupción de actividad

if(UIRbits.ACTVIF && UIEbits.ACTVIE) USBWakeFromSuspend();

Punto para continuar dando servicio si el dispositivo está en modo suspendido.if(UCONbits.SUSPND==1)return;

Tarea B: Servicio de la Interrupción Reset del Bus.

Cuando se recibe un reset del bus durante el modo suspendido, lo primero hayque activar ACTVIF, una vez que UCONbits.SUSPND esté borrado, entonces el bitURSTIF se reafirmará. Esto es porque URSTIF se chequea después de ACTVIF.

El flag de reset USB se enmascara cuando el USB está en estado desconectado oconectado, por lo que no se puede provocar un estado de reset del USB en estos dosestados.

if(UIRbits.URSTIF && UIEbits.URSTIE) USBProtocolResetHandler();

Tarea C: Servicio de otras interrupciones.

if(UIRbits.IDLEIF && UIEbits.IDLEIE) USBSuspend();if(UIRbits.SOFIF && UIEbits.SOFIE) USB_SOF_Handler();if(UIRbits.STALLIF && UIEbits.STALLIE) USBStallHandler();if(UIRbits.UERRIF && UIEbits.UERRIE) USBErrorHandler();

Punto para continuar dando servicio si el bus no ha enviado un reset del bus.Al recibir el reset del bus, el dispositivo cambia al estado por defecto y está listo para

comunicarse.if(usb_device_state < DEFAULT_STATE) return;

Tarea D: Servicio de una interrupción de transacción completa

if(UIRbits.TRNIF && UIEbits.TRNIE)

USBCtrlEPService sólo maneja las transacciones del EP0, ignora todas lastransacciones de los otros EP.

USBCtrlEPService();Los demás Endpoint se pueden determinar después respondiendo a la clase del

firmware. Cada driver del dispositivo sabe cuando una transacción OUT o IN está disponiblecomprobando el bit de propiedad del buffer.

Un EP OUT lo debe controlar siempre el SIE hasta que el dato esté disponible.Un EP IN lo debe controlar siempre la CPU hasta que el dato esté disponible.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 455/651

GUILLERMO DAVID HERRERO GONZÁLEZ

453

Por esta lógica, no es necesario guardar el valor de USTAT de una transacción de unEndpoint distinto del 0 (non-EP0).

UIRbits.TRNIF = 0; end if(UIRbits.TRNIF && UIEbits.TRNIE)

end USBDriverService

4.4.1.4.6. void USBSuspend(void)void USBSuspend(void)

Nota: No borrar UIRbits.ACTVIF aquíRazón:ACTVIF sólo se genera si IDLEIF se ha generado.Es un ratio de generación de interrupción de 1:1.Por cada IDLEIF, habrá sólo un ACTVIF sea cual sea el número de transacciones en el

bus.Si el ACTIF se borra aquí, puede ocurrir un problema cuando:[ IDLE ][bus activity -><--- 3 ms -----> ^

^ ACTVIF=1IDLEIF=1

# # # # (#=Banderas de programa de interrogación)^

Este ciclo de pregunta mira IDLEIF=1 y ACTVIF=1. Sin embargo, el programa sirve primero IDLEIF porque ACTIVIE=0. Si esta rutina borra el único ACTIVIF, puede que no salga nuncadel modo suspendido.

UIEbits.ACTVIE = 1; Activa las interrupciones del bus

UIRbits.IDLEIF = 0;UCONbits.SUSPND = 1; Pone el modulo USB en el modo reservade

energía, el reloj SIE inactivo.

En este punto el PIC puede ponerse en sleep, reposo, cambiar a un reloj más lento, etc.

/* Sección modificable *//* Final de la sección modificable */

end USBSuspend

4.4.1.4.7. void USBWakeFromSuspend(void)

void USBWakeFromSuspend(void)

Si se cambia la frecuencia de reloj, en este lugar se vuelve a poner la frecuenciaoriginal.

UCONbits.SUSPND = 0;UIEbits.ACTVIE = 0;UIRbits.ACTVIF = 0;

end USBWakeFromSuspend

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 456/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

454

4.4.1.4.8. void USBRemoteWakeup(void)

Esta función la tiene que llamar el usuario cuando el dispositivo se despierte por un estímulo externo que no sea ACTIVIF.

Nota: La sección modificable en esta rutina se puede cambiar dependiendo delas especificaciones de la aplicación. La implementación actual bloquea temporalmenteotras funciones de ejecución en un periodo de 1-13ms dependiendo de la frecuencia delnúcleo.

De acuerdo con las especificaciones del USB 2.0 en la sección 7.1.7.7, “Elreinicio remoto del dispositivo tiene que bloquear la señal al menos por 1ms y no másde 15ms.” La idea aquí es utilizar un retraso por contador, usando un valor común que

pueda trabajar con un gran rango de frecuencias del núcleo. Este valor es 1800. Ver la

tabla de debajo:Frec del núcleo (MHz) MIP Periodo señal RESUME (ms)

48 12 1,054 1 12,6

Estos tiempos pueden ser distintos si se utiliza la optimización o el código deinstrucciones entendido o cuando se tiene otra interrupción activa. Asegurarse usandodel Stopwatch del MPLAB SIM.

void USBRemoteWakeup(void)

static word delay_count;

if(usb_stat.RemoteWakeup == 1) Comprueba si el host a activado lafunción

reinicio remoto USBWakeFromSuspend(); Reinicio del modo suspendido

UCONbits.RESUME = 1; Comienzo de la señal RESUME

/* Sección modificable */

/* Final de la sección modificable */

UCONbits.RESUME = 0; endif

end USBRemoteWakeup

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 457/651

GUILLERMO DAVID HERRERO GONZÁLEZ

455

4.4.1.4.9. void USB_SOF_Handler(void)

El host envía un paquete SOF a los dispositivos cada milisegundo. Estainterrupción puede ser útil en las pipes síncronas. Los diseñadores pueden implementar una rutina de realimentación como necesite.

void USB_SOF_Handler(void) /* Rutina de realimentación aquí */

UIRbits.SOFIF = 0; end USB_SOF_Handler

4.4.1.4.10. void USBStallHandler(void)

Precondición: El SIE tiene que haber mandado un paquete STALL al host.

El STALLIF se active cada vez que el SIE envía un paquete STALL siempreque un Endpoint lo provoque. Una transacción Setup invalida la función STALL. UnEndpoint paralizado para el STALL cuando recibe un paquete setup. En este caso, elSIE aceptará el paquete Setup y activa la bandera TRNIF para informar el firmware.Una función STALL a un pipe Endpoint particular se desactivará automáticamente(dirección específica).

Hay varios motivos para que un Endpoint se paralice:

1. Cuando se recibe una repuesta no soportada por el USB.

Ejemplo: GET_DESCRIPTOR(DEVICE_QUALIFIER)

2. Cuando un Endpoint está actualmente parado3. Cuando la clase del dispositivo especifica que Endpoint tiene que

paralizarse en repuesta a un evento específico.

Ejemplo: Clase de dispositivo de almacenamiento masivo

Si el CBW no es válido, el dispositivo parará la pipe Bulk deentrada.

Nota: UEPn.EPSTALL tiene que escanear que Endpoint provoca el eventoSTALL.

void USBStallHandler(void)

Todos los buffer descriptores del Endpoint 0 los controla el SIE, pero al recibir una

transacción Setup, la CPU gobierna el EP0_OUT forzándolo por firmware.if(UEP0bits.EPSTALL == 1)

USBPrepareForNextSetupTrf();UEP0bits.EPSTALL = 0;

UIRbits.STALLIF = 0;

end USBStallHandler

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 458/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

456

4.4.1.4.11. void USBErrorHandler(void)

El propósito de esta interrupción es sólo por depuración durante el desarrollo.Chequea UEIR para ver error ha causado la interrupción.

void USBErrorHandler(void)

UIRbits.UERRIF = 0; end USBErrorHandler

4.4.1.4.12. void USBProtocolResetHandler(void)

Precondición: Se tiene que haber recibido un reset del bus USB desde el host.

Efectos secundarios: Esta rutina purga cualquier transacción pendiente. Borra la

FIFO USTAT.Hay que llamar esta rutina cuando el reset del bus USB se ha recibido. Resetea

la dirección del dispositivo a cero, desactiva todos los Endpoints menos el cero,inicializa el EP0 para que esté disponible las comunicaciones por defecto, borra todaslos flags de interrupción, desenmascara las interrupciones USB aplicables y reinicializalas variables internas de estado-máquina.

void USBProtocolResetHandler(void)

UEIR = 0; Borra todas los flags de error del USB

UIR = 0; Borra todas las interrupciones USB

UEIE = 0b10011111; Desenmascara todos los errores de interrupción USBUIE = 0b01111011; Activa todas las interrupciones menos ACTVIE

UADDR = 0x00; Resetea a la dirección por defecto

mDisableEP1to15(); Resetea todos los registros UEPn non-EP0

UEP0 = EP_CTRL|HSHK_EN; Inicializa el EP0 como EP Ctrl, ver usbdrv.h

while(UIRbits.TRNIF == 1) Borra cualquier transacción pendiente

UIRbits.TRNIF = 0;UCONbits.PKTDIS = 0; Se asegura de que el procesamiento de paquetes esté activo

USBPrepareForNextSetupTrf(); Declarado en usbctrltrf.c

usb_stat.RemoteWakeup = 0; Desactiva el flag de estado por defecto

usb_active_cfg = 0; Borra la configuración activausb_device_state = DEFAULT_STATE; end USBProtocolResetHandler

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 459/651

GUILLERMO DAVID HERRERO GONZÁLEZ

457

4.4.1.5. Función auxiliar void ClearArray(byte* startAdr,byte count)

*startAdr;while(count)

_asmclrf POSTINC0,0

_endasmcount--;

end while end ClearArray

4.4.2. USB9.C

Estas macros establecen la conexión.

4.4.2.1. Incluye#include <p18cxxx.h>#include "system\typedefs.h"#include "system\usb\usb.h"#include "io_cfg.h" Requerido para el estado auto-alimentado

4.4.2.2. Variables#pragma udata

4.4.2.3. Prototipos privadosvoid USBStdGetDscHandler(void);void USBStdSetCfgHandler(void);void USBStdGetStatusHandler(void);void USBStdFeatureReqHandler(void);

4.4.2.4. Declaraciones#pragma code

4.4.2.4.1. void USBCheckStdRequest(void)Esta rutina chequea el paquete de datos setup para ver si sabe cuando conectarse.

void USBCheckStdRequest(void)

if(SetupPkt.RequestType != STANDARD) return;

switch(SetupPkt.bRequest)

case SET_ADR:ctrl_trf_session_owner = MUID_USB9;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 460/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

458

usb_device_state = ADR_PENDING_STATE; Actualización de estadoVer USBCtrlTrfInHandler() en usbctrltrf.c para el próximo paso

break;case GET_DSC:ctrl_trf_session_owner = MUID_USB9;if(SetupPkt.bDscType == DSC_DEV)

pSrc.bRom = (rom byte*)&device_dsc;wCount._word = sizeof(device_dsc); Activa la cuenta de datos

else if(SetupPkt.bDscType == DSC_CFG)

pSrc.bRom = (rom byte*)&cfg01;

wCount._word = sizeof(cfg01); Activa la cuenta de datos else if(SetupPkt.bDscType == DSC_STR)

pSrc.bRom = (rom byte*)&sd000;wCount._word = sizeof(sd000); Activa la cuenta de datos

else

Esto se necesita para parar la respuesta DEVICE_QUALIFIER ctrl_trf_session_owner = MUID_NULL;

usb_stat.ctrl_trf_mem = _ROM; Fija el tipo de memoria

break;case SET_CFG:

USBStdSetCfgHandler();break;case GET_CFG:

ctrl_trf_session_owner = MUID_USB9;pSrc.bRam = (byte*)&usb_active_cfg; Fija la fuente usb_stat.ctrl_trf_mem = _RAM; Fija el tipo de memoria LSB(wCount) = 1; Activa la cuenta de datos

break;case GET_STATUS:

USBStdGetStatusHandler(); break;case CLR_FEATURE:case SET_FEATURE:

USBStdFeatureReqHandler(); break;

case GET_INTF:ctrl_trf_session_owner = MUID_USB9; pSrc.bRam = (byte*)&usb_alt_intf+SetupPkt.bIntfID; Fija la fuenteusb_stat.ctrl_trf_mem = _RAM; Fija el tipo de memoriaLSB(wCount) = 1; Activa la cuenta de datos

break;case SET_INTF:

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 461/651

GUILLERMO DAVID HERRERO GONZÁLEZ

459

ctrl_trf_session_owner = MUID_USB9;usb_alt_intf[SetupPkt.bIntfID] = SetupPkt.bAltID;

break;case SET_DSC:case SYNCH_FRAME:

default:break;

end switch end USBCheckStdRequest

4.4.2.4.2. void USBStdGetDscHandler(void)

Esta rutina une la respuesta estándar GET_DESCRIPTOR. Utiliza tablasdinámicamente buscando el tamaño del descriptor. Esta rutina no se debe modificar si

las tablas usbdsc.c en están declaradas correctamente.void USBStdGetDscHandler(void)

if(SetupPkt.bmRequestType == 0x80)

switch(SetupPkt.bDscType)case DSC_DEV:

ctrl_trf_session_owner = MUID_USB9;pSrc.bRom = (rom byte*)&device_dsc;

wCount._word = sizeof(device_dsc); Activa la cuenta de datos break;case DSC_CFG:

ctrl_trf_session_owner = MUID_USB9;pSrc.bRom = *(USB_CD_Ptr+SetupPkt.bDscIndex);wCount._word = *(pSrc.wRom+1); Activa la cuenta de datos

break;case DSC_STR:

ctrl_trf_session_owner = MUID_USB9;pSrc.bRom = *(USB_SD_Ptr+SetupPkt.bDscIndex);wCount._word = *pSrc.bRom; Activa la cuenta de datos

break; end switch

usb_stat.ctrl_trf_mem = _ROM; Fija el tipo de memoria end if end USBStdGetDscHandler

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 462/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

460

4.4.2.4.3. void USBStdSetCfgHandler(void)

Esta rutina primero desactiva todos los Endpoints borrando los registros UEP.Configura (inicializa) los Endpoints especificados en la sección modificable.

void USBStdSetCfgHandler(void) ctrl_trf_session_owner = MUID_USB9;

mDisableEP1to15(); Ver usbdrv.h

ClearArray((byte*)&usb_alt_intf,MAX_NUM_INT);usb_active_cfg = SetupPkt.bCfgValue;if(SetupPkt.bCfgValue == 0)

usb_device_state = ADDRESS_STATE;else usb_device_state = CONFIGURED_STATE;

/* Sección modificable */BootInitEP();

/* Final de la sección modificable */ end if(SetupPkt.bcfgValue == 0)

end USBStdSetCfgHandler

4.4.2.4.4. void USBStdGetStatusHandler(void)

Esta rutina une la respuesta estándar GET_STATUS.

void USBStdGetStatusHandler(void)

CtrlTrfData._byte0 = 0; Inicializa el contenido CtrlTrfData._byte1 = 0;

switch(SetupPkt.Recipient)

case RCPT_DEV:ctrl_trf_session_owner = MUID_USB9;

_byte0: bit0: Estado auto-alimentado [0] Alimentado por el bus [1] auto-alimentado bit1: Reinicio remoto [0] Desactivado [1] Activado

if(self_power == 1) Auto-alimentado definido en io_cfg.h CtrlTrfData._byte0|=0b000000001; Activa bit0

if(usb_stat.RemoteWakeup == 1) usb_stat definido en usbmmap.c CtrlTrfData._byte0|=0b00000010; Activa bit1

break;case RCPT_INTF:

ctrl_trf_session_owner = MUID_USB9; No hay datos a actualizar break;case RCPT_EP:

ctrl_trf_session_owner = MUID_USB9; _byte0: bit0: Estado parado [0] No parado [1] Parado

pDst.bRam = (byte*)&ep0Bo+(SetupPkt.EPNum*8)+(SetupPkt.EPDir*4);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 463/651

GUILLERMO DAVID HERRERO GONZÁLEZ

461

if(*pDst.bRam & _BSTALL) Usar _BSTALL como máscara de bit CtrlTrfData._byte0=0x01; Activa bit0

break; end switch

if(ctrl_trf_session_owner == MUID_USB9)

pSrc.bRam = (byte*)&CtrlTrfData; Fija fuente

usb_stat.ctrl_trf_mem = _RAM; Fija el tipo de memoria LSB(wCount) = 2; Activa la cuenta de datos

end if(...) end USBStdGetStatusHandler

4.4.2.4.5. void USBStdFeatureReqHandler(void)Esta rutina une las repuestas estándar SET y CLEAR FEATURES.

void USBStdFeatureReqHandler(void)

if((SetupPkt.bFeature==DEVICE_REMOTE_WAKEUP)&&(SetupPkt.Recipient==RCPT_DEV))

ctrl_trf_session_owner = MUID_USB9;if(SetupPkt.bRequest == SET_FEATURE)

usb_stat.RemoteWakeup = 1;else

usb_stat.RemoteWakeup = 0; end if

if((SetupPkt.bFeature==ENDPOINT_HALT)&&(SetupPkt.Recipient==RCPT_EP)&&(SetupPkt.EPNum!=0))

ctrl_trf_session_owner = MUID_USB9;Se tiene que calcular la dirección en este punto

pDst.bRam = (byte*)&ep0Bo+(SetupPkt.EPNum*8)+(SetupPkt.EPDir*4);

if(SetupPkt.bRequest == SET_FEATURE)*pDst.bRam = _USIE|_BSTALL;else

if(SetupPkt.EPDir == 1) // IN*pDst.bRam = _UCPU;

else*pDst.bRam = _USIE|_DAT0|_DTSEN;

end if end if

end USBStdFeatureReqHandler

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 464/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

462

4.4.3. USBCTRLTRF.C

Estas macros controlan las transferencias.

4.4.3.1. Incluye#include <p18cxxx.h>#include "system\typedefs.h"#include "system\usb\usb.h"

4.4.3.2. Variables#pragma udatabyte ctrl_trf_state; Estado de la transferencia de control

byte ctrl_trf_session_owner; Controlador de la sesión de transferencia actualPOINTER pSrc; Puntero a la fuente de datos

POINTER pDst; Puntero al destino de los datos

WORD wCount; Contador de datos

4.4.3.3. Prototipos privadosvoid USBCtrlTrfSetupHandler(void);void USBCtrlTrfOutHandler(void);void USBCtrlTrfInHandler(void);

4.4.3.4. Declaraciones#pragma code

4.4.3.4.1. void USBCtrlEPService(void)

Precondición: USTAT está cargada con una dirección de Endpoint válida.

USBCtrlEPService chequea tres tipos de transacciones que conoce comotratarlas y lo hace:

1. EP0 SETUP2. EP0 OUT3. EP0 IN

Ignora los demás tipos.

void USBCtrlEPService(void)

if(USTAT == EP00_OUT)

if(ep0Bo.Stat.PID == SETUP_TOKEN) EP0 SETUP USBCtrlTrfSetupHandler();

else EP0 OUT USBCtrlTrfOutHandler();

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 465/651

GUILLERMO DAVID HERRERO GONZÁLEZ

463

else if(USTAT == EP00_IN) EP0 IN USBCtrlTrfInHandler();

end USBCtrlEPService

4.4.3.4.2. void USBCtrlTrfSetupHandler(void)

Precondición: El buffer SetupPkt está cargado con un dato válido de Setup.

Esta rutina es una tarea para despachar y tiene tres estados.

1. Inicializa la transferencia de control de estados máquina.2. Llama cada vez al módulo que sabe como servir la respuesta Setup del

host. Ejemplo de módulo: USB9, HID, CDC, MSD,… Se añade unanueva clase, la tabla ClassReqHandler en usbdsc.c se tiene que actualizar

para llamar todas las clases de unión disponibles.3. Una vez que el módulo se arriesga a chequear si el responsable de servir la respuesta, en el estado 3 chequea la dirección de la transferencia paradeterminar como preparar el EP0 para la transferencia de control.

Nota: El firmware del USB de Microchip tiene tres estados distintos para elcontrol de los estados máquina:

1. WAIT_SETUP2. CTRL_TRF_TX3. CTRL_TRF_RX

Mirar en el manual del firmware como cambia de un estado a otro.

Una transferencia de control se compone de varias transacciones USB. Cuandose transfieren datos con muchas transacciones, es importante guardar los datos fuente,datos destino y cuenta de datos. Estos tres parámetros se guardan en pSrc, pDst ywCount. Un flag se utiliza para ver si la fuente de los datos es de la RAM o de la ROM.

4.4.3.4.3. void USBCtrlTrfSetupHandler(void)

byte i;

Estado 1

ctrl_trf_state = WAIT_SETUP;ctrl_trf_session_owner = MUID_NULL; Fijar el dueño a NULL wCount._word = 0;

Estado 2USBCheckStdRequest(); Ver system\usb9\usb9.c

/* Sección Modificable */

Insertar otra respuesta de unión de clase de dispositivo USB aquí/* Fin de la sección modificable */

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 466/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

464

Estado 3USBCtrlEPServiceComplete();

end USBCtrlTrfSetupHandler

4.4.3.4.4. void USBCtrlTrfOutHandler(void)

Esta rutina une una transacción OUT de acuerdo con el estado de la transferenciade control que está actualmente activa.

Nota: Si la transferencia de control es del host al dispositivo, hay que notificar eldueño de la sesión cada transacción OUT para dar servicio a los datos recibidos.

void USBCtrlTrfOutHandler(void)

if(ctrl_trf_state == CTRL_TRF_RX)

USBCtrlTrfRxService(); No preocuparse de reescribir el bit _KEEP porque si está activo, TRNIF no se generará en

primer lugar.if(ep0Bo.Stat.DTS == 0)

ep0Bo.Stat._byte = _USIE|_DAT1|_DTSEN;else

ep0Bo.Stat._byte = _USIE|_DAT0|_DTSEN;else CTRL_TRF_TX

USBPrepareForNextSetupTrf(); end USBCtrlTrfOutHandler

4.4.3.4.5. void USBCtrlTrfInHandler(void)

Esta rutina une una transacción IN de acuerdo con el estado de la transferenciade control que está actualmente activa.

Nota: Si se fija la dirección de respuesta no modificará la actual hasta que secomplete la transferencia de control. El final de la transferencia de control para unarepuesta de cambio de dirección es una transacción IN. Por lo tanto se necesita paraservir esta situación cuando la condición es correcta. La macromUSBCheckAdrPendingState se define en usb9.h y está diseñada para servir esteevento.

void USBCtrlTrfInHandler(void)

mUSBCheckAdrPendingState(); Se tiene que comprobar si está en ADR_PENDING_STATE

if(ctrl_trf_state == CTRL_TRF_TX)

USBCtrlTrfTxService();if(ep0Bi.Stat.DTS == 0)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 467/651

GUILLERMO DAVID HERRERO GONZÁLEZ

465

ep0Bi.Stat._byte = _USIE|_DAT1|_DTSEN;else

ep0Bi.Stat._byte = _USIE|_DAT0|_DTSEN;else CTRL_TRF_RX USBPrepareForNextSetupTrf();

end USBCtrlTrfInHandler

4.4.3.4.6. void USBCtrlTrfTxService(void)

Precondición: pSrc, wCount, y usb_stat.ctrl_trf_mem están configuradoscorrectamente.

Hay que llamar esta rutina en dos casos. Uno desde

USBCtrlEPServiceComplete() y otro desde USBCtrlTrfInHandler(). Hay que tener cuidado con el control de una transferencia sobre múltiples transacciones USB.

Nota: Esta rutina trabaja con Endpoints síncronos mayores que 256bytes y aquíse muestra un ejemplo de cómo tratar BC9 y BC8. En realidad, un Endpoint de controlno puede ser mayor de 64bytes.

void USBCtrlTrfTxService(void)

byte byte_to_send;Primero, hay que calcular cuantos bytes de datos se envían.

if(wCount._word < EP0_BUFF_SIZE)

byte_to_send = wCount._word;else

byte_to_send = EP0_BUFF_SIZE;ep0Bi.Cnt = byte_to_send;

Resta el número de bytes enviados a los del total.wCount._word -= byte_to_send;pDst.bRam = (byte*)&CtrlTrfData; Fija el puntero destino while(byte_to_send)

if(usb_stat.ctrl_trf_mem == _ROM)

*pDst.bRam = *pSrc.bRom;pSrc.bRom++;

else

*pDst.bRam = *pSrc.bRam;pSrc.bRam++;

//end if elsepDst.bRam++;byte_to_send--;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 468/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

466

end while end USBCtrlTrfTxService

4.4.3.4.7. void USBCtrlTrfRxService(void)

Precondiciones: pDst y wCount tienen que estar configurados correctamente. pSrc siempre es &CtrlTrfData y usb_stat.ctrl_trf_mem es _RAM. wCount tiene queestar configurado como 0 al principio de cada transferencia de control.

Esta rutina no está completada. Comprueba una nueva versión del firmware.

void USBCtrlTrfRxService(void)

byte byte_to_read;

byte_to_read = ep0Bo.Cnt;Acumula el número total de bytes leídoswCount._word = wCount._word + byte_to_read;pSrc.bRam = (byte*)&CtrlTrfData;

while(byte_to_read)

*pDst.bRam = *pSrc.bRam;pDst.bRam++;pSrc.bRam++;byte_to_read--;

end while(byte_to_read) end USBCtrlTrfRxService

4.4.3.4.8. void USBCtrlEPServiceComplete(void)

Esta rutina consigue que la tarea en servicio sea una repuesta setup. Esta tareasirve para configurar los controles del Endpoint apropiadamente para una situacióndada.

Hay tres:

a. No hay unión para la respuesta, in este caso hay que mandar unSTALL.

b. El host ha respondido con una lectura de transferencia de control,los Endpoints se necesitan para determinar el camino.

c. El host ha respondido con una escritura de transferencia decontrol o no se necesita un estado de control de datos, losEndpoints se necesitan para determinar el camino.

Se resume el procesamiento del paquete borrando el bit PKTDIS.

void USBCtrlEPServiceComplete(void)

if(ctrl_trf_session_owner == MUID_NULL)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 469/651

GUILLERMO DAVID HERRERO GONZÁLEZ

467

Si ninguno sabe cómo dar servicio a esta respuesta, entonces se para. * If no one knows how toservice this request then stall. Tiene que preparar el EP0 para que reciba la siguiente transacción SETUP.

ep0Bo.Cnt = EP0_BUFF_SIZE;ep0Bo.ADR = (byte*)&SetupPkt;ep0Bo.Stat._byte = _USIE|_BSTALL;ep0Bi.Stat._byte = _USIE|_BSTALL;

else El modulo demanda el control de la sesión de transferencia.

if(SetupPkt.DataDir == DEV_TO_HOST)

if(SetupPkt.wLength < wCount._word)

wCount._word = SetupPkt.wLength;

USBCtrlTrfTxService();ctrl_trf_state = CTRL_TRF_TX;

Control de lectura:<SETUP[0]><IN[1]><IN[0]>...<OUT[1]> | <SETUP[0]>1. Prepara EP OUT para responder a una terminación tempranaNOTA: Si algo va mal durante la transferencia de control, puede que el host no envíe la última fase de

estado. Cuando pasa esto, pueden ocurrir dos cosas dependiendo del host:a) El host envía un RESET

b) El host puede mandar una nueva transacción SETUP sin enviar primero unRESET.

Para que el caso b) comunique correctamente, el EP OUT tiene que configurarse para recibir una

transacción OUT de longitud cero o una nueva transacción SETUP.Como la transacción SETUP necesita que el bit DTS sea DAT0, el estado de longitud ceronecesita que el bit DTS sea DAT1, la comprobación del bit DTS por hardware tiene que desactivarse. Eneste caso el SIE puede aceptar cualquiera de las dos transacciones.

Además, el byte Cnt se tiene que fijar para prepararse para el dato SETUP (8bytes o mas), y el buffer de dirección tiene que apuntar al SetupPkt.

ep0Bo.Cnt = EP0_BUFF_SIZE;ep0Bo.ADR = (byte*)&SetupPkt;ep0Bo.Stat._byte = _USIE; Nota: DTSEN es 0

2. Prepara el EP IN para una transferencia de datos, Cnt tiene que estar inicializado para ser elresponsable de una respuesta de dueño.

ep0Bi.ADR = (byte*)&CtrlTrfData;

ep0Bi.Stat._byte = _USIE|_DAT1|_DTSEN;else (SetupPkt.DataDir = HOST_TO_DEV)

ctrl_trf_state = CTRL_TRF_RX;

Control Escritura:<SETUP[0]><OUT[1]><OUT[0]>...<IN[1]> | <SETUP[0]>1. Prepara el EP IN para responder ante una finalización temprana. Es lo mismo que una

respuesta a un paquete de longitud cero para una transferencia de control sin fase de datos.ep0Bi.Cnt = 0;ep0Bi.Stat._byte = _USIE|_DAT1|_DTSEN;

2. Prepara el EP OUT para recibir datos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 470/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

468

ep0Bo.Cnt = EP0_BUFF_SIZE;ep0Bo.ADR = (byte*)&CtrlTrfData;

ep0Bo.Stat._byte = _USIE|_DAT1|_DTSEN; end if(SetupPkt.DataDir == DEV_TO_HOST)

end if(ctrl_trf_session_owner == MUID_NULL)El bit PKTDIS se activa cuando se recibe una transacción Setup. Borrar para resumir el

procesamiento del paquete.UCONbits.PKTDIS = 0;

end USBCtrlEPServiceComplete

4.4.3.4.9. void USBPrepareForNextSetupTrf(void)

La rutina fuerza al EP0 OUT que esté listo para una nueva transacción Setup, yfuerza a que la CPU controle el EP0 IN.

void USBPrepareForNextSetupTrf(void)

ctrl_trf_state = WAIT_SETUP; Ver usbctrltrf.h ep0Bo.Cnt = EP0_BUFF_SIZE; Definido en usbcfg.h ep0Bo.ADR = (byte*)&SetupPkt;ep0Bo.Stat._byte = _USIE|_DAT0|_DTSEN; Inicialización EP0 buff dsc, ver

usbmmap.h ep0Bi.Stat._byte = _UCPU; EP0 IN buffer inicialización

end USBPrepareForNextSetupTrf

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 471/651

GUILLERMO DAVID HERRERO GONZÁLEZ

469

4.4.4. USBDSC.C: DESCRIPTORES USB

Este archivo contiene la información de los descriptores USB. Se utiliza junto alarchivo usbdsc.h. Cuando se añade o remueve un descriptor del menú de configuraciónde los descriptores, ej. CFG01, el usuario debe cambiar la estructura del descriptor definida en el archivo usbdsc.h. La estructura se utiliza para calcular el tamaño deldescriptor, ej. sizeof(CFG01).

Una configuración típica de los descriptores consiste en:

La mínima configuración del descriptor (USB_CFG_DSC)

Uno o más descriptores de interfaz (USB_INTF_DSC)

Uno o más descriptores de Endpoint (USB_EP_DSC) Nombres convenidos:

Ê Tipo USB_CFG_DSC se nombra cdxx, donde xx es el número deconfiguración. Este número debería ser el mismo que el valor del índiceactual de esta configuración.

Ê Tipo USB_INTF_DSC se nombra i<yy>a<zz>, donde yy es el númerode la interfaz y zz es el número de la interfaz alterna.

Ê Tipo USB_EP_DSC se nombra ep<##><d>_i<yy>a<zz>, donde ## es elnúmero del Endpoint y d es la dirección de transferencia.

El nombre de la interfaz se tiene que listar como un sufijo para identificar que

interfaz pertenece al Endpoint.Ejemplo:

Si un dispositivo tiene una configuración, dos interfaces, la interfaz 0 tiene dosEndpoints (IN y OUT), y la interfaz 1 tiene un Endpoint (IN). Entonces la estructura enusbdsc.h tiene que ser:

#define CFG01 rom struct

USB_CFG_DSC cd01;

USB_INTF_DSC i00a00;

USB_EP_DSC ep01o_i00a00;USB_EP_DSC ep01i_i00a00;

USB_INTF_DSC i01a00;

USB_EP_DSC ep02i_i01a00;

cfg01

Ver que la jerarquía de los descriptores sigue a las especificaciones de necesidaddel USB. Todos los Endpoint que pertenecen a una interfaz se tienen que listar inmediatamente después que la interfaz.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 472/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

470

Rellenar los valores del descriptor en el archivo usbdsc.c:

[Descriptor de Configuration (USB_CFG_DSC)]El atributo de configuración tiene que tener la definición _DEFAULT como

mínimo. Se pueden añadir opciones adicionales al tributo _DEFAULT. Las opcionesdisponibles son _SELF y _RWU.

Estas definiciones se encuentran en el archivo usbdefs_std_dsc.h. El _SELF diceal host del USB que este dispositivo es autoalimentado. El _RWU dice al host del USBque el dispositivo soporta el reinicios remoto.

[Descriptor del Endpoint (USB_EP_DSC)]

Suponer el siguiente ejemplo:

sizeof(USB_EP_DSC),DSC_EP,_EP01_OUT,_BULK,64,0x00

Los dos primeros parámetros son auto-explicativos. Especifican la longitud deldescriptor del Endpoint (7) y el tipo de descriptor. El siguiente parámetro identifica elEndpoint, las definiciones se encuentran en usbdefs_std_dsc.h y tienen la siguienteconvención:

_EP<##>_<dir>

donde ## es el número del endpoint y dir es la dirección de la transferencia. dir tiene el valor de ‘OUT’ o ‘IN’.

El siguiente parámetro especifica el tipo de Endpoint. Las opciones disponibles

son _BULK, _INT, _ISO, y _CTRL. El _CTRL no se utiliza normalmente porque elEndpoint de transferencia de control por defecto no se define en los descriptores USB.Cuando se utiliza la opción _ISO, se pueden añadir opciones adicionales. Ejemplo:

_ISO|_AD|_FE

Esto describe el Endpoint como una pipe síncrona con los atributos adoptivo yrealimentación. Ver usbdefs_std_dsc.h y las especificaciones del USB por más detalles.El siguiente parámetro define el tamaño del Endpoint. El último parámetro es elintervalo de muestreo.

Añadir un String al USB

Una matriz de string descriptor debe tener el siguiente formato:

rom structbyte bLength;byte bDscType;word string[size];sdxxx=

sizeof(sdxxx),DSC_STR,<text>;

La estructura proporciona un medio al compilador de C para calcular la longituddel string descriptor sdxxx, donde xxx es el número de índice. Los dos primeros bytesdel descriptor son su longitud y tipo. El resto <text> son strings de texto que tienen queestar en formato unicode. El formato unicode se obtiene declarando cada carácter comoun tipo de letra. Todo el texto string se declara como una matriz de letras con el número

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 473/651

GUILLERMO DAVID HERRERO GONZÁLEZ

471

de caracteres igual a <size>. <size> se tiene que contar manualmente y meter en lasdeclaraciones de la matriz. Ejemplo:

Si el string es “USB”, entonces el string descriptor debe ser:

(Utilizando índice 02)

rom structbyte bLength;byte bDscType;word string[3];sd002=

sizeof(sd002),DSC_STR,'U','S','B';

Un proyecto USB puede que tenga varios strings y el firmware soporta el controlde múltiples strings como una búsqueda en tabla.

La búsqueda en tabla se define:

rom const unsigned char *rom USB_SD_Ptr[]=&sd000,&sd001,&sd002;

La declaración de arriba tiene 3 strings, sd000, sd001 y sd002. Los strings se pueden añadir o borrar. sd000 es un string descriptor especial, define el idioma,normalmente es inglés americano (US English (0x0409)). El índice del string debe ser igual que el índice de posición de la matriz USB_SD_Ptr, &sd000 tiene que estar en la

posición USB_SD_Ptr[0], &sd001 tiene que estar en la posición USB_SD_Ptr[1] y asísucesivamente.

La búsqueda en tabla USB_SD_Ptr la utiliza la función de unión string enusb9.c.

El esquema de búsqueda en tabla también se aplica a la descriptor de

configuración. Un dispositivo USB puede tener varios descriptores de configuraciones,ej. CFG01, CFG02, etc. Para añadir un descriptor de configuración, el usuario tiene queimplementar una estructura similar a CFG01.

El siguiente paso es añadir el nombre del descriptor de configuración, ej. cfg01,cfg02…; a la búsqueda en tabla USB_CD_Ptr. USB_CD_Ptr[0] es muy fácil poner eltitular ya que la configuración 0 es el estado no configurado de acuerdo con lasespecificaciones del USB.

Los tipos de descriptor específicos se definen en:

system\usb\usbdefs\usbdefs_std_dsc.h

La información de configuración se define en:autofiles\usbcfg.h

4.4.4.1. Incluye#include "system\typedefs.h"#include "system\usb\usb.h"

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 474/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

472

4.4.4.2. Constantes#pragma romdataDescriptor del dispositivorom USB_DEV_DSC device_dsc=

sizeof(USB_DEV_DSC), Tamaño del descriptor en bytes DSC_DEV, Descriptor tipo DEVICE

0x0200, Número de versión del USB en formato BCD 0x00, Código de Clase

0x00, Código Subclase

0x00, Código Protocolo

EP0_BUFF_SIZE, Tamaño de paquete máximo para el EP0, ver usbcfg.h

0x04D8, ID Fabricante

0x0000, ID Producto

0x0001, Número de versión del dispositivo en formato BCD

0x01, String índice de fabricante

0x02, String índice del producto

0x00, String índice del número de serie del dispositivo

0x01 Número de configuraciones posible

;

Descriptor de configuración 1CFG01=

Descriptor de configuraciónsizeof(USB_CFG_DSC), Tamaño del descriptor en bytes DSC_CFG, Tipo del descriptor CONFIGURACIÓN

sizeof(cfg01), Longitud total de datos de esta configuración

1, Número de interfaces en esta configuración

1, Valor del índice de esta configuración

0, String índice de configuración

_DEFAULT|_RWU, Atributos, ver usbdefs_std_dsc.h

50, Consumo máximo de corriente (2X mA)

Descriptor de la interfaz

sizeof(USB_INTF_DSC), Tamaño del descriptor en bytesDSC_INTF, Tipo de descriptor INTERFACE

0, Número de Interface

0, Número alterno de configuración

1, Número de Endpoints en esta interfaz

HID_INTF, Código de la Clase

BOOT_INTF_SUBCLASS, Código de la Subclase

HID_PROTOCOL_MOUSE, Código del Protocolo

0, String índice de interfaz

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 475/651

GUILLERMO DAVID HERRERO GONZÁLEZ

473

Descriptor de Clase Específica HIDsizeof(USB_HID_DSC), Tamaño del descriptor en bytes

DSC_HID, Tipo del descriptor HID0x0101, Número de versión específica HID en formato BCD

0x00, Código del país (0x00 en los no soportados) HID_NUM_OF_DSC, Número de la clase del descriptor, ver usbcfg.h

DSC_RPT, Tipo del informe del descriptor

sizeof(hid_rpt01), Tamaño del informe del descriptor Descriptor del Endpoint

sizeof(USB_EP_DSC),DSC_EP,_EP01_IN,_INT,HID_INT_IN_EP_SIZE,0x0A;rom structbyte bLength;byte bDscType;word string[1];sd000=sizeof(sd000),DSC_STR,0x0409;

rom structbyte bLength;byte bDscType;word string[25];sd001=sizeof(sd001),DSC_STR,'M','i','c','r','o','c','h','i','p',' ','T','e','c','h','n','o','l','o','g','y',' ','I','n','c','.';rom structbyte bLength;byte bDscType;word string[22];sd002=sizeof(sd002),DSC_STR,'M','o','u','s','e',' ','I','n',' ','a',' ','C','i','r','c','l','e',' ','D','e','m','o';

rom structbyte report[HID_RPT01_SIZE];hid_rpt01=0x05, 0x01, Página de uso (Escritorio genérico)

0x09, 0x02, Uso (Ratón)0xA1, 0x01, Colección (Aplicación)

0x09, 0x01, Uso (Puntero)

0xA1, 0x00, Colección (Física)

0x05, 0x09, Página de uso (Botones)

0x19, 0x01, Uso mínimo (01)

0x29, 0x03, Uso máximo (03)

0x15, 0x00, Mínimo lógico (0)

0x25, 0x01, Máximo lógico (0)

0x95, 0x03, Cuenta del informe (3)

0x75, 0x01, Tamaño del informe (1)0x81, 0x02, Entrada (Dato, Variable, Absoluto)

0x95, 0x01, Cuenta del informe (1)

0x75, 0x05, Tamaño del informe (5)

0x81, 0x01, Entrada (Constante); 5 bit de relleno

0x05, 0x01, Uso de página (Escritorio genérico)

0x09, 0x30, Uso (X)

0x09, 0x31, Uso (Y)

0x15, 0x81, Mínimo lógico (-127)

0x25, 0x7F, Máximo lógico (127)

0x75, 0x08, Tamaño del informe (8)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 476/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

474

0x95, 0x02, Cuenta del informe (2)

0x81, 0x06, Entrada (Dato, Variable, Relativo)

0xC0, 0xC0; Fin de la colección

rom const unsigned char *rom USB_CD_Ptr[]=&cfg01,&cfg01;rom const unsigned char *rom USB_SD_Ptr[]=&sd000,&sd001,&sd002;

rom pFunc ClassReqHandler[1]=

&USBCheckHIDRequest;

#pragma code

4.4.5. USBMMAP.C

Este archivo es el que controla la memoria del USB, sirve para asignar lamemoria en cada instante a los Endpoint. Utiliza los tiempos de compilación deusbcfg.h instantáneamente para los Endpoints y sus buffers.

Cada Endpoint necesita fijar un registro del buffer descriptor (BDT). Un BDTtiene 4bytes de longitud y una memoria específica en la RAM para cada Endpoint. ElBDT del EP0 OUT está entre las direcciones 0x400 a 0x403, el BDT del EP0 IN en0x404 a0x407, el del EP1 OUT 0x408 a 0x40B y así sucesivamente. Estas

localizaciones son correctas con el Buffer Ping-Pong en Modo 0. Estas localizacionesestán conectadas en el chip. Al hacerlas instantáneas, ej. volatile far BDT ep0Bo, es para proporcionar al compilador de C un camino para direccionar cada variabledirectamente. Esto es muy importante porque cuando se puede acceder a un registrodirectamente, se ahorra tiempo de ejecución y se reduce el tamaño de programa.

Los Endpoints se definen con el número de Endpoint y la dirección detransferencia. Para simplificar, usbmmap.c sólo utiliza el número del Endpoint delesquema de direccionamiento de los registros BDT. Con este método siMAX_EP_NUMBER es 1, tenemos cuatro BDTs instantáneamente: uno para EP0IN,otro para EP0OUT, que se tiene que inicializar instantáneamente para las transferenciasde control por defecto, y otros dos para EP1IN y EP1OUT. El nombre convenido esep<#>B<d> donde # es el número del Endpoint y d es la dirección de transferencia, que

puede ser <i> o <o>.

El control de la memoria USB utiliza MAX_EP_NUMBER, definido enusbcfg.h, para saber que Endpoints se necesitan instantáneamente. Representa elnúmero máximo de Endpoints que se direccionan, no cuantos Endpoints se utilizan.Como los BDTs para los Endpoints tienen la dirección asignada en el Bank 4 enhardware, configurar este valor con un dato muy grande puede que se utiliceinadecuadamente la RAM. Por ejemplo, en una aplicación se utiliza los EP0 y EP4, elMAX_EP_NUMBER es 4, y no 2. Los Endpoints del medio (EP1, EP2 y EP3) no se

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 477/651

GUILLERMO DAVID HERRERO GONZÁLEZ

475

utilizan, y los 24bytes de memoria asociados se pierden. No tiene mucho sentido saltar Endpoints, pero la decisión final la tiene el usuario.

El paso siguiente es asignar los BDTs instantáneos a las distintas funciones delUSB. El firmware asume que cada función del USB sabe que Endpoint utiliza, ej. latransferencia de control por defecto sabe que utiliza el EP0IN y el EP0OUT. Una claseHID puede elegir que Endpoint utiliza, pero una vez elegido tiene que saber el número.

La asignación de los Endpoints de las funciones del USB se gobiernan enusbcfg.h. Esto ayuda a prevenir errores de tener más de una función USB con el mismoEndpoint. La sección “Distribución de los Endpoints” en usbcfg.h proporciona unejemplo de cómo distribuir los Endpoints del USB con funciones USB.

Se puede cambiar la configuración en esta sección. No hay una forma correctade configuración y los usuarios tienen que elegir el método más adecuado para laaplicación.

Normalmente, un usuario mapeará lo siguiente para una función de interfaz:

1. El ID de la interfaz USB2. Los registros de control de los Endpoint (UEPn)3. El registro BDT (ep<#>B<d>)4. El tamaño del Endpoint.

Ejemplo: Suponer una clase de dispositivo “foo”, que utiliza un Endpoint desalida de 64bytes y un Endpoint de entrada de 64bytes, entonces:

#define FOO_INTF_ID 0x00

#define FOO_UEP UEP1

#define FOO_BD_OUT ep1Bo

#define FOO_BD_IN ep1Bi

#define FOO_EP_SIZE 64

El mapeo anterior elige la clase “foo” para utilizarse con el Endpoint 1. Elnombre es arbitrario y se puede elegir otro que no sea FOO_???????. Como ideaabstracta, el código para la clase “foo” se tiene que usar en las definiciones abstractas deFOO_BD_OUT,FOO_BD_IN y o ep1Bo o ep1Bi.

Ver que el tamaño del Endpoint definido en el archivo usbcfg.h se utiliza denuevo en el archivo usbmmap.c. Esto muestra que los dos archivos están muyrelacionados.

El buffer del Endpoint para cada función USB se localiza en el área del puerto-dual RAM y como después se tiene que hacer instantáneos los BDTs. Un ejemplo dedeclaración es: volatile far unsigned char[FOO_EP_SIZE] data;

La palabra ‘volatile’ dice al compilador que no funcione ningún código deoptimización en esta variable porque el contenido lo tiene que modificar el hardware. La

palabra ‘far’ dice que la variable no se localiza en el área de RAM Accesible (0x000-0x05F).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 478/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

476

Para que la variable sea accesible globalmente con otros ficheros, se tiene quedeclarar en el archivo de cabecera usbmmap.h como una definición externa, como

extern volatile far unsigned char[FOO_EP_SIZE] data;Conclusión:

Las dependencias entre usbcfg y usbmmap se pueden mostrar como:

usbcfg[MAX_EP_NUMBER] -> usbmmap

usbmmap[ep<#>B<d>] -> usbcfg

usbcfg[EP size] -> usbmmap

usbcfg[abstract ep definitions] -> usb9/hid/cdc/etc class code

usbmmap[endpoint buffer variable] -> usb9/hid/cdc/etc class code

El mapeo proporciona una manera directa de direccionado de BDT y un buffer del Enpoint. Esta forma utiliza menos punteros, y se equipara con un código de

programa más rápido y pequeño.

4.4.5.1. Incluye#include "system\typedefs.h"#include "system\usb\usb.h"

4.4.5.2. Variables globales del USB#pragma udatabyte usb_device_state; Estados del dispositivo: Desconectado, Conectado, ...

USB_DEVICE_STATUS usb_stat; Flags globales del USB

byte usb_active_cfg; Valor de la configuración actual byte usb_alt_intf[MAX_NUM_INT]; Matriz para guardar los datos de la configuración actual

alterna para cada ID interfaz

4.4.5.3. Localizaciones de variables fijas del USB#pragma udata usbram4=0x400 Ver, usb4: 0x400-0x4FF(256-byte)

Sección A: Tabla del Buffer Descriptor - 0x400 - 0x4FF(max)- MAX_EP_NUMBER se define en autofiles\usbcfg.h

- BDT data type se define en system\usb\usbmmap.h#if(0 <= MAX_EP_NUMBER)

volatile far BDT ep0Bo; Endpoint #0 BD Out

volatile far BDT ep0Bi; Endpoint #0 BD In

#endif

#if(1 <= MAX_EP_NUMBER)volatile far BDT ep1Bo; Endpoint #1 BD Out

volatile far BDT ep1Bi; Endpoint #1 BD In

#endif

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 479/651

GUILLERMO DAVID HERRERO GONZÁLEZ

477

#if(2 <= MAX_EP_NUMBER)volatile far BDT ep2Bo; Endpoint #2 BD Out

volatile far BDT ep2Bi; Endpoint #2 BD In#endif

#if(3 <= MAX_EP_NUMBER)volatile far BDT ep3Bo; Endpoint #3 BD Out

volatile far BDT ep3Bi; Endpoint #3 BD In

#endif

#if(4 <= MAX_EP_NUMBER)volatile far BDT ep4Bo; Endpoint #4 BD Out

volatile far BDT ep4Bi; Endpoint #4 BD In

#endif

#if(5 <= MAX_EP_NUMBER)volatile far BDT ep5Bo; Endpoint #5 BD Out

volatile far BDT ep5Bi; Endpoint #5 BD In

#endif

#if(6 <= MAX_EP_NUMBER)volatile far BDT ep6Bo; Endpoint #6 BD Out

volatile far BDT ep6Bi; Endpoint #6 BD In

#endif#if(7 <= MAX_EP_NUMBER)

volatile far BDT ep7Bo; Endpoint #7 BD Out

volatile far BDT ep7Bi; Endpoint #7 BD In

#endif

#if(8 <= MAX_EP_NUMBER)volatile far BDT ep8Bo; Endpoint #8 BD Out

volatile far BDT ep8Bi; Endpoint #8 BD In

#endif

#if(9 <= MAX_EP_NUMBER)volatile far BDT ep9Bo; Endpoint #9 BD Out

volatile far BDT ep9Bi; Endpoint #9 BD In

#endif

#if(10 <= MAX_EP_NUMBER)volatile far BDT ep10Bo; Endpoint #10 BD Out

volatile far BDT ep10Bi; Endpoint #10 BD In

#endif

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 480/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

478

#if(11 <= MAX_EP_NUMBER)volatile far BDT ep11Bo; Endpoint #11 BD Out

volatile far BDT ep11Bi; Endpoint #11 BD In#endif

#if(12 <= MAX_EP_NUMBER)volatile far BDT ep12Bo; Endpoint #12 BD Out

volatile far BDT ep12Bi; Endpoint #12 BD In

#endif

#if(13 <= MAX_EP_NUMBER)volatile far BDT ep13Bo; Endpoint #13 BD Out

volatile far BDT ep13Bi Endpoint #13 BD In#endif

#if(14 <= MAX_EP_NUMBER)volatile far BDT ep14Bo; Endpoint #14 BD Out

volatile far BDT ep14Bi; Endpoint #14 BD In

#endif

#if(15 <= MAX_EP_NUMBER)volatile far BDT ep15Bo; Endpoint #15 BD Out

volatile far BDT ep15Bi; Endpoint #15 BD In#endifSección B: Espacio del Buffer del EP0- Dos areas definidas para el buffer:

A. CTRL_TRF_SETUP- Tamaño = EP0_BUFF_SIZE definido en autofiles\usbcfg.h- La estructura de datos detallada permite el direccionamiento directo de bits y bytes.

B. CTRL_TRF_DATA- Tamaño = EP0_BUFF_SIZE definido en autofiles\usbcfg.h- La estructura de datos detallada permite el direccionamiento directo de los 8 bytes

primeros.- Los dos tipos se definen en system\usb\usbdefs\usbdefs_ep0_buff.hvolatile far CTRL_TRF_SETUP SetupPkt;

volatile far CTRL_TRF_DATA CtrlTrfData;Sección C: Buffer CDC

#pragma udata usbram5a=0x500 //See Linker Script,usb5:0x500-#if defined(USB_USE_CDC)

volatile far unsigned char cdc_notice[CDC_INT_EP_SIZE];volatile far unsigned char cdc_data_rx[CDC_BULK_OUT_EP_SIZE];volatile far unsigned char cdc_data_tx[CDC_BULK_IN_EP_SIZE];

#endif#pragma udata

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 481/651

GUILLERMO DAVID HERRERO GONZÁLEZ

479

4.4.6. USBGEN.C: USB GENÉRICO

En este archivo se han creado todas las funciones de transferencia de los datosque desee el usuario en la clase genérica.

4.4.6.1. Incluye#include <p18cxxx.h>#include "system\typedefs.h"#include "system\usb\usb.h"

#ifdef USB_USE_GEN

4.4.6.2. Variables#pragma udatabyte usbgen_rx_len;

4.4.6.3. Declaraciones#pragma code

4.4.6.4. API del usuario

4.4.6.4.1. void USBGenInitEP(void)

USBGenInitEP inicializa Endpoints genéricos, buffer de los descriptores,estados máquina internos y variables. Hay que llamarla después de que el host hayaenviado una repuesta SET_CONFIGURATION.

Ver USBStdSetCfgHandler() en usb9.c como ejemplo.

void USBGenInitEP(void)

usbgen_rx_len = 0;

USBGEN_UEP = EP_OUT_IN|HSHK_EN; Activa 2 pipes de datos No hay que iniciar Cnt para las pipes de entrada.

Razón: El número de bytes enviados al host varía de una transacción a otra. Cnt tiene que ser igual al número exacto de bytes a transmitir en una transacción IN dada. Este número de bytes sólo seconoce una vez que los datos hayan sido enviados.

USBGEN_BD_OUT.Cnt = sizeof(usbgen_out); Fija el tamaño del buffer

USBGEN_BD_OUT.ADR = (byte*)&usbgen_out; Fija la dirección del buffer

USBGEN_BD_OUT.Stat._byte = _USIE|_DAT0|_DTSEN; Fija el estado

USBGEN_BD_IN.ADR = (byte*)&usbgen_in; Fija la dirección del buffer

USBGEN_BD_IN.Stat._byte = _UCPU|_DAT1; Fija el estado del buffer

end USBGenInitEP

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 482/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

480

4.4.6.4.2. void USBGenWrite(byte *buffer, byte len)

Precondición: mUSBGenTxIsBusy() tiene que devolver “falso”.El valor de ‘len’ tiene que ser igual o menor que USBGEN_EP_SIZE.

Para un Endpoint interrupción/bulk, el tamaño máximo del buffer es de64bytes.

Entrada: buffer: Puntero a la localización de inicio de los bytes de datos.

len: Número de bytes a transmitir.

Esta macro se utiliza para transferir datos de la memoria de datos.

Aplicación típica:

if(!mUSBGenTxIsBusy())USBGenWrite(buffer, 3);

void USBGenWrite(byte *buffer, byte len)

byte i;El valor de ‘len’ tiene que ser igual o menor que USBGEN_EP_SIZE. Esta comprobación fuerza

que se cumpla la precondición.if(len > USBGEN_EP_SIZE)

len = USBGEN_EP_SIZE;Copia de los datos del buffer del usuario al buffer de la ram-dual.

for (i = 0; i < len; i++)usbgen_in[i] = buffer[i];

USBGEN_BD_IN.Cnt = len;mUSBBufferReady(USBGEN_BD_IN);

end USBGenWrite

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 483/651

GUILLERMO DAVID HERRERO GONZÁLEZ

481

4.4.6.4.3. byte USBGenRead(byte *buffer, byte len)

Precondición: El valor del argumento de entrada ‘len’ tiene que ser menor queel tamaño máximo del Endpoint responsable de la recepción del informe de datos delhost para la clase HID.

El argumento de entrada ‘buffer’ debe apuntar al área de buffer que seamayor o igual que ‘len’.

Salida: El número de bytes copiados al buffer.

Efectos secundarios: el acceso a la variable pública usbgen_rx_len se actualizacon el número de bytes copiados al buffer. Una vez llamado USBGenRead, larecuperación de usbgen_rx_len se puede hacer llamando la macromUSBGenGetRxLength().

USBGenRead copia un string de los bytes recibidos a través de un EndpointOUT a una localización especificada por el usuario. Es una función que espera a recibir los datos si no están disponibles. Devuelve ‘0’ para notificar que no hay datosdisponibles.

Nota: Si el número actual de bytes recibidos es mayor que el número de bytesesperados (len), sólo se copian el número de bytes esperados al buffer.

Si el número de bytes recibidos es menor que el número de bytesesperados (len), se copian los bytes recibidos al buffer.

byte USBGenRead(byte *buffer, byte len)

usbgen_rx_len = 0;

if(!mUSBGenRxIsBusy())

Ajusta el número de bytes que se esperan al número de bytes recibidos.if(len > USBGEN_BD_OUT.Cnt)

len = USBGEN_BD_OUT.Cnt;Copia los datos de la ram-dual al buffer del usuario

for(usbgen_rx_len = 0; usbgen_rx_len < len; usbgen_rx_len++)buffer[usbgen_rx_len] = usbgen_out[usbgen_rx_len];

Prepara la ram-dual para la próximo transacción OUT.USBGEN_BD_OUT.Cnt = sizeof(usbgen_out);mUSBBufferReady(USBGEN_BD_OUT);

end if

return usbgen_rx_len;

end USBGenRead

#endif def USB_USE_GEN

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 484/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

482

4.4.7. MSD.C: USB ALMACENAMIENTO MASIVO

En este archivo se han creado todas las funciones de transferencia de los datosque desee el usuario en la clase MSD.

4.4.7.1. Incluye#include <p18cxxx.h>#include "system\typedefs.h"#include "system\usb\usb.h"#include<string.h>

#ifdef USB_USE_MSD

4.4.7.2. Variables#pragma udatabyte MSD_State; Toma valores MSD_WAIT, MSD_DATA_IN o

SD_DATA_OUTUSB_MSD_CBW gblCBW;byte gblCBWLength;SDCSTATE gblFlag;RequestSenseResponse gblSenseData;byte *ptrNextData;

El número de bloques o la longitud son globales porque para cada comandoREAD_10 y WRITE_10 se tiene que verificar que el último LBA es menor quegblNumBLKS.

DWORD gblNumBLKS=0x00,gblBLKLen=0x00;

Respuesta estándar para saber que commando está en la ROM.

const rom InquiryResponse inq_resp = 0x00, Dispositivo periférico conectado, acceso directo al bloque del

0x80, dispositivo removible.

0x04, versión = 00=> no cumple ningún estándar, 4=> SPC-2

0x02, respuesta en formato especificado por SPC-2

0x20, n-4 = 36-4=32= 0x20

0x00, sccs etc.

0x00, bque=1 y cmdque=0, indica que la cola simple 00 estáobsoleta,

pero en el caso de otro dispositivo, usamos 000x00, 00 obsoleto, 0x80 para tareas básicas de cola

"Microchp", este es el T10 asignado ID del fabricante

"Mass Storage ","0001"

;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 485/651

GUILLERMO DAVID HERRERO GONZÁLEZ

483

4.4.7.3. Protoripos privadosvoid MSDCommandHandler(void);void MSDInquiryHandler(void);void MSDReadCapacityHandler(void);void MSDReadHandler(void);void MSDWriteHandler(void);void MSDModeSenseHandler(void);void MSDMediumRemovalHandler(void);void MSDRequestSenseHandler(void);void MSDTestUnitReadyHandler(void);void MSDVerifyHandler(void);void MSDStopStartHandler(void);

byte IsMeaningfulCBW(void);byte IsValidCBW(void);void PrepareCSWData(void);void SendData(byte*, byte);void SendCSW(void);void ResetSenseData(void);void MSDDataIn(void);void MSDDataOut(void);

extern SDC_Error MediaInitialize(SDCSTATE*);extern void SocketInitialize(void);

extern SDC_Error SectorRead(dword, byte*);extern SDC_Error SectorWrite(dword, byte*);extern SDC_Error CSDRead(void);extern int DetectSDCard (void);extern byte IsWriteProtected(void);

4.4.7.4. Declaraciones#pragma code

4.4.7.5. Respuestas específicas de la clase

4.4.7.5.1. void USBCheckMSDRequest(void)

Esta rutina une el RESET estándar y el comando de repuesta recibido en el EP0de control GET_MAX_LUN.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 486/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

484

4.4.7.5.2. void ProcessIO(void)

Precondición: Se han llamado MSDInitEP() y SDCardInit().MSDInitEP() se llama desde USBStdSetCfgHandler(void)(usb9.c)

SDCardInit() se llama desde InitializeSystem() en main.c

Esta rutina se llama desde loop continuos de main.c.

Todos los comandos de transporte Bulk en el Endpoit 1 se unen aquí:MSD_State contiene el estado actual del módulo de almacenamiento masivo.

En el estado MSD_WAIT: Espera al bloque de comando de cubierta (CBW) delEndpoint1. Si se recibe un CBW válido y significativo, dependiendo del comandorecibido MSD_State cambia a MSD_DATA_IN si el dato se envía al host (para todos

comandos además del WRITE_10).MSD_DATA_OUT si el host está esperando a mandar datos (sólo en el caso de

WRITE_10). Al finalizar el comando de estado de transferencia de datos de cubierta(CSW) se envía llamando SendCSW().

4.4.7.5.3. void MSDInitEP(void)

Esta rutina se llama desde USBStdSetCfgHandler(void) inicializa Bulk-IN yBulk-OUT, los Endpoints MSD_BD_IN y MSD_BD_OUT Tamaño = 64B (Ver usbmmap.c y usbdefs_std_dsc.h para las definiciones de los Enspoints.

4.4.7.5.4. void SDCardInit(void)Efectos secundarios: gblFlag se actualiza de acuerdo con la Inicialización.

MSD_State se fija a MAD_WAIT.

Esta rutina se llama desde InitializeSystem() en main.c. Inicializa la tarjeta SD ysi tiene algún problema en la inicialización todos los LEDs se encienced. También fijaMSD_State = MSD_WAIT

4.4.7.5.5. void MSDCommandHandler(void)

Esta rutina se llama desde ProcessIO() cuando MSD_State=MSD_WAIT. Esta

función decodifica el comando CBW y actua consecuentemente. Si el CBW no estásoportado se fija el dato Sense, el estado de CSW se pone en comando fallido(bCSWStatus=01h).

4.4.7.5.6. void SendCSW(void)

Esta función envía el CSW y fija el estado a MSD_WAIT. También cambiaMSD_BD_OUT para que apunte a msd_csw (estructura para leer CSW). Notar que estoha cambiado en el estado MSD_DATA_OUT para que apunte a msd_buffer para quelea datos del host.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 487/651

GUILLERMO DAVID HERRERO GONZÁLEZ

485

4.4.7.5.7. void SendData(byte* dataAddr, byte dataSize)

Esta función envía “dataSize” bytes de datos empezando en la dirección“dataAddr”.

4.4.7.5.8. void MSDDataIn(void)

Esta función envía 512B de datos en el msd_buffer al host en trozos de 64Busando MSD_BD_IN. Hay varias condiciones; cuando los datos que se envían sonmenores que MSD_EP:SIZE y cuando se comprueba la condición de error

bCSWStatus=0x01. En caso de error 0 se llenan y se envían los datos del tamañoesperado por el host dCBWDataTransferLength is sent.

4.4.7.5.9. void IsValidCBW()

Comprueba si el CBW es válido de acuerdo con las especificaciones de la clasealmacenamiento masivo. Se considera un CSW válido si:

1. Se recibe en estado MS_WAIT2. La longitud de CBW es 1Fh (MSD_CBW_SIZE)3. dCBWSignature es igual a 0x43425355h

4.4.7.5.10. void IsMeaningfulCBW()

Comprueba si el CBW recibido es significativo de acuerdo con lasespecificaciones de la clase almacenamiento masivo. Un CSW se considera

significativo si:1. No se fijan bits reservados2. bCBWLUN contiene un LUN válido soportado por el dispositivo3. bCBWCBLength y CBWCB tienen concordancia con

bInterfaceSubClass

4.4.7.5.11. void PrepareCSWData()

Esto prepara el dato de estado del CSW copiando el dCSWTag del CBWTage yfijando la firma de válido CSW=53425355h

4.4.7.5.12. void MSDInquiryHandler(void)Esta función prepara la repuesta del comando INQUIRY. La repuesta se copia

de la ROM al msd_buffer y CSWStatus, se fijan los valores CSWDataResidue.

4.4.7.5.13. void ResetSenseData(void)

Esta rutina resetean el dato Sense, inicializando la estructuraRequestSenseResponse gblSenseData.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 488/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

486

4.4.7.5.14. void MSDReadCapacityHandler()

Esta función procesa el dato del registro CSD (leido durante la inicialización dela tarjeta SD) para encontrar el número de bloques (gblNumBLKS) y la longitud del bloque (gblBLKLen). Este dato se copia a msd_buffer y se prepara para responder alcomando Leer Capacidad.

4.4.7.5.15. void MSDReadHandler(void)

Decodifica el CBWCB del comando READ(10) para calcular el inicio LBA y lalongitud de la transferencia (número de bloques a leer). Leyendo bloques de 512B dedatos de la tarjeta SD en msd_buffer (llamando SectorRead). Si se leesatisfactoriamente (sdcValid), los datos se envían al host en trozos de 64B(MSD_IN_EP_SIZE) (ver MSDDataIN()). Esto se repite para el número de bloques

TransferLength. En el caso de error bCSWStatus se fija a 0x01 y dato Sense con laclave de dato NOT READY y se prepara el código apropiado ASC, ASCQ.

4.4.7.5.16. void MSDDataOut(void)

Efectos secundarios: MSD_BD_OUT.ADR se incrementa conMSD_OUT_EP_SIZE (para leer los 64B siguientes en msd_buffer).

Esta función lee 64B (MSD_OUT_EP_SIZE) de EP1 OUT MSD_BD_OUT.

4.4.7.5.17. void MSDWriteHandler()

Decodifica el CBWCB del comando WRITE(10) para calcular el comienzo deLBA y la longitud de la transferencia (número de bloques que se escriben). Lee los bloques TransferLength de datos, 1 bloque=512B en un momento en msd_buffer. Losdatos del host, 64B en MSD_BD_OUT, se reciben en el msd_buffer (ver MSDDataOut()).

El puntero MSD_BD_OUT.ADR se manipula para llenar los 512B delmsd_buffer y cuando todos los datos se escriben en la tarjeta SD llamando la funciónSector Write(…) (ver sdcard.c). En caso de error bCSWStatus se fija a 0x01 y datoSense con la clave de dato NOT READY se prepara el código apropiado ASC, ASCQ.

4.4.7.5.18. void MSDRequestSenseHandler(void)

Esta función prepara el Dato Sense para responder al comando Respuesta Sense.El contenido de la estructura RequestSenseResponse se copia a msd_buffer y se fija unsatisfactorio bCSWStatus=0x00.

4.4.7.5.19. void MSDModeSenseHandler()

Esta función prepara para responder al comando Modo Sense. Se implementauna respuesta básica en esta versión del código 00h y 0x03 es el tamaño del dato (en

bytes) que sigue.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 489/651

GUILLERMO DAVID HERRERO GONZÁLEZ

487

4.4.7.5.20. void MSDMediumRemovalHandler()

Esta función prepara la respuesta al comando Prevent Allow Medium Removal. No se espera una respuesta de datos sólo se espera un CSW con comando de ejecuciónde estado. Como no se puede controlar la retirada del medio, repondemos con unSuccess CSW.

4.4.7.5.21. void MSDTestUnitReadyHandler()

Esta función prepara la respuesta al comando Test Unit Ready. No se esperarespuesta de datos, sólo se envía un CSW basado en el estado actual de la tarjeta SD sefija un valor de estado de error o de satisfactorio.

4.4.7.5.22. void MSDVerifyHandler()

Esta función prepara la respuesta al comando Verify. No se espera respuesta dedatos, respondemos con un CSW satisfactorio. El comando no se procesa en estaversión del código.

4.4.7.5.23. void MSDStopStartHandler()

Esta función prepara la respuesta al comando Start Stop Unit. No se esperarespuesta de datos, respondemos con un CSW satisfactorio. El comando no se procesaen esta versión del código.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 490/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

488

4.4.8. CDC.C: USB DISPOSITIVO DE COMUNICACIÓN

En este archivo se han creado todas las funciones de transferencia de los datosque desee el usuario en la clase CDC.

4.4.8.1. Incluye#include <p18cxxx.h>#include "system\typedefs.h"#include "system\usb\usb.h"#ifdef USB_USE_CDC

4.4.8.2. Variables

#pragma udatabyte cdc_rx_len; Longitud total rx

byte cdc_trf_state; Estados definidos en cdc.h

POINTER pCDCSrc; Puntero dedicado a la fuente

POINTER pCDCDst; Puntero dedicado al destino byte cdc_tx_len; Longitud total tx byte cdc_mem_type; _ROM, _RAM

LINE_CODING line_coding; Buffer para almacenar líneas de información

CONTROL_SIGNAL_BITMAP control_signal_bitmap;

SEND_ENCAPSULATED_COMMAND yGET_ENCAPSULATED_RESPONSE se necesitan para responder de acuerdo a lasespecificaciones CDC. Sin embargo, realmente no se empieza a usar aquí, se utiliza un

buffer por comodidad.

#define dummy_length 0x08 byte dummy_encapsulated_cmd_response[dummy_length];

4.4.8.3. Declaraciones

#pragma code

4.4.8.4. Respuestas específicas de la clase

4.4.8.4.1. void USBCheckCDCRequest(void)

Esta rutina chequea el paquete de datos setup para ver si este sabe comomanipularlo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 491/651

GUILLERMO DAVID HERRERO GONZÁLEZ

489

4.4.8.5. Api d el Usuar io

4.4.8.5.1. void CDCInitEP(void)CDCInitEP inicializa los Endpoints CDC, buffer descriptores, estados internos

máquina y variables. Se tiene que llamar después de que el host haya enviado unarepuesta SET_CONFIGURATION. Ver USBStdSetCfgHandler() en usb9.c paraejemplos.

4.4.8.5.2. byte getsUSBUSART(char *buffer, byte len)

Precondición: El valor del argumento de entrada ‘len’ tiene que ser menor queel tamaño máximo del Endpoint responsable de la recepción de datos bulk del host parala clase CDC.

El argumento de entrada ‘buffer’ tiene que apuntar a un área mayor o igual queel tamaño especificado por ‘len’.

Entrada: Buffer: Puntero a donde se guardan los datos recibidos.

len: El número de bytes esperados.

Salida: El número de bytes copiados al buffer.

Efectos secundarios: Se actualiza la variable de acceso público cdc_rx_len conel número de bytes copiados al buffer. Para recuperar esta variable llamamos a la macromCDCGetRxLength().

getsUSBUSART copia un string de bytes recibidos a través del Endpoint OUTCDC Bulk a una localización especificada por el usuario. Es una función de no bloqueo.

No espera a los datos si no están disponibles. Devuelve un ‘0’ para notificar que no haydatos disponibles.

Nota: Si el número actual de bytes recibidos es mayor que el número de bytesesperados (len), sólo se copian el número de bytes esperados. En cambio, si es menor elnúmero de los recibidos, se copian todos.

4.4.8.5.3. void putsUSBUSART(char *data)

Precondición: cdc_trf_state tiene que estar en el estado CDC_TX_READY.

El string de caracteres que apunta ‘data’ tiene que ser igual o menor de255bytes.

Entrada: data: Puntero a un string de datos terminado con nulo. Si no seencuentra, se envían 255bytes al host.

putsUSBUSART escribe un string de datos al USB incluyendo caracteres nulos.Utilizar esta versión, ‘puts’, para transferir datos localizados en la memoria de datos.

Nota: El mecanismo de transferencia para dispositivo-a-host (put) es másflexible que el de host-a-dispositivo (get). Puede manipular un string de datos mayor que el tamaño máximo del Endpoint In bulk. Se utiliza un estado máquina para

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 492/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

490

transferir un long string de datos a través de múltiples transacciones USB. Ver CDCTxService() para más detalles.

4.4.8.5.4. void putrsUSBUSART(const rom char *data)

Precondición: cdc_trf_state tiene que estar en el estado CDC_TX_READY.

El string de caracteres que apunta ‘data’ tiene que ser igual o menor de255bytes.

Entrada: data: Puntero a un string de datos terminado con nulo. Si no seencuentra, se envían 255bytes al host.

putrsUSBUSART escribe un string de datos al USB incluidos los caracteresnulos. Utilizar esta versión, ‘puts’, para transferir datos localizados en la memoria de

programa.Nota: El mecanismo de transferencia para dispositivo-a-host (put) es más

flexible que el de host-a-dispositivo (get). Puede manipular un string de datos mayor que el tamaño máximo del Endpoint In bulk. Se utiliza un estado máquina paratransferir un long string de datos a través de múltiples transacciones USB. Ver CDCTxService() para más detalles.

4.4.8.5.5. void CDCTxService(void)

CDCTxService une las transacciones dispositivo-a-host. Hay que llamar a estafunción una vez por cada loop del programa Main.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 493/651

GUILLERMO DAVID HERRERO GONZÁLEZ

491

4.4.9. HID.C: USB INTERFAZ CON HUMANOS

En este archivo se han creado todas las funciones de transferencia de los datosque desee el usuario en la clase HID.

4.4.9.1. Incluye#include <p18cxxx.h>#include "system\typedefs.h"#include "system\usb\usb.h"

#ifdef USB_USE_HID

4.4.9.2. Variables#pragma udatabyte idle_rate;byte active_protocol; [0] Protocolo de inicio [1] Protocolo de informe byte hid_rpt_rx_len;

4.4.9.3. Prototipos privadosvoid HIDGetReportHandler(void);void HIDSetReportHandler(void);

4.4.9.4. Declaraciones

#pragma code

4.4.9.5. Respuestas específicas de la clase

4.4.9.5.1. void USBCheckHIDRequest(void)

Esta rutina chequea el paquete de datos específico para ver si sabe comomanipularlo.

4.4.9.6. API del usuario

4.4.9.6.1. void HIDInitEP(void)

HIDInitEP inicializa los Endpoints HID, buffer descriptores, estados internosmáquina y variables. Se tiene que llamar después de que el host haya enviado unarepuesta SET_CONFIGURATION. Ver USBStdSetCfgHandler() en usb9.c paraejemplos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 494/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

492

4.4.9.6.2. void HIDTxReport(char *buffer, byte len)

Precondición: mHIDTxIsBusy() tiene que devolver falso. El valor de ‘len’ tieneque ser menor o igual que HID_INT_IN_EP_SIZE. Para un Endpoint interrupción, eltamaño del buffer máximo es de 64bytes.

Entrada: buffer: Puntero al comienzo de la localización de bytes de datos.

len: Número de bytes que se van a transferir.

Utilizar esta macro para tranferir datos localizados en la memoria de datos.

Aplicación típica:

if(!mHIDTxIsBusy())HIDTxReport(buffer, 3);

4.4.9.6.3. byte HIDRxReport(char *buffer, byte len)

Precondición: El valor del arguemento de entrada ‘len’ tiene que ser menor queel tamaño máximo del Endpoint responsable de la recepción de datos del host USB parala clase HID. El argumento de entrada ‘buffer’ tiene que apuntar a un área mayor oigual al tamaño especificado por ‘len’.

Entrada: buffer: Puntero al lugar donde se guardan los datos recibidos.

len: Número de bytes que se esperan.

Salida: Número de bytes copiados al buffer.

Efectos secundarios: Se actualiza la variable de acceso público hid_rpt_rx_lencon el número de bytes copiados al buffer. Para recuperar esta variable llamamos a lamacro mHIDGetRptRxLength().

HIDRxReport copia un string de bytes recibidos a través del Endpoint OUT HIDa una localización especificada por el usuario. Es una función de no bloqueo. No esperaa los datos si no están disponibles. Devuelve un ‘0’ para notificar que no hay datosdisponibles.

Nota: Si el número actual de bytes recibidos es mayor que el número de bytesesperados (len), sólo se copian el número de bytes esperados. En cambio, si es menor elnúmero de los recibidos, se copian todos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 495/651

GUILLERMO DAVID HERRERO GONZÁLEZ

493

4.4.10. MAIN.C

Este es el archivo de inicio. En él se incluyen las funciones necesariar paraestablecer la comunicación USB y las relativas a la aplicación del usuario.

4.4.10.1. Incluye#include <p18cxxx.h>

#include "system\typedefs.h" Requerido

#include "system\usb\usb.h" Requerido

#include "io_cfg.h" Requerido

#include "system\usb\usb_compile_time_validation.h" Opcional

#include "user\user_mouse.h" Modificable

4.4.10.2. Variables#pragma udata

4.4.10.3. Prototipos privadosstatic void InitializeSystem(void);void USBTasks(void);

4.4.10.3.1. Remapeo de vectoresextern void _startup (void); #pragma code _RESET_INTERRUPT_VECTOR = 0x000800void _reset (void) _asm goto _startup _endasm

4.4.10.3.2. Declaraciones#pragma code

void main(void)void main(void)

InitializeSystem();while(1)USBTasks() USB Tasks

ProcessIO(); Aqui se llama al programa del usuario

end while end main

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 496/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

494

static void InitializeSystem(void)

InitializeSystem es una rutina centralizada de inicialización. Todas las rutinas deinicialización se llaman desde aquí.

static void InitializeSystem(void)

ADCON1 |= 0x0F; Por defecto todos los pines en digital

#if defined(USE_USB_BUS_SENSE_IO)tris_usb_bus_sense = INPUT_PIN; Ver io_cfg.h

#endif

#if defined(USE_SELF_POWER_SENSE_IO)tris_self_power = INPUT_PIN;#endif

mInitializeUSBDriver(); Ver usbdrv.h

UserInit(); inicialización del usuario

end InitializeSystem

void USBTasks(void)

Precondición: Se tiene que haber llamado InitializeSystemDa vueltas dando servicio a las tareas USB.

void USBTasks(void)

Da servicio al Hardware

USBCheckBusStatus(); se tiene que utilizar el método obtener

if(UCFGbits.UTEYE!=1)USBDriverService(); Método interrupción u obtener

end USBTasks

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 497/651

GUILLERMO DAVID HERRERO GONZÁLEZ

495

4.4.11. INTERRUPT.C

En este archivo se declaran la parte del programa que se ejecuta durante unainterrupción.

4.4.11.1. Incluye#include <p18cxxx.h>#include "system/typedefs.h"#include "system/interrupt/interrupt.h"

4.4.11.2. Vectores de interrupción#pragma code high_vector=0x08void interrupt_at_high_vector(void) _asm goto high_isr _endasm

#pragma code

#pragma code low_vector=0x18void interrupt_at_low_vector(void) _asm goto low_isr _endasm

#pragma code

4.4.11.3. Declaraciones

4.4.11.3.1. void high_isr(void)#pragma interrupt high_isrvoid high_isr(void)

4.4.11.3.2. void low_isr(void)void low_isr(void)#pragma code

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 498/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 499/651

5. LENGUAJE DE PROGRAMACIÓN

VISUAL BASIC

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 500/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 501/651

499

5. LENGUAJE DE PROGRAMACIÓN VISUAL BASIC

5.1. I NTRODUCCIÓN

El lenguaje de programación BASIC (Beginner's All purpose SymbolicInstruction Code ) nació en el año 1964 como una herramienta destinado a principiantes,

buscando una forma sencilla de realizar programas, empleando un lenguaje casi igual alusado en la vida ordinaria ( en inglés), y con instrucciones muy sencillas y escasas.Teniendo en cuenta el año de su nacimiento, este lenguaje cubría casi todas lasnecesidades para la ejecución de programas. Téngase en cuenta que las máquinasexistentes en aquella época estaban estrenando los transistores como elementos de

conmutación, los ciclos de trabajo llegaban a la impensable cifra de 10.000 por segundoy la memoria no pasaba de unos pocos Khz. en toroides de ferrita.

Los autores fueron los científicos John G. Kemeny (Budapest, 1926 – USA1992) y Thomas E. Kurtz (Illinois 1928) Su trabajo original se llamó True BASIC.

La evolución del BASIC por los años 70 fue escasa, dado el auge que tomaronen aquella época lenguajes de alto nivel como el FORTRAN y el COBOL. En 1978 sedefinió una norma para unificar los Basics existentes creándose la normativa BASICSTANDARD

Con la aparición de los primeros ordenadores personales, dedicadoscomercialmente al usuario particular, allá por la primera mitad de los ochenta, el BASIC

resurgió como lenguaje de programación pensado para principiantes, y muchos de estos pequeños ordenadores domésticos lo usaban como único sistema operativo (Sinclair,Spectrum, Amstrad)

Con la popularización del PC, salieron varias versiones del BASIC quefuncionaban en este tipo de ordenadores (Versiones BASICA, GW-BASIC), pero todasestas versiones del BASIC no hicieron otra cosa que terminar de rematar este lenguaje.Los programadores profesionales no llegaron a utilizarlo, habida cuenta de lasdesventajas de este lenguaje respecto a otras herramientas (PASCAL, C, CLIPPER). ElBASIC con estas versiones para PC llegó incluso a perder crédito entre los

profesionales de la informática.

Las razones para ello eran obvias:Ê No era un lenguaje estructurado.

Ê No existían herramientas de compilación fiables.

Ê No disponía de herramientas de intercambio de información.

Ê No tenía librerías.

Ê No se podía acceder al interior de la máquina.

Ê Un largo etcétera de desventajas respecto a otros lenguajes de programación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 502/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

500

Tal fue ese abandono por parte de los usuarios, que la aparición del Quick-BASIC de Microsoft, una versión ya potente del BASIC, que corregía casi todos los

defectos de las versiones pasó prácticamente inadvertida, a no ser porque las últimasversiones del sistema operativo MS-DOS incluían una versión de Quick-BASIC algorecortada (Q-Basic) como un producto mas dentro de la amplia gama de ficherosejecutables que acompañan al sistema operativo, y aprovecha de él el editor de textos(Cada vez que se llama al EDIT estamos corriendo el editor del Q-Basic).

Esta versión del popular BASIC ya es un lenguaje estructurado, lo que permitecrear programas modularmente, mediante subrutinas y módulos, capaz de crear

programas ya competitivos con otros lenguajes de alto nivel. Sin embargo llegaba tarde, pues los entornos MS-DOS estaban ya superados por el entorno gráfico Windows.

Sin embargo algo había en el BASIC que tentaba a superarse: su gran sencillez

de manejo. Si a esto se le añade el entorno gráfico Windows, el aprovechamiento almáximo de las posibilidades de Windows en cuanto a intercambio de información, desus librerías, de sus drivers y controladores, manejo de bases de datos, etc. el productoresultante puede ser algo que satisfaga todas las necesidades de programación en elentorno Windows. La suma de todas estas cosas es VISUAL - BASIC. Esta herramientaconserva del BASIC de los años 80 únicamente su nombre y su sencillez, y tras sulanzamiento al mercado, la aceptación a nivel profesional hizo borrar por fin el "malnombre" asociado a la palabra BASIC.

Actualmente (2001) se está comercializando la versión 6.0 de este producto.Desde su salida al mercado, cada versión supera y mejora la anterior. Dados los buenos

resultados a nivel profesional de este producto, y el apoyo prestado por el fabricante para la formación de programadores, Visual-Basic se ha convertido en la primeraherramienta de desarrollo de aplicaciones en entorno Windows.

Es obligado decir sin embargo, que sigue siendo BASIC. No se puedencomparar sus prestaciones con otros lenguajes cuando deseamos llegar al fondo de lamáquina y controlar uno a uno sus registros. No es ese el fin perseguido con VB y si esnecesario llegar a esas precisiones será necesario utilizar otro lenguaje que permita bajar el nivel de programación. (Visual-C). o realizar librerías (DLLs) que lo hagan. En lamayor parte de las aplicaciones, las herramientas aportadas por VB son mas quesuficiente para lograr un programa fácil de realizar y de altas prestaciones.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 503/651

GUILLERMO DAVID HERRERO GONZÁLEZ

501

5.2. C ARACTERÍSTICAS G ENERALES D E V ISUAL B ASIC

Visual Basic es una herramienta de diseño de aplicaciones para Windows, en laque estas se desarrollan en una gran parte a partir del diseño de una interface gráfica. Enuna aplicación Visual Basic, el programa está formado por una parte de código puro, yotras partes asociadas a los objetos que forman la interface gráfica.

Es por tanto un término medio entre la programación tradicional, formada por una sucesión lineal de código estructurado, y la programación orientada a objetos.Combina ambas tendencias. Ya que no podemos decir que VB pertenezca por completoa uno de esos dos tipos de programación, debemos inventar una palabra que la defina:PROGRAMACION VISUAL.

La creación de un programa bajo Visual Basic lleva los siguientes pasos:Ê Análisis. Es el estudio de las necesidades que han dado origen a la

creación de ese programa. Es lo que se se llama Análisis de la aplicación.Es la primera fase que debe tener siempre un programa y es también lamás olvidada entre los programadores noveles. Una aplicación no seinicia con el teclado, sino sobre un papel.

Ê Creación de un interface de usuario. Este interface será la principal víade comunicación hombre máquina, tanto para salida de datos como paraentrada. Será necesario partir de una o varias ventanas (Formularios) alas que le iremos añadiendo los controles necesarios.

Ê Definición de las propiedades de los controles. Se dará la forma, posición, y todas las características necesarias a los controles quehayamos colocado en ese formulario. Estas propiedades determinarán laforma estática de los controles, es decir, como son los controles y paraqué sirven.

Ê Generación del código asociado a los eventos que ocurran a estoscontroles. A la respuesta a estos eventos (clic, doble clic, una tecla

pulsada, etc.) le llamamos Procedimiento, y deberá generarse de acuerdoa las necesidades del programa.

Ê Generación del código del programa. Un programa puede hacersesolamente con la programación de los distintos procedimientos queacompañan a cada objeto. Sin embargo, VB ofrece la posibilidad deestablecer un código de programa separado de estos eventos. Este código

puede introducirse en unos bloques llamados Módulos, en otros bloquesllamados Funciones, y otros llamados Procedimientos. EstosProcedimientos no responden a un evento acaecido a un control oformulario, sino que responden a un evento producido durante laejecución del programa.

No es necesario entender de momento lo anterior. Visual Basic introduce unconcepto nuevo de programación, y es necesario cambiar hasta el argot del

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 504/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

502

programador. Posiblemente se le habrán acumulado demasiados términos de una solavez. Es normal. A poco que siga leyendo verá las cosas mas claras cuando se explique

una por una.

5.3. T IPOS DE DATOS

5.3.1. CONSTANTES

Una constante es un valor que no cambia durante la ejecución de un programa.Se admiten valores decimales (base 10), hexadecimales (base 16) y octales (base 8). Unnúmero hexadecimal va precedido por “&H” y un número octal por “&O” (letra “O”, nonúmero “0”).

Una constante de caracteres o constante alfanumérica es una cadena decaracteres encerrada entre comillas dobles (“”).

5.3.2. VARIABLES

Una variable contiene un valor que puede ser modificado a lo largo de laejecución de una aplicación.

Cada variable tiene atributos propios como:

Ê Nombre: es el nombre que se utiliza para referirnos a su contenido en laaplicación.

Ê Tipo: el tipo determina qué clase de valores se pueden almacenar encada variable.

Ê Ámbito: especifica en qué parte de la aplicación es conocida la variabley por lo tanto puede ser utilizada.

5.3.2.1. Nombre

El nombre de una variable tiene que comenzar por una letra, puede tener hasta255 caracteres de longitud y debe ser único dentro de su ámbito.

Los caracteres pueden ser letras, dígitos, el carácter subrayado (´_´) y los

caracteres de declaración de tipo de la variable (%, &, !, #, @ y $). Los caracteres dedeclaración de tipo, cuando se utilicen, tienen que ocupar la última posición.

No se pueden utilizar el punto (´.´) ni otros que tienen un significado especial enVB (por ejemplo, los paréntesis). El nombre de una variable no puede ser una palabrareservada de VB (como For, Caption, Long, And...)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 505/651

GUILLERMO DAVID HERRERO GONZÁLEZ

503

5.3.2.2. Tipo

Todas las variables tienen un tipo de dato que determina la clase de datos que pueden almacenar:

TIPO DESCRIPCIONCAR-

TIPORANGO

Integer Entero (2 bytes) % -32768 a 32767

Long Entero largo (4 bytes) & -2147483648 a 2147483647

Single Coma flotante (4 bytes) ! -3.40E+38 a 3.40E+38

Double Coma flotante (8 bytes) # -1.79D+308 a 1.79D+308

Currency Número c/ punto decimal fijo @ ±9223372036854775807

String Cadena de caracteres fija (no) Hasta 64Kbytes aprox.

String Cadena de c. Variable $ Hasta 231 caracteres aprox.

Byte Carácter (1 byte) (no) 0 a 255

Boolean Boolean (2 bytes) (no) True o False

Date Fecha y Hora (8 bytes) (no) 1/1/100 a 3 1/12/9999

Object Referencia a un objeto (no) Cq. Tipo de dato Object

Variant Tipo por omisión (no) Numérico = Double

Cadena = String

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 506/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

504

5.3.2.3. Ámbito

Se entiende por ámbito o alcance de una variable el espacio de la aplicacióndonde ésta es visible y, por lo tanto, se puede utilizar.

La figura siguiente indica, de forma resumida, los lugares donde se puededeclarar una variable:

Ê Aplicación: Variables utilizables por todos los módulos (declaraciónPublic en cualquier módulo).

Ê Formulario: Variables utilizadas dentro del módulo (declaración Dim oPrivate en el módulo).

Ê Funciones y Procedimientos: Variables locales (Dim o Static).

5.3.3. OPERADORES

La tabla que se muestra a continuación presenta el conjunto de operadoressoportados, ordenados de mayor a menor prioridad cuando varios intervienen en unamisma expresión:

TIPO OPERACIÓN OPERADOR

Aritméticos

Exponenciación

Cambio de signo

Multiplicación, división

División entera

Resto de div. entera

Suma, resta

^

-

* , /

\

Mod

+ , -

Concatenación Enlazar cadenas &

Relacional Igual, distinto, menor, mayor, ... =, <>, <, >, ...

OtrosComparar dos cadenas de texto

Comparar dos referencias a objetos

Like

Is

Lógico

Negación

And

Or inclusiva (Or)

Or Exclusiva (Xor)

Equivalencia (opuesto a Xor)

Implicación

Not

And

Or

Xor

Eqv

Imp

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 507/651

GUILLERMO DAVID HERRERO GONZÁLEZ

505

5.3.4. SENTENCIAS DE CONTROL

Las sentencias de control, denominadas también estructuras de control, permitentomar decisiones y realizar un proceso repetidas veces.

Visual Basic dispone, de forma concreta, de las siguientes estructuras de control:

Ê If ... Then

Ê If ... Then ... Else

Ê Select Case

Ê For ... Next

Ê While ... Wend

Ê Do ... LoopÊ Goto, With ... End With

Sintaxis: Cualquier expresión entre corchetes - []- es opcional.

De las expresiones entre llaves -- se puede elegir una, la necesaria según elcaso.

5.3.4.1. Sentencia If

Permite tomar una decisión referente al camino a seguir o acción a ejecutar enun proceso, basándose en el resultado booleano (verdadero o falso) de una condición.

Su sintaxis es:If condición Thenacción1[Elseacción2]

Donde condición debe ser una expresión numérica, relacional o lógica (elresultado que se obtiene al evaluar la condición es Trae o False, y acción 1 | acción2 son una o más sentencias separadas por “:”.

Si la condición es verdadera, se ejecuta la acción 1 y si es falsa se ejecuta laacción2, lógicamente en el caso de que sea especificada.

En cualquier caso, la ejecución continúa con la siguiente sentencia ejecutable.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 508/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

506

5.3.4.2. Sentencia Select

La sentencia Select permite ejecutar una de varias acciones en función del valor de una expresión. Es una alternativa a la sentencia If cuando lo que se necesita escomparar la misma expresión con diferentes valores.

Su sintaxis es:

Select Case expr-test

Case lista-1

[sentencias-1]

[Case lista-2

[sentencias-2]] ...

[Case Else

[sentencias-n]] End Select

Donde expr-test es una expresión numérica o alfanumérica y las expresioneslista-1, lista-2 pueden tener cualquiera de las formas siguientes:

expresión [, expresión] ...expresión To expresiónIs operador-de-relacion expresión

O una combinación de las anteriores separadas por comas.

5.3.4.3. Sentencia For…Next

La sentencia For da lugar a un bucle, y permite ejecutar un conjunto desentencias cierto número de veces. Su sintaxis es:

For variable = expr-1 To expr-2 [Step expr-3][sentencias][Exit For][sentencias]Next [variable [,variable] ...]

La sentencia Exit For permite salir del bucle For...Next antes de que éste finalicenormalmente.

La/s variable/s en la sentencia Next pueden ser omitidas, en cuyo caso lasentencia Next actuará sobre la sentencia For más reciente (aunque se recomiendaincluir las variables, evitando confusiones).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 509/651

GUILLERMO DAVID HERRERO GONZÁLEZ

507

5.3.4.3.1. Funcionamiento de la Sentencia For:

Cuando se ejecuta una sentencia For en la que el valor deexpr-3

es positivo o nose ha especificado, primero se asigna el valor de expr-1 a la variable y a continuación secomprueba si la variable es mayor que la expr-2, en cuyo caso se salta el cuerpo del

bucle y se continúa en la sentencia que esté a continuación de Next.

En otro caso, se ejecutan las líneas de programa que haya entre la sentencia For y la sentencia Next.

Por último, la variable se incrementa en el valor de la expr-3, o en 1 unidad (por defecto si Step no se especifica), volviéndose a efectuar la comparación entre la variabley expr-2, y así sucesivamente.

5.3.4.4. Sentencia While…Wend Una sentencia o bucle While repite la ejecución de un conjunto de sentenciasespecificado mientras una determinada condición sea cierta. La condición se verificaantes de ejecutar el conjunto de sentencias. Su sintaxis es:While condición [sentencias] Wend

Donde condición es cualquier expresión de tipo numérico, relacional o lógico.Al finalizar el bucle, se continúa la ejecución en la sentencia posterior a la

cláusula Wend.

5.3.4.4.1. Funcionamiento de la Sentencia While...WendLa ejecución de las sentencias de este tipo sucede así:

1. Se evalúa la condición.

2. Si el resultado de la evaluación es Falso, las sentencias que forman elcuerpo de While no se ejecutan y se pasa el control a la siguientesentencia en el código a Wend.

3. Si el resultado de la evaluación es Verdadero, se ejecutan las sentenciasque forman el cuerpo de While y el proceso descrito se repite

posteriormente desde el punto 1.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 510/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

508

5.3.4.5. Sentencia Do…LoopLa sentencia Do ... Loop proporciona una manera más flexible y estructurada de

realizar los bucles. Repite la ejecución de un conjunto de instrucciones mientras unacondición dada sea cierta o hasta que una condición dada sea cierta. La condición puedeser verificada antes o después de ejecutarse el conjunto de sentencias:

Formato 1:

Do [While|Until condición]

[sentencias]

[Exit Do][sentencias]

LoopFormato 2:

Do[sentencias]

[Exit Do][sentencias]

Loop [While|Until condición]

5.3.4.6. Sentencia Goto

Transfiere el control a una línea específica del código, identificada por unaetiqueta o nº de línea. Su sintaxis es:

Goto etiqueta|nº de líneaUn uso abusivo de esta sentencia puede dar lugar a aplicaciones difíciles de

interpretar o mantener. Por ello, en programación se utiliza solamente en ocasionesexcepcionales, pues la función que vaya a desempeñar Goto puede suplirse utilizandocualquiera de las sentencias de control estructuradas que se han visto anteriormente.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 511/651

GUILLERMO DAVID HERRERO GONZÁLEZ

509

5.4. L IBRERÍAS E N V ISUAL B ASIC

Como en cualquier lenguaje de alto nivel, en VB también existen las librerías,además de los componentes.

Los componentes archivos ocx, son librerías que se programan desde un entornovisual. Pueden ser desde tipos de botones para agregar al programa hasta la creación, enel programa, de un puerto serie.

Las librerías son conjuntos de funciones en un archivo dll , estos archivos losutliza el sistema operativo Windows como driver de un dispositivo hasta para reconocer el acceso a un puerto.

5.4.1. LIBRERÍA DEL USB: MPUSBAPI.DLL

5.4.1.1. Inroducción

Para una mayor facilidad de desarrollo de aplicaciones basadas en el bus USB,Microchip ha creado un archivo dll en el que proporciona las funciones de acceso al

puerto USB con un microcontrolador de la familia PIC18Fxx5x.

Para un funcionamiento correcto, se necesita el driver mchpusb.sys.

Este archivo sirve tanto para Visual Basic como para Visual C, entre otros.

5.4.1.2. FUNCIONES

5.4.1.2.1. MPUSBGetDLLVersion(Void)

Lee el nivel de revisión del MPUSAPI.dll. Es un nivel de revisión de 32bits.

Esta función no devuelve la versión del código, no realiza nada con el USB.

Devuelve la versión de la dll en formato hexadecimal de 32bits.

MPUSBGetDLLVersion()

5.4.1.2.2. MPUSBGetDeviceCount(pVID_PID)

Devuelve el número de dispositivo con VID_PID asignado.

pVID_PID: Input: cadena de caracteres del número de identificación asignado.

MPUSBGetDeviceCount(vid_pid)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 512/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

510

5.4.1.2.3. MPUSBOpen(instance, pVID_PID, pEP, dwDir,dwReserved)

Devuelve el acceso al pipe del Endpoint con el VID_PID asignado.

Todas las pipes se abren con el atributo FILE_FLAG_OVERLAPPED. Esto permite que MPUSBRead, MPUSBWrite y MPUSBReadInt tengan un valor de time-out.

Nota: el valor del time-out no tiene sentido en una pipe síncrona.

instance: Input: Un número de dispositivo para abrir. Normalmente, se utiliza primero la llamada de MPUSBGetDeviceCount para saber cuantosdispositivos hay.

Es importante entender que el driver lo comparten distintos dispositivos.El número devuelto por el MPUSBGetDeviceCount tiene que ser igual omenor que el número de todos los dispositivos actualmente conectados yusando el driver genérico.

Ejemplo:

Si hay tres dispositivos con los siguientes PID_VID conectados:

Ê Dispositivo tipo 0, VID 0x04d8, PID 0x0001

Ê Dispositivo tipo 1, VID 0x04d8, PID 0x0002

Ê Dispositivo tipo 2, VID 0x04d8, PID 0x0003

Si el dispositivo que nos interesa tiene VID=0x04d8 y PID=0x0002 elMPUSBGetDeviceCount devolverá un ‘1’.

Al llamar la función tiene que haber un mecanismo que intente llamar MPUSOpen() desde 0 hasta MAX_NUM_MPUSB_DEV. Se tiene quecontar el número de llamadas exitosas. Cuando este número sea igual alnúmero devuelto por MPUSBGetDeviceCount, hay que dejar de hacer lasllamadas porque no puede haber más dispositivos con el mismo VID_PID.

pVID_PID: Input: String que contiene el PID&VID del dispositivo objetivo. Elformato es “vid_xxxx&pid_yyyy”. Donde xxxx es el valor del VID y el

yyyy el del PID, los dos en hexadecimal.Ejemplo:

Si un dispositivo tiene un VID=0x04d8 y un PID=0x000b, el string deentrada es: “vid_0x04d8&pid_0x000b”.

pEP: Input: String con el número del Endpoint que se va a abrir. El formato es“\\MCHP_EPz” o “\MCHP_EPz” dependiendo del lenguaje de

programación. Donde z es el número del Endpoint en decimal.

Ejemplo:

“\\MCHP_EP1” o “\MCHP_EP1”

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 513/651

GUILLERMO DAVID HERRERO GONZÁLEZ

511

Este argumento puede ser NULL (nulo) para crear lazos con Endpointsde funciones no específicas.

Las funciones específicas son: MPUSBRead, MPUSBWrite,MPUSBReadInt.

Nota: Para utilizar MPUSBReadInt(), el formato de pEP tiene que ser “\\MCHP_EPz_ASYNC”. Esta opción sólo está disponible para un Endpointinterrupción IN. La pipe de datos abierta con “_ASYNC” debe almacenar datos con el intervalo especificado en el Endpoint descriptor con un máximode 100 recepciones. Cualquier otro dato recibido después de llenar el buffer del driver se ignora.

La aplicación del usuario tiene que llamar MPUSBReadInt() a menudosin superar el máximo de 100.

dwDir: Especifica la dirección del Endpoint:

Ê MP_READ: para MPUSBRead y MPUSBReadInt

Ê MP_Write: para MPUSBWrite

dwReserved: por ahora nada.

MPUSBOpen(0, vid_pid, out_pipe, MP_WRITE, 0)

5.4.1.2.4. MPUSBRead(handle, pData, dwLen, pLength,dwMilliseconds)

handle: Input: Identifica la pipe del Endpoint que se va a leer. La pipe unidatiene que crearse con el atributo de acceso MP_READ.

pData: Output: Puntero al buffer que recibe el dato leído de la pipe.

dwLen: Input: Especifica el número de bytes que hay que leer de la pipe.

pLenght: Output: Puntero al número de bytes leídos. MPUSBRead pone estevalor a cero antes de cualquier lectura o de chequear un error.

dwMilliseconds: Input: Especifica el intervalo de time-out en milisegundos. Lafunción vuelve si transcurre el intervalo aunque no se complete la operación.Si dwMilliseconds=0, la función comprueba los datos de la pipe y vuelveinmediatamente. Si dwMilliseconds es infinito, el intervalo de time-outnunca termina.

MPUSBRead(myInPipe, VarPtr(s(0)), DatosDeseados, Datos, 1000)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 514/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

512

5.4.1.2.5. MPUSBWrite(handle, pData, dwLen, pLength,dwMilliseconds)

handle: Input: Identifica la pipe del Endpoint que se va a escribir. La pipe unidatiene que crearse con el atributo de acceso MP_WRITE.

pData: Output: Puntero al buffer que contiene los datos que se van a escribir enla pipe.

dwLen: Input: Especifica el número de bytes que se van a escribir en la pipe.

pLenght: Output: Puntero al número de bytes que se escriben al llamar estafunción. MPUSBWrite pone este valor a cero antes de cualquier lectura o dechequear un error.

dwMilliseconds: Input: Especifica el intervalo de time-out en milisegundos. Lafunción vuelve si transcurre el intervalo aunque no se complete la operación.Si dwMilliseconds=0, la función comprueba los datos de la pipe y vuelveinmediatamente. Si dwMilliseconds es infinito, el intervalo de time-outnunca termina.

MPUSBWrite(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000)

5.4.1.2.6. MPUSBReadInt(handle, pData, dwLen, pLength,dwMilliseconds)

handle: Input: Identifica la pipe del Endpoint que se va a leer. La pipe unida

tiene que crearse con el atributo de acceso MP_READ.pData: Output: Puntero al buffer que recibe el dato leído de la pipe.

dwLen: Input: Especifica el número de bytes que hay que leer de la pipe.

pLenght: Output: Puntero al número de bytes leídos. MPUSBRead pone estevalor a cero antes de cualquier lectura o de chequear un error.

dwMilliseconds: Input: Especifica el intervalo de time-out en milisegundos. Lafunción vuelve si transcurre el intervalo aunque no se complete la operación.Si dwMilliseconds=0, la función comprueba los datos de la pipe y vuelveinmediatamente. Si dwMilliseconds es infinito, el intervalo de time-out

nunca termina.MPUSBReadInt(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000)

5.4.1.2.7. MPUSBClose(handle)

Cierra una determinada unión.

handle: Input: Identifica la pipe del Endpoint que se va a cerrar.

MPUSBClose (myOutPipe)

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 515/651

GUILLERMO DAVID HERRERO GONZÁLEZ

513

5.4.1.3. TIPOS DE TRANSFERENCIAS

En este apartado se recomienda que función utilizar dependiendo del tipo detransferencia.

Tipo Función ¿Aplicable time-out?

Interrupt IN MPUSRead, MPUSReadInt si

Interrupt OUT MPUSBWrite si

Bulk IN MPUSBRead si

Bulk OUT MPUSWrite si

Isochronous IN MPUSBRead no

Isochronous OUT MPUSBWrite noInterrupt: tipo interrupción

Isochronous: tipo síncrono

Nota: “Input” y “output” se refiere a los parámetros designados en las llamadasa estas funciones, que son lo opuesto a los sentidos comunes desde la perspectiva de unaaplicación haciendo llamadas.

5.4.1.4. Declaración De Constantes Y Variables

Aquí aparecen las constantes y variables que el fabricante recomienda usar.

Todas son optativas, dejando la elección al programador.También, se comentan las pequeñas variaciones que existen al declarar estas

variables en los distintos lenguajes.

MPUS_FAIL=0MPUSB_SUCCESS=1MP_WRITE=0MP_READ=1MAX_NUM_MPUSB_DEV=127vid_pid= “vid_04d8&pid_0011”

En Visual Basic:

out_pipe= “\MCHP_EPx”in_pipe= “\MCHP_EPy”

En C y Delphi:

out_pipe= “\\MCHP_EPx”in_pipe= “\\MCHP_EPy”

Siendo x e y números del Endpoint por los que se van a realizar lastransmisiones.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 516/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

514

5.4.1.5. Declaración de las funciones

En el último punto de la librería, se comenta como incluir las funiones en varioslenguajes de programación.

5.4.1.5.1. C

Se declara con #include "_mpusbapi.h". Los datos devueltos son:

DWORD _MPUSBGetDLLVersion(void)DWORD _MPUSBGetDeviceCount(PCHAR pVID_PID)HANDLE _MPUSBOpen(DWORD instance, PCHAR pVID_PID, PCHAR pEP, DWORDdwDir, DWORD dwReserved);BOOLEAN _MPUSBClose(HANDLE handle);

DWORD _MPUSBRead(HANDLE handle, PVOID pData, DWORD dwLen, PDWORDpLength, DWORD dwMilliseconds);DWORD _MPUSBWrite(HANDLE handle, PVOID pData, DWORD dwLen, PDWORDpLength, DWORD dwMilliseconds);DWORD _MPUSBReadInt(HANDLE handle, PVOID pData, DWORD dwLen, PDWORDpLength, DWORD dwMilliseconds);

5.4.1.5.2. VBPublic Declare Function MPUSBGetDLLVersion Lib "mpusbapi.dll" () As LongPublic Declare Function MPUSBGetDeviceCount Lib "mpusbapi.dll" (ByVal pVID_PID AsString) As Long

Public Declare Function MPUSBOpen Lib "mpusbapi.dll" (ByVal instance As Long, ByValpVID_PID As String, ByVal pEP As String, ByVal dwDir As Long, ByVal dwReserved AsLong) As LongPublic Declare Function MPUSBClose Lib "mpusbapi.dll" (ByVal handle As Long) As LongPublic Declare Function MPUSBRead Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pDataAs Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) AsLongPublic Declare Function MPUSBWrite Lib "mpusbapi.dll" (ByVal handle As Long, ByValpData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds AsLong) As Long

Public Declare Function MPUSBReadInt Lib "mpusbapi.dll" (ByVal handle As Long, ByValpData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds AsLong) As Long

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 517/651

GUILLERMO DAVID HERRERO GONZÁLEZ

515

5.4.1.5.3. DelphiFunction MPUSBGetDLLVersion(): DWORD; cdecl;Function MPUSBGetDeviceCount(pVID_PID: PCHAR) : DWORD; cdecl;Function MPUSBOpen(instance: DWORD, pVID_PID: PCHAR, pEP: PCHAR, dwDir: DWORD,dwReserved: DWORD): HANDLE; cdecl;Function MPUSBClose(handle: HANDLE): BOOLEAN; cdecl;Function MPUSBRead(handle: HANDLE, pData: PVOID, dwLen: DWORD, pLength:PDWORD, dwMilliseconds: DWORD): DWORD; cdecl;Function MPUSBWrite(handle: HANDLE, pData: PVOID, dwLen: DWORD, pLength:PDWORD, dwMilliseconds: DWORD): DWORD; cdecl;Function MPUSBReadInt(handle: HANDLE, pData: PVOID, dwLen: DWORD, pLength:PDWORD, dwMilliseconds: DWORD): DWORD; cdecl;

ImplementationFunction MPUSBGetDLLVersion; cdecl; external ‘MPUSAPI:Dll’ index1;Function MPUSBGetDeviceCount; cdecl; external ‘MPUSAPI:Dll’ index2;Function MPUSBOpen; cdecl; external ‘MPUSAPI:Dll’ index3;Function MPUSBClose; cdecl; external ‘MPUSAPI:Dll’ index4;Function MPUSBRead; cdecl; external ‘MPUSAPI:Dll’ index5;Function MPUSBWrite; cdecl; external ‘MPUSAPI:Dll’ index6;Function MPUSBReadInt; cdecl; external ‘MPUSAPI:Dll’ index7;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 518/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 519/651

6. INTERCONEXIÓN

USB-PC

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 520/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 521/651

519

6. INTERCONEXIÓN USB-PC

6.1. I NTRODUCCIÓN

El USB se encuentra en todos los tipos de plataformas de ordenador conocidos.En este capítulo, nos centraremos en Windows por ser el más difundido y en los

periféricos USB.

Para que cualquier sistema operativo reconozca un periférico, necesita un driver.Para escribir el driver en Windows, se necesitan altos conocimientos del sistema, asícomo otras herramientas ineludibles de Microsoft, como el DDK (Driver Development

Kit), la documentación (MSDN) y un compilador.

6.2. A RQUITECTURA W INDOWS

A lo largo de las diferentes versiones de Windows, tanto la arquitectura comolos puntos de entrada han sufrido cambios. Windows 98 se unifica coincidiendo conWindows NT.

Para conectar una aplicación al USB, se requiere el llamado driver . La primeracualidad de este software es la de controlar el dispositivo.

En el caso de una red, la parte de transferencia de datos está compartida por varios usuarios; por eso, la parte que controla el hardware está integrada en el sistema.

Este recurso común se denomina USB Driver Stack.

El driver ya no ejerce un control sobre el hardware, sino que viene a ser lainterfaz entre el stack y la aplicación.

6.3. C ARGA E N W INDOWS D E U N M ÓDULO USB

Veamos las operaciones realizadas por Windows cuando se conecta un periférico USB.

En cuanto se detecta la presencia de un periférico, Windows realiza laenumeración, de forma que obtiene la información VID y PID. El sistema utiliza estosdatos para encontrar el driver que gestiona el periférico. Si este ya se conoce, suinformación se encuentra en el “registro”, de otro modo, esta se encontrará en un ficherode tipo inf . Por esta razón, Windows pide para cada nuevo periférico el disco quecontiene la información. Si encuentra varios ficheros .inf, el sistema busca en cada unode ellos el que contiene la información de instalación del periférico (VID/PID).

Las instrucciones para la carga del software necesario para este dispositivo seencuentra en ese fichero que, como mínimo, debe indicar el nombre del fichero quecontiene el driver (con extensión .SYS), el GUID…

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 522/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

520

El software se almacena en la carpeta de Windows, con lo que finaliza el proceso de instalación. Sólo queda hacerse cargo del periférico, para lo que Windows

ejecuta el driver xx.sys.En las últimas versiones de Windows, el sistema posee archivos .sys

“genéricos”. Al conectar un periférico, el sistema busca en una base de datos interna elVID y el PID y, si encuentra el periférico, instala el driver genérico que posee. Así, alconectar un periférico nuevo, normalmente no pide el disco con el driver.

6.4. E L D RIVER .SYS

Para dialogar con la aplicación, es necesario que ésta solicite al sistema laapertura de un enlace.

La solución más aconsejable es proporcionar el GUID…, que debe ser unnúmero único para que la aplicación pueda conectarse con su driver.

En cuanto el periférico se conecta, el programa driver.sys se carga y se ejecuta, yserá descargado en cuanto el periférico se desconecte. Al llamarle, el sistema le

proporciona la dirección de la estructura en la que debe colocar las instrucciones de los programas que van a controlar los circuitos virtuales.

NTSTATUSDriverEntry(

IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath

)

Una vez actualizada la tabla DriverObject, el driver puede efectuar las primerasoperaciones (inicialización o carga del código, por ejemplo). Los programas se quedanen reposo hasta que la aplicación efectúa una petición o se produce un evento(desconexión, por ejemplo).

6.4.1. DIÁLOGO CON LA APLICACIÓN

La aplicación utiliza el GUID para abrir un enlace virtual con el periférico.

Pueden utilizarse varios grupos de funciones para dialogar. El primero utiliza las

funciones básicas de creación, apertura, lectura y escritura en un fichero. El periférico seve como un fichero, y este grupo no permite el envío de mensajes de control sobre elEndpoint 0.

El interés de estas funciones es que utilizan los puntos de entrada clásicos deWindows. A priori, pueden utilizarse todos los compiladores de 32bits. La familia defunciones Device IOControl permite un acceso más completo al USB. Como decíamosal principio de este capítulo, se puede obtener información más completa en Microsoft.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 523/651

GUILLERMO DAVID HERRERO GONZÁLEZ

521

6.4.2. GESTIÓN DE BUGS

En cuanto al hardware, el PC está constituido por un conjunto de elementos,tales como la placa madre, tarjeta de video…, y lo mismo ocurre para el software.Aparte de Windows, no hay que olvidar a todos los drivers y programas de aplicaciónque se encuentran en ejecución o que, en un momento u otro, han modificado el sistema.

Todos esto elementos interactúan y Windows es permeable a ello. Existen otrossistemas operativos que controlan mejor esto elementos.

Un bug (fallo de funcionamiento) puede ser la consecuencia de una concurrenciade programas, no siendo el software que lo dispara forzosamente culpable.

Para determinar la causa del problema, es obligatorio anotar la configuración delsistema y efectuar pruebas cruzadas para encontrar los programas activos. La simple

constatación de un fallo no aporta gran cosa para hallar la causa. Las “líneas calientes”de los fabricantes de tarjetas ofrecen cuestionarios muy completos a los que hay queresponder antes de iniciar cualquier investigación del problema por parte del serviciotécnico.

A nivel USB, se han detectado problemas en los drivers tanto de Windows comoen los de los circuitos USB (driver en el sentido de controlador), así como en algunoscontroladores USB con sus bios.

Actualmente, el sistema de seguridad contra los bugs de Windows, es el“certificado de garantía”. A los fabricantes de periféricos que pagan una gran cantidadeconómica Microsoft les otorga su certificado, para que al instalar el driver no parezca

un mensaje en la pantalla diciendo que el periférico puede ser no seguro. Así, por ejemplo, al instalar el driver de Microchip mchpusb.sys aparece este error, pero el driver es totalmente compatible con cualquier versión de Windows.

6.4.3. CARACTERÍSTICAS DE UN DRIVER

No hay que creer que un driver no es más que eso: un driver; del mismo modoque para un mecánico profesional no hay sólo un coche. Las particulares característicashacen que un driver sea diferente del resto. Todo lo que ocurra dependerá del driver, por tanto, de la elección del software por parte del desarrollador de ese programa. Por esto,vamos a comentar las principales características de un driver.

En este punto se irán comentando las características del driver mchpusb.sys deMicrochip.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 524/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

522

6.4.3.1. Principios De Acceso

La aplicación puede acceder al driver tanto por los puntos de entrada clásicos Read y Write, como por la función IoControl. En el primer caso, se pasa solamente un buffer, en el otro, se pasan dos buffers y un código de función. El desarrollador puedeelegir una u otra solución, incluso las dos. La primera permite ofrecer unacompatibilidad descendente con los anteriores sistemas orientados a ficheros, pero esmás frecuente la segunda solución, ya que permite hacer otras peticiones, tales como lasde estado.

El código de función IoControl depende del desarrollador. Sin embargo, lasopciones elegidas por este modifican el código en función de los campos de bits“normalizados”.

La librería de Microchip hace la transferencia IoControl.6.4.3.2. Modo De Acceso

Más concretamente, el retorno puede hacerse tanto si ha terminado la peticióncomo si no. En el primer caso, la petición es síncrona y, en consecuencia, las accionesse hacen detrás de otras, mientras que en el segundo caso, la petición es asíncrona.

El modo asíncrono resulta más complicado de implementar, ya que es necesariogestionar el overlapped. Para ello, durante la petición, ésta pasa a un puntero paraindicar adónde debe retornar esta información el driver. Todo esto debe ser cuidadosamente gestionado.

El driver de Microchip soporta ambos modos de acceso, la variación reside enlas funciones de acceso utilizadas, como se explicó en el capítulo anterior.

6.4.3.3. Modo De Acceso Múltiple

Esto no tiene lugar en el modo síncrono, puesto que se retorna a la aplicacióncuando la petición termina. Por el contrario, en el caso del modo asíncrono, puede haber varias peticiones en curso. El driver debe ser capaz de mantener la informaciónoverlapped y de reenviar la información de fin (o error) al llamador. Todo esto es muycoherente, pero complica la programación en consecuencia. Para esta opción, lasolución más adecuada viene a ser la lista encadenada.

6.4.3.4. Paso De Datos

Para paquetes pequeños, únicamente se pasa el puntero, que suele ser la soluciónmás sencilla. Cuando el paquete es mayor, se pasa una estructura que describe el

paquete, ya que este puede encontrarse en distintas posiciones de la memoria. Todo esto puede resultar transparente para la aplicación, sin embargo, el driver debe ser capaz demanejar ambos casos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 525/651

GUILLERMO DAVID HERRERO GONZÁLEZ

523

6.4.3.5. Limitación de 4Kbytes

En las capas más “profundas” del sistema operativo, hay que moverse rápido yno se puede andar dividiendo los paquetes en bloques. Esto viene a cuento porque existeuna restricción física de 4Kbytes que se localiza a nivel del DMA. Así, un driver quereciba un paquete superior a 4Kbytes debe ser troceado y pasado al USB ensubpaquetes. El driver de Microsoft BULK sirve precisamente para esto.

6.4.3.6. Múltiples Periféricos

En este caso nos pasamos al otro lado, o sea, al diálogo hacia el periférico USB.

La aplicación tiene puntos de entrada hacia el driver (pasando por el sistema), pero el sistema dialoga también con el driver.

Cuando el sistema detecta un nuevo periférico USB, le solicita su PID y VID por el fichero inf (o el descriptor). El sistema carga el driver y le pide un nombre de fichero.Será este nombre el que utilizará la aplicación para abrir el fichero (create).

Desafortunadamente, si este nombre ya existe, por ejemplo, por que el driver haya sido utilizado anteriormente para cargar un periférico idéntico al que se trata deinstalar, el sistema lo rechazará y devolverá un mensaje negativo al driver. Un driver con múltiples periféricos propondrá otro nombre.

La gestión de múltiples periféricos obliga sin embargo a mantener información para cada periférico. Utilizando en cada vez un VID/PID diferente, se puede rodear el problema con el mismo driver. El nombre que permite asociar la aplicación con su

driver tiene una importancia decisiva. Este nombre debe ser conocido por la aplicacióny único, de otro modo, será rechazado por el sistema. Por ello Microchip permiteregistrar el PID.

6.4.3.7. Gestión De Las Peticiones De La Aplicación

La aplicación envía sus peticiones al driver y este responde; el método es simple;además, el fabricante que vende el producto proporciona tanto la aplicación como eldriver. Por esta razón es difícil imaginar que la aplicación pueda hacer peticiones queestén fuera de las aceptadas por el driver, más aún cuando es el propio driver el que

proporciona los números de código de las funciones.

6.4.3.8. Gestión De Las Peticiones Del Sistema

El sistema operativo (OS) también tiene peticiones que hacer. Microsoft, quecontrola el OS, ha hecho evolucionar las peticiones a medida que el USB ha idoavanzando. Incluso aunque el desarrollo de los periféricos se hubiera estancado, laevolución del sistema operativo es constante, por lo que hay que actualizar el driver.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 526/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

524

6.5. E L D RIVER D E M ICROCHIP

A lo largo del capítulo, se han comentado carácterísticas del driver que cedeMicrochip para desarrollar aplicaciones para sus microcontroladores.

Al disponer de un driver estable con las características apropiadas y con unámbito de aplicación muy grande, por sencillez y comodidad, se utilizará este. El

problema es que dependiendo de la aplicación habrá que modificar el PID y el VID,aunque este último no es recomendable.

Para realizar las modificaciones oportunas, no hay que programar; lo que hayque hacer es modificar el archivo .inf desde el bloc de notas. Cambiando el VID, el PIDy el nombre, descripción y los demás datos que aparecen en las últimas líneas. Con estas

pequeñas y sencillas modificaciones se adapta el driver de Microchip a nuestra

aplicación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 527/651

7. APLICACIÓN

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 528/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 529/651

527

7. APLICACIÓN

7.1. I NTRODUCCIÓN

Como aplicación practica de la comunicación por USB, se ha desarrollado uncoche controlado desde el ordenador por el puerto USB.

Este aparato, detecta objetos a una distancia de 20 a 80cm y al chocarse conellos. Puede modificar su velocidad, dirección y sentido.

La velocidad y el sentido se modifican gracias a dos motores de corrientecontinua controlados con el microcontrolador y el driver L293D. La forma de modificar la velocidad es por medio de la modificación de anchura del pulso (PWM).

La dirección se controla con un motor paso a paso, éste necesita unos pulsos decontrol para poder moverse un determinado ángulo, que depende del motor.

Además, se encenderán dos luces delanteras y dos traseras y un zumbador parasimular el claxon.

En éste capítulo, se pretende explicar desde el porqué del diseño de la placa a laaplicación de control realizada en el ordenador.

7.2. C IRCUITO E LÉCTRICO

En este punto, se analizarán todos los componentes que se han utilizado,comentando sus características y el motivo de su uso.

La alimentación del puerto USB sólo se utiliza para alimentar elmicrocontrolador y el L293D, debido a la demanda excesiva del circuito y para que elmicro tenga una tensión estable que no se vea afectada por el ruido generado por losmotores de corriente continua.

Se han utilizado dos fuentes de alimentación debido a la gran demanda decorriente del cicuito, y que el autor no dispone de una fuente de alimentación de tanta

potencia. Se pueden unir las dos fuentes cuando se pueda utilizar una fuente de gran potencia.

Se han unido las masas para que el microcontrolador tenga un punto dereferencia, el nivel bajo ó 0V.

El motivo de la conexión de un condensador de 100nF entre los puntos de lafuente de alimentación, es para filtrar el posible error producido por el ruido generado

por las altas frecuencias del puerto USB y por los motores.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 530/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

528

7.2.1. ESQUEMA ELÉCTRICO DEL CIRCUITO

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 531/651

GUILLERMO DAVID HERRERO GONZÁLEZ

529

7.2.2. COMPONENTES

7.2.2.1. Microcontrolador El componente más importante es el microcontrolador PIC18F2455, dentro de la

familia PIC18Fxx5x se ha elegido este, por ser el que más se adecua a nuestraaplicación por ser el de menor memoria y por ser el de menor salidas. Estas doscaracterísticas implican que sea el de menor precio.

El oscilador de entrada es un XTAL de 4MHz, los condensadores de 27pF seutilizan para excitar el cristal y generar la onda cuadrada adecuada para el micro. Estecircuito se conecta, según el fabricante, en los terminales OSC1 y OSC2.

El condensador electrolítico de 47μF conectado al terminal VUSB es una

exigencia del fabricante para estabilizar la tensión del USB.Los diodos LED conectados en los terminales RC6 y RC7, en realidad, es un

LED bicolor de tres terminales. Utilizado para indicar, en rojo que el dispositivo estáalimentado, y en verde cuando se ha configurado el puerto USB. Las resistenciasconectadas entre el micro y el LED, sirven para limitar la tensión que alimenta al LED.

El resto de características se han comentado a lo largo de esta memoria.

7.2.2.2. ULN2803

Este dispositivo es un buffer de alta tensión y alta corriente, formado por unamatriz de ocho transistores interconectados en Darlington.

Sus ocho transistores NPN están diseñados especialmente para interconectar circuitos lógicos de baja potencia (TTL, CMOS o PMOS/NMOS) con componentes querequieren alta tensión/corriente como bombillas, motores, relees.

También pertenece a la familia de este integrado el ULN2804, la diferencia entreambos, reside en que este último está diseñado para amplificar dispositivos CMOS oPMOS y el ULN2803 los TTL.

Como el microcontrolador tiene lógica TTL, se ha utilizado el ULN2803, paraamplificar los pulsos de control del motor paso a paso, las bombillas, los LEDs y elzumbador.

La conexión es sencilla:Ø Las salidas del micro se conectan en las entradas del buffer.Ø El terminal 9 es GND, por lo que se conecta a la masa del circuito.Ø El terminal 10 es COM, que se conecta a la alimentación del circuito de

salida, en este caso, se conecta a la fuente de alimentación.Ø Las salidas, cuando se activan proporcionan 0V, por lo que se utilizan

como la masa del componente que se quiere amplificar.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 532/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

530

7.2.2.3. L293D

El L293D es un cuádruple puente de alta corriente, diseñado para proporcionar la doble dirección en corrientes mayores de 600mA y tensiones de 4,5V a 36V. Se hadiseñado para controlar inducciones como las de un relee, un motor…

Las entradas son compatibles con la lógica TTL.

Las entradas se activan en parejas, 1A y 2A se activan con la entrada dehabilitación 1,2EN; y 3A y 4A con 3,4EN. Cuando una entrada y la de habilitaciónestán en un nivel alto, el driver (la salida) también, activándose en fase con la entrada.Cuando la entrada está en un nivel bajo y la de habilitación en alto, el driver estará en

bajo. El último caso, cuando la entrada está en cualquier nivel y la de habilitación en bajo, el driver se encuentra en un estado de alta impedancia.

Hay que usar unos diodos externos para suprimir el periodo de descarga de lasinducciones. En la aplicación son los diodos rectificadores 1N4007, que soportan unatensión y una corriente mucho más alta que la del circuito.

El integrado posee dos terminales de alimentación, uno para la alimentaciónTTL, Vcc (terminal 18), conectado a la alimentación del puerto USB; y otro para la delcircuito que alimenta los componentes conectados en las salidas, VS (terminal 8),conectado a la fuente externa de tensión. Esta conexión se ha realizado para que elL293D tenga la tensión del USB de referencia ya que es con la que trabaja elmicrocontrolador.

7.2.2.4. Sensor De DistanciaEl Sharp GP2Y0A02YK es un sensor de infrarrojos que proporciona una lectura

continua de la distancia medida como una tensión analógica dentro de un rango de 20 a80cm. La tensión de alimentación es de 5V y la tensión de salida varía unos 2V dediferencia entre el margen mínimo y el máximo de la distancia medida, actualizándosecada 39ms. El encapsulado es similar al de otros sensores Sharp, pero presenta unamayor distancia entre la lente y el sensor con el fin de aumentar el rango de trabajo.

La salida de este sensor se conecta a la entrada AN0 para que el microcontrolador

convierta la tensión recibida en un dato digital por medio de conversor A/D.

7.2.2.5. Finales De CarreraLos conmutadores del tipo final de carrera (en el circuito aparece como FINx,

siendo x el número del componente), se utilizan, en este caso, para detectar cuando sechoca el coche con algún objeto ya que al terminal del microcontrolador le llegan 5V.

Las resistencias conectadas en paralelo con los conmutadores, se utilizan paraque en el momento de cambio entre las dos posiciones del interruptor, al micro le siganllegando 0V y reconozca un nivel bajo en la entrada hasta que el interruptor cambie.Impidiendo así, el estado de alta impedancia.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 533/651

GUILLERMO DAVID HERRERO GONZÁLEZ

531

7.2.2.6. Zumbador

El zumbador es un componente, que al alimentarlo emite sonido. El que seutiliza en la aplicación es de 6V, pudiéndose alimentar a 5V como el resto del circuito.

En la aplicación se usa para simular el claxon del coche. Se conecta en unasalida del ULN2803 para proporcionar la corriente necesaria para su funcionamiento.

7.2.2.7. Bombillas Y LEDs

Las bombillas y los LEDs se utilizan para simular las luces del coche. Como elzumbador, se conectan al ULN2803 para suministrar la corriente necesaria.

Los LEDs utilizados son súper LEDs rojos. La diferencia entre un LED normal yestos, es que estos lucen con más intensidad que los tradicionales.

7.2.2.8. Conector USB

El conector USB utilizado es del tipo B hembra, para impedir la recirculación alestar prohibida, como se explica en el capítulo referente a la conexión USB.

La alimentación del USB es la encargada de suministrar la energía almicrocontrolador, por eso el terminal 1 del conector se une a la alimentación del micro,a los finales de carrera y al L293D.

Como en cualquier circuito que utilice varias fuentes o con algún tipo detransmisión, hay que conectar las masas para tener el mismo punto de referencia.

Los dos terminales del conector sobrantes, el 2 y el 3, se conectan directamenteal microcontrolador en los terminales D- y D+, respectivamente por ser los mismos quelos del conector.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 534/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

532

7.2.2.9. Motores De Corriente Continua

Son de los más comunes y económicos, y se pueden encontrar en la mayoría delos juguetes a pilas, constituidos, por lo general, por dos imanes permanentes fijados enla carcasa y una serie de bobinados de cobre ubicados en el eje del motor, quehabitualmente suelen ser tres.

El funcionamiento se basa en la interacción entre el campo magnético del imán permanente y el generado por las bobinas, ya sea una atracción o una repulsión hacenque el eje del motor comience su movimiento.

Cuando una bobina es recorrida por la corriente eléctrica, esta genera un campomagnético y como es obvio este campo magnético tiene una orientación es decir dos

polos un polo NORTE y un polo SUR, de esta forma:

N S NS

- +

Estos polos pueden ser invertidos fácilmente con sólo cambiar la polaridad de la bobina, por otro lado al núcleo de las bobinas las convierte en un electroimán, como lascargas opuestas o polos opuestos se atraen y cargas del mismo signo o polos del mismosigno se repelen, esto hace que el eje del motor gire produciendo un determinado torque.

NS NS

Torque

Torque

El torque (par motor) es simplemente la fuerza de giro, podríamos llamarle la potencia que este motor tiene, la cual depende de varios factores, como ser; la cantidadde corriente, el espesor del alambre de cobre, la cantidad de vueltas del bobinado, latensión etc. Esto es algo que viene determinado por el fabricante, y que nosotros poco

podemos hacer, más que jugar con uno que otro parámetro que ahora se describen.

La imagen anterior es sólo a modo descriptivo, ya que por lo general suelen

actuar las dos fuerzas, tanto atracción como repulsión, y más si se trata de un motor con bobinas impares. Estos motores disponen de dos bornes que se conecten a la fuente dealimentación y según la forma de conexión el motor girará en un sentido u otro.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 535/651

GUILLERMO DAVID HERRERO GONZÁLEZ

533

7.2.2.9.1. Control Del Sentido De Giro

Existen varias formas de lograr que estos motores inviertan su sentido de girouna es utilizando una fuente simétrica o dos fuentes de alimentación con un interruptor simple de dos contactos y otra es utilizar una fuente común con un interruptor doble esdecir uno de 4 contactos, en todos los casos es bueno conectar también un condensador en paralelo entre los bornes del motor, éste para amortiguar la inducción que generan las

bobinas internas del motor (aunque no aparece representado para facilitar un poco lacomprensión del circuito), las conexiones serían:

Ø Con fuente simétrica:

+12V

-12V GND

+12V

-12V GND

Ø Con fuente simple:

12V 12V

Otra solución, es sustituir los interruptores por los relees correspondientes eidear un par de circuitos para lograr el mismo efecto... Aunque esta última opción es unade las más prácticas, tiene sus inconvenientes ya que los relees suelen presentar

problemas mecánicos y de desgaste, lo ideal sería disponer de un circuito un poco mássólido, quitando los relees y haciendo uso de transistores, estos últimos conectados enmodo corte y saturación, así actúan como interruptores.

Al usar una fuente simétrica, será necesario el uso de dos transistorescomplementarios es decir uno PNP y otro NPN, de este modo sólo es necesario unterminal de control, el cual puede tomar valores lógicos "0" y "1":

GND

-Vcc

Control

+Vcc

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 536/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

534

Al utilizar una fuente de alimentación simple la cosa se complica un poco más.Estos circuitos son conocidos como puente en H o H-Bridge.

GND

Control1"0"

+Vcc

Control2"1"

GND

Control1"1"

+Vcc

Control2"0"

Estos Driver's son circuitos integrados que facilitan el diseño de los circuitos,

tales como el UCN5804, el BA6286, el L293B, L297, L298 o también con el ULN2803o el ULN2003, estos dos últimos son arrays de transistores, como se ha explicadoanteriormente.

7.2.2.9.2. El L293 Como Driver De Un Motor De Corriente Continua

Existen dos posibilidades de control, una es controlar los motores en un sólosentido de giro, es decir, hacer que gire o detenerlo, en este caso tienes posibilidad decontrolar hasta 4 motores.

Aquí sólo se representa la mitad del integrado, la otra mitad es lo mismo, sólocambia el número de los pines.

1/2 L2934, 5, 12, 13

M1 M2

GND

+Vs

+Vcc

Ven

BA

8

10 11 14 1516

9

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 537/651

GUILLERMO DAVID HERRERO GONZÁLEZ

535

Con los terminales A y B se controla el encendido del motor correspondiente,Con Ven se habilita o no los terminales de control A y B, Ven debe estar en nivel alto si

se quiere utilizar los terminales de control A y B. Finalmente la forma de control seríacomo se ve en la siguiente tabla:

Ven A M1 B M2

H H Parado H Encendido

H L Encendido L Parado

L XAlta

ImpedanciaX

AltaImpedancia

+Vcc es el terminal de alimentación compatible con la señal de control A y B, osea +5V, Vs tiene los niveles de tensión requeridos por el motor (12, 15, 20, hasta 36v).D1 y D2, son para proteger al integrado de las tensiones generadas por la inducción delas bobinas del motor.

Un motor (M1) esta unido a +Vs, mientras que el otro (M2) esta a GND, se puede utilizar cualquiera de las dos configuraciones.

El otro método de control, requiere dos de los 4 driver del integrado, la forma deconexión sería:

1/2 L293

4, 5, 12, 13

M+Vs

+Vcc

Ven

BA

8

7 6 3 216

1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 538/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

536

La tabla de la verdad del circuito indica claramente como se puede controlar elmotor, en un sentido o en otro, detenerlo o dejarlo libre, alta impedancia, se refiere a

que cualquier señal en los terminales de control A, B, C y D no tendrán efecto algunosobre el motor, es decir que ha quedado liberado totalmente.

Ven C D Función del motor

H H L Sentido 1

H L H Sentido 2

H C=D Parado

L X X Motor LibreEl método de conexión utilizado en la aplicación es el segundo, ya que se

necesitan dos motores en la aplicación y se puede invertir el sentido.

7.2.2.9.3. Control De La Velocidad

Modulación De Ancho De Pulso (PWM)

La modulación de ancho de pulso básicamente consiste en enviar a losterminales de control un tren de pulsos los cuales varían en mayor o menor medida eltiempo en que se mantiene el nivel alto de esos pulsos, manteniendo la frecuenciaconstante, logrando que la tensión media que detecta el motor sea mayor o menor dependiendo del tiempo en el que la señal permanezca en nivel alto.

Con esta forma de control la cantidad de corriente sigue siendo la misma, latensión no varía y en consecuencia el torque del motor se mantiene.

Un circuito de ejemplo puede ser:

Salida

T1

T2

1

0

T1>T2T1=0,7(R1+R2)CT2=0,7R2C

R1

R2C

D

En el cual puedes reemplazar R1 por un potenciómetro y así controlar lostiempos de los niveles de salida.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 539/651

GUILLERMO DAVID HERRERO GONZÁLEZ

537

En la aplicación, se utiliza este método para variar la velocidad. No se necesitaningún circuito adicional ya que el microcontrolador genera una onda modulada en los

terminales CCP1 y CCP2 como se ha visto en capítulos anteriores.

Modulación Por Frecuencia De Pulsos (PFM)

Otro método de variar la frecuencia de pulso en los terminales de control, lo cual puedes lograr fácilmente con un circuito astable que bien podría ser un 555, y utilizar un potenciómetro para variar la frecuencia de los pulsos:

Claro que para mayor velocidad la frecuencia de los pulsos iría mucho másrápido de lo que se muestra en esta imagen.

El esquema para el 555 podría ser:

555

DISCHR

OUT

THERSTRIG

GND

Vcc

Vcc

84R1

7R2

R3

2

6

C1 1

3Clock

7.2.2.9.4. Aumento Del Par Motor

Los motores suelen girar entre 2700 y 2800rpm sin carga, pero con un par de 15a 26gcm. Se necesitará crear un sistema de transmisión del movimiento que reduzca lavelocidad y aumente el par de giro, es decir, una reductora. Una reductora está formada

por engranajes y/o poleas.

A los motores elegidos para la aplicación, les acompaña una reductoraseleccionable mediante una sencilla configuración. En la aplicación, se ha seleccionadouna reductora de 243:1 ya que la siguiente inferior genera un par muy pequeño y lasiguiente superior una velocidad muy reducida.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 540/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

538

7.2.2.10. Motores Paso A Paso

A diferencia de los Motores-CC que giran a todo lo que dan cuando sonconectados a la fuente de alimentación, los Motores-PaP solamente giran un ángulodeterminado, los primeros sólo disponen de dos terminales de conexión, mientras losotros pueden tener 4, 5 ó 6, según el tipo de motor que se trate, por otro lado los motoresde corriente continua no pueden quedar enclavados en una sola posición, mientras losmotores paso a paso sí.

Los motores paso a paso son comúnmente utilizados en situaciones en que serequiere un cierto grado de precisión, por ejemplo en las disqueteras se puede encontrar unido al cabezal haciéndolo avanzar, retroceder o posicionarse en una determinadaregión de datos alojadas en el disquete.

El ángulo de giro de estos motores es muy variado pasando desde los 90º hastalos 1.8º e incluso 0.72º, cada ángulo de giro, (también llamado paso) se efectúaenviando un pulso en uno de sus terminales, es decir que por ejemplo en motores quetienen 90º de giro por paso, se requiere 4 pulsos para dar una vuelta completa, mientrasque en los de 1,8º necesitas 200 pulsos, y en los otros necesitas 500.

Los Motores-PaP suelen ser clasificado en dos tipos, según su diseño yfabricación pueden ser Bipolares o Unipolares:

Ø Motor paso a paso bipolar:

1a

2a 2b

1b

Ø Motor paso a paso unipolar:

1a

2a 2b

1b

Com1

Mientras los Unipolares disponen de dos bobinas independientes los Bipolares parecieran tener 4 debido al terminal central que es el común de cada par de bobinas, pues a eso se debe aquello de los 6 cables y que si unes los terminales Com1 y Com2tienes un terminal común y 4 terminales de control (es decir 5 cables).

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 541/651

GUILLERMO DAVID HERRERO GONZÁLEZ

539

7.2.2.10.1. Motores Bipolares

Para identificar los cables 1a, 1b, 2a y 2b, hay que medir la resistencia entre cada par de terminales, ya que los extremos 1a y 1b deben tener la misma resistencia que losextremos 2a y 2b, ahora si se mide la resistencia en forma cruzada no marcará nada yaque corresponden a bobinas distintas.

Para controlar estos motores hay que invertir las polaridades de los terminales delas bobinas 1 y 2 en una determinada secuencia para lograr un giro a derecha, y ensecuencia opuesta para que gire a izquierda, la secuencia es la que se muestra en latabla:

Nº de pasos 1a 1b 2a 2b

Paso 1 +Vcc GND +Vcc GND

Paso 2 +Vcc GND GND +Vcc

Paso 3 GND +Vcc GND +Vcc

Paso 4 GND +Vcc +Vcc GND

Recuerda que 1a y 1b corresponden a una misma bobina, mientras 2a y 2bcorresponden a la otra.

Para invertir la polaridad se necesita la interfaz para controlar estos motores, yaque en la mayoría de los casos se hace a través de un microcontrolador, o por medio delPC y como estos entregan muy poca corriente hay que amplificarla.

Una de las mejores opciones para controlar estos motores es hacer uso del Driver L293D que ya lo mencionamos anteriormente, el circuito sería:

1a1b2a2b

EnableGND

+Vs

GND

+VssGND

41

32

+Vss

+Vs

D1 D2

L1

D3 D4

D5 D6

L2

D7 D8

C1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 542/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

540

En el esquema L1 y L2 son las bobinas del motor, los diodos D1 a D8 son para proteger al integrado de las sobretensiones generadas por dichas bobinas, las líneas

marcadas en azul corresponden a la tensión de alimentación de los motores, mientras lamarcada en verde a los niveles TTL de control del integrado, los terminales 1 y 9 seunieron para hacer un solo terminal de habilitación, y finalmente 1a, 1b, 2a y 2b son lasentradas de control para la secuencia de las bobinas del motor, este circuito puede servir de base para muchos proyectos, ya sea controlado por PC o por microcontrolador.

7.2.2.10.2. Motores Unipolares

Estos motores comparados a los anteriores tienen sus ventajas, a pesar de tener más de 4 cables son más fáciles de controlar, esto se debe a que tienen un terminalcomún a ambas bobinas. Una forma de identificar cada uno de los cables es analizar la

forma de conexión interna de estos motores.A

C D

B

Com1

En la imagen los dos bobinados del motor se encuentran separados, pero ambostienen un terminal central el cual lo llamaremos común (Com1, Com2). Este es el

modelo utilizado en la aplicación.La cuestión es que este motor tiene 6 cables, y ahora nombrarlos correctamente.

Con el multímetro en modo ohmetro comenzamos a medir resistencias por todos loscables obteniéndose tres valores distintos que se repiten varias veces. Por ejemplo:

Ø No marca nadaØ 47ΩØ 100Ω

100Ω es el mayor valor por lo tanto corresponde a los extremos de las bobinas,es decir A-B o bien C-D.

47Ω es aproximadamente la mitad de 100, por tanto esa debe ser la resistenciaentre el terminal común y ambos extremos de una bobina, por ejemplo entre A-Com1 oB-Com1, o bien en la otra bobina, C-Com2 o D-Com2.

Lo que queda pendiente es cuando no marca nada, y bueno es que en esemomento se midieron los cables de bobinas distintas.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 543/651

GUILLERMO DAVID HERRERO GONZÁLEZ

541

Si se unen los terminales Com1 y Com2, entonces quedas con un motor de 5cables.

A

C D

B

Com

Aquí la resistencia entre cualquier terminal y el común es la misma y

aproximadamente la mitad de la resistencia entre los extremos de las bobinas.Como unimos los cables comunes de cada bobina los cuatro cables restantes

serán A, B, C y D, y para saber cual es cual:

1. se conecta el terminal común al positivo de la fuente de alimentación2. se toma uno de los 4 cables sobrantes, se nombra como A y se conecta a

GND, quedando el motor enclavado en una sola posición,3. se conecta uno de los otros cables a GND. Aquí pueden ocurrir 3 cosas:

Ø Que el motor gire en sentido antihorario, el cable es el BØ Que gire en sentido horario, el cable es el DØ Si no pasa nada es el C

Lo que se necesita es un circuito para controlar el motor; una manera sencilla yeconómica es mediante el ULN2803:

ULN2803

IN1IN2IN3IN4

OUT1OUT2OUT3OUT4

GND CC

A

C D

B

+12V

ABCD

D0D1D2D3

PuertoParalelo

18...25GND

GND

D1...D41N4148

D5zener de 12V

En el esquema funciona con el puerto paralelo, los 4 diodos 1N4148, y el diodozener de 12V sirven para proteger al integrado.

Los bobinados del motor requieren un pulso de señal negativa para ser activados,como el ULN tiene sus salidas invertidas, cada vez que envíes un "1" por el pin INn setransformará en "0" a la salida, es decir en el pin OUTn correspondiente.

En la aplicación, los pulsos los envía el microcontrolador, por lo que no senecesita ningún diodo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 544/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

542

Secuencias De Control De Los Motores Paso A Paso Unipolares

Estas secuencias siguen el orden indicado en cada tabla para hacer que el motor gire en un sentido, si se desea que gire en sentido opuesto, sólo se debe invertir dichasecuencia.

Existen 3 formas de controlar estos motores-PaP, la primera es realizar unasecuencia que activa una bobina por pulso, se conoce como wave drive:

Nº de Pasos A B C D

Paso 1 1 0 0 0

Paso 2 0 1 0 0

Paso 3 0 0 1 0

Paso 4 0 0 0 1

Al trabajar con una sola bobina se pierde un poco el torque del motor.

La otra propuesta es activar las bobinas de en dos, en este caso el campomagnético se duplica, y en consecuencia el motor tiene mayor fuerza de giro yretención. Esta es la secuencia recomendada por el fabricante y se conoce comosecuencia normal:

Nº de Pasos A B C D

Paso 1 1 1 0 0

Paso 2 0 1 1 0

Paso 3 0 0 1 1

Paso 4 1 0 0 1

Con este tipo de secuencia se consigue que los movimientos resulten demasiado

bruscos, y las baterías no te aguantan mucho tiempo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 545/651

GUILLERMO DAVID HERRERO GONZÁLEZ

543

En estas dos formas de control vistas anteriormente se respetan la cantidad de pasos preestablecidos para cada motor, por Ej., si tiene un ángulo de giro de 90º, con 4

pasos das una vuelta completa, pero también puedes hacerlo con 8 pasos, para lo cual seutiliza la secuencia de medio paso:

Nº de Pasos A B C D

Paso 1 1 0 0 0

Paso 2 1 1 0 0

Paso 3 0 1 0 0

Paso 4 0 1 1 0Paso 5 0 0 1 0

Paso 6 0 0 1 1

Paso 7 0 0 0 1

Paso 8 1 0 0 1

Esta es una combinación de las dos anteriores.

En cuanto a la fuerza de giro, sólo decir que, en este caso, es bueno tener encuenta la inercia del motor cuando este se encuentre en movimiento.

7.2.2.10.3. Características Importantes

Hay que tener en cuenta que hay un tiempo determinado para realizar lasecuencia en cada uno de los pasos que se debe dar, ya que si la velocidad de los pulsoses demasiado alta, es posible que el motor se inestabilice y gire en un sentidocualquiera, o bien quedarse titubeando en una sola posición.

Para obtener un arranque suave y preciso, es recomendable comenzar con unafrecuencia de pulso baja y gradualmente ir aumentándola hasta la velocidad deseada sin

superar la máxima tolerada.El giro en reversa debería realizarse bajando la velocidad de giro y luego

cambiando el sentido de rotación.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 546/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

544

7.2.3. ESQUEMA ELÉCTRICO DE LA PLACA IMPRESA

El esquema de montaje después de realizar la placa impresa, sería:

Los componentes externos se unen a la placa por medio de conectores.

Las líneas azules existentes en el interior del integrado L293, son puentes.

Como se ha mencionado anteriormente, la alimentación es del tipo corrientecontinua de 5V.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 547/651

GUILLERMO DAVID HERRERO GONZÁLEZ

545

7.3. F IRMWARE D EL M ICROCONTROLADOR

Con firmware se refiere al programa realizado en C18 para el microcontrolador.Este programa, es una modificación del software cedido por Microchip para lacomunicación por medio del USB. Se parte del programa de la clase genérica y serealizan modificaciones, según lo indicado anteriormente. En este apartado sóloaparecen las librerías o macros modificadas.

Como en el resto de la memoria, el código aparece en verde con el tipo de letraComic Sans MS y los comentarios en Times New Roman.

7.3.1. MAIN.C

El archivo main.c es el código que se ejecuta al iniciar el microcontrolador. Enél, se configuran los fuses, el USB…

7.3.1.1. Incluye

En el apartado de los #include, se añade las librerías necesarias para la ejecucióndel código de main.c.

La librería p18f2455.h contiene las descripciones de los puertos, terminales,registros, etcétera; útiles para configurar y ejecutar aplicaciones.

#include <p18f2455.h>

#include "system\typedefs.h"// Requerida

#include "system\usb\usb.h" // Requerida

#include "io_cfg.h" // Requerida

#include "system\usb\usb_compile_time_validation.h" // Opcional #include "user\user.h" // Modificable

Después de los #include, aparecen los fuses de configuración descritosanteriormente.

En la aplicación se utiliza un cristal de cuarzo de 4MHz, por lo que FOSC se haconfigurado como oscilador XT para el micro y para el USB; PLLDIV sin prescaler

para que al PLL le lleguen los 4MHZ directamente; el CPUDIV sin prostscaler para laseñal del reloj y postscaler de 1:2 para la señal del PLL y el USBDIV como 2 al llegar la fuente de los 96MHz del PLL.

#pragma config PLLDIV=1#pragma config CPUDIV=OSC1_PLL2#pragma config USBDIV=2#pragma config FOSC=XT_XT

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 548/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

546

El camino que sigue la señal de reloj en el diagrama del reloj es:

Este sistema se debe a la versatilidad y posibilidades que ofrece este micro.

En OSC1 y OSC2 se conecta el cristal, en este caso de 4MHz, pero, para elUSB, admite: 4, 8, 16, 20, 24, 40 y 48MHz.

Este cristal es el mismo que genera la frecuencia de 48MHz necesaria para elUSB y para el reloj del PIC, que puede ser la misma o no, esto quiere decir que el USB

puede funcionar a 48MHz mientras que el PIC trabaja a 4MHz.Después del disparador Smicht del Primary Oscillator (oscilador primario), salen

tres líneas en paralelo que van a distintos módulos.

La línea superior va directamente al switch USBDIV que, si está a cero, indicaque la frecuencia base original del cristal va directamente al USB. Esto es posible si elcristal es de 48MHz, los demás hay que tratarlos.

El USB clock source tiene en la entrada un Prescaler del PLL, o sea un divisor de frecuencia. En su salida se obtendrá una señal FOSC dividida por 1, 2, 3, 4, 5, 6, 10 ó12. Con PLLDIV se selecciona la deseada para obtener siempre 4MHz.

Así si el cristal es de 12MHz y se configura el PLLDIV con un 3 (010), seobtendrán 4MHz. En la aplicación se configura con un 1 para que no exista división.

La salida de este multiplexor se conecta al PLL de 96MHz, por eso siempre hayque introducir 4MHz.

Como los 96MHz son el doble de los necesarios, se divide por 2 para el USB.

Esta señal también se conecta a un Postscaler, otro divisor de 2, 3, 4 ó 6 y cuyassalidas se conectan al CPUDIV. En nuestro caso, CPUDIV=OSC1_PLL2 por lo queeste divisor se selecciona a 1:2, siendo 48MHz una posible frecuencia de oscilación delmicrocontrolador.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 549/651

GUILLERMO DAVID HERRERO GONZÁLEZ

547

Como, en la aplicación, FOSC=XT_XT, indica que FOSC3:FOSC0 valen 0,siendo la señal definitiva de la CPU los 4MHz del cristal de entrada.

Por último, llega al multiplexor FSEN la señal del reloj primario (PrimaryClock) dividida por 4 junto con la de la salida del USBDIV. Con este multiplexor seselecciona la señal de reloj primario o las del PLL o del Cristal dependiendo de laconfiguración. En la aplicación la señal proviene del PLL.

Continuando con los fuses, como no se utilizan, la mayoría se configuran comoOFF, excepto CCP2MX y VREGEN que se configuran como ON. El primero, porque lasalida PWM2 se quiere en el pin RC1. Y el segundo, porque el USB está activo y senecesita su regulador de tensión.

#pragma config FCMEM=OFF#pragma config IESO=OFF#pragma config PWRT=OFF#pragma config BOR=OFF#pragma config WDT=OFF#pragma config MCLRE=OFF#pragma config PBADEN=OFF#pragma config STVREN=OFF#pragma config LVP=OFF#pragma config XINST=OFF#pragma config DEBUG=OFF#pragma config CCP2MX=ON

#pragma config VREGEN=ON

7.3.1.2. Variables

En este archivo, no se declaran variables ya que las necesarias se han declaradoen las librarías.

#pragma udata //Coloca las variables en la memoria de datos

7.3.1.3. Prototipos privados

Los prototipos privados son las funciones que se utilizan dentro de un mismoarchivo.

static void InitializeSystem(void);void USBTasks(void);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 550/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

548

7.3.1.4. Remapeo Del vector

En esta parte del código, el compilador modifica el vector de inicio y el deinterrupción, mediante una rutina en ensamblador.

extern void _startup (void); //Vector de inicio

#pragma code _RESET_INTERRUPT_VECTOR = 0x000800 //Vector de interrupción

void _reset (void) //Vector de reset

_asm goto _startup _endasm

#pragma code

7.3.1.5. Declaraciones#pragma code //Coloca lo siguiente en la memoria de programa

7.3.1.5.1. void main(void)

Cada vez que se inicia el sistema, el micro ejecuta este código lo primero.

void main(void)

InitializeSystem(); //Salta a la rutina InitializeSystem(), existente en este mismo archivo

while(1)

USBTasks(); // USB Tasks dentro de este mismo archivo

Aplicacion(); // Salta a la rutina Aplicación() de user\user.c

7.3.1.5.2. void InitializeSystem(void)static void InitializeSystem(void)

#if defined(USE_USB_BUS_SENSE_IO)

tris_usb_bus_sense = INPUT_PIN; // Se define el puerto, se declara el terminal#endif //como puerto de entrada en io_cfg.h

#if defined(USE_SELF_POWER_SENSE_IO)tris_self_power = INPUT_PIN;

#endifmInitializeUSBDriver(); //Salta a la rutina de usbdrv.h

Inicializacion(); // Salta a la rutina de user\user.c

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 551/651

GUILLERMO DAVID HERRERO GONZÁLEZ

549

7.3.1.5.3. void USBTasks(void)void USBTasks(void)

USBCheckBusStatus(); //Se tiene que usar el método de muestreo

if(UCFGbits.UTEYE!=1)USBDriverService(); //Se puede usar el método de muestreo o el de interrupción

#if defined(USB_USE_CDC) //Si se define la clase CDC salta a la rutina indicada

CDCTxService();#endif

7.3.2. USBCFG.H

Las únicas modificaciones realizadas en esta librería corresponden con eldescriptor de la interfaz. El resto del código se ha comentado y analizado anteriormente.

#ifndef USBCFG_H#define USBCFG_H

7.3.2.1. Definiciones#define EP0_BUFF_SIZE 8 // 8, 16, 32, ó 64

#define MAX_NUM_INT 1 // For tracking Alternate Setting

/* Parameter definitions are defined in usbdrv.h */

#define MODE_PP _PPBM0#define UCFG_VAL _PUEN|_TRINT|_FS|MODE_PP

Como no se utilizan las entradas autoalimentadas ni las dependientes del busUSB, las siguientes definiciones se ponen como comentarios, para que el compilador lasignore.

//#define USE_SELF_POWER_SENSE_IO//#define USE_USB_BUS_SENSE_IO

7.3.2.2. Definición De La Clase#define USB_USE_GEN

/** MUID = Microchip USB Class ID* Se utiliza para indicar la clase de la sesión actual del control del EP0*/#define MUID_NULL 0#define MUID_USB9 1

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 552/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

550

7.3.2.3. Localizaciones De Los Endpoints

7.3.2.3.1. Identificador De La InterfazEs el nombre que se da a la interfaz para diferenciarlas entre las existentes.

En la aplicación sólo hay una interfaz, por lo que se nombra con el primer número, el cero.

#define USBGEN_INTF_ID 0x00

7.3.2.3.2. Endpoints

Son los Endpoints que se utilizan en esta interfaz y su descripción.

Como sólo se utiliza uno en toda la aplicación, es el Endpoint 1.

#define USBGEN_UEP UEP1

El Endpoint 1 se va a usar tanto en entrada como en salida con un buffer de 8 bytes. El tamaño de los buffers tiene que ser mayor que el número de bytes que seesperan transmitir.

#define USBGEN_BD_OUT ep1Bo#define USBGEN_OUT_EP_SIZE 8#define USBGEN_BD_IN ep1Bi#define USBGEN_IN_EP_SIZE 8

Se define el número total de Endpoints utilizados en todas las interfaces.#define MAX_EP_NUMBER 1 // UEP1

7.3.3. USBDSC.H

En esta librería, como en la anterior, sólo se modifica las características relativasa los descriptores de la conexión.

#ifndef USBDSC_H#define USBDSC_H

7.3.3.1. Incluye#include "system\typedefs.h"#include "autofiles\usbcfg.h"#include "system\usb\usb.h"

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 553/651

GUILLERMO DAVID HERRERO GONZÁLEZ

551

7.3.3.2. Definiciones

Se declara una estructura llamada CFG01 con los descriptores de lacomunicación, como sólo hay una se nombra 01.

#define CFG01 rom struct \

USB_CFG_DSC cd01; \USB_INTF_DSC i00a00; \USB_EP_DSC ep01o_i00a00; \USB_EP_DSC ep01i_i00a00; \

cfg01

7.3.3.3. Funciones Externasextern rom USB_DEV_DSC device_dsc;extern CFG01;extern rom const unsigned char *rom USB_CD_Ptr[];extern rom const unsigned char *rom USB_SD_Ptr[];

#endif //USBDSC_H

7.3.4. USBDSC.C

Este archivo contiene los descriptores de la aplicación.

7.3.4.1. Incluye#include "system\typedefs.h"#include "system\usb\usb.h"

7.3.4.2. Constantes#pragma romdata

7.3.4.2.1. Descriptor Del Dispositivosizeof(USB_DEV_DSC), Tamaño del descriptor en bytes DSC_DEV, Descriptor tipo DEVICE

0x0200, Número de versión del USB en formato BCD 0x00, Código de Clase

0x00, Código Subclase

0x00, Código Protocolo

EP0_BUFF_SIZE, Tamaño de paquete máximo para el EP0, ver usbcfg.h

0x04D8, ID Fabricante

0x8008, ID Producto, elegido por el programador

0x0000, Número de versión del dispositivo en formato BCD

0x01, String índice de fabricante

0x02, String índice del producto

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 554/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

552

0x00, String índice del número de serie del dispositivo

0x01 Número de configuraciones posible

;

7.3.4.2.2. Descriptor De La Configuración 1CFG01=

Descriptor de configuraciónsizeof(USB_CFG_DSC), Tamaño del descriptor en bytes DSC_CFG, Tipo del descriptor CONFIGURACIÓN

sizeof(cfg01), Longitud total de datos de esta configuración

1, Número de interfaces en esta configuración

1, Valor del índice de esta configuración0, String índice de configuración

_DEFAULT, Atributos, ver usbdefs_std_dsc.h

50, Consumo máximo de corriente (2X mA)

Descriptor de la interfazsizeof(USB_INTF_DSC), Tamaño del descriptor en bytes

DSC_INTF, Tipo de descriptor INTERFACE

0, Número de Interface

0, Número alterno de configuración

2, Número de Endpoints en esta interfaz

0, Código de la Clase0, Código de la Subclase

0, Código del Protocolo

0, String índice de interfaz

Descriptor Del Endpoint

Se define el Endpoint 1 tanto en entrada como en salida del tipo Bulk, con laclase genérica y el buffer asignado.

sizeof(USB_EP_DSC),DSC_EP,_EP01_OUT,_BULK,USBGEN_OUT_EP_SIZE,0x00,sizeof(USB_EP_DSC),DSC_EP,_EP01_IN,_BULK,USBGEN_IN_EP_SIZE,0x00,

;

Descriptor Del Idioma Del Dispositivorom structbyte bLength;byte bDscType;word string[1];sd000=sizeof(sd000),DSC_STR,0x0409;

Descriptor Del Nombre Del Fabricanterom structbyte bLength;byte bDscType;word string[25];sd001=sizeof(sd001),DSC_STR,'G','H','G';

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 555/651

GUILLERMO DAVID HERRERO GONZÁLEZ

553

Descriptor Del Nombre Del Dispositivorom structbyte bLength;byte bDscType;word string[25];sd002=sizeof(sd002),DSC_STR,'C','o','c','h','e','c','i','t','o',' ','l','e','r','é';

Almacena los descriptores en variables externas.

rom const unsigned char *rom USB_CD_Ptr[]=&cfg01,&cfg01;rom const unsigned char *rom USB_SD_Ptr[]=&sd000,&sd001,&sd002;

7.3.5. IO _ CFG.H #ifndef IO_CFG_H#define IO_CFG_H

7.3.5.1. Incluye#include "autofiles\usbcfg.h"

7.3.5.2. Tris

Define el valor para asignar al tris de un puerto para que este trabaje en entrada osalida.

#define INPUT_PIN 1#define OUTPUT_PIN 0

7.3.5.3. PuertoDefine los puertos utilizados con el nombre del componente conectado.

#define Distancia PORTAbits.RA0#define Fin1 PORTAbits.RA1#define Fin2 PORTAbits.RA2#define Fin3 PORTAbits.RA3

#define Bombillas PORTBbits.RB0#define LED1 PORTBbits.RB1#define LED2 PORTBbits.RB3#define Zumbador PORTBbits.RB2#define PaPD PORTBbits.RB4#define PaPC PORTBbits.RB5#define PaPB PORTBbits.RB6#define PaPA PORTBbits.RB7

#define Sentido1 PORTCbits.RC0#define PWM PORTCbits.RC1#define Sentido2 PORTCbits.RC2#define Dmenos PORTCbits.RC4

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 556/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

554

#define Dmas PORTCbits.RC5#define Verde PORTCbits.RC6

#define Rojo PORTCbits.RC7

7.3.5.4. USB

Define los puertos relativos al USB, este código no se ha modificado.

#define tris_usb_bus_sense TRISAbits.TRISA1 // Input

#if defined(USE_USB_BUS_SENSE_IO)#define usb_bus_sense PORTAbits.RA1#else#define usb_bus_sense 1

#endif

#define tris_self_power TRISAbits.TRISA2 // Input

#if defined(USE_SELF_POWER_SENSE_IO)#define self_power PORTAbits.RA2#else#define self_power 1#endif

7.3.6.

USER.H #ifndef USER_H#define USER_H

7.3.6.1. Prototipos Públicos

En este apartado se definen las funciones a las cuales se va a acceder desde otrosarchivos.

void Inicializacion(void);void Aplicacion(void);

#endif

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 557/651

GUILLERMO DAVID HERRERO GONZÁLEZ

555

7.3.7. USER.C

Este archivo se ha creado para la aplicación, siendo totalmente nuevo.

La mayor parte de las funciones empiezan con if (!OFF), esta instruccióncomprueba si la variable OFF es distinta de uno. Esta variable es la encargada dedeterminar si se ha recibido la instrucción de encender el coche o no.

7.3.7.1. Incluye

Añade las librerías necesarias para la ejecución del código de este archivo.

#include <p18f2455.h>#include "system\typedefs.h"

#include "system\usb\usb.h"#include "io_cfg.h"#include "user\user.h"#include <pwm.h>#include <delays.h>#include <adc.h>#include <timers.h>

7.3.7.2. Variables#pragma udata

char input_buffer[8]; //Define un buffer intermedio para las transmisiones de entradachar output_buffer[8]; //Define un buffer intermedio para las transmisiones de salida char OFF=1; //Define una variable para determinar si el coche está encendido

//o apagado. Si OFF=1 el coche está apagado

7.3.7.3. Prototipos Privadosvoid Mdelante(void);void Mdetras(void);void Giroizq(void);void Giroder(void);void Sensores(void);

void Claxon(void);void LucesON(void);void Paro(void);void Apagado(void);void Velocidad(void);void LucesOFF(void);void Encendido(void);void enviar(char datos);void chequeo(void);void ANOpen(void);void BlinkUSBStatus(void);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 558/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

556

7.3.7.4. Declaraciones

En este apartado se realiza el código propio del usuario.#pragma code

7.3.7.4.1. void Inicializacion(void)

Esta rutina inicializa el sistema del usuario.

void Inicializacion(void)

TRISA=0x0F; //Configura los puertos como E/S dependiendo de su uso

TRISB=0;TRISC=0;

PORTA=0;PORTB=0;PORTC=0;Rojo=0x01; //Enciende el LED bicolor con el color rojo para indicar que el

//dispositivo tiene corrienteADCON1=0xFF; //Inicialización del conversor analógico, todo E/S digitales

Zumbador=0;OpenPWM2(0xFF); //Inicializa el PWM

OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);//Inicializa el Timer2 para el PWM

ANOpen(); //Inicializa el Conversor A/D para el sensor de distancias

7.3.7.4.2. void Aplicacion(void)

Este es el lugar para colocar las rutinas del usuario.

Dependiendo del comando recibido por el USB el microcontrolador hará unacosa u otra.

void Aplicacion(void)

BlinkUSBStatus();

if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return;//si el disposiivo no está configurado vuelveif (USBGenRead((char *)input_buffer,3)) //Comprueba si ha recibido algún dato

chequeo();

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 559/651

GUILLERMO DAVID HERRERO GONZÁLEZ

557

7.3.7.4.3. void chequeo(void)

Esta función es la que se encarga de determinar un comando y saltar a la funciónadecuada.

void chequeo(void) switch (input_buffer[0]) //reconoce el comando y salta a la función determinada por este.

case 0x01:

Mdelante();break;

case 0x02:Mdetras();

break;case 0x03:

Giroizq();break;

case 0x04:Giroder();

break;case 0x05:

Sensores();break;

case 0x06:

Claxon();break;case 0x07:

LucesON();break;

case 0x08:Paro();

break;case 0x09:

Apagado();break;

case 'a':Velocidad();

break;case 'b':

LucesOFF();break;

case 'c':Encendido();

break;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 560/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

558

7.3.7.4.4. void enviar(void)

Esta función se encarga de enviar un dato por el USBvoid enviar(char datos)

if (!mUSBGenTxIsBusy()) //Comprueba que se pueden enviar datos USBGenWrite((byte *)&output_buffer,datos); //Envía los datos

7.3.7.4.5. void Mdelante(void)

Esta función activa las salidas oportunas para que el coche avance.

void Mdelante(void)

if (!OFF) //Comprueba que el coche no esté apagado

Velocidad(); //Activa la velocidad deseada

Sentido1=1; //Se encienden los motores CC, para que el coche avance

Sentido2=0;

7.3.7.4.6. void Mdetras(void)

Esta función activa las salidas oportunas para que los motores retrocedanvoid Mdetras(void)

if (!OFF)

Velocidad(); //Activa la velocidad deseada

Sentido1=0; //Se encienden los motores CC, para que el coche retroceda

Sentido2=1;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 561/651

GUILLERMO DAVID HERRERO GONZÁLEZ

559

7.3.7.4.7. void Velocidad(void)

Esta función cambia el duty cicle del PWM2 para modificar la velocidad delcoche.

void Velocidad(void)long dato;

OpenPWM2(0xFF); //Inicializa el PWMswitch (input_buffer[2])

Esta rutina transforma los dos bytes recibidos en un long para modificar el DutyCicle del PWM que es de 10bits. Realiza una transformación a decimal del dato

recibido.En el último caso, comprueba si el dato recibido es el 3FFh, para desactivar el

PWM y activar el puerto del PWM, ya que si no no se activa la velocidad máxima.

case 0: dato=input_buffer[1];

break;case 1: dato=input_buffer[1]+256;

break;case 2: dato=input_buffer[1]+512;

break;

case 3: if (input_buffer[1]==0xFF)ClosePWM2();PWM=1;

else dato=input_buffer[1]+768;break;

SetDCPWM2(dato);

7.3.7.4.8. void Paro(void)

Esta función cambia el duty cicle del PWM2 para modificar la velocidad delcoche.

void Paro(void)

Sentido1=0;Sentido2=0;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 562/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

560

7.3.7.4.9. void Giroizq(void)

Esta función activa el motor Paso-Paso para que el coche gire a la izquierda.void Giroizq(void)char i;

if (!OFF)

for (i=0; i<=input_buffer[1];i++)

PaPA=1;PaPB=1;PaPC=0;PaPD=0;Delay1KTCYx(3); //el valor del retardo entre los pulsos del motor PP tiene que ser

//entre 3 y 255PaPA=0;PaPB=1;PaPC=1;PaPD=0;Delay1KTCYx(3);PaPA=0;PaPB=0;PaPC=1;PaPD=1;Delay1KTCYx(3);PaPA=1;PaPB=0;PaPC=0;PaPD=1;Delay1KTCYx(3);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 563/651

GUILLERMO DAVID HERRERO GONZÁLEZ

561

7.3.7.4.10. void Giroder(void)

Esta función activa el motor Paso-Paso para que el coche gire a la derecha.void Giroder(void)char i;

if (!OFF)

for (i=0; i<=input_buffer[1];i++)

PaPA=1;PaPB=0;PaPC=0;PaPD=1;Delay1KTCYx(3); //el valor del retardo entre los pulsos del motor PP tiene que ser

//entre 3 y 255PaPA=0;PaPB=0;PaPC=1;PaPD=1;Delay1KTCYx(3);PaPA=0;PaPB=1;PaPC=1;PaPD=0;Delay1KTCYx(3);PaPA=1;PaPB=1;PaPC=0;PaPD=0;Delay1KTCYx(3);

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 564/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

562

7.3.7.4.11. void ANOpen(char c)

Esta función activa/desactiva el conversor A/D especificado en c.void ANOpen(void)

OpenADC(ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_20_TAD,ADC_CH0 &ADC_INT_OFF & ADC_VREFPLUS_VDD, 14);

Delay10TCYx(5); //Retraso para que se inice el CA/D

7.3.7.4.12. void Sensores(void)

Esta función comprueba los sensores y envía el dato al ordenador por el USB.

void Sensores(void)

if (!OFF)

SetChanADC(ADC_CH0); //Seleccionamos el canal

ConvertADC(); //Comienza la conversión del dato del sensor de distancia

while(BusyADC()); //Espera a que termine la conversión

output_buffer[0]=ReadADC(); //Lee el dato y lo envía

output_buffer[1]=ADRESH;output_buffer[2]=PORTA; //envía el dato de los finales de carrera

enviar(3);

7.3.7.4.13. void Claxon(void)

Esta función activa el zumbador durante un periodo de tiempo modificable.

void Claxon(void)

if (!OFF)Zumbador=1;Delay10KTCYx(30); //Como el Xtal es de 4MHz, el ciclo de instrucción dura 1ms,

//esta rutinaZumbador=0; //realiza un retardo de 30000 ciclos de instrucción.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 565/651

GUILLERMO DAVID HERRERO GONZÁLEZ

563

7.3.7.4.14. void Apagado(void)

Esta función apaga el coche.void Apagado(void)

Sentido1=0;Sentido2=0;Bombillas=0;LED2=0;LED1=0;OFF=1;

7.3.7.4.15. void Encendido(void)Esta función enciende el coche.

void Encendido(void)

OFF=0;

7.3.7.4.16. void LucesON(void)

Esta función enciende las luces del coche.

void LucesON(void)

if (!OFF)

Bombillas=1;LED2=1;LED1=1;

7.3.7.4.17.

void LucesOFF(void)Esta función apaga las luces del coche.

void LucesOFF(void) if (!OFF)

Bombillas=0;LED2=0;LED1=0;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 566/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

564

7.3.7.4.18. void BlinkUSBStatus(void)

Esta función enciende el led bicolor en rojo cuando el dispositivo no se haconfigurado y en verde cuando ya lo está.

void BlinkUSBStatus(void)

if(usb_device_state == CONFIGURED_STATE)

PORTCbits.RC7=1;PORTCbits.RC6=0;

else

PORTCbits.RC6=1;PORTCbits.RC7=0;

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 567/651

GUILLERMO DAVID HERRERO GONZÁLEZ

565

7.4.

SOFTWARE D EL O RDENADOR La descripción de la aplicación se realizará en aparatados. Cada apartado será unform o un módulo.

Los form se mostrarán compilados y sin compilar y una tabla en la queaparezcan los objetos utilizados. En la tabla se comentarán las propiedades del objeto,sólo las que tengan una especial relevancia en la aplicación.

Después de la descripción de los objetos, se analizará el código que, como en elresto de la memoria, aparecerá en Comics Sans MS y los comentarios en Times NewRoman.

7.4.1. MÓDULO APIUSB.BAS

Los módulos, son archivos en los que sólo aparecen funciones accesibles desdetodos los form del programa.

Este módulo contiene las funciones relativas a la comunicación USB, que ya hansido comentadas anteriormente.

El contenido del módulo es:

Option Explicit

El comando Option Explicit aparece en todos los form y módulos del programa.

Este comando indica que todas las variables que se utilicen tienen se tienen que haber definido anteriormente.

7.4.1.1. Funciones De La Mpusbapi.DllPublic Declare Function MPUSBGetDLLVersion Lib "mpusbapi.dll" () As LongPublic Declare Function MPUSBGetDeviceCount Lib "mpusbapi.dll" (ByVal pVID_PID AsString) As LongPublic Declare Function MPUSBOpen Lib "mpusbapi.dll" (ByVal instance As Long, ByValpVID_PID As String, ByVal pEP As String, ByVal dwDir As Long, ByVal dwReserved AsLong) As Long

Public Declare Function MPUSBClose Lib "mpusbapi.dll" (ByVal handle As Long) As LongPublic Declare Function MPUSBRead Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pDataAs Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) AsLongPublic Declare Function MPUSBWrite Lib "mpusbapi.dll" (ByVal handle As Long, ByValpData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds AsLong) As LongPublic Declare Function MPUSBReadInt Lib "mpusbapi.dll" (ByVal handle As Long, ByValpData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds AsLong) As Long

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 568/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

566

7.4.1.2. Función De Recuperación De Datos AlmacenadosPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any,pSrc As Long, ByVal ByteLen As Long)

Con esta función se recuperan los datos de un puntero y las posiciones dememoria siguientes que indiquemos.

Los argumentos son:

Ø pDst: variable en la cual se van a almacenar los datos de la dirección.

Ø pSrc: variable con la dirección de memoria.

Ø ByteLen: número de bytes que hay que recuperar.

7.4.1.3. Constantes Para La WIN32 API Public Const INVALID_HANDLE_VALUE = -1Public Const ERROR_INVALID_HANDLE = 6&

7.4.1.4. Constantes De Conectividad Con El PICPublic Const vid_pid = "vid_04d8&pid_8008"

Vendor id (Microchip) y Periférico id. La identificación del periférico se ha puesto la misma que la del firmware.

Public Const out_pipe = "\MCHP_EP1" 'Las comunicaciones las hacemos con el Endpoint 1 Public Const in_pipe = "\MCHP_EP1"

7.4.1.5. IN_PIPE Y OUT_PIPE Variables PúblicasPublic myInPipe As LongPublic myOutPipe As Long

7.4.1.6. Variables Públicas Del ProgramaPublic rec(8) As BytePublic DatosDistancia(1, 7) As Integer

7.4.1.7. Apertura De Las Comunicaciones

Sub OpenMPUSBDevice()

myOutPipe = MPUSBOpen(0, vid_pid, out_pipe, 0, 0) 'como salidamyInPipe = MPUSBOpen(0, vid_pid, in_pipe, 1, 0) 'como entrada

End Sub

Con esta función obtenemos las pipe de entrada y de salida dependiendo del 0 oel 1.

Con estas pipe se van a realizar todas las transacciones del puerto USB alhardware.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 569/651

GUILLERMO DAVID HERRERO GONZÁLEZ

567

7.4.1.8. Cierre De Las ComunicacionesSub CloseMPUSBDevice()

MPUSBClose (myOutPipe)MPUSBClose (myInPipe)

End Sub

Con esta función se cierran las pipe abiertas anteriormente.

7.4.1.9. Función Enviar Function Send(ByRef SendData() As Byte, bytes As Integer) As LongDim SentDataLength As Long

Call MPUSBWrite(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000)'VarPtr()= puntero a la variable

End Function

Se declara una función que necesita una variable con los datos SendData(), loscorchetes indican que es una matriz sin dimensiones definidas y el ByRef que elargumento se pasa por referencia. De este modo, cualquier cambio que sufra un

parámetro en el código de la función o del procedimiento también lo sufrirá elargumento correspondiente de la llamada. Aunque no aparezca la propiedad ByRef , se

presupone y la variable posee esta propiedad.El otro argumento de entrada bytes, es el número de bytes que hay que enviar.

Para llamar a la función MPUSBWrite (comentada anteriormente), se utiliza lafunción Call porque no se utilizan los datos devueltos por la primera función.

Los argumentos de MPUSBWrite son los descritos anteriormente, utilizando la propiedad VarPtr() cuando el argumento es un puntero.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 570/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

568

7.4.1.10. Función Recibir Function recibir(ByRef s() As Byte, ByRef Datos As Long) As LongDim direcciones As Long

Call MPUSBRead(myInPipe, VarPtr(s(0)), Datos, Datos, 1000)direcciones = VarPtr(s(0))CopyMemory ByVal VarPtr(rec(0)), ByVal direcciones, Datos 'recupera el dato

almacenado en la dirección de memoria de rec

End Function

La función MPUSBRead se llama con Call porque no se aprovechan los datosdevueltos.

En la variable direcciones, se almacena la primera dirección de memoria del buffer de entrada s(), para poder guardar los datos recibidos en la variable rec() mediante la función CopyMemory (comentada anteriormente).

Los argumentos se defienen con ByVal , es decir, por valor. Se utiliza estadefinición cuando no se quiere que el valor del argumento de llamada cambie con elvalor del argumento de la función.

7.4.2. FORMULARIO INICIO

Este es el formulario principal del programa. En él se encuentran las funciones

relativas al movimiento del coche así como las de las luces y el claxon. También seencuentra el menú para encender y apagar el coche y abrir el resto de form.

Form Inicio Sin Compilar

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 571/651

GUILLERMO DAVID HERRERO GONZÁLEZ

569

Form Inicio Compilado

Objetos Del Form Inicio

Objeto Nombre Propiedad Valor

CommandButton AvanzaStyle

PictureEnabled

GraphicalArriba.ico

False

CommandButton RetrocedeStyle

PictureEnabled

GraphicalAbajo.ico

False

CommandButton IzquierdaStyle

PictureEnabled

GraphicalIzquierda.ico

False

CommandButton DerechaStyle

PictureEnabled

GraphicalDerecha.ico

False

CommandButton ParoStyle

Picture

Enabled

GraphicalStop.ico

False

CommandButton ClaxonStyle

PictureEnabled

GraphicalCampana.ico

False

CommandButton LucesStyle

PictureEnabled

GraphicalBombillaOff.ico

False

CommandButton Off

StylePictureEnabledVisible

GraphicalBombillaOff.ico

False

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 572/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

570

CommandButton LonStyle

Picture

Visible

GraphicalBombillaOn.ico

FalseCommandButton sensores

StylePicture

GraphicalCono.ico

Label Label1 Caption Giro:Label Label2 Caption ºLabel Label3 Caption Velocidad:Label Label4 Caption %

TextBox TextVelocidad Text 0TextBox TextGiro Text 0

HScrollBar ScrollGiroMaxMin

Value

6000

HScrollBar ScrollVelocidadMaxMin

Value

10000

Menu Encendido Index 0Menu Apagado Index 1Menu Comandos Index 2Menu Ajuste Index 3Menu Salir Index 4

CommonDialog CommonDialog

7.4.2.1. Código Del Form Inicio

7.4.2.1.1. Variables GlobalesOption ExplicitDim Send_Buf(0 To 2) As BytePublic lucesON As BooleanPublic Angulo As IntegerDim velocidad(0 To 1) As Byte

Las variables declaradas con Dim son válidas para el form; y las declaradas con

Public son para todos los form.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 573/651

GUILLERMO DAVID HERRERO GONZÁLEZ

571

7.4.2.1.2. Función Avanza_ClickPublic Sub Avanza_Click()

Send_Buf(0) = 1Send_Buf(1) = velocidad(0)Send_Buf(2) = velocidad(1)Send Send_Buf, 3

End Sub

Esta función se activa cuando se hace clic en el botón Avanza. Es la encargadade enviar el código de instrucción 1 relativo al comando para activar los motores de CC

para que el coche avance.

Los otros dos datos que envía es la velocidad.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.3. Función Claxon_ClickPublic Sub Claxon_Click()

Send_Buf(0) = 6Send Send_Buf, 1

End Sub

Esta función se activa cuando se hace clic en el botón Claxon. Envía el código 6 para que el microcontrolador active el zumbador.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.4. Función Derecha_ClickPublic Sub Derecha_Click()

Send_Buf(0) = 4Angulo = Angulo + TextGiro.Text \ 2Send_Buf(1) = TextGiro.Text \ 2Send Send_Buf, 2

End Sub

Esta función se activa cuando se hace clic en el botón Derecha. Envía el código4 para que el microcontrolador active el motor PaP para que el coche gire a la derecha.

El otro byte que envía es el ángulo de giro. El valor introducido en el textboxTextGiro se divide por dos porque el PaP usado en la aplicación es de 1,8º, por lo quecada pulso gira estos grados. Al introducir un ángulo de giro de x grados habrá quedecirle al micro que mande x/2 pulsos para que el motor gire, aproximadamente losgrados determinados.

Los pulsos que se han enviado los guarda en la variable Angulo para poder enviar la orden para que el coche avance en línea recta después.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 574/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

572

7.4.2.1.5. Función Form_LoadPrivate Sub Form_Load()

OpenMPUSBDevice 'abre comunicaciones

If (myOutPipe = INVALID_HANDLE_VALUE) Or (myInPipe =INVALID_HANDLE_VALUE) Then

MsgBox "No se ha comunicado con el dispositivo", 0 + 16, "Error"End

End If

'Cargamos los datos del sensor de distanciaOpen "distancia.ghg" For Input As #1While EOF(1) <> True

Input #1, DatosDistancia(0, i)Input #1, DatosDistancia(1, i)i = i + 1

WendClose #1Sensor.Visible = True

End Sub

Esta función se activa cuando se hace carga el form Inicio. Intenta abrir lascomunicaciones con el dispositivo, si no es posible sale un mensaje de error y no se abre

el programa.Si la comunicación tiene éxito, se abre el from Sensor y se cargan las lecturas sel

sensor de distancia almacenadas en el archivo distancia.ghg gracias al componenteCommonDialog.

7.4.2.1.6. Función Form_UnloadPrivate Sub Form_Unload(Cancel As Integer)

Send_Buf(0) = 9Send Send_Buf, 1CloseMPUSBDevice 'cierra comunicaciones

End SubEsta función se activa cuando se hace cierra el form Inicio. Envía el código 9

para que el microcontrolador apague el coche y cierra las comunicaciones.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 575/651

GUILLERMO DAVID HERRERO GONZÁLEZ

573

7.4.2.1.7. Función Izquierda_ClickPublic Sub Izquierda_Click()

Send_Buf(0) = 3Angulo = Angulo - TextGiro.Text \ 2Send_Buf(1) = TextGiro.Text \ 2Send Send_Buf, 2

End Sub

Esta función se activa cuando se hace clic en el botón Izquierda. Es igual que lafunción Derecha_Click pero cambiando el código de giro para que lo haga a laizquierda.

Los pulsos enviados, en este casos se restan.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.8. Función Luces_ClickPublic Sub Luces_Click()

If lucesON = False ThenSend_Buf(0) = 7Luces.Picture = Lon.PictureSend Send_Buf, 1lucesON = True

ElseLuces.Picture = off.PictureSend_Buf(0) = Asc("b")Send Send_Buf, 1lucesON = False

End IfEnd Sub

Esta función se activa cuando se hace clic en el botón Luces. Envía el código 6 para que el microcontrolador active los LEDs y las bombillas.

Al hacer clic comprueba si las luces están encendidas o apagadas. Una vezdeterminado el estado de las luces, cambia el icono del botón y envía el código de

instrucción determinado.Esta función es Public para que se pueda acceder a ella desde cualquier form.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 576/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

574

7.4.2.1.9. Menu_ClickPublic Sub Menu_Click(Index As Integer)

Select Case IndexCase 0:

Izquierda.Enabled = TrueDerecha.Enabled = TrueAvanza.Enabled = TrueRetrocede.Enabled = TrueParo.Enabled = TrueLuces.Enabled = TrueClaxon.Enabled = TrueSensor.sensores.Enabled = True

ScrollVelocidad.Enabled = TrueTextVelocidad.Enabled = TrueScrollGiro.Enabled = TrueTextGiro.Enabled = TrueAjuste.Izquierda.Enabled = TrueAjuste.Derecha.Enabled = TrueSend_Buf(0) = Asc("c")Send Send_Buf, 1

Case 1:Izquierda.Enabled = FalseSensor.sensores.Enabled = False

Derecha.Enabled = FalseAvanza.Enabled = FalseRetrocede.Enabled = FalseParo.Enabled = FalseLuces.Enabled = FalseLuces.Picture = off.PicturelucesON = FalseClaxon.Enabled = FalseScrollVelocidad.Enabled = FalseTextVelocidad.Enabled = FalseScrollGiro.Enabled = FalseTextGiro.Enabled = FalseSend_Buf(0) = 9Send Send_Buf, 1

Case 2:Sensor.sensores.Enabled = FalseSensor.Distancia.Caption = ""Comandos.Visible = True

Case 3:Ajuste.Visible = True

Case 4:

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 577/651

GUILLERMO DAVID HERRERO GONZÁLEZ

575

Send_Buf(0) = 9Send Send_Buf, 1

CloseMPUSBDevice 'cierra comunicaciones End

End SelectEnd Sub

Esta función se activa cuando se hace clic en el menú. Dependiendo del valor deindex, que es el índice del elemento pulsado, hace una acción u otra:

Ø Case 0: Encendido: envía el comando para encender el coche y activatodos los objetos del programa.

Ø Case 1: Apagado: envía el comando para apagar el coche y desactiva

todos los objetos del programa.Ø Case 2: Comandos: desactiva el temporizador utilizado para leer los

sensores y abre el form Comandos.

Ø Case 3: Ajuste: abre el form Ajuste.

Ø Case 4: Salir: apaga el coche y cierra las comunicaciones y el programa.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.10. Función Paro_ClickPublic Sub Paro_Click()

Send_Buf(0) = 8Send Send_Buf, 1If Angulo < 0 Then

Send_Buf(0) = 3Send_Buf(1) = -AnguloSend Send_Buf, 2

End IfIf Angulo > 0 Then

Send_Buf(0) = 4Send_Buf(1) = AnguloSend Send_Buf, 2

End IfAngulo = 0

End Sub

Esta función se activa cuando se hace clic en el botón Paro. Envía el código 8 para que el microcontrolador desactive los motores de CC y envía los pulso para quegire el motor PaP para que cuando se vuelva a enviar la instrucción de avanzar, el cochelo haga en línea recta.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 578/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

576

7.4.2.1.11. Retrocede_ClickPublic Sub Retrocede_Click()

Send_Buf(0) = 2Send_Buf(1) = velocidad(0)Send_Buf(2) = velocidad(1)Send Send_Buf, 3

End Sub

Esta función se activa cuando se hace clic en el botón Retrocede. Es igual que lafunción Avanza_Click pero con el código de instrucción para que el coche retroceda.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.12. Función ScrollGiro_ChangePublic Sub ScrollGiro_Change()

TextGiro.Text = ScrollGiro.ValueEnd Sub

Esta función se activa cuando se hace cambia el valor del ScrollGiro. Cambia eldato del textbox TextGiro al valor del scroll.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.13. Función ScrollVelocidad_ChangePublic Sub ScrollVelocidad_Change()

TextVelocidad.Text = ScrollVelocidad.ValueEnd Sub

Esta función se activa cuando se hace cambia el valor del ScrollVelocidad. Cambia el dato del textbox TextVelocidad al valor del scroll.

Esta función es Public para que se pueda acceder a ella desde cualquier form.

7.4.2.1.14. Función sensores_ClickPrivate Sub sensores_Click()

Sensor.Visible = TrueEnd Sub

Esta función se activa cuando se hace clic en el botón sensores. Abre el formSensor .

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 579/651

GUILLERMO DAVID HERRERO GONZÁLEZ

577

7.4.2.1.15. Función TextGiro_ChangePrivate Sub TextGiro_Change()

If TextGiro.Text Like "#" Or TextGiro.Text Like "##" Then 'Comprueba que el datointroducido es un número y está dentro del rango permitido

If TextGiro.Text >= 0 ThenIf TextGiro.Text <= 60 Then

ScrollGiro.Value = TextGiro.TextElse

MsgBox "Ángulo de giro incorrecto", 0 + 16, "Error"ScrollGiro.Value = 1TextGiro.Text = 1

End IfElse

MsgBox "Ángulo de giro incorrecto", 0 + 16, "Error"ScrollGiro.Value = 1TextGiro.Text = 1

End IfElse

MsgBox "Ángulo de giro incorrecto", 0 + 16, "Error"ScrollGiro.Value = 1TextGiro.Text = 1

End IfEnd Sub

Esta función se activa cuando cambia el valor del texto de TextGiro. Compruebaque el valor introducido es válido, si no lo es cambia su valor y el de ScrollGiro a cero yemite un mensaje de error.

7.4.2.1.16. Función TextVelocidadPrivate Sub TextVelocidad_Change()Dim dato As IntegerDim resto As IntegerDim resHex As String

If TextVelocidad.Text Like "#" Or TextVelocidad.Text Like "##" OrTextVelocidad.Text Like "###" Then 'Comprueba que el dato introducido es un número

If TextVelocidad.Text >= 0 Then 'y está dentro del rango permitido

If TextVelocidad.Text <= 100 ThenScrollVelocidad.Value = TextVelocidad.Textdato = TextVelocidad.Text * 5.115 + 511.5resHex = ""Do

resto = dato Mod 16dato = dato \ 16Select Case resto

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 580/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

578

Case 0resHex = "0" + resHex

Case 1resHex = "1" + resHex

Case 2resHex = "2" + resHex

Case 3resHex = "3" + resHex

Case 4resHex = "4" + resHex

Case 5resHex = "5" + resHex

Case 6resHex = "6" + resHex

Case 7resHex = "7" + resHex

Case 8resHex = "8" + resHex

Case 9resHex = "9" + resHex

Case 10resHex = "A" + resHex

Case 11

resHex = "B" + resHexCase 12resHex = "C" + resHex

Case 13resHex = "D" + resHex

Case 14resHex = "E" + resHex

Case 15resHex = "F" + resHex

End SelectLoop Until dato < 15

Select Case datoCase 1

resHex = "1" + resHexCase 2

resHex = "2" + resHexCase 3

resHex = "3" + resHexCase 4

resHex = "4" + resHexCase 5

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 581/651

GUILLERMO DAVID HERRERO GONZÁLEZ

579

resHex = "5" + resHexCase 6

resHex = "6" + resHexCase 7

resHex = "7" + resHexCase 8

resHex = "8" + resHexCase 9

resHex = "9" + resHexCase 10resHex = "A" + resHex

Case 11resHex = "B" + resHex

Case 12resHex = "C" + resHex

Case 13resHex = "D" + resHex

Case 14resHex = "E" + resHex

Case 15resHex = "F" + resHex

End Select

‘Rutina para comprobar el dato enviadoIf resHex Like "1??" Then

Send_Buf(2) = 1Send_Buf(1) = TextVelocidad.Text * 5.115 + 255.5

ElseIf resHex Like "2??" Then

Send_Buf(2) = 2Send_Buf(1) = TextVelocidad.Text * 5.115 - 0.5

ElseIf resHex Like "3??" Then

Send_Buf(2) = 3

Send_Buf(1) = TextVelocidad.Text * 5.115 - 256.5ElseSend_Buf(1) = TextVelocidad.Text * 5.115Send_Buf(2) = 0

End IfEnd If

End IfElse

MsgBox "Velocidad incorrecta", 0 + 16, "Error"ScrollVelocidad.Value = 0TextVelocidad.Text = 0

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 582/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

580

Send_Buf(1) = 0Send_Buf(2) = 0

End IfElse

MsgBox "Velocidad incorrecta", 0 + 16, "Error"ScrollVelocidad.Value = 0TextVelocidad.Text = 0Send_Buf(1) = 0Send_Buf(2) = 0

End IfElse

MsgBox "Velocidad incorrecta", 0 + 16, "Error"ScrollVelocidad.Value = 0TextVelocidad.Text = 0Send_Buf(1) = 0Send_Buf(2) = 0

End IfSend_Buf(0) = Asc("a")velocidad(0) = Send_Buf(1)velocidad(1) = Send_Buf(2)Send Send_Buf, 3

End Sub

Esta función se activa cuando cambia el valor del texto de TextVelocidad.

Comprueba que el valor introducido es válido, si no lo es cambia su valor y el deScrollVelocidad a cero y emite un mensaje de error. Si es correcto lo envía almicrocontrolador.

Como el valor de la velocidad se introduce en tantos por cien, hay quetransformarlo a su valor, por eso se multiplica por 10,23 ya que el 100% correspondecon el valor 1023.

Después de calcular el valor de la velocidad o, lo que es lo mismo, delDutyCicle, se transforma a hexadecimal para poder enviar los diez bits del ciclo detrabajo.

Una vez en hexadecimal, se determina el valor de byte alto y, al valor de lavelocidad se le resta el valor correspondiente al byte alto para calcular el byte bajo.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 583/651

GUILLERMO DAVID HERRERO GONZÁLEZ

581

7.4.2.1.17. Función Form_KeyPressPrivate Sub Form_KeyPress(KeyAscii As Integer)

Select Case KeyAsciiCase 105:

If Avanza.Enabled = True ThenAvanza_Click

End IfCase 108:

If Avanza.Enabled = True ThenDerecha_Click

End IfCase 107:

If Avanza.Enabled = True ThenRetrocede_ClickEnd If

Case 106:If Avanza.Enabled = True Then

Izquierda_ClickEnd If

Case 122:If Avanza.Enabled = True Then

Paro_ClickEnd If

Case 120:If Avanza.Enabled = True Then

Luces_ClickEnd If

Case 100:If Avanza.Enabled = True Then

Claxon_ClickEnd If

Case 116:If Avanza.Enabled = True Then

TextVelocidad.Text = TextVelocidad.Text - 5End If

Case 121:If Avanza.Enabled = True Then

TextVelocidad.Text = TextVelocidad.Text + 5End If

Case 102:If Avanza.Enabled = True Then

TextGiro.Text = TextGiro.Text + 1End If

Case 103:

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 584/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

582

If Avanza.Enabled = True ThenTextGiro.Text = TextGiro.Text - 1

End IfEnd Select

End Sub

Esta función se activa cuando se pulsa una tecla al tener activo el form inicio . Comprueba que tecla se ha pulsado, y si es una de las que ejectuan una instrucción, saltaal lugar especificado.

Las teclas que realizan funciones son:

Ê z: Para el coche

Ê i: activa los motores para que el coche avance

Ê l: activa el motor PaP para que el coche gire a la derecha

Ê j: activa el motor PaP para que el coche gire a la izquierda

Ê k: activa los motores para que el coche retorceda

Ê x: activa/desactiva las luces

Ê d: activa el claxon

Ê y: aumenta la velocidad

Ê t: disminuye la velocidad

Ê f: aumenta el ángulo de giroÊ g: disminuye el ángulo de giro

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 585/651

GUILLERMO DAVID HERRERO GONZÁLEZ

583

7.4.3. FORM A JUSTE

En este form aparecen los botones para ajustar la dirección del coche. Si alavanzar en línea recta, el coche gira en algún sentido, se podrá modificar desde esteform.

Form Ajuste Sin Compilar

Form Ajuste Compilado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 586/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

584

Objetos Del Form Ajuste

Objeto Nombre Propiedad Valor

CommandButton IzquierdaStyle

PictureEnabled

GraphicalIzquierda.ico

False

CommandButton DerechaStyle

PictureEnabled

GraphicalDerecha.ico

False

CommandButton AjDistanciaCaptionEnabled

Ajustar False

Timer MedidasIntervalEnabled

50False

Timer TimerDistanciaIntervalEnabled

10False

CommonDialog CommonDialog

7.4.3.1. Código Del Form Ajuste

7.4.3.1.1. VariablesOption ExplicitPrivate Send_Buf(0 To 2) As ByteDim contador As Integer

Dim i As Integer

7.4.3.1.2. Función Derecha_ClickPublic Sub Derecha_Click()

Send_Buf(0) = 4Send_Buf(1) = 1Send Send_Buf, 2Inicio.Angulo = 0

End Sub

Esta función se activa cuando se hace clic en el botón Derecha. Envía la orden

de giro a la derecha de un pulso o (1,8º) y reinicia la variable Angulo perteneciente alform Inicio porque, se supone, que este es el ángulo 0.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 587/651

GUILLERMO DAVID HERRERO GONZÁLEZ

585

7.4.3.1.3. Función Izquierda_ClickPublic Sub Izquierda_Click()

Send_Buf(0) = 3Send_Buf(1) = 1Send Send_Buf, 2Inicio.Angulo = 0

End Sub

Esta función se activa cuando se hace clic en el botón Izquierda. Envía la ordende giro a la izquierda de un pulso o (1,8º) y reinicia la variable Angulo perteneciente alform Inicio porque, se supone, que este es el ángulo 0.

7.4.3.1.4. Función AjDistancia_Click

Public Sub AjDistancia_Click()TimerDistancia.Enabled = True

End Sub

Esta función se activa cuando se hace clic en el botón AjDistancia. Activa eltimer TimerDistancia para que ejecute sus instrucciones.

7.4.3.1.5. Función TimerDistancia_TimerPrivate Sub TimerDistancia_Timer()

Select Case contador

Case 0:TimerDistancia.Interval = 1000MsgBox "Situe un objeto a 10cm", vbInformation + vbOKOnly, "Instrucciones"i = 0Medidas.Enabled = Truecontador = contador + 1

Case 1:MsgBox "Situe un objeto a 20cm", vbInformation + vbOKOnly, "Instrucciones"

i = 1contador = contador + 1

Case 2:MsgBox "Situe un objeto a 30cm", vbInformation + vbOKOnly, "Instrucciones"i = 2contador = contador + 1

Case 3:MsgBox "Situe un objeto a 40cm", vbInformation + vbOKOnly, "Instrucciones"i = 3

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 588/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

586

contador = contador + 1

Case 4:MsgBox "Situe un objeto a 50cm", vbInformation + vbOKOnly, "Instrucciones"i = 4contador = contador + 1

Case 5:MsgBox "Situe un objeto a 60cm", vbInformation + vbOKOnly, "Instrucciones"i = 5contador = contador + 1

Case 6:MsgBox "Situe un objeto a 70cm", vbInformation + vbOKOnly, "Instrucciones"i = 6contador = contador + 1

Case 7:MsgBox "Situe un objeto a 80cm", vbInformation + vbOKOnly, "Instrucciones"i = 7contador = contador + 1

Case 8:

Medidas.Enabled = FalseTimerDistancia = Falsecontador = 0'Guardamos los datos en el archivoOpen "distancia.ghg" For Output As #1For i = 0 To 7

Print #1, DatosDistancia(0, i)Print #1, DatosDistancia(1, i)

NextClose #1MsgBox "Sensor calibrado", vbExclamation + vbOKOnly, "Mensaje"

TimerDistancia.Interval = 10End Select

End Sub

Esta función se activa cuando se completa el intervalo del timer TimerDistancia.

El temporizador comienza con un intervalo de 10ms para que, al pulsar el botón,se active directamente el timer. Depués se cambia el intervalo a 1s para que el programahaga varias medidas de la misma distancia.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 589/651

GUILLERMO DAVID HERRERO GONZÁLEZ

587

Al concluir el periodo, realiza la medida de una distancia dependiendo del valor de contdor , que se incrementa en cada medida.

La variable i es el índice del valor de la matriz donde se almacenan las medidas.

En el caso que contador valga 0, se activa el timer Medidas, que es el encargadode realizar las medidas en intervalos de 50ms.

En el caso que contador valga 8, ya se han realizado todas las medidas de lasdistancias soportadas por el sensor. Por eso, los resultados se almacenan en el archivodistancia.ghg gracias al componente CommonDialog.

7.4.3.1.6. Función Medidas_TimerPrivate Sub Medidas_Timer()

Dim lectura(0 To 64) As Byte

Send_Buf(0) = 5 'Enviamos la orden de leer los sensores Send Send_Buf, 1recibir lectura, 3If DatosDistancia(0, i) <= rec(1) Then 'Almacenamos el byte alto más alto de los leídos

DatosDistancia(0, i) = rec(1)End IfIf DatosDistancia(1, i) <= rec(0) Then 'Almacenamos el byte bajo más alto de los leídos

DatosDistancia(1, i) = rec(0)End If

End Sub

Esta función se activa cuando se completa el intervalo del temporizador Medidas. Esta función realiza las medidas de cada distancia guardando la mayor, queserá el valor máximo del intervalo de la medida de la distancia.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 590/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

588

7.4.4. FORM SENSOR

En este form aparecen dibujos indicando el lugar de choque del coche y ladistancia que detecta hasta el próximo obstáculo.

Form Sensor Sin Compilar

Form Sensor Compilado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 591/651

GUILLERMO DAVID HERRERO GONZÁLEZ

589

Objetos Del Form Ajuste

Objeto Nombre Propiedad ValorTimer Sensores

IntervalEnabled

50False

Label Distancia Caption “”Image Imagen Picture Ninguno.gif Image Image1 Picture Coche.gif

PictureBox DerechoVisiblePicture

FalseDerecho.gif

PictureBox IzquiedoVisiblePicture

FalseIzquiedo.gif

PictureBox Trasero VisiblePicture FalseTrasero.gif

PictureBox DelanteroVisiblePicture

FalseDelantero.gif

PictureBox NingunoVisiblePicture

False Ninguno.gif

7.4.4.1. Código del Form Ajuste

7.4.4.1.1. Declaración De VariablesOption Explicit

Dim Send_Buf(0 To 2) As Byte

7.4.4.1.2. Función Sensores_TimerPublic Sub Sensores_Timer()Dim lectura(0 To 64) As ByteDim resBin As StringDim resto As IntegerDim caracteres As Integer

DoEvents 'Realiza las funciones almacenadas en la pila antes de realizar 'la rutina del temporizador, para no bloquear el microprocesador

Send_Buf(0) = 5Send Send_Buf, 1recibir lectura, 3

'Rutina para saber a que distancia hay un objetoIf rec(1) > DatosDistancia(0, 0) Then

Distancia.Caption = "Objeto a menos de 10cm"Else

If rec(1) = DatosDistancia(0, 0) Then

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 592/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

590

If rec(0) >= DatosDistancia(1, 0) ThenDistancia.Caption = "Objeto a menos de 10cm"

ElseIf rec(0) >= DatosDistancia(1, 1) Then

Distancia.Caption = "Objeto entre 10 y 20cm"Else

Distancia.Caption = "Objeto entre 20 y 30cm"End If

End IfElse

If rec(0) >= DatosDistancia(1, 2) ThenDistancia.Caption = "Objeto entre 20 y 30cm"

ElseIf rec(0) >= DatosDistancia(1, 3) Then

Distancia.Caption = "Objeto entre 30 y 40cm"Else

If rec(0) >= DatosDistancia(1, 4) ThenDistancia.Caption = "Objeto entre 40 y 50cm"

ElseIf rec(0) >= DatosDistancia(1, 5) Then

Distancia.Caption = "Objeto entre 50 y 60cm"Else

If rec(0) >= DatosDistancia(1, 6) Then

Distancia.Caption = "Objeto entre 60 y 70cm"ElseIf rec(0) >= DatosDistancia(1, 7) Then

Distancia.Caption = "Objeto entre 70 y 80cm"Else

Distancia.Caption = "Objeto a más de 80cm"End If

End IfEnd If

End IfEnd If

End IfEnd If

End If

'Rutina para saber que sensor está activo‘Conversor decimal a binario

resBin = ""Do

resto = rec(2) Mod 2rec(2) = rec(2) \ 2If resto = 0 Then

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 593/651

GUILLERMO DAVID HERRERO GONZÁLEZ

591

resBin = "0" + resBinElse

resBin = "1" + resBinEnd If

Loop Until rec(2) < 2

If rec(2) = 1 ThenresBin = "1" + resBin

End If

caracteres = Len(resBin)

Select Case caracteresCase 0

resBin = "0000"Case 1

resBin = "000" + resBinCase 2

resBin = "00" + resBinCase 3

resBin = "0" + resBinCase 4

resBin = resBin

End SelectIf resBin Like "?01?" Then

Imagen.Picture = izquierdo.PictureElse

If resBin Like "?10?" ThenImagen.Picture = derecho.Picture

ElseIf resBin Like "1???" Then

Imagen.Picture = trasero.PictureElse

If resBin Like "?11?" ThenImagen.Picture = delantero.Picture

ElseImagen.Picture = ninguno.Picture

End IfEnd If

End IfEnd If

End Sub

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 594/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

592

Esta rutina se activa cada 50ms (intervalo de Sensores). Comienza recibiendo lalectura de los finales de carrera y del sensor de distancia.

Al calibrar el sensor de distancia, se han hallado los intervalos de cada 10cm.Comparando el dato recibido con el calculado se averigua la distancia del objeto.

Para saber que sensor está activo, el dato recibido se transforma a binario y secomprueba el valor de cada bit. La única excepción es saber si el coche se ha chocadode frente, por que se tienen que haber activado los finales de carrera 1 y 2.

7.4.5. FORM COMANDOS

En este form aparece la barra de comandos y los comandos para enviar almicrocontrolador.

Form Comandos Sin Compilar

Form Comandos Compilado

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 595/651

GUILLERMO DAVID HERRERO GONZÁLEZ

593

Objetos Del Form Comandos

Objeto Nombre Propiedad ValorTextBox Comandos Text

Escriba el comandoa enviar

CommandButton EnvioComando Caption “Enviar”

Label Label6Index

Caption0

1:Avanza

Label Label6Index

Caption1

2:Retrocede

Label Label6Index

Caption2

3:Giro a la izquieda

Label Label6 IndexCaption 34:Giro a la derecha

Label Label6Index

Caption4

5:Lectura de lossensores activada

Label Label6Index

Caption5

6:Claxon

Label Label6Index

Caption7

8:Parar

Label Label6Index

Caption8

9:Apaga el coche

Label Label6

Index

Caption

9a_Velocidad:Cambiode velocidad, el

valor tiene que ser entre 0 y 100

Label Label6Index

Caption10

b:Apagar luces

Label Label6Index

Caption11

c:Encender el coche

Label Label6

Index

Caption

12d_grados:ángulo de

giro, el valor tieneque ser entre 0 y 60º

Label Label6Index

Caption

13e:Cerrar barra de

comandos

Label Label6Index

Caption15

f:Ajustar direcciónizquierda

Label Label6Index

Caption16

g:Ajustar dirección

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 596/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

594

derecha

Label Label6

Index

Caption

14

h:Lectura de lossensores desactivada

Label Label6Index

Caption17

i:Mostrar la ventanade los sensores

Label Label6Index

Caption19

j:Ajuste Sensor deDistancia

Label Label6Index

Caption18

k:Cerrar aplicación

7.4.5.1. Código Del Form Comandos

7.4.5.1.1. Declaración De VariablesOption ExplicitDim contComando As IntegerDim comando(5) As String

7.4.5.1.2. Función Comandos_ClickPrivate Sub Comandos_Click()Dim i As Integer

For i = 0 To contComando 'Reinicio variables

comando(i) = ""Next

contComando = 0Comandos.Text = ""

End Sub

Esta función se activa cuando se hace clic en el textBox Comandos. Borra eltexto del textBox y reinicia las variables.

7.4.5.1.3. Función Comandos_KeyPressPrivate Sub Comandos_KeyPress(KeyAscii As Integer)Dim i As Integer

If KeyAscii = 8 Then 'Comprueba si se ha pulsado la‘tecla de borrar y borra el caracter anterior

If contComando > 0 ThencontComando = contComando - 1

End IfElse

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 597/651

GUILLERMO DAVID HERRERO GONZÁLEZ

595

If KeyAscii = 13 Then 'Comprueba si se ha pulsado la‘tecla enter y activa el boton enviar

EnvioComando_ClickElseIf KeyAscii = 95 Then

comando(contComando) = Chr(KeyAscii) 'Guardo en comando la barra baja (_)

contComando = contComando + 1Else

If KeyAscii >= 48 ThenIf KeyAscii <= 57 Then

comando(contComando) = Chr(KeyAscii) 'Guardo en comando el número pulsado

contComando = contComando + 1Else 'la tecla pulsada no es un número

If KeyAscii >= 97 ThenIf KeyAscii <= 106 Then

comando(contComando) = Chr(KeyAscii) 'Guardo encomando la letra pulsada porque es una instrucción

contComando = contComando + 1Else

MsgBox "Comando no reconocido", 0 + 16, "Error"For i = 0 To contComando 'Reinicio variables

comando(i) = ""

NextcontComando = 0Comandos.Text = "Escriba el comando a enviar"KeyAscii = "0"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"For i = 0 To contComando 'Reinicio variables

comando(i) = ""Next

contComando = 0Comandos.Text = "Escriba el comando a enviar"KeyAscii = "0"

End IfEnd If

End IfEnd If

End IfEnd If

End Sub

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 598/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

596

Esta función se activa cuando se hace pulsa una tecla en el textBox Comandos. Comprueba que la tecla pulsada es correcta, si no emite un mensaje de error.

Si la tecla es correcta, la guarda en la variable comando en la posición indicada por la variable contComando. Si se ha pulsado una tecla que equivalga a un comandoincrementa el contador, si no, hace lo que le corresponda.

En la variable KeyAscii se almacena el código ASCII de la tecla pulsada.

7.4.5.1.4. Función EnvioComando_ClickPrivate Sub EnvioComando_Click()Dim i As IntegerDim dato As Integer

Select Case comando(0)Case 1:

If comando(1) = "" ThenIf Inicio.Avanza.Enabled = True Then

Inicio.Avanza_ClickElse

MsgBox "El coche está apagado", 0 + 16, "Error"End If

ElseMsgBox "Comando no reconocido", 0 + 16, "Error"

End If

Case 2:If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenInicio.Retrocede_Click

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case 3:If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenInicio.Izquierda_Click

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 599/651

GUILLERMO DAVID HERRERO GONZÁLEZ

597

Case 4:If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenInicio.Derecha_Click

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case 5:If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenSensor.Sensores.Enabled = True

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case 6:

If comando(1) = "" ThenIf Inicio.Avanza.Enabled = True ThenInicio.Claxon_Click

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case 7:

If comando(1) = "" ThenIf Inicio.Avanza.Enabled = True Then

If Inicio.lucesON = False ThenInicio.Luces_Click

ElseMsgBox "Las luces ya están encendidas", 0 + 16, "Error"

End IfElse

MsgBox "El coche está apagado", 0 + 16, "Error"End If

Else

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 600/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

598

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case 8:If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenInicio.Paro_Click

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case 9:If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenInicio.Menu_Click (1)

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"

End IfCase "a":

If comando(1) = "_" ThenIf Inicio.Avanza.Enabled = True Then

If comando(4) = "" ThenIf comando(3) = "" Then

dato = comando(2)Inicio.ScrollVelocidad.Value = dato

Elsedato = comando(2) * 10

dato = comando(3) + datoInicio.ScrollVelocidad.Value = dato

End IfElse

dato = comando(2) * 100dato = comando(3) * 10 + datoIf comando(4) > 0 Then

MsgBox "Comando no reconocido", 0 + 16, "Error"Else

dato = comando(4) + datoInicio.ScrollVelocidad.Value = dato

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 601/651

GUILLERMO DAVID HERRERO GONZÁLEZ

599

End IfEnd If

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case "b":If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenIf Inicio.lucesON = True ThenInicio.Luces_ClickElse

MsgBox "Las luces ya están apagadas", 0 + 16, "Error"End If

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case "c":If comando(1) = "" ThenInicio.Menu_Click (0)Inicio.Sensores.Enabled = False

ElseMsgBox "Comando no reconocido", 0 + 16, "Error"

End If

Case "d":If comando(1) = "_" Then

If Inicio.Avanza.Enabled = True Then

If comando(3) = "" Thendato = comando(2)

Elsedato = comando(2) * 10dato = comando(3) + dato

End If

If dato <= 60 ThenInicio.ScrollGiro.Value = dato

ElseMsgBox "Comando no reconocido", 0 + 16, "Error"

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 602/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

600

End IfElse

MsgBox "El coche está apagado", 0 + 16, "Error"End If

ElseMsgBox "Comando no reconocido", 0 + 16, "Error"

End If

Case "e":If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenInicio.Sensores.Enabled = True

End IfIf Inicio.Visible = False Then

Inicio.Visible = TrueEnd IfMe.Hide

ElseMsgBox "Comando no reconocido", 0 + 16, "Error"

End If

Case "f":If comando(1) = "" Then

Ajuste.Izquierda_ClickElseMsgBox "Comando no reconocido", 0 + 16, "Error"

End If

Case "g":If comando(1) = "" Then

Ajuste.Derecha_ClickElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case "h":If comando(1) = "" Then

Sensor.Sensores.Enabled = FalseElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 603/651

GUILLERMO DAVID HERRERO GONZÁLEZ

601

Case "i":If comando(1) = "" Then

Sensor.Visible = TrueElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case "i":If comando(1) = "" Then

If Inicio.Avanza.Enabled = True ThenAjuste.AjDistancia_Click

ElseMsgBox "El coche está apagado", 0 + 16, "Error"

End IfElse

MsgBox "Comando no reconocido", 0 + 16, "Error"End If

Case "k":If comando(1) = "" Then

Inicio.Menu_Click (4)Else

MsgBox "Comando no reconocido", 0 + 16, "Error"

End IfCase Default:

MsgBox "Comando no reconocido", 0 + 16, "Error"End Select

For i = 0 To contComando 'Reinicio variables comando(i) = ""

Next

contComando = 0

Comandos.Text = "Escriba el comando a enviar"End Sub

Esta función se activa cuando se hace clic en el botón EnvioComando. Dependiendo del comando pulsado, realiza la función que le corresponda.

Antes de realizar cualquier función, comprueba que el comando sea correcto, sino emite un mensaje de error.

Cada comando correcto salta a la función definida para el objeto que la active, por ejemplo, si el comando es el 1 salta a la función Avanza_Click del form Inicio.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 604/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

602

7.4.5.1.5. Función Form_UnloadPrivate Sub Form_Unload(Cancel As Integer)

If Inicio.Avanza.Enabled = True ThenSensor.Sensores.Enabled = True

End IfEnd Sub

Esta función se activa cuando se cierra el form Comandos. Activa el timer Sensores del form Sensor.

7.5. D RIVER COCHECITO. INF

Para realizar el driver de la aplicación, se ha partido del driver del PicUSB

descargado de la página www.hobbypic.com.Este driver, es una adaptación del de Microchip. La única diferencia es que, una

vez que el ordenador reconozca el hardware, aparece un icono en el adminisrador dedispositivos en lugar de una interrogación.

El archivo .inf sería:

[Version]Signature="$WINDOWS NT$"Class=%ClassName%ClassGuid=4D36E911-E325-11CE-BFC1-08002BE10318

Provider=%MFGNAME%DriverVer=03/10/2005,1.0.0.0CatalogFile=picusb.cat

[DestinationDirs]DefaultDestDir = 12PicUSB.ClassCopyFiles = 11

;------------------------------------------------------------------------------; Class installation sections;------------------------------------------------------------------------------

[ClassInstall32]AddReg=PicUSB.ClassRegCopyFiles=PicUSB.ClassCopyFiles

[PicUSB.ClassReg]HKR,,,0,%ClassName%HKR,,Class,,%ClassDesc%HKR,,Icon,,11HKR,,Installer32,,"picusbci.dll,PicUSBClassInstaller"

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 605/651

GUILLERMO DAVID HERRERO GONZÁLEZ

603

[PicUSB.ClassCopyFiles]picusbci.dll

;------------------------------------------------------------------------------; Device Install Section;------------------------------------------------------------------------------

[Manufacturer]%MFGNAME%=Standard

[Standard]%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_8008

[SourceDisksNames]1 = %INSTDISK%,,,""

[SourceDisksFiles]mchpusb.sys = 1,,wdmstub.sys = 1,,picusbci.dll = 1,,

;------------------------------------------------------------------------------; Windows 2000/XP Sections

;------------------------------------------------------------------------------[DriverInstall.NT]CopyFiles=DriverCopyFiles

[DriverCopyFiles]mchpusb.sys

[DriverInstall.NT.Services]AddService = PicUSB, 2, DriverService

[DriverService]DisplayName = %SVCDESC%ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START

ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %12%\mchpusb.sysLoadOrderGroup = Extended Base

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 606/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

604

;------------------------------------------------------------------------------; Windows 98/Me Sections

;------------------------------------------------------------------------------

[DriverInstall]AddReg=DriverAddRegCopyFiles=DriverCopyFiles,StubCopyFilesDriverVer=09/26/2005,1.0.0.0

[DriverAddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,"wdmstub.sys,mchpusb.sys"

[StubCopyFiles]wdmstub.sys

;------------------------------------------------------------------------------; String Definitions;------------------------------------------------------------------------------

[Strings]MFGNAME="GHG"INSTDISK="Cochecito leré"

DESCRIPTION="Cochecito leré"SVCDESC="Coche Device Driver"ClassName="USB Devices GHG"ClassDesc="Coche Sample Device"

Las palabras en rojo son los datos que se han modificado.

Darse cuenta de que la identificación del fabricante y la del dispositivo tiene queser la misma.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 607/651

GUILLERMO DAVID HERRERO GONZÁLEZ

605

7.6. CONTROL W II M OTE

7.6.1. INTRODUCCIÓN

El WiiMote es el mando de control de la videoconsola de Nintendo Wii. Estemando dispone de unos acelerómetros que determinan la velocidad y el sentido delmovimiento del mismo; además, un chip encargado de hacer fotos que, por medio de latriangulación, determina si el mando se acerca o se aleja de la fuente de luz y si está

bocarriba o no.

En la aplicación no se aprovechan estos sensore y se utilizan los botones quedisopone.

La comunicación con el ordenador se hace por medio de Bluetooth, con lo quese pueden gobernar el ordenador hasta una distancia aproximada de 10m.

7.6.2. PROGRAMA DE CONTROL

Para que el ordenador reconozca una instrucción, hay que realizar un programaque determine que acción realiza con cada botón.

Para realizar este programa, se utiliza el compilador GlovePIE. Es uncompilador diseñado para realizar programas de control con guantes de realidad virtual.

7.6.2.1. Programa

El programa es muy sencillo, se basa en determinar que tecla del teclado tieneque reconocer el ordenador al pulsar un botón del WiiMote.

Keyboard.i and Keyboard.Up = Wiimote.UpKeyboard.k and Keyboard.Down = Wiimote.DownKeyboard.j and Keyboard.Left = Wiimote.LeftKeyboard.l and Keyboard.Right = Wiimote.RightKeyboard.x = Wiimote.AKeyboard.z = Wiimote.BKeyboard.d = Wiimote.HomeKeyboard.f = wiimote.OneKeyboard.g = wiimote.TwoKeyboard.t = Wiimote.MinusKeyboard.y = Wiimote.Plus

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 608/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 609/651

8. BIBLIOGRAFÍA

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 610/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 611/651

609

8. BIBLIOGRAFÍA

8.1. L IBROS

Enciclopedia de Microsoft Visual Basic 6 . Fco. Javier Ceballos.

Microcontroladores PIC. Diseño práctico de aplicaciones 2ª parte. AnguloUsategui y otros.

El Bus USB Guía del Desarrollador. Xavier Fernard.

MPLAB C18 C Compiler Libraries. Microchip.

MPLAB C18 C Compiler Getting Started. Microchip.

MPLAB C18 C Compiler User’s Guide. Microchip.

MPLAB IDE User’s Guide. Microchip.

MPASM Assambler, MPLINK Object Linker, MPLIB Object Librarian User’sGuide. Microchip.

PIC18 Configuration Settings Addendum. Microchip.

PIC18F2455/2550/4455/4550. Datasheet de Microchip.

Cómo programar en C++. Harvey M. Deitel y Paul J. Deitel.

Programación en Lenguaje C. María Luisa Pérez Delgado

Universal Serial Bus Specification Revision 2.0. Compac, HP, Intel y otros.

Implementación de un sistema de desarrollo utilizando los microcontroladores PIC Microchip Tecnology. Manuel Fernando Campos Cerda, Ramiro Castañeda Pérez yArturo César Contreras Torres.

Curso Programación en C microcontroladores PIC. Introducción al MPLABC18. Andrés Prieto-Moreno Torres.

Constructopedia. Robotics Invention System 2.0. Lego Mindstorms.

Lego Mindstorm Interfacing. Don Wilcher.

Extreme Mindstorms. An advanced guide to Lego Mindstorms. Dave Baum,Michael Gasperi, Ralph Hempel y Luis Villa.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 612/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

610

8.2. A PUNTES

Programación Visual. Mª Araceli Sánchez Sánchez. Ampliación de programación. Mª Araceli Sánchez Sánchez.

Tecnología electrónica. Álvaro Sánchez Martín.

Programación Avanzada. Andrés Martín Sánchez.

Sistemas digitales avanzados. José Torreblanca González.

8.3. P ÁGINAS W EB

http://www.microchip.com

http://www.todopic.com.ar/foroshttp://picmania.garcia-cuervo.com

http://www.usb.org

http://www.beyondlogic.org

http://www.hobbypic.com

http://elrebujito.es/

http://www.winpic800.com

http://perso.wanadoo.es/luis_ju

http://www.frino.com.ar

http://www.roboticspot.com

http://www.alldatasheet.com

http://mundobot.com

http://www.micropik.com

http://www.superrobotica..com

http://www.pablohoffman.com/

http://sourceforge.net/projects/usbsnoop/http://www.fujitsu.com/downloads/EU/es/soporte/escaneres/cursousb.pdf

http://www.i-micro.com/pdf/new_temarios/tem-Usb.pdf

http://www.fujitsu.com/downloads/EU/es/soporte/discosduros/UnpaseoporUSB-2.pdf

http://server-die.alc.upv.es/asignaturas/LSED/2003-04/0.USB/

http://pic18fusb.online.fr/wiki/wikka.php?wakka=WikiHome

http://forum.microchip.com/

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 613/651

GUILLERMO DAVID HERRERO GONZÁLEZ

611

http://www.lvr.com

http://pic18fusb.online.fr/wiki/wikka.php?wakka=WikiHome

http://groups.google.com/group/pickit-devel/

http://www.sixca.com/

http://www.alanmacek.com/usb/

http://www.microchipc.com/sourcecode/#pic18f4550usb

http://www.htsoft.com/forum/all/showflat.php/Cat/0/Number/15801/an/0/page/0#15801

http://www.cattopasto.com/download.php

http://www.varxec.net/picdem_fs_usb/http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId

=1960

http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm

http://www.fored.co.uk/html/usb_library.html

http://www.create.ucsb.edu/~dano/CUI/

http://www.iay.org.uk/blog/2003/07/my_very_first_u.html

http://forum.microchip.com/tm.aspx?m=89669

http://pe.ece.olin.edu/ece/projects.htmlhttp://ostry.w.szu.pl/index.php?stan=fastPICCDC

http://www.jungo.com/pr051026.html

http://libusb.sourceforge.net/

http://www.burger-web.com/Projects/PIC18F4550USB/en_PIC18UsbBoard.htm

http://www.icsharpcode.net/

http://www.piccoder.co.uk/

http://pe.ece.olin.edu/ece/projects.html

http://sourceforge.net/projects/pic18fusb

http://www.nutsvolts.com/%7Edownloads/USB.zip

http://vasco.gforge.enseeiht.fr/

http://www.philohome.com/

http://www.plazaearth.com/usr/gasperi/lego.htm#basics

http://www.akasa.bc.ca/tfm/lego.html

http://www.robots.com.es/

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 614/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 615/651

B. CÁLCULOS

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 616/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 617/651

615

1. CÁLCULOS En este apartado, se realizan los cálculos relativos a la modulación de ancho de

pulso y al tiempo de conversión analógica.

1.1. PWM

Las ecuaciones utilizadas son:

9 )2 _ _ _ _ (4]1)2[( _ TMRde prescaler del Valor T PR PWM Periodo OSC •••+=

9 )2 _ _ _ ()4:5:( _ _ TMR prescaler del Valor T CCPXCON CCPRXL PWM Cicle Duty OSC ••><=

9 bits

F

F

PWM

OSC

)2log(

)log(M _máxima_PWResolución =

9 Periodo=1/frecuencia

En la aplicación, se desea una resolución máxima de la onda para poder elegir entre un mayor número de ciclos de trabajo. Con esto, se podrá modificar la velocidadde una forma más precisa.

La resolución máxima que admite el microcontrolador son 10bits.

La frecuencia de oscilación (FOSC) es 1MHz, ya que la configuración del

oscilador no modifica la onda de la entrada que es un cristal de 4MHz. Como lafrecuencia de oscilación es la frecuencia de la entrada dividido por 4, obtenemos 1MHz.

Con estos datos, se obtiene una frecuencia del PWM (FPWM) de 975,5625Hz o,un periodo de 0,001024s.

Una vez obtenido el periodo y eligiendo un prescaler del TMR2 de 1, sindivisión, obtenemos un valor para PR2 de 255 o, en hexadecimal de FF. Este datoobtenido, es el que se utiliza en la programación a la hora activar el PWM2.

1.2. CONVERSOR A/D

En el capítulo del microcontrolador, en el apartado del conversor A/D, secomenta que el tiempo mínimo de adquisición es de 2,45μs.

En las características del sensor de distancia, se comenta que necesita un tiempode 39ms para realizar una medida.

Al configurar el conversor A/D se elegirá el tiempo de adquisición más alto posible aproximándose a los 39ms. Este tiempo de adquisición es de 20 veces el tiempode adquisición, que sigue siendo del orden de microsegundos por lo que es muchomenor que el tiempo del sensor.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 618/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 619/651

C. PLANOS

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 620/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 621/651

4MHz2 7

p F

fin2

ULN

1 8 F 2 4 5 5

fin1

10K

10KM1

100nF

LED bi

LED2

47uF

L293

M2

1N4007

1N4007

USB B

LED1 1K

NC

NA

C

NC

NA

C

fin3

NC

NA

C

alimentación

0V 5V

zumbador

MPP

A

Com1

B

C

D

C o m 2

M

M

Sensor dist

M

b o m b i l l a 1

b o m b i l l a 2

alimentación

0V5V

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 622/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 623/651

Placa fotopositiva de 80x100mm

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 624/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 625/651

Peticionario: Departame

IngeniNº de Plano: 4

Proyecto: Conexión al pu

Emplazamiento: E.T.S.I

Plano: Chasis

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 626/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 627/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 628/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 629/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 630/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 631/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 632/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 633/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 634/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 635/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 636/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 637/651

D. PLIEGO DE CONDICIONES

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 638/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 639/651

639

1. PLIEGO DE CONDICIONES ESPECÍFICAS Y

CONSTRUCTIVAS

1.1. D ESCRIPCIÓN D EL P RODUCTO

El producto diseñado es un coche que nos permitirá enviar y recibir datos desdeel ordenador para controlar la velocidad, sentido y dirección. La tensión continuaaplicada al coche debe ser fija de 5V para no quemar los componentes.

Consta de un sistema electrónico formado por 1 PCB en el que se utilizaráncomponentes electrónicos de tipo discreto, chips integrados y semiconductores de

potencia; y de un sistema mecánico en el que se utilizarán motores con sus reductoras y

metacrilato para la construcción del chasis del coche.

1.2. F ORMA D E E JECUCIÓN

La ejecución de las placas se realizará de la siguiente manera:

Ø Obtención de las máscaras de impresión necesarias: el primer paso quehay que dar para realizar un circuito impreso por métodossemiprofesionales es la obtención de una máscara, patrón o fotolito quecontenga el diseño del circuito a realizar (pistas, footprints, etc.).

Para transferir el diseño del circuito deseado a la placa paracircuito impreso, el método que más nos interesa es el fotolitográfico,que se pasa a describir:

Utilizando un programa informático que permita el diseño de placas de circuito impreso, en este caso el Proteus, se imprimirá el diseñoen papel vegetal, que es transparente. Se obtendrá un dibujo positivo(pistas, nodos, pads, y en general todas aquellas áreas en las que sequiere que quede posteriormente el cobre sobre la placa, en negro).

Ø Fases para la obtención de la placa:

a) Insolación: Si se ha obtenido a través de la impresora un original

positivo, se utilizará una placa presensibilizada positiva, que sonlas más comunes. En estas placas la lámina de cobre estárecubierta por una emulsión fotosensible, esto es, si incide la luzsolar sobre ellas, en aquellas partes que hayan recibido lasradiaciones se produce una reacción química y se descompone laemulsión. Las partes que se hayan tapado con material opaco noreaccionarán químicamente y no se debilitarán sus enlacesquímicos.

La insolación, por tanto, consiste en la exposición a la luzactínica (rica en rayos ultravioleta) de la placa presensibilizada a

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 640/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

640

través de la máscara. Este proceso se puede hacer mediante unamáquina insoladora.

Estas máquinas llevan lámparas fluorescentes que irradianluz actínica, una vez alineado el conjunto máscara-placa y pegado

por las esquinas con papel celofán, se coloca en la máquina, quelleva una bomba que permite hacer el vacío entre dos planchastransparentes para que la imagen a transferir esté en estrechocontacto con la emulsión fotosensible del cobre de la placa.

El tiempo de insolación en la máquina suele durar entre 3 y5 minutos, dependiendo del tipo de lámpara y del tipo de placa.

b) Revelado: cosiste en la disolución de la zona de emulsióndebilitada por la acción de la luz, en este caso serán las zonas

insoladas.El revelado se realizará con una disolución de 1 litro deagua con una base disuelta como sosa cáustica o hidróxido sódico(NaOH) o cloruro férrico.

La forma de realizar el revelado es moviendo la placa deuna forma lenta pero constante dentro de una cubeta de plásticocon la disolución anterior. Esto se puede hacer introduciendo la

placa en el líquido y moviendo la cubeta, o sujetando la placa conuna pinza de plástico por un extremo y haciendo movimiento devaivén.

El tiempo de revelado depende de la temperatura del agua y

de la concentración de la base.La fase de revelado concluye cuando se vea nítidamente eldibujo del circuito sobre la placa, que se sacará de la cubeta, selavará con agua y ya quedará lista para el atacado o el grabado.

c) Grabado y atacado: este proceso consiste en eliminar el cobredescubierto en el revelado el tiempo de grabado suele ser de 2minutos y se ha ce en una cubeta al igual que el revelado que debeser de plástico para no ser atacada por el ácido.

Se utiliza para el atacado el siguiente compuesto: 100gramos de agua, 100 gramos de agua oxigenada de 110 volúmenes,y 200 gramos de ácido clorhídrico rebajado.

El proceso de grabado también es visible, al igual que el derevelado. Una vez concluido se lava la placa con agua, se seca y seelimina la emulsión de encima de las pistas de cobre que hanquedado, frotando con un papel humedecido en alcohol.

d) Taladrado: una vez terminados los tres procesos anteriores se puede aplicar un barniz que evita que el cobre se oxide y facilita el proceso de soldadura, y posteriormente se procede a hacer lostaladros en los nodos para poder insertar los componentes.

Se marcarán todos los nodos sobre el cobre de la placa conun punzón, ejerciendo una cierta presión hasta que quede una

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 641/651

GUILLERMO DAVID HERRERO GONZÁLEZ

641

muesca. Conviene utilizar un banco con un brazo o soporte verticalque sujete el taladro, para evitar vibraciones y desplazamientos.

Para los componentes con terminales finos se utilizará una brocade 1mm, para los terminales gruesos una de 1,5 mm y para lostaladros de sujeción de la placa, una de 3,5 o 4 mm. Por último, serevisará la placa comparándola con el cliché, por si se ha olvidadohacer algún taladro.

e) Soldadura: Se emplea hilo de aleación Sn-Pb al 60% de estaño yal 40 % de plomo, que lleva incorporada otra sustancia llamadaflux, que sirve para facilitar la soldadura.

Este proceso se lleva a cabo, una vez insertados loscomponentes en sus nodos, con una herramienta llamada soldador,

que se conecta a la red eléctrica y mediante una resistencia calientala punta.El orden de soldado es:

1. Los puentes, realizándolos con sobrantes de losterminales, puentes o cable de entre 0,5mm y 1mm

2. Zócalos3. Resistencias4. Condensadores5. Resto de componentes6. Conectores

Para realizar la soldadura, es necesario aplicar calor con la

punta del soldador a las dos superficies a unir, aplicando el hilo deestaño en la unión que ya estará caliente. El estaño se fundirá yfluirá por toda la zona gracias a la resina que lleva incorporada.Posteriormente, se dejará enfriar procurando no mover la zonasoldada hasta que se alcance la temperatura ambiente. Por último,una buena soldadura presenta un aspecto uniforme y brillante,envuelve todo el nodo y el terminal correspondiente dejando ver suforma.

Después de realizar la soldadura hay que cortar losterminales del extremo sobrante para correspondiente conexión.

f) Compilado y programado: Se procede a compilar el firmware delmicrocontrolador con el compilador MPLAB C18 y la

programación del mismo con un programador demicrocontroladores y el software WinPic 800.

g) Ensamblado: El último paso para la realización de la palca es laintroducción de los integrados en sus respectivos zócalos y laconexión de los componentes externos en sus respectivosconectores.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 642/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

642

Ø Fases para la obtención del chasis:

a) Corte: El corte del metacrilato se realizará por medio de una sierramecánica o manual de metal. Siguiendo los planos.

b) Taladrado: El taladrado se realizará por medio de una taladradoracon broca para metal según lo indicado en los planos.

c) Ensamblado: la unión de las piezas se realizará con pegamentorápido para metacrilato y tornillos de distintos tipos, siguiendo lasindicaciones de los planos. Antes de introducir un tirafondo habráque realizar un agujero con el taladro de un diámetro inferior al deltornillo.

Ø Unión de la placa al chasis mediante los separadores y tornillos M3.

Ø Conexión de los motores y sensores a la placa.

Ø Comprobación del correcto funcionamiento:

9 Si al mandar la instrucción de avanzar o retroceder, una rueda semueve en un sentido y la otra en el contrario, hay que cambiar los

polos del motor de la rueda que gire en el sentido contrario a laorden correspondiente.

9 Si al mandar la orden de avanzar o retroceder, el coche se mueveen el otro sentido, se pueden cambiar los polos de las dos ruedas o,en el firmware intercambiar el nombre de las instrucciones,

Mdelante se llamaría Mdetras y al contrario.Si se ha modificado el firmware, se compila y se programa

el microcontrolador.

9 Si al mandar la orden de giro a la izquierda o a la derecha, el cochegira en sentido contrario, hay que cambiar el nombre de lasfunciones del firmware, Giroder pasaría a llamarse Giroizq y alcontrario.

Una vez modificado el firmware, se compila y se programael microcontrolador.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 643/651

GUILLERMO DAVID HERRERO GONZÁLEZ

643

1.3. P LAZOS Y O RDEN D E E JECUCIÓN 1. Diseño de placas de circuito impreso mediante programa informático

Proteus.2. Impresión del diseño en papel vegetal para su posterior tratado mediante

impresora láser o de inyección.3. Exposición a la luz actínica de la placa presensibilizada a través de máscara,

mediante una insoladora.4. Revelado de la placa mediante una disolución de 1 litro de agua con una

base o con NaOH y posterior limpieza con chorro de arena.5. Eliminación del cobre descubierto en el revelado mediante una

concentración de agua y ácido clorhídrico.6. Aplicación de barniz que evita que el cobre se oxide y facilite el proceso de

soldadura.7. Marcado de todos los nodos sobre el cobre de la placa.8. Taladrado de la placa con una broca de 1mm o de 1,5mm para terminales

gruesos.9. Colocación de los componentes en los nodos de las placas.10. Soldadura de los componentes a la placa mediante hilo de aleación Sn-Pb al

60% de Sn y al 40% de Pb.11. Corte del extremo sobrante del terminal del componente.12. Realización de pruebas.13. Corte del metacrilato para el chasis.14. Taladro del metacrilato con brocas con el tamaño indicado en los planos.

15. Unión de las piezas de metacrilato según lo indicado en los planos.16. Unión de la placa al chasis mediante separadores metálicos.17. Conexión de los motores y sensores.18. Prueba del montaje total.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 644/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

644

1.4. M ATERIALES

1.4.1. MATERIALES DEL LABORATORIO NECESARIOS PARA LA PARTEELÉCTRICA

1. Software informático Proteus Versión 6.3. Para la realización de placaselectrónicas, utilizándose para el trazado de pistas su librería Layout.

2. Láminas Transparentes para Impresoras Láser. Se utiliza para elaborar esquemas de alta resolución de PCB y otros diseños mediante cualquier impresora láser. Sus características son:

Ø Se obtienen diagramas de gran densidad con toda nitidez

Ø Lámina transparente de 75 μm

Ø Recubrimiento especial de sujeción y fijación de alta resolución3. Máquina insoladora. Con luz actínica y temporizador.4. Cubeta de plástico para ataque químico. Características:

Ø Longitud 313mm.Ø Anchura 264mm.Ø Profundidad 58mm.Ø Bandejas rígidas de poliestireno adecuadas para contener soluciones de

revelado y ataque químico (hidróxido de sodio y cloruro férrico)empleadas en la producción de PCBs.

5. Gafas de seguridad cómodas y ligeras, disponen de una moldura de PVCsuave y de unos cristales de policarbonato. Tienen la homologación 2092nivel 1, proporcionan protección contra el polvo, salpicadura de sustanciasquímicas y metal fundido.

6. Guantes para soldadura TIG en cuero mordiente, con una manopla de cueroal cromo que ofrece gran libertad de movimientos sin dejar de proporcionar una protección completa.

7. Punzón para pistas. Para utilizarlo con placas de pistas. Proporciona unmétodo simple de interrumpir las pistas de cobre. Después de introducir el

punzón, girar dentro del orificio en el punto donde se requiera interrumpir la pista. Unas pocas vueltas en el sentido de las agujas del reloj producen un

corte limpio.8. Juego de brocas acero.9. Soldador de 40W con punta normal. Su calentamiento es permanente y

posee una alta inercia térmica. Tanto en el momento de la soldadura como enlas pausas de esta labor, el soldador permanece conectado a la corrienteeléctrica. Resulta adecuado para trabajos repetitivos y numerosos.

10. Carrete de hilo de estaño-plomo con una proporción del 60%-40%respectivamente.

11. Flux en frasco de 20ml con pincel exento de residuos.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 645/651

GUILLERMO DAVID HERRERO GONZÁLEZ

645

1.4.2. MATERIALES PARA LA REALIZACIÓN DE LA PLACA 1. Placa fotosensibilizada para fabricación de PCB’s de una cara de 80x100mm2. Microinterruptores conmutadores de tipo Final de Carrera3. Diodos de potencia: 1N40074. Driver: ULN28035. Driver: U293D6. Condensador electrolítico de 47μF y 25V7. Condensadores cerámico de 27pF y 100nF8. Condensador cerámico de 100nF9. Resistencias de 1/4W de 1K Ω y 10K Ω 10. Diodo LED bicolor de tres terminales11. Diodos LED rojo superbrillantes

12. Motores de corriente continua de 5V con su reductora13. Motor Paso a Paso bipolar de 5V con su reductora

14. Cristal de cuarzo de 4MHz15. Zumbador de 5V16. Sensor de distancia tipo GP2Y0A21YK 17. Bombillas18. Conectores de 2 y 3 terminales19. Conector USB tipo B hembra para circuito impreso20. Zócalo de perfil bajo estañado: 16, 18 y 28 pines21. Separadores hexagonales metálicos

1.4.3. MATERIALES DE LABORATORIO NECESARIOS PARA LA PARTEMECÁNICA

1. Taladradora2. Brocas de acero para metal3. Sierra mecánica para metal4. Sierra manual para metal5. Gafas y guantes de protección

1.4.4. MATERIALES PARA LA REALIZACIÓN DEL CHASIS 1. Metacrilato

2. Engranajes3. Pegamento rápido para metacrilato4. Ejes de acero5. Ruedas de caucho sintético6. Arandelas de acero7. Anillas de retención

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 646/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

646

1.5. R EALIZACIÓN D E L AS P RUEBAS

Se realizarán ensayos de funcionamiento de sistema de forma parcial; en ellashay que comprobar su funcionamiento para el sistema dentro del rango determinado defuncionamiento.

Posteriormente, se realizarán pruebas con el sistema global de funcionamiento.Gracias a ello se podrá determinar el correcto funcionamiento del sistema global.

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 647/651

E. PRESUPUESTO

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 648/651

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 649/651

649

1. PRESUPUESTO DE LA PARTE ELÉCTRICA

Nº de Orden Componentes Unidades Precio Unitario Precio Total

1 Diodo de potencia 1N4007 8 0,07 0,56

2 Diodo LED bicolor de tres terminales 1 0,80 0,80

3 Diodo LED rojo superbrillante 2 0,50 1,00

4 Resistencia de 1k Ω y 1/4W 2 0,03 0,06

5 Resistencia de 10k Ω y 1/4W 3 0,03 0,09

6 Condensador cerámico de 27pF 2 0,08 0,16

7 Condensador cerámico de 100nF 1 0,09 0,09

8 Condensador electrolítico de 47μF y 25V 1 0,12 0,12

9 Motor de CC con redutor 2 5,54 11,0810 Motor Paso a Paso bipolar 1 29,27 29,27

11 Cristal de cuarzo de 4MHz 1 0,84 0,84

12 Circuito integrado ULN2803 1 0,56 0,56

13 Circuito integrado L293D 1 3,61 3,61

14 Microcontrolador PIC18F2455 1 9,58 9,58

15 Zumbador 1 2,70 2,70

16 Conmutador Final de Carrera 3 2,55 7,65

17 Sensor de distancia GP2Y0A02YK 1 19,53 19,53

18 Bombilla 5V 2 0,38 0,76

19 Conector 2 terminales 6 0,24 1,44

20 Conector 3 terminales 6 0,60 3,60

21 Conector USB tipo B hembra 1 1,55 1,55

22 Placa fotopositiva 80x100mm 1 4,45 4,45

23 Separadores 4 0,27 1,08

24 Cloruro Férrico 1 2,70 2,70

25 Revelador 1 2,70 2,70

26 Cable de 0,75mm de diámetro (metros) 1 0,81 0,81

27 Cable de 1,5mm de diámetro (metros) 8 0,84 6,72

28 Cable USB tipo A-B (5 metros) 1 14,75 14,7529 Zócalo de 28 terminales 1 0,26 0,26

30 Zócalo de 18 terminales 1 0,14 0,14

31 Zócalo de 16 terminales 1 0,11 0,11

Total sin I.V.A. 128,77

16% IVA 20,61

Total (€) 149,38

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 650/651

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

650

2. PRESUPUESTO DE LA PARTE MECÁNICA

Nº de Orden Componentes Unidades Precio Unitario Precio Total

1 Juego de engranajes módulo 0,5 1 9,00 9,00

2 Juego de ruedas de caucho sintético 1 10,00 10,00

3 Arandelas, ejes 1 12,00 12,00

4 Anillas de retención 1 12,00 12,00

5 Metacrilato (60x25x1cm) 1 15,00 15,00

6 Pegamento para Metacrilato 1 1,75 1,75

7 Tornillos M3 16 0,30 4,80

8 Tornillos S2 8 0,30 2,40

9 Tornillos S4 6 0,30 1,80

Total sin I.V.A. 68,75

16% IVA 11,00

Total (€) 79,75

3. TOTALIZACIONES Nº de Orden Presupuesto Precio Total

1 Parte Eléctrica 128,772 Parte Mecánica 68,75

Total sin I.V.A. 197,52

16% IVA 31,61

Total (€) 229,13

7/18/2019 Conexion Al Puerto Usb Con Un Microcontrolador

http://slidepdf.com/reader/full/conexion-al-puerto-usb-con-un-microcontrolador-56d6cff18a8c4 651/651

F. CONCLUSIÓN