INDICE. Introduction a los microcontroladores Ejemplo de microcontrolador minimalista: PIC10F200 El microcontrolador ARM7 LPC2103

INDICE • Introduction a los microcontroladores • Ejemplo de microcontrolador minimalista: PIC10F200 • El microcontrolador ARM7 LPC2103 Microcontrola

1 downloads 112 Views 101KB Size

Recommend Stories


INTRODUCCIÓN AL MICROCONTROLADOR
INTRODUCCIÓN AL MICROCONTROLADOR Basado en el sitio web http://usuarios.lycos.es/sfriswolker Paul Aguayo S., [email protected] 10 de noviembre de 200

Programación del microcontrolador ATMega328P
Autor: Alberto J. Molina Cantero Actualizado 26/5/2016 Programación del microcontrolador ATMega328P 1. Introducción y objetivos - Utilizar el entorn

Microcontrolador PIC 16F84
Microprocesadores. Sistemas de Control. Lenguaje Nivel Bajo. Ensamblador. Registros. Stack. Pila. Interrupciones. Pull-up

El Microcontrolador PIC16F873. Resumen de hoja de datos
El Microcontrolador PIC16F873 Resumen de hoja de datos El microcontrolador PIC16F873 2 El microcontrolador PIC16F873 El PIC16F873 es un microcon

Empezando con Arduino. Controla tu entorno con un microcontrolador PIIISA
Empezando con Arduino Controla tu entorno con un microcontrolador PIIISA 2014 08-01-2014 http://core.ugr.es/scpiiisa/ Arduino Intermedio: Presente

Story Transcript

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»

Microcontroller MEMORY CPU ROM

RAM

CLK PERIFERALS TIMER GPIO

ADC COMM

ETC

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)

Arquitectura de la CPU

MEMORY

Modified Harvard Architecture

Program

Data

Instruction

Data

MEMORY

MEMORY

CACHE

CACHE

- One memory space

- Two memory spaces

Harvard: I8051, PIC, AVR... Modified Harvard: ARM9, MIPS...

data

Von Neumann: ARM7, 68HCxx...

addr.

Memory Management Unit

Main MEMORY - One logical memory space

data

addr.

instr.

addr.

data

CPU addr.

instr.

CPU addr.

CPU

data

Harvard Architecture

addr.

Von Neumann Architecture

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 – 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 5 to 8 data bits idle

idle START

D0

D1

D2

D3

D4

D5

Tbit

D7

(optional)

STOP

STOP

1 or 2 Tbit character length (Nbit+1+Nstop+(parity?))*Tbit

– 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

D6

PARITY

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.

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

PIC10F200 8

PIC10F200

data bus

PC

Flash

2.9mm

SOT-23/6

256x12

GP0

1

6

GP3//MCLR

gnd

2

5

Vdd

GP1

3

4

GP2/T0KI/FOSC4

GPIO stack 1 RAM

12

TRIS

16x8

Instr. Reg

OSCCAL mux 5

TIMER0 FSR

Instr. decode & control CLK osc.

8

mux

flash registers CONFIG

Prescaler Watchdog Reset /MCLR

ALU USER ID osccalbak.

GP0 GP1 GP2

stack 2

2.7mm

• Pila hardware: • 2 niveles de subrutinas • Registro W (working reg) implícito en instrucciones. • E/S mapeada en memoria de datos.

8

8

W

OPTION

Status R.

GP3

PIC10F200: mapa de memoria Data address space

Instruction specific registers

0x00

INDF*

Indirect addressing (not a physical register)

0x01

TMR0

Timer0

0x02

PCL

0x03

STATUS

0x04

FSR

0x05

OSCCAL

0x06

GPIO

0x07 0x0F 0x10

0x1F

OPTION: copy W to OPTION

OPTION

unimplem. general purpose registers

Program counter (lower byte) Flags Indirect addressing: pointer

TRIS: copy W to TRIS

TRIS

Clock frequency adjust Pin input/output (see also TRIS)

CLRWDT: clear watchdog SLEEP: clear watchdog, stop osc.

Read as 0x00

User RAM / variables (16 bytes)

PIC10F200. Registros STATUS: 7 GPWUF

6 -

5

4

-

/TO

3

2

1

0

/PD

Z

DC

C

C: Carry flag from ALU DC: Digit (4th bit) carry (for BCD arithmetic) Z: Zero flag from ALU /PD: Power down. Set to low after executing SLEEP /TO: Time-out. Set to low after a watchdow reset GPWUF: GPIO reset. Set high after a reset due to pin change

OPTION:

PIC10F200. Registros

7 /GPWU

6

5

/GPPU

T0CS

4 T0SE

3 PSA

2

1

PS2

PS1

