Está en la página 1de 111

CURSO 40 HRS

INSTRUCTOR ING. VICENTE FCO PEREZ CADENA


¿Qué son los Microcontroladores?
Son circuitos integrados que incorporan
todos los bloques funcionales de un
Sistema Microprocesador en un único
encapsulado.

¿Qué necesitan para funcionar?


Sólo una tensión continua estable (5V,
3.3V, 2.5V, 1.5V...) y un oscilador.
¿Qué hacen?
Interpretan (decodifican)
combinaciones de bits (instrucciones) y
generan señales digitales internas y/o
externas.

¿Para qué?
Para “ejecutar” de manera continua
una secuencia de instrucciones
(programa) que permita controlar un
sistema o subsistema electrónico
 Controlador: dispositivo que se emplea para
el gobierno de uno o varios procesos. Por
ejemplo, el controlador que regula el
funcionamiento de un horno.
 Microcontrolador: un circuito integrado de
alta escala de integración que incorpora 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, Conversores
A/D, Conversores D/A, etc.).
 Generador de pulsos de reloj que sincronizan el
funcionamiento de todo el sistema.
 El microcontrolador es un sistema cerrado.
Todas sus partes están contenidas en el
interior y sólo salen al exterior las líneas que
gobiernan a los periféricos.
 Un microprocesador es un sistema abierto
porque su configuración es variable de acuerdo
con la aplicación a la que se destine.
Microprocesador
Microcontrolador
1. La arquitectura de Von Neumann se
caracteriza por disponer de una sola
memoria principal donde se almacenan
datos e instrucciones de forma indistinta. A
dicha memoria se accede a través de un
sistema de buses único (direcciones, datos y
control).
2. La arquitectura Harvard dispone de dos
memorias independientes una, que contiene
sólo instrucciones y otra, sólo datos. Ambas
disponen de sus respectivos sistemas de
buses de acceso y es posible realizar
Es el elemento más importante del sistema. Se
encarga de direccionar, recibir el código de la
instrucción en curso, su decodificación y la ejecución
de la operación, que implica la búsqueda de
operandos y almacenamiento de resultados.
Los procesadores se pueden dividir, según su
conjunto de instrucciones, en:

CISC Set de instrucciones complejo (instrucciones


sofisticadas y potentes. Más de 200 instrucciones.)
RISC Set de instrucciones reducido (instrucciones
simples y se ejecutan en un ciclo. Cerca de 30
instrucciones.)
SISC Set de instrucciones específico (y reducido)
 Memoria de programa: no volátil, tipo ROM (Read
Only Memory)
 Memoria de datos: volátil, tipo RAM (Random Access
Memory)

 Tipos de memoria no volátil (ROM):


• ROM con mascara
• OTP (One Time Programmable)
• EPROM (Erasable Programmable Read Only Memory)
• EEPROM (Electrical Erasable Programmable Read
Only
Memory)
• FLASH
 Puertos de E/S: Son los PINS del encapsulado del
microcontrolador, que lo comunican con los
periféricos exteriores
 Reloj principal: Es un circuito oscilador que genera
una onda 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
la frecuencia de trabajo.
• Temporizadores o “Timers”.
• Perro guardian 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 ancho de pulsos o PWM.
• Puertos de E/S digitales.
• Puertos de comunicación: UART, USART, USB,
CAN,..
 Cada fabricante oferta numerosas versiones de
una arquitectura básica de uC.
 En algunas amplía las capacidades de las
memorias, en otras incorpora nuevos recursos,
en otras reduce las prestaciones al mínimo para
aplicaciones muy simples, etc.
 La labor del diseñador es encontrar el modelo
mínimo que satisfaga todos los requerimientos
de su aplicación. De esta forma, minimizará el
costo, el hardware y el software.
 Timers:
Controlan períodos de tiempo (temporizadores).
Llevan la cuenta de acontecimientos que suceden
en el exterior (contadores).
 Watchdog:
Los programas frecuentemente pueden fallar,
tanto por problemas de diseño o por ruidos
externos al sistema. Por lo general, el procesador
queda en un lazo infinito dejando de atender al
resto del programa. La única alternativa que nos
queda en estos casos es resetear el sistema.
 Brownout:
