1. PROYECTOS CON INTERRUPTORES
Un escenario típico en el mundo de microcontrolador consta del procesamiento de una
entrada, para establecer una salida. Leer entradas de un número de fuentes es muy
importante. La entrada en un sistema puede ser analógica, que varía con el voltaje, o
digital, que es verdadera o falsa. Interruptores u otros dispositivos pueden dar señales
al microcontrolador como 0 lógico o 1. Aquí vamos a hablar de la conexión de
interruptores de pulsar para varias líneas E / S del microcontrolador.
Los Interruptores pueden ser conectados en una de las dos maneras:
• Activo. Esto significa que cuando se pulsa un interruptor, se conecta a la línea I
/ O a VCC o 5V en línea, para dar un 1 lógico.
• Línea Baja. Esto se conoce como activos de alta, lo contrario es poco activa. Sin
embargo, a fin de evitar una la línea abierta, se conecta la línea utilizando
resistencias a GND.
El esquema tiene 5 interruptores de entrada. Estos interruptores están configurados
como activos. Así, se han asociado resistencias conectadas a VCC. La línea
correspondiente a leer 1 lógico, cuando el interruptor NO se presiona y 0 lógica
cuando está siendo presionado.
La línea especificada debe ser declarada como digital y como entrada antes de usar el
interruptor.
2.
Ejercicio 1.
Device=18F4550
XTAL=20
ALL_DIGITAL=true
Output PORTC
Input PORTA.0
Symbol LED = PORTC.0
Symbol SW1 = PORTA.0
Low LED
Loop:
If SW1=0 Then
DelayMS 300
High LED
End If
GoTo Loop
En este programa se supervisa a PORTA.0 asignando a la línea un interruptor SW1.
Cuando el interruptor está desactivado la línea lee un 1 lógico, tan pronto como se
pulsa el interruptor y sí IF es ejecutado, la línea lee 0 lógico y ejecuta las instrucciones
que se adjuntan en la estructura del IF... End IF.
3.
Observe el pequeño retraso de DelayMS 300, se ha hecho así, para que una vez que
activado el interruptor sea detectado, se encienda el led ubicado en PORTC.0,
permaneciendo en este estado una vez se libera el interruptor.
Circuito EJERCICIO 1.
Hágalo usted mismo
1. Hacer un programa que deba encender el LED y en cada pulsación de un botón
lo apague.
2. Hacer un programa que encienda un LED cuando se pulsa SW1 y lo apague
cuando se pulsa SW2.
3. Se desea que al pulsar SW1 se prenda un LED y al soltar SW1 se apague el
LED.
4. Se desea que al pulsar SW1 se prenda un LED0 y se apague un LED1, y si se
pulsa SW2 se prende LED1 y se paga LED0.
5. Se desea que al pulsar SW1 se prendan todas las lámparas LEDS ubicadas en
PORTA del PIC 18F4550, y al soltar SW1 se apaguen.
4.
Ejercicio 2.
Circuito EJERCICIO 2, 3, 4,5.
Device=18F4550
XTAL=20
ALL_DIGITAL=true
Output PORTC
Input PORTA.0
Input PORTA.1
Symbol LED = PORTC.0
Symbol SW1 = PORTA.0
Symbol SW2 = PORTA.1
Dim x As Byte
x=100
Low LED
Loop:
DelayMS x* 10
Toggle LED
If SW3=0 Then
5.
x=x+5
DelayMS 200
EndIf
If SW4=0 Then
x=x-5
DelayMS 200
EndIf
GoTo Loop
Este programa lee dos interruptores, SW1 y SW2, y cuando se detecta que son
activados se incrementa o disminuye el valor de una variable x por 5. A su vez la X se
utiliza en la demora de activación del LED ubicado en PORTC.0. Así, la velocidad de
parpadeo del LED se puede cambiar pulsando SW1 o SW2.
Rebote de Pulsación
Cuando se pulsa un botón, los contactos hacen una conexión a corto (1 a 20 ms). El
Comando Button evita este ruido para ser interpretado como una acción más del
interruptor, realizando un retraso después de leer el estado de entrada.
En las aplicaciones del mundo real, los botones se suponen que deben realizar más que
una sola activación. El software soporta una variedad de maneras de pulsar un botón.
Por ejemplo, en el caso de la selección de un valor de entrada, cuando se pulsa el
botón se supone incrementar el número, sin embargo, si se pulsa un cierto período,
comienza a comportarse como si el botón se activara varias veces. Esto se llama
repetición automática característica. PROTON proporciona un comando llamado
Button. Este comando supervisa un pin específico de un puerto para la entrada, lee el
valor como activos de baja o alta, también acepta un número que es el retraso de
espera, después de que una repetición automática sea publicada. La frecuencia de
repetición automática también puede ser mencionada en la declaración.
Ejercicio 3.
Device=18F4550
XTAL=20
ALL_DIGITAL=true
Output PORTC
Input PORTA.0
Input PORTA.1
Symbol LED = PORTC.0
Symbol SW1 = PORTA.0
Symbol SW2 = PORTA.1
Dim x As Byte
x=0
loop:
Button SW1, 0, 100, 250, x, 0, aa
Toggle LED
DelayMS 100
aa:
GoTo loop
6.
Este programa utiliza el comando Button para leer el estado de un botón, SW1. Si se
pulsa el botón, se alterna el LED, si se mantiene pulsado el botón, se iniciará la
repetición automática después de una pequeña demora.
Además de los botones, muchos tipos de interruptores, como puentes o conmutadores
DIP pueden ser utilizados en el de hardware para indicar varias configuraciones. Se
puede leer como cualquier cambio, como 0 lógico o 1, dependiendo de la configuración
del hardware.
Lectura de una combinación de botones
A veces, en un programa es necesario leer una combinación de botones, esto se utiliza
para ampliar la gama de capacidades de entrada, así como proporcionar un mecanismo
de seguridad para funciones importantes. La combinación se puede leer en la misma
línea, con el uso del operador AND, o como IFS anidados.
Ejercicio 4.
Device=18F4550
XTAL=20
ALL_DIGITAL=true
Output PORTC
Input PORTA.0
Input PORTA.1
Symbol LED = PORTC.0
Symbol SW1 = PORTA.0
Symbol SW2 = PORTA.1
loop:
If SW1=0 And SW2=0 Then
Toggle LED
DelayMS 300
EndIf
GoTo loop
Este programa hará un seguimiento del interruptor SW1 y SW2. Se cambiará el
estado del LED sólo si se pulsan las dos teclas. En una segunda situación queremos
que SW2 preceda a SW1.
Ejercicio 5.
Device=18F4550
XTAL=20
ALL_DIGITAL=true
Output PORTC
Input PORTA.0
Input PORTA.1
Symbol LED0 = PORTC.0
7.
Symbol LED1 = PORTC.1
Symbol SW1 = PORTA.0
Symbol SW2 = PORTA.1
loop:
If SW1=0 Then
High LED1
DelayMS 2000
If SW2=0 Then
DelayMS 200
Toggle LED0
EndIf
Low LED1
EndIf
GoTo loop
Este programa se configura SW1 como interruptor principal, cuando se activa, se
cambia de estado el LED1 (PORTC.1) y espere dos segundos, esto da tiempo a la
activación de SW2, al final de 2 segundos que se comprobará si SW2 sigue presionado,
entonces, se activará el LED0. Sea o no SW2 presionado, en lapso de 2 segundos, el
LED1 se apagará, y el ciclo se repite. Este tipo de mecanismo, asegura que una
determinada secuencia de teclas presionadas antes de una acción importante, como
apagar un motor etc. es llevado a cabo.
PINES ESPECIALES PARA CONECTAR INTERUPTORES
El PORTB.0 de interrupción
Se puede ubicar un interruptor de uso general, situado en PORTB.0. Aunque puede
funcionar como un interruptor normal, descrito anteriormente, el PORTB.0 puede ser
configurado para desarrollar un procedimiento interno de la interrupción cada vez que
se produce un cambio, en el PIN. Vamos a hablar de esto más adelante en la sección
correspondiente. Aquí sólo quiero mencionar que este PIN puede ser utilizado no sólo
como interruptor de entrada de uso general, sino también como un medio de prueba
de la interrupción.
El PORTA.4 T0CKI
También puede ser utilizado de otra forma. El PIN PORTA.4 puede ser configurado
como entrada para el Timer 0. Timer 0 puede ser configurado para contar el número
de impulsos procedentes de PORTA.4. Con el fin de experimentar con esto podemos
utilizar in interruptor para dar impulsos externos para este contador o hacer una
fuente externa, como un oscilador basado en 555, y conectarlo a este conector, para
valorar los acontecimientos externos, que se pueden contar.
8.
Ejercicios propuestos
En los siguientes ejercicios escribir las decisiones y realizar la simulación en PROTEUS.
1. Se tienen 3 pulsadores SW1, SW2 y SW3, un LED0, se desea que al pulsar solo
dos se prenda LED0, y si no se pulsa ninguno se apague LED0.
2. Se tienen 2 lámparas L0 y L1, dos pulsadores SW1 y SW2, se desea que al
pulsar SW1 se prendan las dos lámparas y se apaguen si se pulsa SW2.
3. Se tienen 4 pulsadores SW0 a SW3, una lámpara L0, se desea que al pulsar
SW0 y SW1 o SW22 y SW3 se prenda L0 en otro caso se apague.
4. Se tiene A=1, B=10, C=4, si A+B>3 cargar en C 25, si A>C or B<C entonces
cargue en A 34 y en B 12. Mostrar resultado con leds.
5. Se tienen 4 pulsadores Sw1 a Sw4, y tres lámparas L1 a L3, se desea que L1
solo prenda cuando se pulsen al menos dos, L2 solo prende cuando se pulsen
solo 3, L3 solo prende si L1 y L2 están prendidas.