Manipulación de registro del microcontrolador (3 / 6 paso)

Paso 3: ChipKIT Microcontrollers con chips PIC32

Vamos a comenzar con mi familia favorita personal de microcontroladores, el chipKIT. (Si lo desea, el esquema acortado para Arduino UNO es en el siguiente paso, pero la lógica se explica aquí). Usando procesadores de PIC32 de 32 bits de Microchip, el chipKIT tiene memoria mucho más, casi dos veces tantos pines de I/O y funciona mucho más rápido que las placas Arduino comparables, así que si usted necesita ese empuje extra, recomiendo mirar en conseguir uno. (Es también una buena idea familiarizarse con tantos dispositivos como sea posible para hacerte tan útil como sea posible a un empleador, si ese es su objetivo.)

Cada pin de I/O en un microcontrolador está conectado al menos tres registros diferentes. (Pernos que cumplen varias funciones asociadas a ellos tienen varios más, por ejemplo, PWM y I2C/SPI/UART). De los tres nos preocupa aquí, uno es el registro TRISx que determina que si el pin debe ser una entrada o una salida, donde "x" señala que TRIS estamos trabajando con el ya que hay varios (el pinMode() función establece TRISx). Poner un poco en TRISx como un 1 establecerá el pin correspondiente como entrada, y sigue ese ajuste como un 0 se el pin como salida. El siguiente es el registro LATx, que es donde asignamos un pin set como salida alta (1) o bajo (0) (digitalWrite() establece LATx). El último es el registro PORTx, y donde podemos leer el estado actual del perno cuando se encuentra a la entrada (digitalRead() Lee PORTx). Un bit '1' en PORTx indica que el pin de entrada correspondiente está detectando un alto valor de la lógica. Cada registro se actualiza con el reloj del autobús periférico mientras que el código se está ejecutando para el estado de entrada/salida en tiempo real. Técnicamente podrás leer/escribir a los tres de estos registros, pero que realmente sólo quiere escribir el TRISx registrarse una vez en su configuración() estado de cuenta al principio del boceto. Puede recuperar el estado de LATx y PORTx y utilizar esos datos según sea necesario, pero escribir un 1 en el registro LATx para un perno que se señala como una entrada no hará nada porque no salida (configurarla como una entrada al registro TRISx). ¿Confundido aún?

Mantener en camiones, hace sentido.

Para inicializar TRISx en setup(), primero necesitas saber que registro y bits están ligados a que pines. Usando la tabla de pines (ver adjunto archivo PDF más abajo) para el chipKIT Uno32, podemos ver que pines 26→33 muy bien se asignan para registrar E, brocas 0→7. (Me resulta más fácil de usar bits secuenciales en un registro. Más adelante tendremos que hacer algunas operaciones bit a bit y simplifica las cosas). Debe hacer sentido entonces que nos marquen TRISE, brocas 0→7. Mirando hacia atrás en el código, se determinó que 26→29 pasadores LED y 30→33 serían los interruptores. Mapa de 26→29 de pins para TRISE bits 0→3. Los LED son de salida, para 0→3 de bits a 0. Mapa de 30→33 de pins para TRISE bits 4→7. Interruptores son de entrada, para 4→7 de bits a 1. Mirando el registro poco a poco, tenemos los últimos 8 bits de TRISE que 1111 0000. Tome un segundo para asegurarse de que usted entiende por qué.

Sólo podríamos asignar el valor, con un valor hexadecimal de 0xF0 o un valor binario de 0b11110000, directamente a TRISE con la línea

TRISE = 0XF0;

pero corremos el riesgo de cambiar inadvertidamente los otros pedacitos más significativos en el registro. Recuerde que estamos tratando con registros de 16-32 bit con el PIC32. (En tabla 4-27 pág. 73 de la hoja de datos para el PIC32MX320F128, sé que TRISE solo me permite acceso a los 10 bits menos significativos, pero elegir proteger el registro entero de 16 bits como una cuestión de buena práctica.) Debemos asegurarnos que sólo establecemos los pedacitos exactos que necesitamos dejando los otros bits en cualquier Estado que se están actualmente para que accidentalmente no toma cosas para arriba. Para ello, utilizamos una técnica llamada enmascaramiento y algunos operadores de lógica bit a bit. Digamos que TRISE comienza con un valor de 0b1101 0010 1001 1011. Utilizando el operador OR lógico bit a bit "|", que TRISE o con 0b0000 0000 1111 0000 (0x00F0). Cuando nosotros o dondequiera que haya un '1', el resultado siempre será un uno. Si hay un '0', el resultado será determinado por el estado del otro operando. De nuevo a nuestro ejemplo, si nos 0b1101 OR 0010 1001 1011 con 0b0000 0000 1111 0000 terminamos con 0b1101 0010 1111 1011. Podemos ver que 4→7 de bits ahora son todos 1, que es lo que queríamos.