PS2-0: Prescaler division factor select bits (for TIMER0 or watchdog) value 000 001 010 011 100 101 110 111

TIMER0 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256

watchdog 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128

PSA: Prescaler asignement. 0=prescaler asigned to TIMER0 1=prescaler asigned to watchdog T0SE: TIMER0 source edge. T0CS: TIMER0 Clock Select.

0=rising edge 1=falling edge 0=Timer0 clk is Fosc/4 1=Timer0 clk is T0CKI pin (GP2)

/GPPU: Enable pull-ups (GP0,GP1,GP3).

0=pull-ups enabled 1=pull-ups disabled

/GPWU: Enable wake-up on pin change (GP0,GP1,GP3).

0=enabled 1=disabled

0 PS0

PIC10F200. GPIO data bus

wr GPIO

not for GP3 D Q GPIO latch wr /Q

** Vdd

weak * pull-up p

ESD protection

p GP pin

W reg. TRIS instr.

D Q TRIS latch wr /Q

n

Vss

/GPPU (OPTION reg.)

rd GPIO

TRIS:

0=output 1=input

* No pull-up for GP2 ** GP3 is input-only

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 CONFIG: 11 10

9

8

7

6

5

4

3

2

MCLRE

/CP

WDTE

WDTE: Watchdog enable

0=disabled 1=enabled

/CP: Code protection

0=enabled 1=disabled

MCLRE: MCLR enable

0=GP3 1=MCLR

1

0

• CONFIG no es accesible desde el propio micro Su 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

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

-

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]

-

comentarios

Útil en bucles

PIC10F200. Instrucciones Instrucción

Descripción

NOP

Flags

comentarios

-

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

-

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. If Mem[f].b==0

-

BTFSS f,b

Skip next Instr. If Mem[f].b==1

-

ANDLW k

W&k -> W

Z

CALL k

Subroutine call: PC->stack, k -> PC

-

SWAP

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 -> PC return from subroutine

-

Constant arrays

SLEEP

Stop oscillator

TO,PD

Power down

TRIS f

W -> TRIS

-

XORLW k

W^k -> W

Z

PIC10F200. Instrucciones RLF:

RRF:

H

Mem[f]

C

Mem[f]

C

L

SWAP:

RMW: Read/Modify/Write. Usar con precaución si f=GPIO Constant Arrays: Arrays of RETLW k instructions

PIC. Estructuras de programa • Bucles Contador:

Etiqueta:

equ 0x10 ; variable en RAM MOVLW MOVWF … … DECFSZ GOTO …

20 ; nº de vueltas Contador

Contador,f Etiqueta

PIC. Estructuras de programa • Tablas de constantes

tabla:

MOVF CALL … ADDWF RETLW RETLW RETLW … …

indice,w tabla PCL,f 0x25 0x33 0x12

;salto múltiple ;tabla[0] ;tabla[1] ;tabla[2]

PIC. Estructuras de programa • Aritmética de 16 bits ; AH:AL + BH:BL -> AH:AL ; (variables en RAM) MOVF

BL,w

ADDWF BTFSC INCF MOVF ADDWF

AL,f status,c AH,f BH,w AH,f

; ¿acarreo?

PIC10F200. Ejemplo de aplicación 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

contador 14 bits

1024 ciclos

8192 ciclos

Q13 Q10 128 ciclos

Q7 /LUZ (sensor)

Reset

128 ciclos

altavoz Q0 187 us

OSC 2.66kHz

187 us

1 ciclo

PIC10F200. Ejemplo de aplicación • 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 altavoz piezoelectrico

/MCLR GP0

+3V

GP1 GP2 LDR

PIC10F200. Código processor 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 equ 0x3 status fsr equ 0x4 equ 0x5 osccal 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 movlw tris movlw option

osccal 0x0c gpio 0x4f

;calibramos oscilador ;GP0,GP1 salidas ;No Pull-UPs, prescaler 1/128 para WDT

;----------- BUCLE principal del programa ----------

PIC10F200. Código L0:

L1:

btfss sleep clrwdt incf btfsc incf movf andlw movwf movf andlw iorwf movlw btfsc movlw movwf movlw movwf decfsz goto goto end

gpio,2

; probamos luz

cnt1,f status,z cnt2,f cnt1,w 0x81 tmp cnt2,w 0x24 tmp,w 0x01 status,z 0x02 gpio 56 tmp tmp,f L1 L0

; (cnt1:cnt2)++

; Bits 0,7,10,13 en cero? ; bits 0 y 7

; bits 10 y 13 ; valor en buzzer. Depende de si los bits eran 0

; cambio en pines del buzzer ; retardo: 20+(56*3-1)=187 ciclos/muestra

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.