Es un circuito de protección que resetea al uC
cuando la tensión de alimentación es inferior a
un mínimo. Si el uC no posee este recurso, se
puede construir uno externo:

Este circuito activa el reset cuando Vdd se va


por debajo de Vz + 0,7V.
Sleep o Bajo consumo:
 Son abundantes las situaciones reales de trabajo
en que el uC debe esperar sin hacer nada, a que
se produzca algún acontecimiento externo que lo
ponga de nuevo en funcionamiento.
 Para ahorrar energía, los uC disponen de una
instrucción especial que los pasa a este modo de
reposo. En dicho estado se detiene el reloj
principal y se congelan los circuitos asociados.
 Sale de este estado al interrumpirse por el
acontecimiento esperado.
 Lenguaje máquina: representación del
programa tal como lo entiende el
microcontrolador
0101000011111110000
 Lenguaje ensamblador: representación
alfanumérica del lenguaje máquina, lo que
facilita su lectura.
clrf PORTA
bcf STATUS, RP0
 Lenguajes de alto nivel.
Lenguaje C
 Ensamblador: El programa ensamblador es un software
que se encarga de traducir los nemónicos y símbolos
alfanuméricos del programa escrito en ensamblador por el
usuario a código máquina.
MPASM
 Compilador: El programa compilador es un software que
se encarga de traducir el programa escrito en C el usuario
a código máquina.
PIC, CCS
 Simulador: Son capaces de ejecutar en un PC programas
realizados para el microcontrolador. Los simuladores
permiten tener un control absoluto sobre la ejecución de
un programa, siendo ideales para la depuración de los
mismos
Entornos de desarrollo:

MPLAB (incluye MPASM y MPSIM)


Proteus

 Placas de evaluación: Se trata de pequeños sistemas


con un microcontrolador ya montado y que suelen
conectarse a una PC desde la que se cargan los
programas que se ejecutan en el microcontrolador.
Las placas suelen incluir visualizadores LCD, teclados,
LEDs, fácil acceso a los
 pines de E/S, etc.
EasyPIC
CNAD
 Velocidad de operación: hasta 48 MHz de
reloj.
 32K de memoria Flash (ROM).
 2048 bytes de memoria RAM.
 10 bit A/D.
 Comunicación Serial
 Comunicación USB
 Modulo Comparación Captura PWM.
 PORTA ( RA5, RA4, RA3, RA2, RA1, RA0 )

 PORTB ( RB7, RB6, RB5, RB4, RB3, RB2, RB1, RB0 )

 PORTC ( RC7, RC6, RC5, RC4, RC3, RC2, RC1, RC0 )

 PORTD ( RD7, RD6, RD5, RD4, RD3, RD2, RD1, RD0 )

 PORTE ( RE2, RE1, RE0 )


 Arquitectura HARVARD.

 Buses separados (datos e instrucciones).

 Memoria de programa : 16 bits.

 Memoria de datos: 8 bits.


Tipo bytes Rango
(unsigned) char 1 0 .. 255
signed char 1 - 128 .. 127
(signed) short (int) 1 - 128 .. 127
unsigned short (int) 1 0 .. 255
(signed) int 2 -32768 .. 32767
unsigned (int) 2 0 .. 65535
(signed) long (int) 4 -2147483648 .. 2147483647
unsigned long (int) 4 0 .. 4294967295
Tipo bytes Rango

float 4 ±1.17549435082 x 10-38 .. ±6.80564774407 x 1038

double 4 ±1.17549435082 x 10-38 .. ±6.80564774407 x 1038

long double 4 ±1.17549435082 x 10-38 .. ±6.80564774407 x 1038


 Decimal
◦ int i = 10; /* decimal 10 */
◦ int j = -10; /* decimal -10 */
◦ int p = 0; /* decimal 0 */

 Hexadecimal
◦ short x = 0x37; /* decimal 55 */ 00110111
◦ short y = 0x7F; /* decimal 127 */ 01111111
◦ int z = 0x125; /* decimal 293 */ 100100101
 Octal
◦ int m = 023; /* 19 */
◦ short n = 016; /* 14 */

 Binario