Con lógica similar y el operador AND, entonces tomamos la TRISE y y con 0b1111 1111 1111 0000. Cualquier tiempo a nosotros y con un '0', el resultado es siempre 0. ANDing con un '1' resultados en el estado del otro operando. Así que tenemos 0b1101 0010 1111 1011, y él con 0b1111 1111 1111 0000 y el resultado es 0b1101 0010 1111 0000. Ahora son los cuatro últimos bits, 0→3, 0, que es otra vez lo que queríamos. Observe que los 8 bits más significativos son tocados. Las dos operaciones (o) puede ser invertida sin afectar el resultado. Las dos líneas de código para esto son las siguientes:

TRISE = TRISE | 0x00F0; 0b0000 0000 1111 0000

TRISE = TRISE & 0xFFF0; 0b1111 1111 1111 0000

Si hace más fácil, pueden asignarse los valores hex/bin como variables int antes de configuración().

Ahora que ya tenemos TRISE set, (pinMode()), podemos ahora escribir nuestra declaración de bucle() . Mirando hacia atrás en la versión más corta y simplificada del código, en el último paso, aviso que estamos leyendo el estado de la entrada de pin (digitalRead() = PORTE) y mapeo con el conector de salida (digitalWrite() = tardío). Tan tarde = PORTE, pero con un ligero ajuste. Recuerde que los botones están ligados a PORTE bits 4→7 y los LEDs están ligados a finales 0→3 de bits. Si escribimos tarde = PORTE, estamos escribiendo el estado de PORTE bits 4→7 a fines 4→7 bits, 0→3 de bits no tarde. Tenemos que cambiar los datos de PORTE sobre los espacios de derecho 4 para que coincida con la colocación de poco en últimas. Dicho de otro modo, si el PORTE Lee 0b0010 1101 1111 0000, pedacitos de 4→7 son todos altos. Cambiar los datos de 4 bits (0b0000 0010 1101 1111) y asignar este valor nuevo a tardío, ajuste de 0→3 de bits alta y encienden todos los 4 LEDs. Es simple para el procesador hacer un cambio de bit a bit y no afectará los datos actuales en PORTE. Los datos de PORTE realmente se copian en un registro temporal y es la que se manipula, si es necesario. La única forma de PORTE cambiar los valores es cambiar los Estados de botón. Aquí está la línea de código:

TARDE = PORTE >> 4;

Se dará cuenta que no estoy tratando de hacer cualquier enmascaramiento aquí al asignar PORTE a tardío. La razón es que LATE no se utiliza para cualquier cosa menos de salida, y si no se establece el bit específico TRISE como una salida, un 1 en eso poco en últimas no tiene ningún efecto. Lo mismo vale para PORTE al intentar leerlo. Puede conectar un botón a cualquier bit en PORTE, pero a menos que asigne PORTE como insumo en TRISE, presionar el botón no cambia el valor en el registro. Los cambios son errantes y al azar porque el pin no tiene resistor de pull-up-down.

Usando 4 bits secuenciales en PORTE, extrayendo los datos es una simple cuestión de desplazamiento bit a bit, que es una operación ridículamente barata que el chip se refiere en términos de tiempo y recursos necesarios. Si habíamos utilizado esparcidos pedacitos y registros por el tablero, tenemos que hacer algunos adhesiva y ANDing y ORing, pero podríamos obtener los datos. También hemos evitado llamar a pinMode(), digitalRead()y digitalWrite(), por lo que nuestro código debe tomar menos espacio en el chip ya que los archivos del fondo no tienen que ser cargados. Vamos a ver cuánto espacio necesitamos ahora.

Aquí está el código:

Este código tiene 10 líneas sin comentarios, y sobre todo es las estructuras de() () y buclerequiere configuración. Sólo hay 3 líneas de código real. 3.

Esta compilación en MPIDE para el chipKIT Uno32 requiere 4792 bytes, una reducción de 1532 bytes desde la versión más corta en el paso anterior que costó 6324 bytes.

El siguiente paso muestra el mismo código pero específicamente para el chip ATMEL.

Artículos Relacionados

Cómo conducir una gran cantidad de LEDs de unos pines del microcontrolador.

Cómo conducir una gran cantidad de LEDs de unos pines del microcontrolador.

