Professional Documents
Culture Documents
9 Aumento de la fiabilidad.
• Menor riesgo de averías
• Menos ajustes
9 Disminución del tamaño del producto.
• Menor volumen
• Mano de obra
• Stocks
9 Disminución del coste del producto.
Aplicaciones de los Microcontroladores
• Cocina •General
o Lavadora....................... 1 o Calefacción........... 1
o Horno.......................... 1 o Aire acondicionado.... 1
o Frigorífico.................... 1 o Video portero......... 2
o Lavavajillas................... 1 •Automóvil
• Salón o Frenos ABS............ 1
o TV............................. 2 o Climatización......... 1
o Mando a distancia.............. 1 o Alarma antirrobo...... 1
o Video.......................... 1 o Airbag................ 1
o DVD............................ 2 o Equipo música......... 1
o Receptor TDT................... 1 o Ordenador de viaje.... 1
o Teléfono fijo.................. 1 o Control motor......... 1
o Teléfono móvil................. 2 o Sistema seguridad..... 1
• Garaje •PC y periféricos.............. 6
o Puerta automática.............. 1
o Alarma robo/incendio/gas....... 3
• Ascensor............................ 2
TOTAL: . . . . . . . . . . 38
El Mercado de los Microcontroladores
• se venden cientos de microcontroladores por cada microprocesador
• existe una gran diversidad de microcontroladores: clasificación según tamaño de
la palabra, en microcontroladores de 4, 8, 16 ó 32 bits
• la totalidad de los microcontroladores actuales se fabrican con tecnología
CMOS.
¿Qué microcontrolador emplear?
Factores a considerar según la aplicación:
• Unidad de control: se encarga de generar las señales necesarias para que todo el
computador ejecute las instrucciones leídas de la unidad de memoria. La unidad de control
es la encargada de leer de forma consecutiva las instrucciones (que se encuentran
almacenadas en la unidad de memoria), y generar las señales eléctricas necesarias para
proceder a la ejecución de cada una de estas instrucciones. Es la unidad que gobierna y
gestiona el comportamiento de un computador.
• La agrupación de algunos bloques funcionales del computador
como son la unidad de control, la unidad aritmético-lógica y los
registros recibe el nombre de unidad central de proceso (CPU).
Características Arquitectura: Von Neumann
• Unidad de entrada/salida: realiza la transferencia de información
con el exterior, con las unidades que se conocen con el nombre de
periféricos.
• Buses: caminos que unen los distintos bloques del computador y a
través de los cuales circulan los datos y las instrucciones.
Dependiendo del tipo de información que se trate podemos hablar de
diferentes caminos:
• Bus de datos: circulan los datos de las operaciones que se
van a efectuar.
• Bus de direcciones: circulan las direcciones de memoria
donde se encuentra almacenado algún tipo de información a la
que se desea acceder.
• Bus de control : circulan las señales de control generadas por
la unidad de control para la ejecución de las instrucciones.
Arquitectura HARVARD
FLASH: Es una memoria no volátil de bajo consumo, que se puede leer y escribir
en el propio circuito. Es mas veloz y de mayor densidad que la EEPROM .
Puertos de entrada y salida
¾Una misma patilla del chip, puede ser entrada o salida, tanto
analógica como digital.
• Temporizadores o timers.
• Perro guardián o “watchdog”.
• Protección ante fallos de alimentación o “brownout”.
• Estado de bajo consumo o “sleep”.
• Convertidor A/D.
• Convertidor D/A.
• Control se anchura de pulsos PWM.
• Puertos de comunicación.
– UART
– USART
– USB
– I2C
– CAN
– TCP/IP
Ciclo de vida del proyecto
Ensamblador.
Compilador.
Simulador.
Placas de prototipo + ICD.
Emuladores en circuito + ICD.
Programador.
Lenguajes de programación
• Ensamblador
– Permiten el uso eficiente de los recursos
– Programación costosa y casi imposible la modificación
• El código debe ser documentado, empleo de símbolos
• Programación estructurada
• Lenguajes de alto nivel
– Desarrollo más rápido, mantenimiento menos costoso
↓ Eficiencia
↑ Ocupación en memoria
– Ada --> Grandes sistemas
– C, PASCAL, PYTON, BASIC
• Permiten el acceso a los recursos hardware (ansi C + registros +
asm)
Proceso de implementación
Entorno IDE
Editar código fuente (editor de textos)
*.c
MIKROC
Compilar código fuente (Mikroe compiler)
*.asm
MPASM, MIKROC
Ensamblar código objeto
*.dbg, .cof
*.hex
Fichero ejecutable
WINPIC800
+ TE-20
Implementación y prueba
SIMULACIÓN/CORRECCIÓN
PROGRAMACIÓN
Foto placa
Placas de simulación (programadores)
Microcontroladores (Familias I)
• 8051 (Intel)
– Arquitectura Harvard (direccionamiento separado para datos e
instrucciones)
– Bus de 8 bits de datos
– Puede direccionar 64K de programa (los 4K ó 8K bajos pueden residir
en chip) y 64K de memoria de datos externa. 128 bytes de RAM
interna + registros especiales. E/S direccionadas en espacio propio.
• Bus de direcciones de 16 bits
– Gran potencia en instrucciones de bit
– Timers y puertos serie (no A/D ni PWM)
– 8048 serie baja
– 80c196 de 16 bits
– 80186: microcontrolador con un 8086 como núcleo (PC XT)
Microcontroladores (Familias II)
• 68HC11 (Motorola)
– Arquitectura Von Neuman (datos, programa, E/S, timers
comparten el mismo espacio de memoria)
– Bus de 8 bits de datos, 16 bits de direcciones
– Pueden tener: EEPROM/OTPROM, RAM, E/S digitales, timers,
A/D, PWM, acumuladores de pulsos, comunicación serie
síncrona y asíncrona
– Serie baja 68HC05
– 683xx: microcontrolador con un 68xxx como núcleo
¿ Porqué PIC?
No porque esta familia sea mejor que otras, sino porque presentan diversas
características que los hacen especialmente interesantes:
- Facilidad de uso.
- Gran cantidad de información disponible en libros, revistas
e Internet.
- Herramientas de desarrollo muy asequibles.
- Bajo precio y fácil disponibilidad.
s
bit
16 PIC24 , (DsPIC)
75, (84) instrucciones,
hasta 16,(40)MIPS
PIC16*
Gama media
8b
Nº de pin’s 8 18 18 40 64
PWM No No Si(10bits) Si Si
Frec. Max. 4 Mhz. 20Mhz. 20Mhz. 20Mhz. 40Mhz
Precio 2,04€ 5,17€ 3,81€ 10,85€ 23,75€
Modo de conexionado del oscilador:
Oscilador XT Oscilador RC
C1=C2=22pF ó 33pF C1 de 20pF como mínimo
Cristal ? 4MHz (PIC16F84A-04) 5K? ? R1 ? 100K?
La memoria de programa
El espacio marcado como "Espacio de
Memoria de Usuario" es donde irá el
programa, desde la dirección 0000h hasta la
3FFh (3FFh en decimal es 1023, que mas la
dirección 0000h hace 1024 direcciones, es
decir, 1Kbyte).
"Reset Vector" es la primera dirección
(0000h) a la que se dirige el PIC al
encenderlo o al resetearlo y donde debe
estar siempre la primera instrucción.
"Vector de Interrupción" es la dirección
(0004h) a la que se dirige el PIC cuando se
produce una interrupción, esto es, un evento
que permite sacar al PIC de la ejecución
normal del programa para ejecutar una
subrutina de atención a la interrupción.
"PC" (Contador de Programa) es un registro
de 13 bits que apunta a la dirección de la
memoria de programa que contiene la
instrucción a ejecutar.
"Niveles de la pila de 1 a 8" son los niveles
de la pila, que se utiliza cuando se ejecutan
subrutinas.
La memoria de datos RAM
- La memoria RAM no sólo se usa para almacenar las
variables que puedan utilizarse en el programa, también se
utilizan una serie de registros para configurar y controlar el
PIC.
void interrupt() {
cnt++; // Incrementar valor cnt
TMR0 = 96; //en cada interrupción
INTCON = 0x20; // Activar T0IE, borrar T0IF
}//~
void main() {
OPTION_REG = 0x84; // Preescaler a TMR0
TRISB = 0; // PORTB como salida
PORTB = 0xFF; // iniciar PORTB
TMR0 = 96;
INTCON = 0xA0; // Habilitar interupción TMR0
cnt = 0; // Resetear cnt
do {
if (cnt == 400) {
PORTB = ~PORTB; // Negar PORTB
cnt = 0; // Resetear cnt
}
} while(1);
}//~!
Cálculo de retardos con TMR0
Tosc = 1 / fclock
Formato de una instrucción (I)
Ejemplo: addfw k
call k
RAM 16F84 RAM 16F877
Display alfanumérico LCD
Librería LCD (interface 4 bits)
Lcd_Config
void Lcd_Config(unsigned short *port, unsigned short RS, unsigned short EN,
unsigned short WR, unsigned short D7, unsigned short D6, unsigned short D5,
unsigned short D4);
Lcd_Config(&PORTD,1,2,0,3,5,4,6);
Lcd_Init
Lcd_Init(&PORTB);
Lcd_Out
void Lcd_Out(unsigned short row, unsigned short col, char *text);
Lcd_Out(1, 3, "Hello!");
Lcd_Custom_Cmd
void Lcd_Custom_Cmd(char out_char);
Lcd_Custom_Cmd(Lcd_Clear);
LCD Command Purpose
LCD_FIRST_ROW Move cursor to 1st row
LCD_SECOND_ROW Move cursor to 2nd row
LCD_THIRD_ROW Move cursor to 3rd row
LCD_FOURTH_ROW Move cursor to 4th row
LCD_CLEAR Clear display
LCD_RETURN_HOME Return cursor to home position, returns a shifted display to
original position. Display data RAM is unaffected.
Lcd_Custom_Config
void Lcd_Custom_Config(char * data_port, char D7, char D6, char D5, char
D4, char * ctrl_port, char RS, char WR, char EN);
Lcd_Custom_Config(&PORTD,3,2,1,0,&PORTB,2,3,4);
Lcd_Custom_Out
Lcd_Custom_Cmd
Manejo de display LCD
void main() {
TRISB = 0;
TRISC = 0; // PORTB y PORTC Salida
Lcd_Custom_Config(&PORTC,7,6,5,4,&PORTB,0,1,2);
Lcd_Custom_Cmd(Lcd_CURSOR_OFF); // Ocultar cursor
Lcd_Custom_Out(1, 1, text); //Imprimir texto
}
Conversión A/D (I)
Hasta 8 canales de entrada
Conversión por método de aproximaciones sucesivas
10 bits de resolución
Voltaje alto y bajo de referencia seleccionable por software
Posibilidad de ejecución en modo SLEEP
Conversión A/D (II)
4 registros básicos:
2 registros configuración:
ADCON0
ADCON1
2 registros datos:
ADRESH y ADRESL
Registro de configuración (I)
Registro de configuración (II)
Registro de datos
Conversión A/D
TRISA = 0xFF;
ADCON1 = 0x80;
ADCON0 = 0x81;
Comando: Adc_Read( ) Æ Inicializa el convertidor A/D
para trabajar como oscilar RC, y como parámetro se le pasa el canal
que queramos convertir, devolviendo un entero con el resultado de la
conversión.
Lcd_Custom_Config(&PORTD,3,2,1,0,&PORTA,3,2,1);
Lcd_Custom_Out(1, 1, "valor conversion:");
do {
temp = Adc_Read(0); // Almacena valor de la conversion
WordToStr(temp*5/1020, txt);
delay_ms(100);
Lcd_Custom_Out(2, 1, txt);
}while(1);
}
/*
* Project name:
ADC_USART (enviar al puerto serie el valor del ADC)
*/
-D e fin ir va ria b le s
-P a --> E n t ra d a
-P b --> S a lid a
L e e r P u e rt o A (R a 0 )
No Si
P 1 (R a 0 ) e s t a
p u ls a d o ?
A pagar Led L1
E nc ender Led
(R b 0 )
L 1 (R b 0 )
Compilar
Explorador
de código
Ventana de edición
Resultado
Proceso de trabajo
• Ejecutar el compilador.
• Crear un proyecto nuevo, o abrir uno existente.
– Proyect -> new proyect.
• Configurar parámetros del proyecto.
– Nombre del proyecto, directorio de trabajo…
– Seleccionar el Microcontrolador.
– Elegir la frecuencia de trabajo del mismo.
– Activar bits de configuración.
• Solo activar WDT_OFF.
• Escribir el código fuente.
• Construir el proyecto (build) y comprobar que esta libre de
errores.
– En el subdir de trabajo se generan 4 nuevos ficheros: *.asm, *.lst, *.mcl y
*.hex
• El fichero *.hex generado es el ejecutable que emplearemos
para simular en proteus, y posteriormente grabarlo en el
microcontrolador.
Comandos entrada/salida (I)
TRISx Donde x = A, B, C D ó E
-Define un puerto o un pin como entrada o salida.
-Un 1 define el pin como entrada y un 0 como salida.
- Ejemplo: TRISA = 0xFF; TRISB = 129; TRISE = % 11110001;
PORTx Donde x = A, B, C D ó E
-Asigna un valor a un puerto.
-Ejemplo: PORTB = %10000111; PORTA = 0xF8; PORTC = ~PORTB
PORTx.Fy Donde x = A, B, C D ó E
e y = 0..7
-Asigna un valor binario a un pin.
-Ejemplo: PORTB.F2 =1; PORTA.F0 =0;
Comandos entrada/salida (II)
var = PORTx
-Lee el puerto x y lo asigna a var
-Ejemplo: temp = PORTB
- temp sera de tipo byte.
Var = PORTx.Fy
-Lee el pin y del puerto x y lo asigna a var.
-Ejemplo: temp = PORTA.F2;
Ejercicio 1
void main(){
TRISB = 0; // inicializamos el puerto B y el D como salida.
TRISD = 0; // 0 --> Salida, 1 --> entrada
PORTB = 0;
PORTD = 0;
do {
PORTB = 0xFF; // equivale a 255 todo el puerto a 1
PORTD = 0; // Sería correcto PORTB = 255; ó PORTB = % 11111111;
delay_ms(1000); // Retardo de 1 seg.
PORTB = 0;
PORTD = 0xFF;
delay_ms(1000);
} while(1);
}
PIC 16F88
PIC 16F88
Microcontrolador Pic 16F88
Comparadores 2
Fuentes de interrupción 10
Patillas de E/S 16
Características
Rango de tensión 2.0–5.5 V