• No se han encontrado resultados

Pic 16f628a -Manual de Practicas

N/A
N/A
Protected

Academic year: 2021

Share "Pic 16f628a -Manual de Practicas"

Copied!
59
0
0

Texto completo

(1)

MANUAL

DE

PRÁCTICAS

INTRODUCCIÓN A

MECATRÓNICA

22/10/2008

(2)

Entrenador para Microcontroladores PIC con PBP.

¿Qué es un entrenador?

La principal aplicación de un entrenador, es de servir como elemento de soporte a las personas

que desean aprender el manejo del microcontrolador PIC (ya sea para los diferentes familias que

utiliza el PIC), también ayuda a la persona interesada que pueda realizar los mas variados

experimentos desde proyectos sencillos hasta los mas variados y complejos.

El siguiente manual contiene ejercicios simples que nos permiten adquirir nuevos conocimientos

tanto en la programación y en las conexiones electrónicas (software y hardware). Los ejercicios

con los que cuenta el entrenador se encuentran basados en el contenido práctico del programa

de la Universidad Politécnica de Chiapas (Ver Anexo A.) incluyendo también ciertos temas para

poder ir desarrollando técnicas, habilidades y conocimiento en el campo de la Mecatrónica. En

tanto el diseño del hardware contiene los siguientes Módulos:

Módulo Fuente de alimentación (5V, GND y 12V)

Modulo de Programación.

Modulo Leds.

Modulo de Potencia.

Modulo de entrada digital.

Modulo de entrada analógica.

Modulo RS232.

Módulo USB.

Modulo Display de 7 Segmentos.

Modulo PWM.

Modulo Motor paso a paso.

Modulo Servo Motor.

Modulo Motor CD.

Modulo Teclado.

Modulo LCD.

Modulo Experimento (Protoboard)

Además el entrenador contiene lo siguiente: una base con fuente, un apagador, fusible de

protección, una práctica caja para guardar tus cables, herramientas y dispositivos y una lámpara

para iluminación del entrenador. Para poder realizar un correcto funcionamiento del entrenador

necesitamos el siguiente sistema:

IBM PC o una computadora compatible.

Un puerto USB

Windows 98, ME, 2000, NT, XP ó VISTA

Y para su correcto funcionamiento:

1. El entrenador.

2.

Programador USB y su correspondiente software.

3. Cable de programación.

(3)
(4)

EXPERIMENTO 1.

¿Qué es un Microcontrolador?

¿Qué es un Microcontrolador?

Muchos de nosotros sabemos qué apariencia tiene una computadora. Usualmente tiene teclado,

monitor, CPU (Unidad de Procesamiento Central), impresora y mouse. Este tipo de

computadoras, como la Mac o PC, son diseñadas principalmente para comunicarse con

humanos.

Manejo de base de datos, análisis financieros o incluso procesadores de textos, se encuentran

todos dentro de la “gran caja”, que contiene CPU, la memoria, el disco rígido, etc. El verdadero

“cómputo”, sin embargo, tiene lugar dentro de la CPU. Si piensa sobre esto, el único propósito

del monitor, teclado, mouse e incluso la impresora, es “conectar” a la CPU con el mundo exterior.

Pero hay computadoras alrededor de nosotros, corriendo programas y haciendo cálculos

silenciosamente sin interactuar con ningún humano. Estas computadoras están en su auto, en el

transbordador espacial, en un juguete, e incluso puede haber uno en su secador de pelo.

Llamamos a éstos dispositivos “microcontroladores”. Micro porque son pequeños, y

controladores, porque controlan máquinas o incluso otros controladores. Los Microcontroladores,

por definición entonces, son diseñados para ser conectados más a máquinas que a personas.

Son muy útiles porque se pueden construir máquinas o artefactos, para controlarlo, y luego

dejarlo trabajar para usted de manera automática. El límite de las aplicaciones para los

microcontroladores es la imaginación.

Microcontrolador. Es un circuito integrado que contiene muchas de las mismas

cualidades que una computadora de escritorio, tales como la CPU, la memoria,

etc., pero no incluye ningún dispositivo de “comunicación con humanos”, como

monitor, teclados o mouse. Los microcontroladores son diseñados para aplicación

de control de máquinas, más que para interactuar con humanos.

(5)

Cuando creamos dispositivos que tienen un microcontrolador actuando como un “cerebro”, en

muchas formas estamos tratando de imitar cómo actúa nuestro cuerpo. Su cerebro necesita

cierta información para tomar decisiones. Esta información es obtenida a través de varios

sensores, como la vista, el oído, el tacto, etc. Estos sensores detectan lo que nosotros llamamos

el “mundo real” o mundo exterior, y envían esa información al cerebro para “procesamiento”.

Recíprocamente, cuando su cerebro toma una decisión, manda señales a través de su cuerpo

para hacer algo en el “mundo exterior”. Utilizando las “entradas” de sus sentidos, y las “salidas”

de sus piernas, brazos, manos, etc., su cerebro se está comunicando e interactuando con el

mundo exterior. Esta “entrada/decisión o procesamiento/salida” es de lo que se tratan los

Sistemas y los microcontroladores.

Para cada experimento se necesita una PC compatible XP o VISTA, una fuente conectada al

entrenador.

Partes Requeridas para el experimento 1:

(2) LEDs (Diodos emisores de luz)

(2) Dos resistores de 330 ohm, ¼ watt.

Cable de programación.

Cables de conexión.

El programa editor de PBP para el PIC

¡Armelo!

Cualquier sistema microcontrolador, consiste en dos componentes primarios:

hardware y software. El hardware es el componente físico del sistema. El

software es la lista de instrucciones que residen dentro del hardware. Nosotros

crearemos ahora el hardware que interactúe con el mundo exterior, y luego

escribiremos un programa de software para “controlarlo”.

Ahora construyamos nuestro circuito. Ver figura 1.1

AL LABORATORIO.

En este experimento conectaremos dos diodos emisores de luz (LEDs) al entrenador PIC.

Los LEDs son formas especiales de lámparas que por varias razones son fácilmente

conectadas a dispositivos microcontroladores. Hay dos cosas muy importantes de recordar

cuando conecta LEDs al PIC. La primera es que

siempre se debe asegurar que haya una

resistencia

conectada,

como muestra la figura 1.2. En este experimento el resistor debe

tener un valor de 330 ohms, ¼ watt.

(6)

Segundo, esté seguro que la

polaridad del

LED es la correcta. Hay una zona liza en un

costado del LED que debería ser conectada como en la figura 1.2, si la polaridad es

invertida, el LED no trabaja. El lado liso también tiene la pata más corta del LED.

Figura 1.2: LED en el Protoboard. Muestra el LED y el resistor enchufados en el protoboard.

Ninguna conexión ha sido hecha aún a las entradas/salidas del BASIC Stamp.

(7)

Entendiendo la Protoboard.

Es importante entender cómo trabaja el protoboard. El protoboard tiene muchas tiras

metálicas que pasan por debajo en fila. Estas tiras conectan los huecos unos a otros; esto

hace fácil conectar componentes juntos para construir un circuito eléctrico. Para usar el

protoboard, las patas del LED y el resistor, serán puestas en los huecos. Estos huecos son

hechos de forma que tendrán al componente en su lugar. Cada hueco es conectado a una

de las tiras metálicas que corren por debajo de la plaqueta. Usted puede conectar diferentes

