Niple diapopsitiva

Post on 13-Jun-2015

3.630 views 4 download

Transcript of Niple diapopsitiva

El ensambladorEl entorno de trabajo MPLAB El ensamblador que utiliza por defecto el MPLAB es el MPASMALGUNAS DIRECTIVAS del ASMYa la primera línea

LIST P = 16F84

Definine el procesador a utilizar durante todos los procesos (ensamblado, emulación, grabación).

La directiva ORG, seguida de una posición de memoria, indica al ensamblador dónde debe situar ese código y se coloca, antes de la primera instrucción.

Los casos de direcciones especiales serán también descritos más adelante en el presente texto.

La directiva END es imprescindible e indica al ensamblador el final del programa. REM, indica que lo que le sigue es un comentario.

El ensamblador exige una cierta tabulación mínima de sus distintos elementos. De este modo la definición de variables podrá escribirse en la 1ª columna de cualquier línea, mientras que las directivas e instrucciones deberán ir en la 2ª columna, como mínimo. Las tabulaciones características son las empleadas por nosotros, ya que, aunque no son imprescindibles, clarifican la lectura del programa.

Nos planteamos un nuevo problema: Crearemos un programa para un PIC16F84A funcionando a 4MHZ encargado de contar hasta 0x5f. Cuando lo alcance se detendrá en un bucle no operativo. El valor del contador se visualizará en 8 diodos LED conectados al puerto B. ,

LIST P=16C84 ; Seleccionamos el micro ; Asignación de etiquetas a registros.

f EQU 0x01 ; registro fportb EQU 0x06 ; Dirección del registro del puerto B estado EQU 0x03 ; Dirección del registro de estado conta EQU 0x0C ; Lo usamos como variable contadora ORG 0 ; El programa comienza en la dirección 0 GOTO inicio ; salta a la dirección 5 para sobrepasar el vector INT. ORG 5 inicio BSF estado,5 ; Selecciona banco 1 para llegar a TRISB MOVLW 0x00 MOVWF portb Y se especifica que es de salida BCF estado,5 ; Selección del banco 0 para trabajar directamente ; con el puerto CLRF conta ; Ponemos nuestro contador a 0

Bucle1 INCF conta,f ; conta + 1 --> conta (incrementa el contador) MOVF conta,W ; conta se carga en W MOVWF portb ; W se carga en el registro de datos del puerto B MOVLW 0x5f ; W <-- 0x5f (Final de cuenta deseado) SUBWF conta,W ; conta - W --> W. Si es cero, la cuenta está acabada BTFSS estado,2 ; Explora Z y si vale 1 es que W vale 0 ; se produce "brinco" en ese caso por fin de cuenta GOTO bucle1 ; Si Z = 0 se vuelve a bucle1 bucle2 GOTO bucle2 ; Si Z = 1 se produce un bucle infinito END

OTRO EJEMPLO EN ASM

LIST P = 16F84 ;Indicamos el modelo de PIC a utilizar ; Definición de registros portb EQU 0x06 ;Hemos conectado el display al puerto B ;La dirección 0x06 corresponde al registro PORTB ;(puerto B) en el banco1 TRISB EQU 0X06 ; y TRISB en banco 1 Estado EQU 0X03 ; La dirección del registro de estado es la 0x03 pc EQU 0x02 ; Contador de Programa, es decir, ;dirección de memoria actual de programa ; Definición de bits banco EQU 0X05 ; Bit del registro de estado correspondiente ; al banco de datos Z EQU 0X02 ; Bit indicador de que el registro W está a cero

; Definición de constantes w EQU 0 ; Destino de operación = w f EQU 1 ; Destino de operación = registro ; Definición de variables contador EQU 0X0C ; Contador digito EQU 0X0D ; Para almacenar el dígito ; Comienzo del programa. ORG 0X00 ; Cubrimos el vector de reset GOTO inicio ; Saltamos a la primera dirección tras el vector de interrupción

; ************************ Inicialización de variables ************************* ORG 0X05 inicio BSF estado, banco; Cambiamos a la segunda página de memoria CLRF TRISB ; Programa la puerta B como de todo salidas BCF estado,banco ; Volvemos a la página 0. CLRF portb ; Apaga el display, por si había residuos CLRF contador ; Borra el contador (dirección 0x0C) CLRW ; Borramos el registro W ; ************************* Cuerpo Principal ************************** Reset CLRF digito ; Comienza a contar por el 0 Siguien MOVF digito,w ; Coloca el siguiente dígito a evaluar en W CALL Tabla ; Llama a la subrutina para coger el dato ; y hacer la conversión decimal-7 segmentos MOVWF portb

Pausa DECFSZ contador ; Decremento contador y repite GOTO Pausa ; hasta que valga 0 INCF digito,f ; Incrementa el valor del dígito al siguiente MOVF digito,w ; Pone el valor del dígito en W XORLW 0x0A ; Chekea si el dígito sobrepasa el valor 9 BTFSC estado,Z ; Comprobando con un xor si W vale 0 (Z=1) GOTO Reset ; Si Z=1 resetea el dígito y comienza la cuenta GOTO Siguien ; En caso contrario, continua la cuenta con el siguiente ;dígito

