Cómo interpretar el sentido de giro de un conmutador digital con un PIC (5 / 5 paso)

Paso 5: Software

yo no uso construido en interrupciones en el PIC Basic Pro. He utilizado un par de archivos que incluí en mi código de Darrel Taylor a unidad de la rutina. Esto es donde un enorme crédito a Darrel pertenece! Los archivos son gratis. Visita su web para más información, otras aplicaciones y para descargar los archivos. Puede omitir esta parte si no está utilizando un PIC con interrupciones de Darrel Taylor. Sólo configura las interrupciones como sea necesario en la plataforma que está utilizando.

Para obtener el Taylor de Darrel (DT) interrupciones configurar allí son dos cosas que hacer:

1.) incluye el DT_INTS-14.bas y ReEnterPBP.bas archivos en el código.

2.) copia y pega esto en tu código.

ASM
¿Macro INT_LIST, IntSource, etiqueta, tipo, ResetFlag?
INT_Handler RBC_INT, sí _ISR, PBP,
endm
INT_CREATE
ENDASM

Inserte las lengüetas y espacios como el gráfico al final del Instructable para que pueda ver las cosas un poco más fácil en el código. Necesitará modificar ligeramente para ajustarse a sus necesidades. Bajo etiqueta, reemplazar el ISR con el nombre de la subrutina que es el ISR No se olvide el carácter de subrayado. Lo necesite!

Para obtener las interrupciones de trabajo, hay dos cosas más que hacer:

1.) escribir el ISR. A escribir esto igual se va a escribir una subrutina PBP excepto que usted necesitará insertar @ INT_RETURN al final de la subrutina en lugar de retorno. Esto se reconoce la interrupción y ejecución del programa donde se quedó en el bucle principal.

Dentro de la ISR, es necesario borrar la bandera de interrupción por lo que el programa no consigue cogido en una interrupción de la recurrente. Simplemente leer PORTB es todo lo que necesita hacer para borrar la bandera de interrupción en el PIC16F877A. Cada microcontrolador diferente tiene una forma diferente de compensación banderas de interrupción. Revise la hoja de datos para el microcontrolador.

2.) al llegar el punto en el código que desea habilitar la interrupción, utilizar esta línea de código:

RBC_INT @ INT_ENABLE

Si desea deshabilitar la interrupción simplemente use:

RBC_INT @ INT_DISABLE

Hay un montón de cosas en lo apenas cubiertas por lo que te resumo rápidamente. Hasta ahora, el programa debería ser algo como esto:

; Es necesario establecer o código

INCLUYEN "DT_INTS-14.bas"
INCLUYEN "ReEnterPBP.bas"

ASM
¿Macro INT_LIST, IntSource, etiqueta, tipo, ResetFlag?
INT_Handler RBC_INT, _myISR, PBP, sí
endm
INT_CREATE
ENDASM

; Cualquier otro establecido o código

RBC_INT @ INT_ENABLE
; Código que necesita saber de que manera está girando la perilla de
RBC_INT @ INT_DISABLE

; Otro código

FINAL; Fin del programa

myISR:
Aquí el código ISR
@ INT_RETURN

(Conjunto de controlador de interrupción hasta la mesa)

Creo que aquí es donde cualquier persona que no está usando un PIC o interrupciones de DT pueden unirse otra vez. Ahora, tenemos que escribir realmente el ISR para que el microcontrolador sepa qué sentido está girando la perilla. Recordemos de la sección de teoría de software que podemos deducir el sentido de giro, si sabemos que la entrada que provocó la interrupción, su nuevo valor y el valor de la otra entrada. Este es el pseudocódigo:

Leer PORTB en una variable cero para borrar la bandera de interrupción
Compruebe si A causa de la interrupción.
Si es cierto,
Comparar A y B.
Compruebe si es diferente, si es diferente,
Fue girando
Otra cosa,
Fue hacia la izquierda
Endif

Comprobar si B causó la interrupción.
Si es cierto,
Comparar A y B
Compruebe si es diferente, a si mismo,
Fue girando
Otra cosa,
Fue hacia la izquierda
Endif