componentes enchufándolos dentro de nodos comunes.

Figura 1.3: Conexiones del Protoboard.

Las líneas negras verticales muestran cómo los huecos están conectados por debajo de la protoboard. Esto

significa que usted no tiene que enchufar dos cables en un mismo hueco, debido a que ese hueco está unido con

el de la izquierda o el de la derecha.

Bien, ¡construyamos el circuito! No conecte la fuente de alimentación aún (la batería de 5

volts o el adaptador externo).

En las Figuras siguiente 1.4 a) se muestra un diagrama eléctrico es un diagrama

“esquemático” del circuito del microcontrolador PIC16F84 con 2 LED’s de salida y su

sistema mínimo (Componentes necesarios para que pueda funcionar correctamente el

micro). La Figura 1.4 b) es el mismo circuito, pero dibujado como una foto de cómo se vería

el circuito físico. Realice las conexiones necesarias en el protoboard.

(8)

Conecte el programador a la PC:

¡Programelo!

1. Enchufe un extremo del cable al programador.

2. Enchufe el otro extremo del cable de programación en un conector del

puerto USB disponible en la PC.

¡Listo! Ya hemos creado un circuito (“hardware”). Pero esto no es nada aún. Así es que

necesitamos... ¿Cuántos de ustedes ya saben escribir un programa de computadora? Si

lo ha hecho antes, entonces la primera parte de ésta sección puede ser un repaso. Pero

si es nuevo en el tema, no se preocupe, en realidad no es tan difícil. Un programa de

computadora no es nada más que una lista de instrucciones que una computadora

ejecuta (o en nuestro caso un microcontrolador). Creamos un programa para el

microcontrolador escribiéndolo en una PC (utilizando el teclado y el monitor), luego

descargamos este “código” a través del cable de programación, al microcontrolador. Este

programa (o lista de instrucciones), entonces se “ejecuta” dentro del PIC. Si hemos

escrito el programa correctamente, hará lo que nosotros esperábamos. Sin embargo, si

hemos cometido un error, entonces el dispositivo no trabajará (o trabajará mal), y

necesitamos depurarlo. Depurar el programa puede ser una de las experiencias más

estresantes de todo el proceso, por lo tanto, cuánto más cuidadoso es en crear el

programa, teóricamente más fácil será depurarlo. Un “debugging” es el arte de remover

errores (bug). PBP para el PIC, tiene muchos comandos de donde elegir, una lista y

descripción completas de cada uno de éstos comandos puede ser obtenida en cada

comando usado en éstas lecciones, o si lo prefiere está descripto en el apéndice B,

referencia rápida del PBP. Para éste experimento usaremos sólo cuatro comandos.

Estos son: OUTPUT, PAUSE, GOTO, Y OUT. Como se mencionó arriba, un programa es

una lista de instrucciones que son ejecutadas en una secuencia determinada por la

estructura del programa en sí mismo. Por lo tanto, como escribimos el programa, es muy

importante para tener en mente la secuencia de la ejecución que nosotros deseamos.

Por ejemplo, si queremos comprar una gaseosa en una máquina expendedora, nuestro

cerebro ejecuta una lista de comandos para realizar esto. Tal vez algo así...

1. Insertar $1.00 en la ranura.

2. Esperar que se encienda la luz verde.

3. Presionar el botón para el tipo de gaseosa.

4. Ver salir la gaseosa.

5. Agarrar la gaseosa.

6. Abrir la gaseosa.

7. Beber la gaseosa.

8. Burp.

(9)

Ahora, esto se ve bastante lógico, pero sólo porque ya lo hemos hecho antes. Si, sin

embargo, su cerebro envía el programa siguiente:

1. Presionar el botón para el tipo de gaseosa.

2. Abrir la gaseosa.

3. Insertar $1.00 en la ranura.

4. Agarrar la gaseosa.

5. Burp

6. Beber la gaseosa.

7. Esperar que se encienda la luz verde.

8. Ver salir la gaseosa.

No pasará mucho. Todos los comandos apropiados están ahí, pero en un orden incorrecto.

Una vez que usted ha apretado el botón para tipo de gaseosa (botón 1), su cerebro

(programa), se “colgará” o se detendrá, porque no puede ejecutar “abrir la gaseosa”, que es

el punto 2, ¡porque no tiene gaseosa que abrir!.

Este es un error de programación (bug). Los humanos podemos modificar nuestro

programa cerebral a medida que la situación transcurra, y podemos, por supuesto

imaginarnos cómo obtener la gaseosa. Los microcontroladores, sin embargo, no tienen

la capacidad de adaptar y modificar su propio conjunto de instrucciones; ellos son

solamente capaces de ejecutar la secuencia exacta de las instrucciones que nosotros

les dimos.

Bien, suficiente teoría, ¡programemos éste microcontrolador para hacer algo! Conecte el

programador. Conecte el cable USB a su PC. Enchufe el PIC al programador. Encienda

su PC. El software del MicroCode Studio funciona en Windows XP o Vista.

De doble click en el icono MicroCode Studio, ahora estar corriendo el programa. Este es

un programa que fue creado para ayudarlo a escribir y compilar programas al

microcontrolador PIC. La pantalla se verá como en la Figura 1.5:

Figura 1.5: Software del MicroCode Studio.

Doble click sobre el icono MicroCode Studio para hacer correr el software. La pantalla que se abre se verá

como ésta.

(10)

La pantalla, excepto por unas pocas palabras en el título, está en blanco. Acá es donde

usted creará su programa. Ahora recuerde, vamos a escribir nuestro programa usando

un equipo de “comunicación humano” (monitor, teclado, etc.), que es parte de su PC El

programa que escribiremos, no correrá en su PC, sino que será descargado o enviado al

microcontrolador. Una vez que el programa ha sido recibido, el PIC ejecutará las

instrucciones exactamente como nosotros las hemos creado.

Escriba el siguiente programa en el editor del MicroCode Studio, y se verá como en la

figura 1.6:

Figura 1.6: Software

del MicroCode Studio.

Escriba el código en el editor, y se verá como en ésta pantalla

output 0

titilar:

high 0

pause 1000

low 0

pause 1000

goto titilar

Es necesario recordar que primeramente una vez terminado de escribir el programa se

guarde el archivo con el nombre que usted quiera pero que valla relacionado con lo que se

esta haciendo y una vez compilado se genera un archivo extensión .HEX que es este

archivo que se necesita guardar en el PIC y que el programador requiere para descargarlo a

nuestro microcontrolador.

Ahora, presione la tecla “F9” notara que el programa fue compilado exitosamente, sino le

apareció ningún mensaje. Si todo está correcto, nos vamos al software del programador que

usted utilice y descargamos el programa al PIC.

El primer comando usado es “output”. Cada señal del pin del PIC puede ser ajustada como

“entrada” o “salida”.

Debido a que nosotros queremos que el microcontrolador encienda y apague un LED, el

microcontrolador está

manipulando

el “mundo exterior”. Por lo tanto, por definición,

nosotros queremos que B0 sea una salida “output”.

(11)

Resultado del primer comando: “output 0” hace B0 una salida. (Aclaración: si nosotros

buscábamos hacer B1 una salida, el comando debería haber sido “output 1”).

El siguiente ítem en el programa “titilar:”, no es realmente un comando. Es sólo una

etiqueta, una marca encierto punto del programa.