Con el hecho de que muchos pines del microcontrolador tienen tres Estados (+ V, GND, o"alta impedancia", coche N*(N-1) LEDs de pines N. Así que el pequeño 8microcontrolador de PIN como un PIC12Fxxx o un ATtiny11 puede conducir 20 LEDs ensus cinc
Principio microcontroladores parte 11: Temporizadores, contadores y el reloj del microcontrolador

Principio microcontroladores parte 11: Temporizadores, contadores y el reloj del microcontrolador

Temporizadores y contadores son tan esenciales que usted verá muchos ejemplos que a lo largo de esta serie. Como el nombre lo dice, se utilizan temporizadores para tiempo y contando. Cuenta y el tiempo le permite hacer algunas cosas muy prolijo como
El registro del cambio del 74HC164 y su Arduino

El registro del cambio del 74HC164 y su Arduino

registros de desplazamiento son una parte muy importante de la lógica digital, actúan como pegamento entre los mundos paralelos y en serie. Reducir cuentas de alambre, perno uso e incluso ayudar a tomar la carga de tu cpu por ser capaces de almacenar
Introducción a la depuración del microcontrolador (y un cronómetro Pomodoro)

Introducción a la depuración del microcontrolador (y un cronómetro Pomodoro)

Lectores de Hola Hack-A-Day y prototipos peligroso!  Por favor voten por mí en la uC de Sparkfun concurso!  (Si votas por mí puede todavía votar para otros proyectos así)  El botón de votación es justo arriba e izquierda de aquí... hay que ir... más.
Cómo crear números de registro del barco

Cómo crear números de registro del barco

lo hice en TechShop Menlo Park. http://www.techshop.comEn el proceso de pintar un barco que consiguieran raspar las cifras de registro para una limpieza suave mirar. Sin estos el barco es ilegal estar en el agua. Se trata de cómo crearlas:Paso 1: Gua
Conceptos básicos del microcontrolador mbed para el brazo

Conceptos básicos del microcontrolador mbed para el brazo

mientras que visita a una feria de Brsitol Pi, recogí una placa de microcontrolador de brazo gratis (normalmente cuesta £30 +). Hubo dos juntas siendo regalados, que eran nuevos en el modelo de LPC1768 tiempo. Lo tengo porque en el momento había esta
STATSulator: Registro del entrenamiento

STATSulator: Registro del entrenamiento

el STATSulator es un php/mysql de la aplicación y bs2 escritorio pantalla lcd que realiza un seguimiento de tu entrenamiento. Le permite ver lo que sus compañeros de entrenamiento también están poniendo en, horas de raws, no los detalles para su acti
Registro del corte del laser

Registro del corte del laser

Paso 7: Haga su propio Puede convertir sus archivos de audio en trazados de corte vectoriales en diez pasos:1. descargar el procesamiento.2. Descargar Python 2.5.4.3. Descargar Audacity.4. descargar el código en GitHub (se puede descargar el archivo
DIY Laser Tag sistema (versión de prueba del microcontrolador)

DIY Laser Tag sistema (versión de prueba del microcontrolador)

aquí está el esperada etiqueta sistema microcontrolador setup! Si usted tiene tener un microcontrolador con entradas múltiples, entonces esto le dirá cómo utilizarlo para crear y programar un sistema de etiquetas láser de su cuenta con una personaliz
Araña y registro del bosque negro

Araña y registro del bosque negro

Utilice estos pasos para hacerte un registro con una araña y los huevos directamente de la selva negra!INGREDIENTESReceta de pastel de chocolate-blanco 1 taza de azúcar-1 taza de harina-6 cucharadas cacao en polvo sin azúcar-3/4 cucharaditas polvo de
FUENTE de alimentación del microcontrolador de PIC

FUENTE de alimentación del microcontrolador de PIC

Hola todo el mundo,Mi nombre es Atanas, de MACEDONIAEn primer lugar, quiero que todo el mundo para ver mi YouTube video.Mi video para este proyecto.Volveré pronto a publicar el esquema y el código de este proyecto.Gracias.
Gran pantalla de LED de desplazamiento

Gran pantalla de LED de desplazamiento

Este es un instructivo para crear una pantalla de LED desplazamiento grande (600 mm x 400 mm).Este fue un proyecto en Hackspace de Nottingham en el Reino Unido junto a Instructables. Instructables enviado el hackspace cientos de grandes (10mm) LEDs p
¿$ 15,00 informática básica? ¿

¿$ 15,00 informática básica? ¿

Imaginar un microcontrolador que se puede conectar un terminal de serie hasta para obtener un prompt ok? ¿Qué pasaría si se cambia uno de los registros de control puedo ver el efecto inmediato? ¿Es realmente posible descargar programas en este chip d
Construir y una bobina de Tesla Musical de MONSTER con un microcontrolador del código

Construir y una bobina de Tesla Musical de MONSTER con un microcontrolador del código

visita mi página de youtube para más proyectos: http://www.youtube.com/channel/UCksEFn8xaLP0z4rsiHa9zcA?feature=mheeComo suben los meses de invierno, muchos se obligado a permanecer en el interior... Para muchos, esto significa jugar scrabble con la