Retorno de interrupción

¿Cómo sabemos si un cambio en el A o B causó la interrupción? Es fácil descubrir el nuevo valor de la entrada cambiante y la otra entrada (sin cambios) porque podemos leer dentro de la ISR Necesitamos saber lo que el estado de cada uno fue antes de ejecución se envía a la ISR Esto sucede en la rutina principal. La rutina principal se sienta y espera a que una variable byte que llamamos CWflag se establece en 1 o a 0 por el ISR Después de que cada uno reconoce el cambio de la perilla o si no hay actividad de mando, la variable se establece en 5 para indicar el estado de inactividad. Si la bandera se ajuste o se borra, la rutina principal inmediatamente incrementa o disminuye la presión del punto de ajuste apropiadamente basada en la rotación y luego establece la variable CWflag de nuevo a 5 porque la perilla está ahora inactivo otra vez. Como la rutina principal es marcando el CWflag, también está documentando el estado de los valores A y B del conmutador. Esto es muy simple y se ve así:

oldA = A
oldB = B

Realmente no hay nada super lujo aquí. Sólo son esas dos líneas al principio del bucle que comprueba el CWflag para la rotación. Nosotros sólo estamos actualizando los valores de la lógica de las entradas de mando dentro del bucle de incremento/decremento en la rutina principal para que podamos ver qué entrada causó la interrupción cuando se ejecuta el ISR. Aquí está el código ISR:

ABchange:
cero = PORTB ' leer PORTB para borrar bandera de interrupción

' Si A causa de la interrupción, busque B dirección de la rotación
OldA IF! = A entonces
' Si A y B son diferentes, fue girando
IF A! = B ENTONCES
GOTO CW
' Era de otra manera, rotación en sentido antihorario
OTRA COSA
GOTO CCW
ENDIF
ENDIF

' Si B causa la interrupción, busque A dirección de la rotación
OldB IF! = B entonces
' Si A y B son iguales, era giro a la derecha
IF A == B ENTONCES
GOTO CW
' De lo contrario, fue girando contador
OTRA COSA
GOTO CCW
ENDIF
ENDIF

CW:
CWflag = 1
@ INT_RETURN

CCW:
CWflag = 0
@ INT_RETURN

He incluido el código ISR en un archivo de AB_ISR.bas porque las lengüetas en el código no están mostrando el camino que deben.

Ahora, porque el ISR tiene los viejos valores para las entradas A y B puede determinar que causó la interrupción de la entrada, compararla con la otra entrada (sin cambios) y determinar la dirección de la rotación. Todos la rutina principal tiene que ver es comprobar el CWflag para ver que dirección la perilla se ha convertido (si tiene) y el incremento o decremento de un punto de set, contador o lo que le gusta o necesita.

Espero que esto ayuda y no ha sido demasiado confusa. Este tipo de interfaz es especialmente útil si su sistema ya está utilizando interrupciones ya que esta es sólo una interrupción más para agregar. ¡ Disfrute!

Artículos Relacionados

Desarrollar el "Sentido del número" con energía Solar, reciclado, dispositivos numéricos

Desarrollar el "Sentido del número" con energía Solar, reciclado, dispositivos numéricos

dos trenes salen de la estación al mismo tiempo en pistas paralelas. Uno viaja a 560 millas en la misma cantidad de tiempo tarda el otro recorrer 630 millas... y ¿por qué nos preocupamos?¿Ves algo en especial acerca de los números utilizados en este
Una poca caña con un giro

Una poca caña con un giro

este es mi primer instructable así sea bueno para mí!Por lo que usted quiere hacer una caña con un toque para elevar su juego pimp o elevar a tu abuela y mantenerla vertical, bueno, vamos a hacer esto!Paso 1: Elige el tipo Para empezar con una tabla
SEXTO sentido v1.01(beta)

SEXTO sentido v1.01(beta)

HOLA CHICOS,En este instructable voy a mostrar algunas de las características de nuestro software v1.01 de sexto sentido geek.como capturar fotos con gestos, dibujar con la punta de los dedos, use el mapa con sólo pellizcar operaciones, juego fly, je
Compostera de giro