◦ char dato = 0b00001111;
◦ short dat = 0b10101010;
◦ unsigned char sig = 0b11001100;

 ASCII
◦ char dat = ‘a’;
◦ char m = ‘5’;
Entrada/salida Configuración
 PORTA TRISA

 PORTB TRISB

 PORTC TRISC

 PORTD TRISD

 PORTE TRISE
 SALIDA DE DATOS : 0

 ENTRADA DE DATOS: 1

 La asignación es individual correspondiente a


cada terminal del puerto.
 Si deseamos configurar el puerto C con la
siguiente asignación:
RC0 entrada
RC1 entrada
RC2 entrada
RC3 entrada
RC4 salida
RC5 salida
RC6 salida
RC7 salida

 Posibles instrucciones a utilizar


set_tris_c = (0b’00001111’); o
set_tris_c = (0x0F); o
set_tris_c = (15);
 Si deseamos configurar el puerto D con la
siguiente asignación:
RD0 entrada
RD1 salida
RD2 entrada
RD3 salida
RD4 entrada
RD5 salida
RD6 entrada
RD7 salida

 Debemos utilizar cualquiera de las siguientes instrucciones


set_tris_d = (0b’01010101’);
set_tris_d = (0x55);
set_tris_d = (85);
 Si deseamos configurar el puerto A con la
siguiente asignación:
RA0 salida
RA1 salida
RA2 salida
RA3 salida
RA4 entrada
RA5 entrada
RA6 entrada

 Posibles instrucciones a utilizar

setup_adc(NO_ANALOGS) \\ instrucción indispensable para usar


el puerto A y el puerto E como
entrada o salida de datos digitales
set_tris_a = (0b’01110000’);
set_tris_a = (0x70);
set_tris_a = (112);
 Descripción: Crea un retardo por software dado el tiempo
en milisegundos (constante). El rango de constantes
aplicables a la función depende de la frecuencia del oscilador.
Es una función interna; El código es generado en el lugar
donde se hace la llamada, así que la llamada de esta función
no cuenta dentro del limite de llamadas anidadas.

 void Delay_ms(const time_in_ms)

 Ejemplo:
Generar un retardo de 1 segundo

Delay_ms(1000); /* Pausa de un segundo


*/
// Definición de variables globales

// Definición de funciones

void main(void)
{
// Definición de variables locales

// Configuración de registros (recursos y puertos)

// ciclo infinito
while ( 1 )
{

// Programa de usuario

}
}
 Crear un programa que encienda y apague un
led, ubicado en la terminal RB7 del puerto B.
El tiempo de encendido es de 1000
milisegundo y el de apagado de 300
milisegundos.
1. Configurar el bit 7 del puerto B como
salida de datos
2. Encendido del led
3. Retardo por software de 1000
milisegundos.
4. Apagado del led
5. Retardo por software de 300 milisegundos
6. Repetir el paso 2
Led

Configura bit del


puerto como salida Apaga bit

Enciende bit Retardo de 300 ms

Retardo de 1000ms
void main ( void )
{
output_d ( 0);
while( 1 )
{
output_high(pin_b7 );
Delay_ms( 1000 );
output_low(pin_b7 );
Delay_ms( 300 );
}
}
void main ( void )
{
output_d ( 0);
while( 1 )
{
portb = 0x80;
Delay_ms( 1000 );
portb = 0;
Delay_ms( 300 );
}
}
1. El alumno encenderá y apagara en forma
alternada dos led’s ubicados en los bit’s 2
y 3 del puerto B. Los retardos serán de
500 milisegundos (ambos). Usando
asignación directa a bits.
 Programa que envíe la siguiente secuencia
de datos al puerto de salida B.
Secuencia :
 00000001
 00000010
 00000100
 00001000
 00010000
 00100000
 01000000
 10000000
1. Configuración de puerto como salida de
datos.
2. Envío de primer dato al puerto de salida
3. Envío de segundo dato al puerto de salida
4. Envío de tercer dato al puerto de salida
.
.
.
9. Envío de ultimo dato al puerto de salida
10. Regresar a 2
Luces

Configura puerto
como salida Envía 00000100 Envía 00100000

Envía 00000001 Envía 00001000 Envía 01000000

