View
236
Download
3
Category
Preview:
Citation preview
INDICE
• Introduction a los microcontroladores
• Ejemplo de microcontrolador minimalista: PIC10F200
• El microcontrolador ARM7 LPC2103
Microcontroladores
• Idea «SoC»: Computador en un solo chip
• Posible si la cantidad de memoria es pequeña.
• Ideal para aplicaciones «embedded»
CPU
RAMROM
MEMORY
CLK
GPIOTIMER
COMMADC
ETC
PERIFERALS
Microcontroller
Clasificaciones de los uC.
• Por anchura de palabra de la CPU
– 8 bits: 8051, PIC10-18, AVR, 68HC11, …
• Suelen presentar arquitectura Harvard
– 16 bits: PIC24/dsPIC, H8, 68HC12-16, …
– 32 bits: principalmente basados en CPUs ARM
LPC2xxx: ARM7 (NXP)
AT91SAM: ARM7 (Atmel)
PIC32: MIPS (Microchip)
AVR32 (Atmel)
LPC1xxx: Cortex-M (ARM)
Arquitectura de la CPU
data
addr
.
addr
.
inst
r.
CPU
MEMORY
Data
MEMORY
ProgramMEMORY
addr
.
data
CPU
Harvard Architecture
data
addr
.
addr
.
inst
r.
CPU
DataInstruction
CACHE CACHE
Memory Management Unit
addr
.
data
MEMORY
Main
ArchitectureVon Neumann Modified Harvard Architecture
- One memory space - Two memory spaces
- One logical memory space
Harvard: I8051, PIC, AVR...
Von Neumann: ARM7, Cortex-M0, 68HCxx...
Modified Harvard: ARM9, Cortex-M3/4*, MIPS...
Características Generales
• Memoria de DATOS
– RAM
• Almacena las variables de los programas (variables estáticas, las de tipo «auto» suelen estar en registros)
• En algunos micros también contiene la PILA
• Memoria interna de unos pocos KB máximo
– Bancos de registros
• Los registros de la CPU suelen estar visibles en ciertas direcciones de la memoria de datos
– E/S
• Los registros de los periféricos también están visibles en la memoria de datos (memory-mapped-I/O)
Memoria de Programa• ROM
– programada en fábrica. No se puede modificar su contenido.
• OTP: One-time-programming.
– Se puede programar pero no se puede borrar.
• Flash
– Programable y borrable (>1000 ciclos garantizados).
– Se borra por bloques, no por posiciones individuales.
• EEPROM
– Se permite la reprogramación de posiciones individuales.
– Ideal para guardar datos de configuración.
Interrupciones• Simples
– Se salta a una dirección fija.
– La causa de la interrupción se indaga por programa.
• Vectorizadas
– Se salta a una dirección distinta por cada causa.
– Se usa una tabla de saltos o de punteros.
• Flags de interrupción (en reg. de estado)
– Se activan cuando un periférico causa una interrupción.
– Puede que haya que borrarlos por programa.
• Máscaras de interrupción
– Seleccionan que interrupciones se permiten y cuales no.
Periféricos típicos
• GPIO: E/S de propósito general
– Dirección de pines: entrada o salida
– GPIO o funciones especiales
– Pull-ups programables
– Características eléctricas especiales:
• Drenador abierto
• Schmitt-trigger (histéresis)
• Corriente de carga (conexión directa de LEDs…)
• Tolerantes a 5V (en micros con tensiones de alimentación baja)
UART Comunicaciones serie Asíncronas
– Formato de los datos
• Nº de bits de datos
• Nº de bits de stop
• Paridad
– Velocidad de los datos
– Flags e interrupciones
– Interfaz eléctrica
• RS232
• Bus RS485
• Bus LIN (automoción)
D0 D7START D1 D2 D3 D4 D5 D6 STOP STOPPARITY(optional)
(Nbit+1+Nstop+(parity?))*Tbit
character lengthTbit 1 or 2 Tbit
idle idle5 to 8 data bits
Periféricos típicos• Comunicaciones serie síncronas
– Bus SPI
– Bus I2C
• Temporizadores / Contadores
– Temporizadores básicos
– Eventos de captura y comparación
– PWM
– Perro guardian (Watchdog)
• Conversión Analógico/Digital
– Comparadores analógicos
– ADC de aproximaciones sucesivas
Gestión del reloj
• Generación de la señal de reloj
– Osciladores internos. Calibración.
– Osciladores externos. Cristales de cuarzo.
– PLL
• Modos de bajo consumo
– CPU dormida (sin reloj). Modo Idle.
– Control de alimentación de periféricos.
– Oscilador principal parado. Modo power-down.
– Interrupciones tipo «despertador»
Otros…
• Circuitería de reset
– Reset externo.
– Power-on. Reset al encender.
– Brown-out. Reset en fluctuaciones de la alimentación.
– Perro guardián.
• Bootloaders
– Programas en ROM para la reprogramación del microcontrolador dentro del sistema.
– Protección del código contra copia.
Periféricos opcionales
• EMC: Controlador de memoria externa
– Flash / DRAM
• Controlador de vídeo
– LCD segmentados. LCD/TFT gráficos. HDMI
• Audio digital: I2S (puerto serie síncrono)
• Interfaz para tarjetas de memoria MMC/SD (4-bit)
• Interfaces de comunicaciones
– Bus CAN (automoción)
– USB device. USB host/OTG.
– Ethernet
Familias de uC• Conjunto de uC con características comunes:
– Misma CPU
– Cantidad de memoria interna variable
– Variedad de periféricos para elegir
• Con ello se pretende ofrecer el uC más ajustado a la aplicación.
– La memoria encarece el uC.
– El disponer de periféricos especializados permite soluciones compactas (pocos componentes).
Ejemplo de familia: LPC21xx
modelo Flash
(kB)
RAM
(kB)
Pines
E/S
UART SPI I2C PWM CAN
LPC2101 8 2 32 2 1 1 14 0
LPC2103 32 8 32 2 1 1 14 0
LPC2114 128 16 46 2 2 1 6 0
LPC2119 128 16 46 2 2 1 6 2
…. … … … … … … … …
• Los periféricos tienen los mismos registros y ocupan las mismas posiciones de E/S en todos los uC de la familia.
uC minimalista: PIC10F200
• 6 pines
• 256 palabras de código de 12 bits
• 16 bytes de memoria de datos
• Periféricos:
– GPIO: 4 pines
– Contador/Temporizador de 8 bits
• No soporta interrupciones
• Reloj de 1 MHz (oscilador de 4MHz) interno.
• 0.287€ en Mouser Electronics
PIC 8-bit cores
Core OP-code
(bits)
Program
Space
max.
Data
Space
(wo banks)
Stack
deep
Interrupts Models
Baseline 12 512 32 2 No PIC10xxPIC12xx
PIC16F5xx
Enhanced Baseline
12 512 32 4 Yes PIC16F527PIC16F570
Mid-Range 14 8k 128 8 Yes PIC16xx
Enhanced Mid-Range
14 32k 128 16 Yes PIC16F16xxPIC16F18xx
High-End 16 1M 256 31 Yes PIC18xx
PIC10F200
PC
stack 1
stack 2
GP0
GP1
Instr. Reg
mux
mux
ALU Status R.
OPTION
RAM
16x8
Flash
256x12
data bus 8
12
8
5
8
TRIS
GPIO
CONFIG
8
GP2
GP3
/MCLR
1
2
3 4
5
6
2.7mm
2.9m
m
SOT-23/6
GP0
gnd
GP1 GP2/T0KI/FOSC4
Vdd
GP3//MCLR
PIC10F200
osccalbak.
USER ID
flash registers
TIMER0
OSCCAL
W
FSR
Watchdog
Reset
Instr. decode& control
CLK osc.
Prescaler
• Pila hardware:• 2 niveles de
subrutinas• Registro W (working reg)
implícito en instrucciones.
• E/S mapeada en memoria de datos.
PIC10F200: mapa de memoria
STATUS
0x00
0x01
0x02
0x03
0x04
OSCCAL
0x07
0x0F
0x1F
0x10
0x06
0x05
registers
purposegeneral
PCL
INDF*
FSR Indirect addressing: pointer
TMR0
GPIO
unimplem.
Data address space
Read as 0x00
Program counter (lower byte)
Flags
Timer0
Clock frequency adjust
Pin input/output (see also TRIS)
Indirect addressing (not a physical register)
Instruction specific registers
OPTION
OPTION: copy W to OPTION
User RAM / variables
(16 bytes)
CLRWDT: clear watchdog
SLEEP: clear watchdog, stop osc.
TRIS
TRIS: copy W to TRIS
PIC10F200. Registros
GPWUF
7 0
- - DC C
123456
/TO /PD Z
STATUS:
DC: Digit (4th bit) carry (for BCD arithmetic)
C: Carry flag from ALU
Z: Zero flag from ALU
/TO: Time-out. Set to low after a watchdow reset
GPWUF: GPIO reset. Set high after a reset due to pin change
/PD: Power down. Set to low after executing SLEEP
PIC10F200. Registros
000 1/2 1/1001010011100101110111
1/41/81/161/321/641/1281/256
1/21/41/81/161/321/641/128
OPTION:
7 0123456
/GPWU /GPPU T0CS T0SE PSA PS2 PS1 PS0
PS2-0: Prescaler division factor select bits (for TIMER0 or watchdog)
value TIMER0 watchdog
PSA: Prescaler asignement. 0=prescaler asigned to TIMER01=prescaler asigned to watchdog
T0SE: TIMER0 source edge. 0=rising edge1=falling edge
T0CS: TIMER0 Clock Select. 0=Timer0 clk is Fosc/41=Timer0 clk is T0CKI pin (GP2)
/GPWU: Enable wake-up on pin change (GP0,GP1,GP3). 0=enabled1=disabled
/GPPU: Enable pull-ups (GP0,GP1,GP3). 0=pull-ups enabled1=pull-ups disabled
PIC10F200. GPIO
D
wr /Q
Q
D
wr /Q
Q
GPIOlatch
latchTRIS
GPIO
TRISinstr.
reg.W
wr
data bus
rd GPIO
p
GP pin
p
n
pull-upweak ESD
protection
TRIS:
* No pull-up for GP2
Vdd
Vss /GPPU
(OPTION reg.)
** GP3 is input-only
0=output1=input
not for GP3 **
*
PIC GPIO read/modify/write
• El valor del registro GPIO no se puede leer directamente. Lo que se lee es la tensión en el pin.
• Los pines que estén programados como entradas se van a cambiar en GPIO al ejecutar las instrucciones de tipo read/modify/write en GPIO. Ejemplo:
BSF GPIO,0 (poner en 1 el pin GP0)
Consta de 3 pasos:
1. Lee GPIO al bus de datos interno (los 4 bits)
2. Se hace una OR lógica con 0x01
3. Se escribe el resultado en GPIO
Si GP1 está como entrada el valor que haya en ese momento en el pin se va a escribir en GPIO.1 (supuestamente sólo estábamos cambiando GPIO.0)
PIC10F200. Config
WDTE/CP
01234567891011CONFIG:
MCLRE
0=disabled
/CP: Code protection 0=enabled1=disabled
1=enabled
MCLRE: MCLR enable
WDTE: Watchdog enable
0=GP31=MCLR
• CONFIG no es accesible desde el propio microSu valor se graba junto con la memoria de programa (flash)
• El watchdog es un contador con un periodo de 18ms (sin prescaler) que hace un reset del micro si no se borra antes de ese tiempo con la instrucción CLRWDT
• Si /CP está activo las posiciones de memoria de programa 64 a 255 se leen como 0x000 desde los programadores.
PIC10F200. cjto. de instrucciones
• Registro W implícito
• Destino en W o en memoria de datos, a elegir
Ejemplos:
ADDWF var,w W+Mem[var] -> W
ADDWF var,f W+Mem[var] -> Mem[var]
• Las instrucciones se ejecutan en un ciclo de CPU (4 ciclos de oscilador) salvo los saltos que tardan 2 ciclos: GOTO, CALL, RETLW, y escrituras en PCL.
• No hay saltos condicionales. En su lugar se tienen instrucciones «SKIP» condicionales, que ejecutan la siguiente instrucción o la convierten en NOP.
PIC10F200. Instrucciones
Instrucción Descripción Flags comentarios
ADDWF f,d W+Mem[f] ->W/Mem[f] C, DC, Z
ANDWF f,d W&Mem[f] -> W/Mem[f] Z
CLRF 0 -> Mem[f] Z
CLRW 0 -> W Z
COMF f,d ~Mem[f] -> W/Mem[f] Z
DECF f,d Mem[f]-1 -> W/Mem[f] Z
DECFSZ f,d Mem[f]-1 -> W/Mem[f]Skip next instr. If result is 0
- Útil en bucles
INCF f,d Mem[f]+1 -> W/Mem[f] Z
INCFSZ f,d Mem[f]+1 -> W/Mem[f]Skip next instr. If result is 0
-
IORWF f,d W|Mem[f] -> W/Mem[f] Z
MOVF f,d Mem[f] -> W/Mem[f] Z
MOVWF f W -> Mem[f] -
PIC10F200. InstruccionesInstrucción Descripción Flags comentarios
NOP -
RLF f,d Rotate Left (through carry) C ROT
RRF f,d Rotate Right (through carry) C ROT
SUBWF f,d Mem[f]-W -> W/Mem[f] C, DC, Z
SWAPF f,d Nibble swap - SWAP
XORWF f,w W^Mem[f] -> W/Mem[f] Z
BCF f,b Mem[f].b=0 (bit clear) - RMW
BSF f,b Mem[f].b=1 (bit set) - RMW
BTFSC f,b Skip next Instr. IfMem[f].b==0
-
BTFSS f,b Skip next Instr. IfMem[f].b==1
-
ANDLW k W&k -> W Z
CALL k Subroutine call:PC->stack, k -> PC
-
PIC10F200. Instrucciones
Instrucción Descripción Flags comentarios
CLRWDT Clear watchdog TO,PD watchdog
GOTO k k -> PC -
IORLW k W|k -> W Z
MOVLW k k -> W -
OPTION W -> OPTION -
RETLW k k -> W, stack -> PCreturn from subroutine
- Constantarrays
SLEEP Stop oscillator TO,PD Power down
TRIS f W -> TRIS -
XORLW k W^k -> W Z
PIC10F200. Instrucciones
C
CRLF:
RRF:
Mem[f]
SWAP:
Mem[f]
H L
RMW: Read/Modify/Write. Usar con precaución si f=GPIOConstant Arrays: Arrays of RETLW k instructions
PIC. Estructuras de programa
• BuclesContador: equ 0x10 ; variable en RAM
MOVLW 20 ; nº de vueltas
MOVWF Contador
Etiqueta: …
…
DECFSZ Contador,f
GOTO Etiqueta
…
PIC. Estructuras de programa
• Tablas de constantesMOVF indice,w
CALL tabla
…
tabla: ADDWFPCL,f ;salto múltiple
RETLW0x25 ;tabla[0]
RETLW0x33 ;tabla[1]
RETLW0x12 ;tabla[2]
…
…
PIC. Estructuras de programa
• Aritmética de 16 bits; AH:AL + BH:BL -> AH:AL
; (variables en RAM)
MOVF BL,w
ADDWFAL,f
BTFSC status,c ; ¿acarreo?
INCF AH,f
MOVF BH,w
ADDWFAH,f
PIC10F200. Ejemplo de aplicación
128 ciclos128 ciclos
8192 ciclos1024 ciclos
187 us187 us
1 ciclo
Q0
Q7
Q10
Q13
2.66kHz
OSC
Reset
contador 14 bits
/LUZ(sensor)
altavoz
Artículo de broma: Grillo electrónico• Imita el canto de un grillo en la oscuridad• El PIC10F200 va a sustituir a toda la lógica de la figura
PIC10F200. Ejemplo de aplicación
LDR
/MCLR
+3VGP1
GP0
GP2
PIC10F200altavoz
piezoelectrico
• LDR: disminuye su resistencia con la luz
• Altavoz piezoeléctrico: Impedancia de unos 2kohm. Se puede conectar directamente a los pines del micro
• Altavoz entre dos pines: Aumenta el volumen del sonido (recomendable para tensiones de alimentación bajas)
PIC10F200. Códigoprocessor p10f200
__config 0x01C ; MCLR, no code protection, watchdog ON
radix dec ; números en decimal por defecto
;----------------------------------------------
;--------------- Definiciones -----------------
w equ 0 ; W es destino
f equ 1 ; File_reg es destino
c equ 0 ; Carry flag en STATUS
dc equ 1 ; Digit_Carry flag en STATUS
z equ 2 ; Zero flag en STATUS
;------------ Registros especiales ------------
indf equ 0x0
tmr0 equ 0x1
pcl equ 0x2
status equ 0x3
fsr equ 0x4
osccal equ 0x5
gpio equ 0x6
PIC10F200. Código;----------- Variables del programa -----------
cblock 0x10 ; primera posición libre
cnt1 ; contador de 16 bits
cnt2
tmp ; variable comodín
endc
;------------------ RESET ---------------------
org 0
movwf osccal ;calibramos oscilador
movlw 0x0c ;GP0,GP1 salidas
tris gpio
movlw 0x4f ;No Pull-UPs, prescaler 1/128 para WDT
option
;----------- BUCLE principal del programa ----------
PIC10F200. CódigoL0: btfss gpio,2 ; probamos luz
sleep
clrwdt
incf cnt1,f ; (cnt1:cnt2)++
btfsc status,z
incf cnt2,f
movf cnt1,w ; Bits 0,7,10,13 en cero?
andlw 0x81 ; bits 0 y 7
movwf tmp
movf cnt2,w
andlw 0x24 ; bits 10 y 13
iorwf tmp,w
movlw 0x01 ; valor en buzzer. Depende de si los bits eran 0
btfsc status,z
movlw 0x02
movwf gpio ; cambio en pines del buzzer
movlw 56 ; retardo: 20+(56*3-1)=187 ciclos/muestra
movwf tmp
L1: decfsz tmp,f
goto L1
goto L0
end
Recommended