Ahora, el pin B0 como lo llamamos, es una salida. En el mundo de las computadoras,

voltajes en éstos pines, pueden ser tanto “altos” o “bajos”, que significa que pueden tener

un voltaje alto o bajo. Otra forma de referirnos a alto y bajo es “1 y 0”. “1” significa alto y “0”

significa bajo. Piense en una llave de luz en la pared, cuando la llave está en una posición,

la lámpara se enciende, y cuando está en otra posición, se apaga. Es binaria, hay sólo dos

combinaciones: encendida o apagada, o “1” o “0”. No importa cuánto insista, usted nunca

podrá poner la llave “en medio” de las dos posiciones.

Si queremos encender el LED necesitamos hacer que B0 vaya alto (que tenga un 1). B0

está actuando como un interruptor, que puede ser cambiado a encendido o apagado bajo

un control de programa.

Este es el propósito para el segundo comando: “High 0”. Este causará que B0 vaya a nivel

alto, lo que hace que el LED se encienda.

Tenga en cuenta que los microcontroladores ejecutan su programa muy rápidamente,

s

i

apagáramos el LED en el siguiente comando, esto pasaría demasiado rápido para que

pudiéramos verlo.

Por lo tanto necesitamos “aletargar” el programa; de ésta forma podemos ver si está

operando correctamente o no.

Es el propósito del siguiente comando: “Pause 1000”. Este comando hace que el programa

espere por 1000 milisegundos, o sea 1 segundo.

El siguiente comando es ”Low 0”. Este comando hace que B0 vaya a nivel bajo y apague el

LED, debido a que no hay flujo de corriente.

A continuación hacemos una pausa con “pause 1000” (otro segundo). El LED está aún

apagado.

“Goto” (ir) es muy simple de entender. Durante el curso de la ejecución del programa,

cuando el comando “goto” es encontrado, el programa “va” a algún punto específico en el

programa. En nuestro ejemplo, le decimos al programa “ir a titilar”. Donde sea que esté

“titilar”, es donde el programa irá. En nuestro programa, la etiqueta “titilar” está en la

segunda línea. Por lo tanto, cuando la instrucción “goto titilar” es encontrada, el programa