Envía 00000010 Envía 00010000 Envía 10000000


void main(void)
{
output_d (0); // CONFIGURACION COMO PUERTO
DE SALIDA

while ( 1 ) // CICLO INFINITO


{
portd = 0b00000001; // ENVIA PRIMER DATO
Delay_ms(500);
portd = 0b00000010; // ENVIA SEGUNDO DATO
Delay_ms(500);
portd = 0b00000100; // ENVIA TERCER DATO
Delay_ms(500);
portd = 0b00001000;
Delay_ms(500);
portd = 0b00010000;
Delay_ms(500);
portd = 0b00100000;
Delay_ms(500);
portd = 0b01000000;
Delay_ms(500);
portd = 0b10000000;
Delay_ms(500);
}
}
1. El alumno enviara una secuencia de datos distinta
por el puerto B, utilizando retardos por software
de distintas duraciones, con incrementos de 100
milisegundos entre si.

2. El alumno enviara la secuencia de datos por el


puerto A, utilizando retardos por software con
duración de 800 milisegundos.
100001
010010
001100
010010
100001
#define MAX 50
int vector_one[10]; /* arreglo de 10 enteros */
float vector_two[MAX]; /* arreglo 50 flotantes */
float vector_three[MAX - 20]; /* arreglo 30 flotantes */
char numero[5];
short dato[8];
long temperatura[15];
unsigned peso[7];
unsigned short d[3];
/* Arreglo el cúal contiene el número de días de cada mes */

int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

/* La declaraciones es identica a la anterior */

int *days = {31,28,31,30,31,30,31,31,30,31,30,31};

/* Las dos declaraciones son identicas */

const char msg1[ ] = {'T', 'e', 's', 't', '\0'};


const char msg2[ ] = "Test";
if (expresión) conjunto 1 [else conjunto 2]

 Cuando la expresión evaluada es


verdadera, Las instrucciones del conjunto 1
son ejecutadas. Si la expresión es falso, las
instrucciones del conjunto 2 es ejecutada.
La expresión debe ser evaluada a un valor
entero. Los paréntesis que encierra la
expresión son obligatorios.
 La palabra especial “else conjunto 2” es
opcional.
Operador Operación
== igual
!= no igual
> mayor que
< menor que
>= mayor que o igual a
<= menor que o igual a
1. Configuración de puerto como salida.
2. Inicializa apuntador.
3. Envío de dato apuntado.
4. Incrementa apuntador.
5. Si apuntador es mayor que o igual a 8 inicia
el apuntador.
6. Regresa a 3.
Luces

Configura puerto Incrementa


como salida apuntador

Limpia apuntador si
apuntador ≥ 8 Limpia
apuntador

Envía dato
no
apuntado
void main(void)
{
int*dato [ 58-MAX ] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
int apunta;
set_tris_b(0x00);// configuramos el puerto b como SALIDA

// saca un nivel bajo de salida en los puertos


output_b (0);

while(1) // Ciclo infinito


{

portb = dato[apunta]; // Envía dato


Delay_ms(1000);
apunta++; // Incrementa apuntador
if (apunta>=8) // Si apuntador = 8
apunta = 0; // Limpia apuntador
}
}
1. El alumno enviara una secuencia por el
puerto B usando los valores almacenado en
un arreglo.
00000011
00000110
00001100
00011000
00110000
01100000
11000000
Operador operacion
AND; compara pares de bits y regresa 1 si ambos son 1’s,
& de otra manera regresa 0.

OR (inclusive); compara pares de bits y regresa 1 si uno o


| ambos son 1’s, de otra manera regresa 0.

OR (exclusiva); compara pares de bits y regresa 1 si los


^ bits son complementarios, de otra manera regresa 0.

Complemento (unitario); invierte cada bit


~
<< Corrimiento hacia la izquierda; mueve los bits hacia la
izquierda, descartando el bit mas a la izquierda y
asignando ceros al bit a la derecha.
>> Corrimiento hacia la derecha; mueve los bits hacia la
derecha, descartando el bit mas a la derecha y asignando
ceros al bit a la izquierda.
 &portx es la direccion de memoria a apuntar