Compostera de giro

se trata de una compostera de giro básico. Construí con (4) 2 x 4 x 10. Tenía the home depot cortarlas por la mitad antes de traerlos a casa. El barril era $20 desde nuestra tienda de alimentación. Incluí algunas medidas, pero el tuyo dependerá en qu
Construir un Tricopter con pedacitos de Rotor

Construir un Tricopter con pedacitos de Rotor

Este Instructable le mostrará cómo construir un tricopter con Rotor. Este Instructable también contiene discusiones teóricas, consejos, trucos, y otra información que espero llegar en su camino a convertirse en un experto tricopter.Diseño del arteVam
FPV Transformable y Modular DIY Quadcopter de carreras!

FPV Transformable y Modular DIY Quadcopter de carreras!

La mayoría de quadcopters, especialmente FPV carreras quads siempre tiene el mismo aspecto: son X o H en forma, con el motor hacia arriba.Quería crear un drone de carreras de FPV que no parece todos la quads y además, es transformable en varios difer
Abejón de carreras clase FPV 250

Abejón de carreras clase FPV 250

Hola a todos. Te sugiero una instrucción sobre cómo construir tu 250 clase quadrocopter.Esta instrucción es para quien quiere uno mismo-montar su quad de carreras, pero no sabe qué componentes elegir para comenzar con. Por supuesto puse mi opinión pe
3D impreso 250 carreras Quadcopter

3D impreso 250 carreras Quadcopter

Este es mi primer instructivo y es sobre cómo montar el Hovership MHQ2 3D impreso QuadcopterADVERTENCIA: divertida seria que había una vez este proyectoPaso 1:OK, antes de adentrarnos en la construcción, vas a necesitar un par de cosas. No se asustó
Cómo hacer pequeños robots con nRover Junta

Cómo hacer pequeños robots con nRover Junta

El nRover, es un tablero pequeño diseñado para construir pequeños robots como UGV (vehículos terrestres no tripulados), seguidor de línea o automatización del hogar, puede ser controlado por wifi, Bluetooth o radio control. El objetivo principal es e
Traje animatronic hierro hombre Mk III

Traje animatronic hierro hombre Mk III

Trajes de Iron Man han sido muy populares últimamente y la pregunta número una que más a menudo me preguntan es "¿Cómo puedo agregar animatronics a mi juego?" Mi amigo Greg quería añadir animatronics a su traje de fibra de vidrio de MkIII por lo
Chaqueta de Crash

Chaqueta de Crash

Enviando un poco uno a "ir a jugar afuera" es una gran manera para obtener movimiento y su cabello por un tiempo. Una vez que comienzan a montar en bici aunque, puede ser un poco más de miedo. ¿Qué sucede si ellos ya están dentro hablar con tía
Ocultar su TV detrás una puerta giratoria

Ocultar su TV detrás una puerta giratoria

Comencé con un integrado más viejo estilo Mueble TV que fue diseñado para un televisor de proyección trasera. Fue mucho más profundo y necesario para un plano de la pantalla TV. Queríamos tener un sistema donde la TV no era visible todo el tiempo por
Mis dos centavos sobre cómo guardar tus dólares y centavos

Mis dos centavos sobre cómo guardar tus dólares y centavos

dinero. Que tendría thunk que estaríamos en este lío. Como la mayoría, su probablemente sintiendo el aguijón de esta crisis económica. Venta de limonada en la esquina de la calle no va a cubrirlo. Necesitamos algo de acción. Tenemos que volver a lo b
Bicicleta funcionado vehículo de 4 ruedas (DiffBikeDorli)

Bicicleta funcionado vehículo de 4 ruedas (DiffBikeDorli)

Esto aquí es un vehículo operado de bicicleta para dos personas, en mayor escala, también llamada bicicleta de cerveza. Los ciclistas se enfrentan a izquierda. Manejo se realiza con una manija de manejo de bicicleta. De frenado se realiza presionando