salta hacia la segunda línea y lo repite nuevamente. (El programa regresa a la segunda

línea cada vez que encuentra el comando “goto titilar”. Esto es lo que causa que el LED

continuamente parpadee. Un buen hábito al que conviene acostumbrarse, es

“remarremark” (comentar) sus programas. Comentar o documentar sus programas, los

hace más fáciles de seguir o de depurar si hay algún problema.

El apóstrofe (‘) es usado para decirle al microcontrolador que ignore la siguiente

información, es sólo para beneficio humano. En otras palabras, cualquier cosa que esté

(12)

escrita en una línea del programa después de un apóstrofe, no es parte del código de la

instrucción.

Preguntas

1. ¿En qué se diferencia un microcontrolador de una computadora?

2. ¿Cuál es la diferencia entre hardware y software?

3. ¿Por qué un microcontrolador es como nuestro cerebro?

4. ¿Qué significa “debug” (depurar)?

5. El siguiente programa debería encender el LED en B0 por 2 segundos, luego apagarlo por

2 segundos, y luego repetir. ¿Cuántos errores (bugs) hay en el programa y qué correcciones

son necesarias?

output 0

titilo:

out0 = 0

pause 200

out1 = 1

pause 2000

goto titilar

Reescriba el programa de la pregunta 5 anterior, para hacer lo siguiente. Cada programa

debería ser cargado en el PIC y probado en su protoboard.

¡Desafio!

1. Haga que ambos LED se enciendan y apaguen parpadeando al mismo tiempo, Cuando

termine de hacer el programa, cárguelo en la PC (como lo ha hecho antes), y pruébelo.

2. Haga encender y apagar los LED alternativamente; en otras palabras, mientras un LED

está encendido el otro está apagado, y viceversa.

3. Encienda el primer LED por 2 segundos, luego apáguelo. Espere

5 segundos y encienda el segundo LED por 1 segundo y luego apáguelo. Espere 3

segundos y repita.

4. Encienda el primer LED por 1.5 segundos, luego apáguelo. Espere 2 segundos y luego

encienda el segundo LED por 1.5 segundos, Luego apáguelo. Espere 2 segundos, luego

encienda ambos LED por 0.5 segundos y apáguelos por 2 segundos. Repita ésta última

acción de 0.5 segundos encendido y 2 segundos apagado.

(13)

¿Qué aprendí?

Complete las siguientes oraciones con las palabras de la lista.

Los___________________ están a nuestro alrededor. Incluso cuando no se ven como una

computadora. (¿Quién alguna vez se imaginó que un juguete tendría una computadora

incluida en su interior?)

Los Microcontroladores consisten de hardware y _____________. Creamos programas en

una PC, una computadora que está diseñada para interactuar con humanos (con teclado,

monitor, etc.) y luego _____________ el programa en un microcontrolador, donde es

realmente ________________ (“run”).

Un programa de microcontrolador es solo tan inteligente como el que lo programó. Al

contrario que el cerebro humano, el programa del microcontrolador no se__________ por sí

mismo, ni cambiará el orden de las instrucciones del programa.

El microcontrolador ejecutará un conjunto de instrucciones en la misma____________ en la

que fue creado.

Muchos microcontroladores son versátiles y fáciles de usar, porque pueden ser

reutilizados,______________, y pueden usarse en un sinnúmero de productos e

innovaciones, desde robots a tostadores

Software

– ejecutado –

microcontroladores

– adaptará

re-programados

– secuencia –

descargamos

¿Por qué aprendí esto?

La gran versatilidad de los microcontroladores está en que pueden ser programados

para controlar cualquier cosa que la mente humana pueda concebir. Aeromodelos,

controladores de casas inteligentes o sistemas de colección de datos climáticos remotos

operados por batería, son sólo ejemplos. Los microcontroladores deben tener dos

componentes trabajando juntos, para que el dispositivo funcione. El primer componente

es el hardware (el circuito). Muchas personas pasan su vida diseñando hardware para

microcontroladores para una infinidad de variedad de productos. El segundo

componente es el software. Los programadores se especializan en escribir (código de

control) para teléfonos celulares, juguetes o incluso equipamiento industrial.

(14)

¿Cómo puedo aplicarlo?

La ventaja de los microcontroladores (y algo que usted puede considerar como una

carrera futura) es que el mundo de los dispositivos inteligentes se está expandiendo a

una velocidad increíble y no muestran ningún signo de disminuir su velocidad. A medida

que la tecnología avanza en todas las áreas de nuestras vidas, nos vemos rodeados por

un creciente número de aparatos avanzados tecnológicamente. Usted puede ayudar a

desarrollarlos y tal vez inventar el próximo “gran producto”, o simplemente divertirse

construyendo cosas; ¡la tecnología es la misma, sólo que aplicada diferente! Mire

alrededor suyo y piense cómo podría usar un microcontrolador para crear una luz de

seguridad para su bicicleta, las luces del auto, un proyecto de arte que use la luz para

interactuar con los espectadores. Piense con sus amigos en un desarrollo para

comenzar a fabricar con perspectivas comerciales...

…¿Quién sabe?

A continuación se muestra varios ejemplo para que se practique y

aprendan a utilizar diferentes comandos.

(15)

ENCENDER Y APAGAR UN LED.

Bueno aquí esta el primer ejemplo y el más sencillo y por donde aprendí, prender y apagar un led

conectado a portb.0:

Varias formas para hacer lo mismo:

inicio:

High 0

pause 1000

low 0

pause 1000

goto inicio

end

Inicio:

High PORTB.0

pause 1000

low PORTB.0

pause 1000

goto inicio

end

TRISB.0=0

inicio:

PORTB.0 = 1

pause 1000

PORTB.0 = 0

pause 1000

goto inicio

end

led var PORTB.0

inicio:

high led

pause 1000

low led

pause 1000

goto inicio

end

inicio:

TOGGLE PORTB.0

PAUSE 1000

goto inicio

end

Cuando se quiera cambiar/conmutar el estado de una línea que esté configurada como salida es

más fácil usar instrucción TOGGLE. Led intermitente en RB0.

(16)

SEMAFORO

El código de PBP:

inicio:

high 0:low 1:low 2:low 3:low 4: high 5

pause 1000

high 0:high 1:low 2:low 3:low 4: high 5

pause 1000

low 0:low 1:high 2:high 3:low 4: low 5

pause 1000

low 0:low 1:high 2:high 3:high 4: low 5

pause 1000

goto inicio

end

otra forma:

TRISB=%00000000

inicio:

PORTB = %00100001

pause 1000

PORTB = %00100011

pause 1000

PORTB = %00001100

pause 1000

PORTB = %00011100

pause 1000

goto inicio

end

(17)

JUEGO DE LUCES

Juego de luces que cuenta en forma binaria de 0 a 255:

i var byte

TRISB=0

inicio:

for i=0 to 255

PORTB=i

pause 50

next I

goto inicio

end

i var byte

leds var byte[5]

TRISB=0

leds[1]=%10000001

leds[2]=%01000010

leds[3]=%00100100

leds[4]=%00011000

Leds=1

inicio:

for i=1 to 4

PORTB=leds

pause 100

next I

for i=4 to 1 step-1

PORTB=leds

pause 100

next i

goto inicio

end

Juego de luces al estilo AUTO FANTASTICO:

i var byte

cont var word

TRISB=0

inicio:

cont=1

for i=1 to 7

PORTB=cont

pause 100

cont=cont*2

next i

for i=1 to 7

PORTB=cont

pause 100

cont=cont/2

next i

goto inicio

Otra manera de hacerlo:

i var byte

leds var PORTB

TRISB=0

Leds=1

inicio:

for i=1 to 7

leds=leds<<1

pause 100

next i

for i=1 to 7

leds=leds>>1

pause 100

next i

goto inicio

end

(18)

end

Display

En este ejemplo se va a utilizar un display de 7 segmentos y aremos un contador de 0-9 con la

fuincion Look Up

vec var byte

num VAR BYTE

TRISB = 0

prog:

for vec=0 to 9

lookup vec,[191,134,219,207,230,237,253,135,255,239],num

portb=num

pause 500

next vec

goto prog

END

(19)

El mismo contador con un display pero ahora con un vector en el cual almacenaremos los valores

correspondientes a cada numero (Para los dos ejemplos el Display es de Anodo Comun)

vec var byte [10]

pos var byte

vec[0]=191

vec[1]=134

vec[2]=219

vec[3]=207

vec[4]=230

vec[5]=237

vec[6]=253

vec[7]=135

vec[8]=255

vec[9]=239

TRISB=%00000000

loop:

for pos=0 to 9

PORTB=vec[pos]

pause 500

next

goto loop

end

(20)

Un contador ascendente y descendente

vec var byte

num VAR BYTE

TRISB = 0

prog:

for vec=0 to 9

lookup vec,[191,134,219,207,230,237,253,135,255,239],num

portb=num

pause 500

next vec

for vec=9 to 0 step -1

lookup vec,[191,134,219,207,230,237,253,135,255,239],num

portb=num

pause 500

next vec

goto prog

END

(21)

AQUI LES DEJO ALGUNOS EJEMPLOS SENCILLOS DE PWM

TRISB=%00000000

PortB=0

cont VAR word

X1:

forcont=1 to 255

PWM PortB.0,cont,1 'la salida de pwm esta en el port.0,el ancho de

'pulso sera de cont, el cual representar

Next

goto X1

OTRO EJEMPLO

a VAR word

trisa= %00000000 'salidas

trisb= %11111111 'entradas

x1:

for a = 1 to 2500

pwmporta.0,a,1 'la salida de pwm esta en el port.0,el ancho de pulso sera de dato a, el

'cual representar

PAUSE 5

next

'un ancho de pulso en un porcentaje incremental.

for a = 2500 to 1 step-1

pwm porta.1,a,1

PAUSE 5

next

(22)

EXPERIMENTO 2.

Detectando el Mundo Exterior

Tomar decisiones. Nuestro cerebro lo hace todo el tiempo. Tomamos decisiones basándonos

en lo que vemos, oímos, tocamos, etc. Como aprendimos en el experimento 1 (¿qué es un

microcontrolador?), los microcontroladores actúan como nuestro cerebro. Ellos manipulan el

mundo exterior basados en “entradas” (inputs). El Experimento 2 se centrará en cómo

podemos diseñar un sistema microcontrolado que pueda cambiar sus salidas (outputs),

dependiendo de qué tipo de entradas (inputs) digitales detecta.

Los microcontroladores son dispositivos programables. Esto quiere decir que contienen una

cierta lista de instrucciones (llamada programa o código), que dice qué hay que hacer bajo

ciertas circunstancias.

Sensor:

Un sensor es un dispositivo de entrada usado para detectar o medir presencia física.

Los ejemplos incluyen sensores que detectan luz, calor, temperatura, curvamiento y

compuestos químicos (tales como monóxido de carbono).

Partes requeridas.

El experimento 2 necesita las siguientes partes:

(1) Un cable de programación

(2) Dos LED (diodos emisores de luz)

(2) Dos pulsadores

(1) Un PIC16F84

(1)Programador

( 2) Dos resistores de 470 ohm, ¼ watt (amarillo, violeta, marrón)

(2) Dos resistores de 10k ohm, ¼ watt (marrón, negro, naranja)

(1) Una batería de 9 volts o adaptador

(6) Seis cables conectores

(1) Un programa editor de MicroCode Studio

Hay una infinita variedad de sensores que podemos conectar al Microcontrolador. Este

experimento incluye un pulsador (un tipo de sensor) y un LED (un dispositivo de salida).

(23)

¡Constrúyalo!

Recuerde que el LED debe ser conectado con el lado liso conectado a los pines de salida P0

y P1. Asegúrese que haya una resistencia de 220 ohm en serie con cada LED, y que haya

un resistor de 10.000 ohm (10K ohm) conectado al “lado alto” de cada pulsador (a los 5

volts).

Debido a que este experimento usa dos valores diferentes de resistores, y ambos se ven

parecidos, ¿cómo los puedo separar?. Leyendo las bandas con el código de colores. Si

usted no conoce cómo leer el “código”, mire el Apéndice C para averiguarlo.

Escriba el siguiente programa:

¡Programelo!

Este circuito tiene un tipo de sensor (el pulsador) y un tipo de dispositivo de salida (el LED).

Una vez que usted tiene todos los componentes instalados en el área del prototipo.

TRISB.0=1

inicio:

if PORTB.0 = 0 then

high 1

else

low 1

(24)

endif

goto inicio

end

Ahora, corra el programa.

Si su programa está trabajando apropiadamente, el LED debe prender, mientras usted

presiona el pulsador. Ahora analicemos paso por paso nuestro programa: Nuestro primer

comando, TrisB.0=1 hace el pin B0 una entrada (“input”). La instrucción High 1, fija el

registro de salida de B1 a un valor igual a “1”, o “alto” (high) por lo tanto el LED está

encendido.

Recuerde del Experimento 1, que un comando como “inicio:” realmente no es un comando,

es una etiqueta (simplemente un marcador o puntero a cierto lugar de su programa). Cuando

nuestro programa eventualmente encuentre el comando “goto inicio”, el programa buscará

la etiqueta “inicio”, saltará hasta ella, y luego continuará ejecutando el programa desde ese

punto. El comando “if PORTB.0=0 then ” le dice al microcontrolador que revise el estado del

pin llamado “B0”. Cuando un microcontrolador revisa el estado de un pin en particular, lo que

realmente está haciendo es leer el valor digital de ese pin.

El campo de la electrónica está generalmente dividido en dos diferentes dominios “del tipo

de señal” –Digital y Analógico. Nuestra entrada del pulsador es tanto un “0” o un “1” (abierto

o cerrado). Este es un sensor de tipo digital.

Medir el nivel del volumen de un amplificador de audio, son ejemplos de entrada analógica.

Sensores para éste tipo de aplicación, convierten una medición, por ejemplo de 10 cm, a un

valor digital que el microcontrolador pueda entender. Exploraremos este mundo fascinante

de la Conversión. Analógico a Digital en un experimento futuro.

En electrónica digital (binaria), cualquier valor distinto de 0 y 1 es considerado inválido. Por

lo tanto, cuando el microcontrolador lee el estado de B0, verá un valor de 0 o 1. Nosotros

buscamos que B0 sea un “0”. Si (cuando el microcontrolador lo revisa) es un “1”, entonces

este comando hará que B1 se apague, por lo tanto no hará nada, y el programa se

continuará ejecutando en el siguiente comando (en este caso, “goto inicio” – lo que causa

que el programa salte al principio y continuamente revise que B0 se convierta en un “0”).

Una vez que B0 se convierta en “0” entonces las condiciones para este comando se

cumplen y el programa hará que B0 se ponga en alto, por lo tanto el led se enciende, luego

hace que el programa regrese y revise el estado de B0 nuevamente y “repita todo

nuevamente”.

El programa lo ayudará a encontrar errores de sintaxis cuando corra el programa y no se

ejecute adecuadamente aparecerán los errores indicándoles en que línea e instrucción se

encuentra el error, beberá aprenderse la sintaxis de cada instrucción para ir adquiriendo

cada vez mayor experiencia para resolver los diferentes errores que se le presente. Revise

nuevamente su programa y asegúrese que ha escrito todo correctamente.

Antes de hacer funcionar este programa, ¿puede usted decir qué va a hacer? El programa

“tomará una decisión” basado en qué botón es presionado. Una vez que cualquier botón es

presionado, el programa saltará a la rutina apropiada. El microcontrolador está sensando

(25)

una entrada, tomando una decisión, y luego creando una salida. El comando “if - then”, se

fija en la toma una decisión basada en el estado de un pin.

Una variable nos permite almacenar cierta pieza de información (ingresada ahora), para un

análisis posterior.

Las variables deben ser “declaradas” antes de ser usadas en un programa. Declarar una

variable simplemente es una instrucción en su programa que le avisa al microcontrolador el

nombre de la variable y qué tan grande es.

(26)

El mismo ejemplo pero esta ves con una

resistencia de pull down:

TRISB.0=1

inicio:

if PORTB.0 = 1 then

high 1

else

low 1

endif

goto inicio

end

(27)

BOTONES Y LEDS

Este tiene dos botones el uno sirve para subir y el otro para bajar:

i var byte

cont var word

cmcon=7

TRISB=0

TRISA=%00000011

cont=1

PORTB=cont

inicio:

if PORTA.0=0 then

cont=cont*2

PORTB=cont

if cont>=256 then

cont=1

PORTB=cont

endif

pause 200

else

cont=cont

endif

if PORTA.1=0 then

cont=cont/2

PORTB=cont

if cont<=1 then

cont=256

endif

(28)

pause 200

else

cont=cont

endif

goto inicio

end

(29)

Contador con Pulsantes

Este es un contador ascendente y descendente....posee dos pulsantes que sirven para subir y

bajar el conteo:

vec var byte

num VAR BYTE

TRISA = %00000011

TRISB = 0

cmcon=7

vec=0

PORTB=64

inicio:

if PORTA.0=0 then

vec=vec+1

lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num

portb=num

if vec>=10 then

vec=0

endif

pause 200

endif

if PORTA.1=0 then

vec=vec-1

lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num

portb=num

if vec<=1 then

vec=11

endif

pause 200

endif

goto inicio

(30)
(31)

CONTADOR CON PULSANTES

A diferencia del anterior que el conteo se la hacia cuando se pulsaba aqui es conteo es

automatico y los pulsantes sirven para elegir si se quiere que el conteo sea ascendente o

descendente...

vecvar byte

num VAR BYTE

flag var byte

TRISA = %00000011

TRISB = 0

cmcon=7

vec=0

flag=1

inicio:

if PORTA.0=0 then

flag=1

endif

if PORTA.1=0 then

flag=0

endif

if flag=1 then

gosub subir

endif

if flag=0 then

gosub bajar

endif

goto inicio

Subir:

vec=vec+1

lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num

portb=num

(32)

if vec>=10 then

vec=0

endif

pause 200

return

Bajar:

vec=vec-1

lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num

portb=num

if vec<=1 then

vec=11

endif

pause 200

return

end

(33)

Preguntas

1. ¿Cómo toma una decisión un microcontrolador?

2. ¿Qué es un sensor y por qué un microcontrolador necesita uno? Mencione algunos

tipos diferentes de sensores.

3. Defina una variable y describa cómo puede ser usada en un programa.

4. Escriba el código para declarar una variable llamada “status”. La variable podría valer

tanto “0” como “1”.

5. Agregue comentarios apropiados al siguiente programa:

output portb.0

____________________________

output portb.1

____________________________

input porta.0

____________________________

input porta.1

____________________________

revisar:

____________________________

if porta.0=0 then titilar

____________________________

if porta.1=0 then dobletitilar

____________________________

goto revisar

____________________________

titilar:

____________________________

low 0

____________________________

pause 200

____________________________

high 0

____________________________

pause 200

____________________________

goto revisar

____________________________

doble_titilar:

____________________________

low 0

____________________________

low 1

____________________________

pause 200

____________________________

high 0

____________________________

(34)

high 1

____________________________

pause 200

____________________________

goto revisar

____________________________

¡DESAFIO!

1. Escriba un programa (completo, con comentarios) que haga titilar al LED B0

(cada ½ segundo), mientras esté presionado el pulsador P2. Cuando el botón no está

presionado, el LED B1 está encendido, pero se apaga cuando el LED B0 está titilando.

2. Escriba un programa que haga titilar ambos LED (cada 1.2 segundos) cuando cualquier

pulsador es presionado. Si ningún pulsador es presionado, los LED están encendidos y si

ambos pulsadores son presionados, ambos LED están apagados.

3. Escriba un programa que haga titilar alternadamente los LED cada ½ segundo, pero

solamente después de que P2 haya sido presionado y liberado, y luego de que P1 sea

presionado. Luego, escriba comentarios en su programa mostrando que cambios haría para

invertir el orden en que presionaría los interruptores.

4. Escriba un programa que haga titilar los LED (cada .2 segundos) cada vez que el pulsador

P2 es presionado. Luego, mientras el pulsador P2 está presionado, el LED B1 es apagado

cuando el pulsador P1 es presionado (pero el LED B0 aún sigue titilando).

¿QUE APRENDI?

Complete las siguientes oraciones con las palabras de la lista.

Microcontroladores necesitan tan

_______

para saber que está pasando en el “mundo

exterior”. Usando comandos PBP tales como

“_____________

”, nuestro programa

puede determinar que tipo de respuesta es la apropiada. Hay una variedad infinita de

sensores que pueden ser conectados al PIC. Aunque los interruptores que usamos en

este experimento fueron

______________

presionándolos, podrían fácilmente haber sido

los interruptores de las puertas de un ascensor – aquellos que evitan que seamos

aplastados al cerrarse las puertas.

_______________

Son usadas para retener la información, permitiéndole al programa

obtener los datos ahora (tal vez de varias entradas diferentes), y más tarde tomar

decisiones en el momento apropiado.

Las variables pueden ser

_____________

, o inicializadas (“set up”), en 4 tamaños

diferentes. Si queremos controlar el estado (alto o bajo) de un

_________

en particular,

entonces fijamos la variable como un simple “bit”. Las variables pueden tener hasta 32

caracteres de longitud. Es importante recordar cuando usamos variables, darle un

(35)

nombre que tenga relación con el dato que almacena. La longitud del nombre no tiene

influencia en que tan rápido su

_________

se ejecuta, pero un nombre “muy descriptivo”

hace mucho más fácil de

______

su programa.

l/0 pin

declaradas

entradas (o sensores)

if in1=0

programa

activados

debug (depurar)

variables

La verdadera importancia de los microcontroladores es su habilidad para tomar

decisiones basándose en las entradas. Las entradas a los microcontroladores, deben

tener un formato digital, pero muchos tipos de situaciones del “mundo exterior” son

analógicas por naturaleza. La tecnología de los sensores es una de las áreas más

desafiantes de la electrónica. Hay cientos de tipos diferentes de sensores en el

Transbordador Espacial y en los satélites que él pone en órbita. Mucha gente se

especializa en el diseño de sensores que se comunican con microcontroladores. Si a

usted le gusta más trabajar con “hardware”, en lugar de escribir programas (crear

software), éste podría ser un campo muy excitante y aún desafiante. Cualquier sistema

microcontrolador (o para el caso, computado), depende de las entradas digitales para

tomar decisiones correctas. Es importante recordar que las decisiones del

microcontrolador son solamente tan buenas como el programa que están ejecutando, y

de la calidad de los sensores de entrada. Cuanto más mire a su alrededor, más

aplicaciones verá para la tecnología de sensores y microcontroladores.

(36)

¿CÓMO PUEDO

APLICARLO?

Muchas tiendas tienen una especie de “timbre” en la puerta, que suena cuando uno la

atraviesa. Cada vez que el timbre suena, el dueño mira y se fija quién entró. Usando un

sensor de proximidad, que detecta la presencia de un objeto, (similar a un botón que

está siendo presionado), usted podría detectar cuándo alguien atraviesa una puerta.

Usando tres sensores, usted podría determinar en qué dirección la están atravesando.

Entonces, usando dos tonos, podríamos saber con uno, si alguien está entrando, y con

el otro, si alguien está saliendo.

(37)

Apéndice A:

1. Introducción a la Ingeniería

1.1 El alumno distinguirá el concepto de ingeniería, identificando sus perfiles profesionales y campos ocupacionales

Identifique los conceptos de ingeniería

1.1.1 Distingue los conceptos de técnica, tecnología, ciencia y disciplina

1.1.2 Distingue las ramas de la ingeniería

1.1.3 Distingue el perfil profesional de un ingeniero

1.1.4 Distingue el campo ocupacional de un ingeniero

1.2 El alumno conceptualizara el término de ingeniería y del análisis del plan de estudios, identificara su programa de

formación y campo ocupacional.

1.2.1 Relacione los antecedentes, conceptos y tendencias de la mecatrónica con la ingeniería

1.2.2 Relacione el programa (plan de estudios) de formación con el perfil profesional y campo ocupacional

1.2.3 Identifica al menos una función, dos competencias y cinco capacidades del ingeniero mecatrónico.

2 Introducción a los sistemas mecatrónicos

2.1 El alumno identificara los elementos básicos de un sistema mecatrónico, analizara su funcionamiento al compararlo con

las partes de un cuerpo humano

2.1.1 Ejemplifique los conceptos de sistema y sinergia

2.1.2 Identifique los elementos que conforman un sistema mecatrónico

2.1.3 Compare los elementos de un sistema mecatrónico con las partes del cuerpo humano

2.1.4 Distingue un producto y un sistema mecatrónico

2.2 El alumno identificara el funcionamiento y características básicas de los elementos que proporcionan información del

entorno en sistema mecatrónico

2.2.1Identifique el funcionamiento básico de un elemento de al menos dos tipos de botones pulsadores, tres

interruptores y cuatro sensores

2.3 El alumno identificara el funcionamiento y características de los elementos que ejecutan la acción de control de un

sistema mecatrónico

2.3.1 Identifique el funcionamiento de los motores de corriente directa, de corriente alterna, servomotores y a

pasos

2.3.2 Identifique el funcionamiento de al menos dos electroválvulas

2.3.3 Identifique el funcionamiento de al menos dos tipos de lámparas indicadoras y desplegados.

2.4 El alumno identificara el funcionamiento y características de los elementos que permiten el movimiento a las partes

mecánicas de un sistema mecatrónico

2.4.1 Identifique el funcionamiento básico de un tren de engranes, una banda y polea, una guía lineal, un tornillo

auto embalado, una rueda dentada y trinquete y de un sistema de transporte (banda trasportadora)

2.5 El alumno identificara el funcionamiento y características de los dispositivos que controlan un sistema mecatrónico.

2.5.1 Identifique el funcionamiento básico de los circuitos digitales basados en compuertas lógicas, dispositivos

programables, microprocesadores y microcontroladores

2.5.2 Identifique el funcionamiento básico de los circuitos de control basados en relevadores y controladores

lógicos programables

2.6 El alumno identificara el funcionamiento y características los dispositivos que acoplan las señales desde y hacia el

controlador.

2.6.1 Identifique el funcionamiento básico de los circuitos acondicionadores de señal y de los circuitos

manejadores para actuadores.

2.7 El alumno identificara el funcionamiento y características de los dispositivos que entregan energía a los sistemas

mecatrónicos.

(38)

Apéndice B:

REFERENCIA DE DECLARACIONES PBP

@

Inserta una linea de codigo ensamblador

ASM...ENDASM

Inserta una seccion de codigo ensamblador

BRANCH

GOTO computado(equiv. a ON..GOTO)

BRANCHL

BRANCH fuera de pagina(BRANCH largo)

BUTTON

Anti-rebote y auto-repeticion de entrada en el pin especificado

CALL

Llamada a subrutina de ensamblador

CLEAR

Hace cero todas las variables

COUNT

Cuenta el numero de pulsos en un pin

DATA

Define el contenido inicial en un chip EEPROM

DEBUG

Señal asincronica de salida en un pin fijo y baud

DISABLE

Deshabilita el procesamiento de ON INTERRUPT

DTMFOUT

Produce tonos en un pin

EEPROM

Define el contenido inicial en un chip EEPROM

ENABLE

Habilita el procesamiento de ON INTERRUPT

END

Detiene la ejecucion e ingresa en modo de baja potencia

FOR...NEXT

Ejecuta declaraciones en forma repetitiva

FREQOUT

Produce hasta 2 freuencias en un pin

GOSUB

Llama a una subrutina BASIC en la etiqueta especificada

GOTO

Continua la ejecucion en la etiqueta especificada

HIGH

Hace alto la salida del pin

HSERIN

Entrada serial asincronica(hardware)

HSEROUT

Salida serial asincronica(hardware)

I2CREAD

Lee bytes de dispositivo I

2

C

I2CWRITE Graba bytes en dispositivo I2C

IF..THEN..ELSE..ENDIF Ejecuta declaraciones en forma condicional

INPUT Convierte un pin en entrada

(LET) Asigna el resultado de una expresion a una variable

LCDOUT Muestra caracteres en LCD

LOOKDOWN Busca un valor en una tabla de constantes

LOOKDOWN2 Busca un valor en una tabla de constantes o variables

LOOKUP Obtiene un valor constante de una tabla

LOOKUP2 Obtiene un valor constante o variable de una tabla

LOW Hace bajo la salida de un pin

NAP Apaga el procesador por un corto periodo de tiempo

ON INTERRUPT Ejecuta una subrutina BASIC en un interrupt

OUTPUT Convierte un pin en salida

(39)

PAUSEUS Demora (resolucion 1 useg.)

PEEK Lee un byte del registro

POKE Graba un byte en el registro

POT Lee el potenciometro en el pin especificado

PULSIN Mide el ancho de pulso en un pin

PULSOUT Genera pulso hacia un pin

PWM Salida modulada en ancho de pulso a un pin

RANDOM Genera numero pseudo-aleatorio

RCTIME Mide el ancho de pulso en un pin

READ Lee byte de un chip EEPROM

RESUME Continua la ejecucion despues de una interrupcion

RETURN Continua en la declaracion que sigue al ultimo GOSUB

REVERSE Convierte un pin de salida en entrada o uno de entrada en salida

SERIN Entrada serial asincronica (tipo BS!)

SERIN2 Entrada serial asincronica (tipo BS2)

SEROUT Salida serial asincronica (tipo BS1)

SEROUT2 Salida serial asincronica (tipo BS2)

SHIFTIN Entrada serial sincronica

SHIFTOUT Salida serial sincronica

SLEEP Apaga el procesador por un periodo de tiempo

SOUND Genera un tono o ruido blanco en un pin

STOP Detiene la ejecucion del programa

SWAP Intercambia los valores de dos variables

TOGGLE Hace salida a un pin y cambia su estado

WHILE..WEND Ejecuta declaraciones mientras la condicion sea cierta

WRITE Graba bytes a un chip EEPROM

XIN Entrada X - 10

XOUT Salida X - 10

5.1. @

@ declaracion

Cuando se usa al comienzo de una línea, provee un atajo para insertar una declaracion en lenguaje ensamblador en un programa PBP. Este atajo se puede usar libremente para unir codigo ensamblador con declaraciones PBP.

I var byte Rollme var byte For i = 1 to 4

@ rlf _rollme, F: rotar byte a la izquierda una vez next i

El atajo @ tambien se puede usar para incluir rutinas en lenguaje ensamblador en otro archivo. Por ejemplo @ Include “fp.asm “

@ resetea a 0 la página del registro antes de ejecutar la instrucción en lenguaje ensamblador. La página del registro no debe ser alterada usando @ Vea la seccion de programacion del ensamblador para mayor informacion.

5.2. ASM..ENDASM ASM

(40)

ENDASM

Estas instrucciones le dicen a PBP que el codigo entre estas dos líneas esta en lenguaje ensamblador y no debe ser interpretado como declaraciones PBP. Se puede usar estas dos instrucciones libremente para mezclar código ensamblador con declaraciones PBP.

El tamaño máximo para una sección de texto ensamblador es 8 K. Este es el tamaño máximo para el fuente actual, incluyendo comentarios, no el código generado. Si el bloque de texto es mayor, divídalo en múltiples secciones ASM... ENDASM o incluyalo en un archivo separado.

ASM resetea a 0 el registro de página. Debe asegurarse que el registro de página sea 0 antes de ENDASM si el código de ensamblador lo ha alterado. Vea la sección de programación de ensamblador para más información.

ASM

Bsf PORTA, 0; setea bit 0 en PORTA Bcf PORTB.0; setea bit 0 en PORTB ENDASM

5.3. BRANCH

BRANCH index, [etiqueta {, etiqueta ...}]

Causa que el programa salte a una posición diferente, basada en una variable indexada. Es similar al ON...GOTO de otros BASIC.

Index selecciona una etiqueta de una lista .La ejecucion comienza en la etiqueta especificada. Por ejemplo, si Index es 0, el programa salta a la primer etiqueta especificada en la lista, si Index es 1, salta a la segunda y así sucesivamente... Si Index es mayor ó igual al número de etiquetas, no se toma ninguna acción y la ejecución continúa con la declaración siguiente al BRANCH. Se pueden usar hasta 256 etiquetas en un BRANCH.

Etiqueta debe estar en la misma página de código que la instrucción BRANCH. Si no está seguro de esto, use BRANCHL. BRANCH B4, [dog, cat, fish]

´ igual que:

´ if B4=0 then dog (goto dog) ´ if B4=1 then cat (goto cat) ´ if B4=2 then fish (goto fish)

5.4. BRANCHL

BRANCHL Index, [etiqueta {, etiqueta....}]

BRANCHL trabaja en forma similar a BRANCH, haciendo que el programa salte a una localización determinada, basándose en una variable indexada. Las principales diferencias son que puede saltar a una etiqueta ubicada en otra página de código y que genera un código dos veces mayor en tamaño al de BRANCH... Si está seguro que las etiquetas están en la misma página que el BRANCH ó si el microcontrolador no tiene más que una página de código (2K ó menos de ROM), use BRANCH para minimizar el uso de memoria.

Index selecciona una etiqueta de una lista .La ejecucion comienza en la etiqueta especificada .Por ejemplo, si Index es 0, el programa salta a la primer etiqueta especificada en la lista, si Index es 1, salta a la segunda y así sucesivamente... Si Index es mayor ó igual al número de etiquetas, no se toma ninguna acción y la ejecución continúa con la declaración siguiente al BRANCHL. Se pueden usar hasta 128 etiquetas en un BRANCHL.

BRANCHL B4, [dog, cat, fish] ´ igual que:

´ if B4=0 then dog (goto dog) ´ if B4=1 then cat (goto cat) ´ if B4=2 then fish (goto fish)

5.5. BUTTON

BUTTON, Pin, Down, Delay, Rate, Bvar, Action, Etiqueta

Lee Pin y opcionalmente ejecuta anti-rebote y auto-repetición. Pin automáticamente se toma como entrada. Pin debe ser una constante, 0 - 15, o una variable que contenga un número 0 - 15 (p.ej. B0) ó un número de pin (p.ej. PORTA ,0)

Down Estado del pin cuando se oprime el pulsador ( 0 ...1)

Delay Contador de ciclos antes de que comience la auto-repetición (0...255). Si es 0, no se efectua anti-rebote ni auto.repetición .Si es 255 se eliminan rebotes, pero no auto-repetición.

Rate Valor de auto-repetición (0..255)

Bvar Variable con tamaño de byte usada internamente para conteo de demoras y repeticiones, Dene ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa.

Action Estado del pulsador a ser actuado.

Etiqueta La ejecución comienza en esta etiqueta si es cierto Action.

´ goto notpressed if button not pressed on Pin2 BUTTON PORTB, 2, 0, 100, 10, b2, 0, notpressed

BUTTON necesita ser usado dentro de un loop para auto-repetición para funcionar adecuadamente.

BUTTON permite eliminar rebotes, demorando la ejecución de un programa por un período de milisegundos para permitir que los contactos se asienten. La demora por defecto es 10 ms.. Para cambiarlo a otro valor use DEFINE.

´setea la demora de anti-rebote a 50 ms DEFINE BUTTON_PAUSE 50

BUTTON_PAUSE debe estar en mayúsculas.

(41)

IF PORTB, 2 = 1 THEN notpressed

5.6. CALL

CALL etiqueta

Ejecuta la subrutina ensamblador llamada etiqueta.

Normalmente se usa GOSUB para ejecutar una subrutina PBP. La principal diferencia entre GOSUB y CALL, es que con ésta última no se chequea la existencia de etiquetas hasta el momento de ensamblar. Usando CALL se puede acceder a una etiqueta en una sección de lenguaje ensamblador, lo que es inaccesible mediante PBP.

CALL pass ´ ejecuta la subrutina ensamblada, denominada _pass

5.7. CLEAR

CLEAR

Coloca en cero todos los registros en cada banco. Coloca en cero todas las variables, incluyendo las del sistema.Esto no se hace automáticamente al comenzar un programa en PBP, como sucede en BASIC Stamps.Por lo general, las variables deben ser colocadas en un estado inicial apropiado por el programa, y no usando CLEAR.

CLEAR ´ Coloca todas las variables en cero

5.8. COUNT

COUNT Pin, Period, Var

Cuenta el número de pulsos en un Pin, durante un período Period, y guarda el resultado en Var. Pin es automáticamente colocado como entrada. Pin debe ser una constante, 0-15, ó una variable que contenga un número de 0 a 15 (p.ej. B0).ó un numero de pin.

La resolución de Period está dada en milisegundos. Sigue la frecuencia del oscilador basado en DEFINE OSC.

VCOUNT chequea el estado de Pin mediante un loop y cuenta las transiciones de bajo a alto. Con un oscilador de 4 Mhz chequea el estado del pin cada 20 us. Con un oscilador de 20 Mhz

chequea el estado cada 4 us. De esto, se infiere que la mayor frecuencia de pulsos que puede ser contada, es de 25 Khz con un oscilador de 4 Mhz y de 125 Khz con un oscilador de 20 Mhz si la frecuencia tiene un ciclo útil del 50 % (los tiempos altos son iguales a los bajos).´ cuenta el número de pulsos en Pin1 en 100 ms

COUNT PORTB.1, 100, W1

´ determinar la frecuencia en un Pin COUNT PORTA.2, 1000, W1 contar por 1 segundo

Serout PORTB.0, N2400, [W1]

5.9. DATA

DATA {@ location,} constante {, constante}

Guarda constantes en un chip EEPROM cuando este dispositivo se programa por primera vez. Si se omite el valor opcional location, la primer declaración de DATA comienza a almacenarse en la dirección 0 y las declaraciones siguientes, en las direcciones siguientes. Si existe un valor location este indica la dirección de comienzo donde se almacenará la información. Una etiqueta opcional se le puede asignar a la dirección de comienzo, para futuras referencias del programa.

Constante puede ser una constante numérica ó una sarta de constantes. Solo se guarda el byte menos significativo del valor numérico, excepto que se use el modificador WORD. Las sartas se guardan como bytes consecutivos de valores ASCII. No se agregan terminadores ni se completa el largo.

DATA solo funciona con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84 .Dado que el EEPROM es una memoria no-volatil, los datos permanecen intactos aún cuando se quite la energía.

Los datos se guardan dentro del EEPROM una sola vez en el momento en que se programa el micro controlador, no cada vez que se ejecuta el programa. WRITE se usa para colocar los valores en el EEPROM en el momento de ejecución.

´ guardar 10,20 y 30 comenzando en la posición 5 DATA @5, 10, 20, 30

´ asignar una etiqueta a un word en la próxima ubicación dlabel DATA word $1234 ´ guarda $34, $12 ´ saltear 4 posiciones y guardar 10 ceros DATA (4), 0 (10)

5.10. DEBUG

DEBUG item {, item ...}

Envia uno ó más items a un pin predefinido con un baud rate predefinido en formato standard asincrónico, usando 8 bits de datos, sin paridad y con 1 bit de parada (stop bit) (8N1)… El pin, automáticamente se convierte en salida. Si un signo (#) precede a un item, se envía serialmente la representación ASCII para cada dígito. DEBUG soporta los mismos modificadores de datos que SEROUT2. DEBUG es una de varias funciones seriales asincronicas pre-construidas. Es la más pequeña de las rutinas seriales generadas por software. Puede ser usada para enviar información de depuración (variables, posición de marcadores, etc).a un programa terminal como HyperTerm. También se puede usar cuando se desee salida serial sobre un pin determinado y con un baud rate determinado. Los pin y baud rate seriales son especificadas usando DEFINEs: ‘Set Debug pin port

DEFINE DEBUG_REG PORTB

‘Set Debug pin bit DEFINE DEBUG_BIT 0

‘ Set Debug baud rate DEFINE DEBUG_BAUD 2400 ‘ Set Debug mode: 0= cierto, 1= invertido DEFINE DEBUG_MODE 1

DEBUG asume un oscilador de 4 Mhz, cuando está generando su tiempo de bit. Para mantener el tiempo apropiado del baud rate con otros valores de osciladores, asegurese de DEFINE el seteo de OSC al valor de oscilador deseado.

En algunos casos, la tasa de transmisión de las instrucciones de DEBUG podrían presentar los caracteres demasiado rápidamente al dispositivo receptor. Un DEFINE agrega una demora de caracteres para las transmisiones seriales de salida. Esto permite un tiempo adicional entre los caracteres a medida que son transmitidos. La demora de caracter DEFINE permite un atraso de 1 a 65,535 microsegundos (.001 a 65.535 milisegundos) entre cada carácter transmitido. Por ejemplo, para pausar 1 milisegundo entre la transmisión de cada caracter:

DEFINE DEBUG_PACING 1000

Si bien los chips convertidores de nivel RS-232 son comunes y económicos, gracias a la implementación de corriente RS-232 y a las excelentes especificaciones I/O del micro PIC; la mayoría de las aplicaciones no requieren convertidores de nivel. Se puede usar TTL invertido (DEBUG_MODE =1) Se sugiere un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos).

Referencias

Documento similar