y z es la cuenta del numero de bytes a
trabajar
 void main(void)
 {

 set_tris_b(0x00);
 portb=0x01;
 while(1)

 {
 rotate_left(&portb,1); //&portb es la direccion de memoria
a apuntar y 1 es la cuenta del numero de bytes a trabajar
 delay_ms(1000);
 }

 }
 El alumno enviará un corrimiento a la
izquierda empezando con RB0 y al llegar a
prender el bit RB7 regrese otra vez con las
funciones rotate_left y rotate_right .
 00000001 01000000
 00000010 00100000
 00000100 00010000
 00001000 00001000
 00010000 00000100
 00100000 00000010
 01000000 00000001
 10000000
 int band2;
 int band1;

 void main(void)
 {

 set_tris_b(0x00);
 portb=0x01;
 while(1)

 {
 if(portb==0x01|band1==1)
 {
 band2=0;
 band1=1;
 rotate_left(&portb,1); //&portb es la direccion de memoria a apuntar y 1 es la cuenta del
numero de bytes a trabajar
 delay_ms(1000);
 }
 if(portb==0x80|band2==1)
 {
 band1=0;
 band2=1;
 rotate_right(&portb,1); //&portb es la direccion de memoria a apuntar y 1 es la cuenta del
numero de bytes a trabajar
 delay_ms(1000);
 }
 }
 }
 El alumno enviara una secuencia de bits por el
puerto B utilizando un corrimiento de bits
haciendo uso de los operadores <<>> .
 Secuencia 1 Secuencia 3 secuencia 5
 00000001 10000001 10000001
 00000010 01000010 01000010
 00000100 00100100 00100100
 00001000 00011000 00011000
00011000
Secuencia 2 Secuencia 4 00100100
 00010001 00011000 01000010
 00100010 00100100
 01000100 01000010
 10001000 10000001
 Realice la secuencia numero 3 del ejercicio
anterior variando la velocidad del corrimiento
de bits con RD0 (velocidad baja) y
RD1(velocidad alta) sin desbordarse.

Secuencia 3
 10000001
 01000010
 00100100
 00011000
Operador Operación

+ Suma

- Resta

* Multiplicación

/ División