Tabla ADDWF pc,f ; Suma al contador de programa el valor de offset, es decir, ; el valor del dígito. Así se genera un PC distinto según su valor, ; asegurando que vaya a la línea correcta de la tabla

RETLW 0x3F ; 0 en código 7 segmentos RETLW 0x06 ; 1 en código 7 segmentos RETLW 0x5B ; 2 en código 7 segmentos RETLW 0x4F ; 3 en código 7 segmentos RETLW 0x66 ; 4 en código 7 segmentos RETLW 0x6D ; 5 en código 7 segmentos RETLW 0x7D ; 6 en código 7 segmentos RETLW 0x07 ; 7 en código 7 segmentos RETLW 0x7F ; 8 en código 7 segmentos RETLW 0x6F ; 9 en código 7 segmentos END

EL PIC EN DETALLE

EJEMPLO MIREMOS UN PIC 16F84A

(EL MAS SIMPLE DE LA FAMILIA FLASH)

QUE NOS OFRECE?

MEMORIA DE PROGRAMA

MEMORIA DE DATOS

MEMORIA EEPROM ( FLASH ) Como asi??? es eeprom o flash

Ja! Pues es el equivalente en tecnología flash de una supuesta memoria eeprom que venia en el antecesor pic 16c84

High Performance RISC CPU Features:• Only 35 single word instructions to learn• All instructions single cycle except for pro gram branches which are two-cycle• Operating speed: DC - 10 MHz clock inputDC - 400 ns instruction cycle

LA MEMORIA DISPONIBLE

• 14-bit wide instructions• 8-bit wide data path• 15 special function hardware registers• Eight-level deep hardware stack• Direct, indirect and relative addressing modes • Four interrupt sources: - External RB0/INT pin- TMR0 timer overflow - PORTB<7:4> interrupt on change- Data EEPROM write complete• 1000 erase/write cycles Flash program memory• 10,000,000 erase/write cycles EEPROM data memory• EEPROM Data Retention > 40 years

Peripheral Features:• 13 I/O pins with individual direction control• High current sink/source for direct LED drive- 25 mA sink max. per pin (entrando)- 20 mA source max. per pin (saliendo)• TMR0: 8-bit timer/counter with 8-bit programmable prescaler

Special Microcontroller Features:• In-Circuit Serial Programming (ICSP™) - via two pins (ROM devices support only Data EEPROM programming) • Power-on Reset (POR)• Power-up Timer (PWRT)• Oscillator Start-up Timer (OST)• Watchdog Timer (WDT) with its own on-chip RC oscillator for reliable operation• Code-protection• Power saving SLEEP mode• Selectable oscillator optionsCMOS Flash/EEPROM Technology:• Low-power, high-speed technology• Fully static design• Wide operating voltage range:- Commercial: 2.0V to 6.0V- Industrial: 2.0V to 6.0V• Low power consumption:- < 2 mA typical @ 5V, 4 MHz-1 5 µA typical @ 2V, 32 kHz-< 1 µA typical standby current @ 2V

LA CONEXIÓN BASICA PARA QUE FUNCIONE

EL TEMPORIZADOR TMR0

TIENE DOS FORMAS DE OPERAR (EXCLUSIVAS; UNA O LA OTRA NO AMBAS)

CONTADOR DE EVENTOS

RELOJ DE TIEMPO REAL

CONFIGURACION DE ESTE CONTADOR O TMR0

QUE SE QUIERE CONTAR?

EVENTOS EXTERNOS O PULSOS INTERNOS QUE SE DERIVAN DEL CRISTAL (MUY PRECISOS)

Dos registros fundamentales en la operacion del TMR0

En TMR0 se almacena el conteo (ojo banco 0)

En OPTION se configura el TMR0 (ojo banco 1)

Preescalador o prescaler mejor dicho divisor de frecuencia

LA FILOSOFIA DE TRABAJO EN LA CONFIGURACION DEL TMR0

PROGRAMAR LOS BITS INDIVIDUALES EN CUESTION DEL REGISTRO OPTION DE MODO QUE SE CONECTE LO QUE SE DESEA SEGÚN EL GRAFICO ANTERIOR.

EJEMPLO: UNA ONDA ULTRASONICA ES GENERADA POR ELPIC

PARA IMPLEMENTAR UN MEDIDOR DE DISTANCIAS

CUAL SERIA EL TIEMPO MAXIMO A REGISTRAR Y LA MAXIMA DISTANCIA A MEDIR SI:

F=40KHZ (ONDA ULTRASONICA Y LA FRECEUNCIA DEL CRISTAL O RESONADOR DEL PIC ES 4MHZ

SOLUCION

EL SONIDO SE PROPAGA A RAZON DE 340 m/S

(APROXIMADO)

UN PRESCALADOR MAXIMO ES DE 256 osea por cada 256 pulsos derivados del reloj interno el TMR0 cuenta

un flanco

Si el cristal es de 4mhz el reloj interno es de

1MHZ o F/4

Osea 1uS por flanco pero el maximo prescaler es de 256

Cada 256 conteos en TMR0 se incrementa en uno

256*1uS*255=65280uS

65280/2 = 32640uS se demora en ir y volver

V=D/T 340m/s=x/32640uS osea que puede medir hasta 11.09 metros

Y la resolucion teorica es de 256uS o de 8.7 cm

Y la resolucion fisica es de Lamda/2 o de

(340m/s) / 40Khz = 0.0085m o 8.5mm/2 = 4.25mm

COMO MEJORARIA USTED LA RESOLUCION DEL SISTEMA?

Aumentando el registro de Conteo o TMR0 o cuenta en cascada con un registro auxiliar ?

O bajando el prescaler ?

O una combinacion de los dos anteriores

8.5mm es lo maximo a 40Khz (lo mas fino)

Con un registro de 8 bits son 8.5*255 son casi 2.1675metros medios

Pero esto es irreal ya que solo podemos contar multiplos binarios de 1 uS

Y el maximo conteo es de 255*256=65280 microsegundos (MUCHO)

Como es un sistema de 8 bits cuantizamos 255 valores

Que sean lamdas 8.5mm x 255 o 1.08metros que cuente cada 25uS

1,2,4,8,16,32,64,128,256…..etc

Dos opciones con prescaler de 16 y mide menos de 1.08m o con 32 y mide mas de 1.08m pero se sacrifica la resolucion.

Ahora con 32

32*255*1uS= 8.16mS

E = 340m/S * 8.16mS = 2.7744 metros (10.88mm de resolucion)

TAREA

SE DESEA DISEÑAR UN EQUIPO PARA MEDIR DESFASE DE DOS ONDAS DE 60Hz

CUAL DEBE SER EL PRESCALER PARA OBTENER LA MAXIMA RESOLUCION DEL APARATO SI USAMOS UN TRM0 (DE 8 BITS)

LAS INTERUPCIONES

POR FLANCO EN EL PIN INT

POR CAMBIO EN PINES B7,B6,B5,B4

POR DESBORDE DEL TMR0

AL TERMINAR UNA OPERACIÓN DE ESCRITURA EN LA MEMORIA

EEPROM (FLASH)

EN EL VEMOS UN PAR DE BITS

UNO HABILITA LA INTERUPCION

OTRO DETECTA LA INTERUPCION

LOGICA DE LA INTERUPCION

SALVAR EL CONTEXTO

Parece que cuando se atiende la interupcion de borran o dañan algunos reg en el PIC la estrategia es salvarlos en RAM antes de atender el nucleo de la interupcion y al regresar restablecer los registros criticos antes de retornar el control del programa principal

EXAMPLE : SALVANDO STATUS y W reg EN ram

PUSH MOVWF W_TEMP ; Copy W to TEMP register, SWAPF STATUS, W ; Swap status to be saved into W MOVWF STATUS_TEMP ; Save status to STATUS_TEMP register ISR : ; Interrupt Service Routine : ; should configure Bank as required : ;POP SWAPF STATUS_TEMP, W ; Swap nibbles in STATUS_TEMP register ; and place result into W MOVWF STATUS ; Move W into STATUS register ; (sets bank to original state) SWAPF W_TEMP, F ; Swap nibbles in W_TEMP and place result in W_TEMP SWAPF W_TEMP, W ; Swap nibbles in W_TEMP and place result into W

REALIZAMOS LO SIGUIENTEa) SALVAMOS EL REG W.b) SALVAMOS EL STATUS EN STATUS_TEMP.c) EJECUTAMOS EL NUCLEO DE LA INT.d) RESTABLECEMOS STATUS (Y SELECCIONAMOS BANCO)e) RESTABLECEMOS W

EJEMPLOS EN ASSEMBLER

1 PAGINA

http://perso.wanadoo.es/chyryes/tutoriales/pic13.htm

2 PAGINA???

PICLOOPS (BUSCAR EN GOOGLE)

NIPLE PROGRAMAR POR DIAGRAMAS DE FLUJO

http://www.niplesoft.net/index.htm

Otras aplicaciones

http://host.nigde.edu.tr/muzam/UZAM_PLC_with_PIC16F648A.htm

http://www.electronicsoft.net/en-us/dept_9.html

http://www.matrixmultimedia.com/product.php?Prod=Flowcode%20V3%20for%20PIC&PHPSESSID=

FLOWCODE 3 DEMO

http://microcontrollershop.com/product_info.php?cPath=148&products_id=527

ETHERNET

http://www.dontronics-shop.com/pic-mini-web-mini-web-server-tcp-ip-development-board-for-pic-micro.html