% Resto, regresa el residuo de la división entera (no puede ser usado


con variables flotantes
++ Como prefijo Incrementa en uno el valor de la variable antes de
evaluar la expresión. Como Postfijo suma en uno la variable después
de ser evaluado la expresión.
-- Como prefijo decrementa en uno el valor de la variable antes de
evaluar la expresión. Como Postfijo resta en uno la variable después
de ser evaluado la expresión.
 El puerto USB (Universal Serial Bus) fue
desarrollado en los años 90 en conjunto de varias
empresas importantes, Compaq, Intel, Microsoft y
NEC para soportar una gran variedad de periféricos
de media y baja velocidad, con soporte integral
para transferencias en tiempo real (isócronas)
como voz, audio y vídeo comprimido.

Por lo tanto, entre los dispositivos USB más


característicos se pueden citar teclados, ratones,
joysticks, monitores, modems, impresoras,
escáneres, CD-ROMs, dispositivos de audio (como
micrófonos o altavoces digitales), cámaras
digitales y otros dispositivos multimedia.
EL CABLE USB SOPORTA TRES VELOCIDADES DE
TRANSFERENCIA DE DATOS:

 Baja Velocidad (1.0): tasa a 1.5Mbit/s (192KB/s). Utilizado


en su mayor parte por dispositivos como teclados, ratones
y joysticks.

 Velocidad Completa (1.1): tasa a 12Mbit/s (1.5MB/s). La


tasa más rápida antes de especificar USB 2.0, y muy
generalizada en la actualidad.

 Alta Velocidad (2.0): tasa de 480Mbit/s (60MB/s).

 Súper Velocidad (3.0): En fase experimental. Tasa a


4.8Gbit/s (600MB/s).
 Las señales USB son transmitidas sobre par
trenzado (D+ y D-).

Par trenzado, para reducir el ruido y las interferencias electromagnéticas- Wikimedia

 Utiliza half-duplex para efectos del ruido


electromagnético en enlaces largos.
 Los niveles de transmisión de la señal varían
de 0-0.3V (ceros) y 2.8-3.6V (unos) en las
versiones 1.0 y 1.1.

En alta Velocidad (2.0). ±400mV

incluye la transmisión de energía


eléctrica al dispositivo conectado.
 Los dispositivos LS tienen un cable de longitud
adecuada (hasta unos 3m, dependiendo de sus
características eléctricas).
 Los FS pueden utilizar cables de hasta 5m
(también dependiendo de sus características
eléctricas).
 Se utiliza codificación auto reloj NRZI (la línea
cambia de nivel si se transmite un 0 y no cambia
si transmite un 1).

 IDLE: reposo o línea en alta impedancia,


necesario para permitir transferencias semi-
dúplex, detectar la conexión y desconexión de
dispositivos y discriminar entre dispositivos FS y
LS.
Los dispositivos disponen de un transmisor
diferencial, receptores diferencial que
detectan varios estados eléctricos distintos en
la línea
 Transmisión/Recepción diferencial de bits:
Estados DIFF0 y DIFF1, denominados también
estados J y K.
 Detección de dispositivo y discriminación:

El transmisor (capa de interfaz) deja la línea en IDLE, si


hay un dispositivo conectado su polarización fuerza un
estado J (DIFF0 si LS) ó K (DIFF1 si FS), y si no lo hay, la
polarización del transmisor fuerza un estado SE0.

 SE0 (Single-Ended 0): Ambas señales D+ y D- a 0V. Se


utiliza para detectar la conexión / desconexión de
dispositivos, para indicar el EOP (fin de paquete) y para
generar reset.

 El EOP (fin de paquete) se indica mediante una


secuencia SE0
 Hubs (concentradores), proveen conectividad, (los
dispositivos no se conectan entre sí directamente,
sino cada uno a un hub).

 Los Hubs disponen de una conexión "Upstream"


hacia el ordenador y una o varias conexiones
"Downstreams" hacia dispositivos u otros Hubs.
 Forman una topología en varios niveles.

 La topología USB se denomina Estrella en Niveles.

El nivel 0 (Raíz o Root) se


encuentra el Controlador USB
 Se basa en tokens (testigos).

 Genera los paquetes tokens de transferencia de


datos a 12 Mbps o a 1,5 Mbps.

 USB también maneja el consumo en el bus a través


de las funciones Suspender/Continuar, por medio de
las cuales controla los modos Reposo/Activo de los
dispositivos.

 Se llevan a cabo las comunicaciones a través de


Transacciones

 Las transacciones se compone de 3 fases:


Token, Dato y Validación (Handshake):
 PID (identifica el tipo de paquete). Todos los
PIDs van protegidos por bits redundantes.

 Dirección del elemento destino (7 bits de


dispositivo + 4 bits de elemento interno al
dispositivo).
 La fase de Datos (opcional) se compone de
los paquetes de datos que se transfieren
entre el Controlador USB y el dispositivo.
Cada paquete se compone de los campos PID
y Datos
 La fase de Validación (opcional) se usa para
indicar el resultado de la transacción. Se
compone sólo de un campo PID.
 Host: Dispositivo maestro que inicia la comunicación
(Generalmente la computadora).

 Hub: Dispositivo que contiene uno o mas conectores o


conexiones internas hacia otros dispositivos usb, el cual
habilita la comunicación entre el host y con diversos
dispositivos. Cada conector representa un puerto USB.

 Driver: es un programa que habilita aplicaciones para


poderse comunicar con el dispositivo. Cada dispositivo
sobre el bus debe tener un driver, algunos periféricos
utilizan los drivers que trae Windows.

 Puntos terminales (Endpoints): Es una localidad específica


dentro del dispositivo. El Endpoint es un buffer que
almacena múltiples bytes, típicamente es un bloque de la
memoria de datos o un registro dentro del
microcontrolador.
 Tuberías (Pipes): Es un enlace virtual entre el host (la PC) y el
dispositivo USB, este enlace configura los parámetros
asociados con el ancho de banda que tipo de transferencia se
va a utilizar (Control, Bulk, Isócrona o Interrupt) dirección del
flujo de datos y el máximo y/o mínimo tamaño de los
paquetes/buffers.
 Cuando se conecta un dispositivo USB a la PC se
produce el Proceso de Enumeración, el cual
consiste en que el host le pregunta al dispositivo
que se presente y le diga cuales son sus
parámetros, tales como:

• Consumo de energía expresada en unidades de


Carga.
• Numero y tipos de Puntos terminales.
• Clase del producto.
• Tipo de transferencia.
Pagina 3 del datasheet del microcontrolador
 La conexión entre un host
y un dispositivo requiere
la interacción entre las
capas:
 La capa de interfaz de bus
USB proporciona la
conexión física entre el
host y el dispositivo.
 La capa de dispositivo USB
es la que permite que el
software del sistema USB
realice operaciones
genéricas USB con el
dispositivo.
 La capa de función
proporciona capacidades
adicionales al host vía una
adecuada capa de
software cliente.
 Si trabajamos con un cristal de 4.00Mhz:

#fuses:XTPLL,NOWDT,NOPROTECT,NOLVP,
NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN

 XTPLL: Con esto le indicamos al compilador que


usaremos un cristal en conjunto con el PLL para
generar 48Mhz. Si estamos usando un cristal de
4Mhz no ara falta usar división en el postcaler. En
caso de que usemos un cristal de 20Mhz
tendríamos que poner HSPLL y un divisor de
postcaler de 5 para obtener los 4Mhz en la entrada
del PLL.
#fuses:XTPLL, NOWDT ,NOPROTECT,NOLVP,
NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN

 NODEBUG: No utilizaremos el modo debug

 USBDIV: Este bit puede ser 1 o 0 y con el


seleccionamos la fuente de oscilación del
periférico USB o directa utilizando la
frecuencia del cristal seleccionado o del
PLL/2.
#fuses:XTPLL, NOWDT ,NOPROTECT,NOLVP,
NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN

 PLL1: Aquí seleccionamos el factor de división


del postcaler, el mismo se seleccionará
teniendo en cuenta el valor del cristal que se
ha utilizado. Siempre se tiene que tener la
premisa que se necesitan 4Mhz en la entrada
del PLL para que este genere 96Mhz. Nosotros
utilizaremos un cristal de 4Mhz por lo que el
factor de división va a ser 1.
#fuses:XTPLL, NOWDT ,NOPROTECT,NOLVP,
NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN

 CPUDIV1: el PLL postscaler decide la división en 2 de


la frecuencia de salida del PLL de 96MHZ, si queremos
48MHZ, lo dejaremos como está.

 VRGEN que es utilizado para habilitar el regulador


interno de 3.3v para el puerto USB, en caso de que
estemos usando el USB interno pero en caso de que
estemos usando un controlador externo
desactivaremos este bit y usaremos una fuente
externa. La siguiente imágen nos muestra esto
detalladamente.
 Putc(cdata)
Cdata es un carácter de 8 bits. Esta funcion envía un
carácter mediante la patilla D-. La directiva #include
".\emulserial\usb_cdc.h“ debe situarse siempre antes de
utilizar ésta función.
 Printf(fname,ctring,value....)
Cstring:es una cadena de caracteres (constante) o matriz de
caracteres.
Fname: las funciones a utilizar para escribir la cadena
indicada, por defecto se utiliza la función putc(), que
permite escribir en el bus USB.
Value: valores a incluir en la cadena separados por comas ;
se debe indicar %nt. El formato es %nt, donde n es opcional
y puede ser:
1-9 para especificar cuantos caracteres deben ser especificados.
01-09 para indicar la cantidad de ceros a la izquierda;
1.1-9.9 para coma flotante.

t puede indicar:
c Carácter
s Cadena o carácter
u Entero sin signo
d Entero con signo
Lu Entero largo sin signo
Ld Entero largo con signo.
x Entero hexadecimal (minúsculas)
X Entero hexdecimal(mayusculas)
Lx Entero largo hexadecimal (minúsculas)

LX Entero largo hexdecimal(mayusculas)

f Flotante con truncado


g Flotante con redondeo
e Flotante en formato exponencial
w Entero sin signo con decimales insertados la primera cifra indica el
total la segunda el numero de decimales

También podría gustarte