Paso 10: Puesta en marcha del Consejo superior, comunicación con los periféricos
1. encender el eje
Desde este Consejo estamos utilizando el mismo tipo de procesador como el que está en la placa base, la parte de gestor de arranque es fácil de integrar. Sólo cambió de huellas (y cometió el error crucial que explicaré más adelante):
- DIP40 para TQFP44 para el PIC18F4550
- THT a 1206 SMT para resistencias
- THT a SMT para el conector USB
Todo lo demás seguía siendo el mismo como lo fue en la versión anterior de esta junta. La versión anterior tenía un PIC18F46J50 en él y no quiere arrancar o bien, independientemente del programador he probado - solos, al menos por ahora.
Los componentes en tableros de este son:
- 1 x microcontrolador PIC18F4550 - realiza la lectura y el procesamiento. No es el músculo sólo computacional en este foro, pero tiene el "más difícil"
- 1 x PCF8523 reloj en tiempo real y calendario - lleva la carga de la hora normal de hombro del PIC18F4550. cuenta con su propio oscilador de cristal de 32.768 KHz.
- 1 x controlador de LED PCA9683 - en lugar de mantenerse ocupado con el parpadeo del LED, el PIC18F4550 este hombre toma comandos del bus I²C y lo convierte en parpadear LEDs.
- oscilador de cristal de 1 x 20MHz para el PIC18F4550
- 1 sensor de x Vishay IR para mando a distancia sobre el sistema
- oscilador de cristal 1 x 32.768KHz para el reloj de tiempo real
- 2 x botones - interfaz de usuario
- 3 x LEDs de usuario - interfaz de usuario
- 16 x pantalla LED - para mostrar la hora y nada
- n x resistencias - dominadas, pull-downs y componentes limitantes actuales
- x n condensadores - disociación, filtrado de componentes
- 1 fotodiodo x - utilizado para la sincronización
2. antes de ir lejos, hacer los controles habituales.
Lo primero que hay que estar seguros de es que el gestor de arranque está funcionando bien y podemos subir el código de la aplicación de usuario con seguridad y sin duda. Para ello necesitamos el mismo paquete de software y el firmware que hemos utilizado para la placa base. El mismo pin RD3 detectará presencia USB y pasará al gestor de arranque o en la espalda. Los LEDs también están en las mismas salidas. Compruebe si puede programar el dispositivo! Si lo haces, estás listo para pasar a escribir el código de la aplicación.
Lectura de los botones y los LED que destella son lo primero que se debe implementar en el código de la aplicación. A continuación será el uso de la comunicación I²C. En uno de mis anteriores instructables dio una descripción detallada sobre el bus I²C, puede leerlo otra vez para refrescar su memoria. Utilice sus propias funciones o que en las bibliotecas - incumbe a usted. Por mi parte utilizará las mismas funciones que he utilizado en el proyecto de "Cinta de medición ultrasónica".
Una diferencia importante en este proyecto es la presencia de dos dispositivos esclavos en vez de uno. Esto no significa nada malo, de hecho, significa que vamos a hacer un mejor uso de nuestro bus serial con múltiple capacidad de esclavos. Tendremos que definir dos direcciones de esclavo y todas sus direcciones de registro interno importante. Tales variables importantes serían los contadores de la RTC, los pestillos de la salida del controlador LED, ciclo de trabajo los registros del controlador de LED, etc..
3. I²C obras, salte a la interfaz de infrarrojos
El siguiente en la lista sería determinar el tamaño de "fuente" para nuestra pantalla giratoria. Puede medir las RPM de alguna manera, o usted puede ajustar el retardo del avance de cartel LED usando el control remoto. Esto significa que el infrarrojo decodificación de protocolo es su siguiente tarea - no se forma a los personajes sin que trabajar par!
Primero trabajé con microcontroladores en el tercer año de licenciatura, recuerdo que no podía esperar a ver lo que esta clase era sobre. Creo que el primer proyecto serio VI y logró entender fue un sistema de infrarrojos. El receptor recoge las señales procedentes del mando a distancia y pasa a la foto. A continuación, una rutina de servicio de interrupción guarda los datos en un registro de 14 bits, algunos bits son bits de datos, otros eran bits de control, lo importante era: código de control de un refrigerador sobre IR DC fue escrito correctamente.
Antes de saltar al siguiente paso, tienes para estar seguro de una cosa: las señales del mando a distancia están haciendo su camino a través del aire, a través del receptor de IR derecho al pin de su foto. Esto se puede medir fácilmente con el osciloscopio. Hice una foto con mi alcance a mostrar lo que veo en mi tabla cuando se presiona una tecla del mando a distancia, ver si coincide con la señal de que ves. Debe ser una señal digital de modulada, agradable. Si tienes en el pin, lee el paso siguiente para obtener más información sobre el protocolo y los métodos que usted puede escoger para capturar los bits de entrada.
Lo que hice aquí fue esto: crear una interrupción que desencadena en un flanco descendente en la salida de los sensores infrarrojos, luego esperó 300us y comprobar el nivel en el pin otra vez. Después de esto provocó una serie de 13 medidas, con un retraso de 1.6ms. Después de todo lo había creado y comprobar la señal que llegó desde el mando a distancia, tuve que modificar este segundo momento para 1.78ms. Estos horarios se establecieron con la ayuda del módulo de comparación del PIC.
El uso de este módulo es muy simple: piensa en un tiempo de espera, expresarlo en número de ciclos de reloj y ponerlo en el registro de comparación. Luego ajustar el temporizador de la foto 1 a contar y dar la interrupción al registro de timer - comparar registro partido. En pocas palabras, vamos a medir el nivel en intervalos de tiempo fijo y utilizar la medida para saber que botón se presionó. Miré en la web de los códigos de tecla, pero logró coger sólo el "P +", "P", "V +", "V-" eventos de los botones. ¿Cómo encontrar el código para el resto :)?
¿Por suerte tenemos 16 LEDs para mostrar todo lo que quieras, derecho? Escribí un pequeño programa a la salida el código hex que vino en el sensor de infrarrojos de entrada en la pantalla LED, había leído por el ojo y añadido macros para que sean fáciles de identificar:
#define REMOTE_P_PLUS 0 x 20
#define REMOTE_P_MINUS 0x21
y así sucesivamente. De esta manera puedo desencadenar eventos basados en llave-presiona en el mando a distancia sin tener que saber todos esos identificadores hexadecimales funky. Si usted puede hacer esto, el control remoto está trabajando la manera que usted espera!
4. sincronización
Su eje necesita a sí mismo a un punto de referencia, debe asegurarse de que hay una señal que se puede coger en cada rotación, para saber cuándo activar la secuencia de caracteres de LED. Quería hacerlo con un sensor hall, pero más tarde se dio cuenta de que iba loca alrededor de 20 imanes de neodimio - necesito algo más.
Un enfoque sencillo era un fotodiodo y detectar la luz proveniente de un LED estático. Para no perturbar la imagen borrosa en el aire por la pantalla LED, decidí usar LED de infrarrojos para esta tarea. Yo sabía que compré algunos LED infrarrojo y un fotodiodo hace algunos años, con la esperanza de hacer algunas pruebas sobre ellos, miré para arriba y armar una prueba protoboard esquema. El fotodiodo tiene conectado a 5V a través de una resistencia de 4,7 K limitante de corriente, el punto medio tiene conectado a un pin de interrupción capaz (RB6). Necesitamos esta detección de interrupción para que sea muy precisa. Os adjunto el código de manejo de todo lo descrito en la sección de imagen de este paso. Los puntos sustituimos el código que tienes que escribir el patrón derecho obtiene emitido por los ocho LEDs azul. Esta parte hace uso de la capacidad de interrupción en el cambio de pines PORTB, una característica que es muy interesante y muy útil cuando usted tiene sus INT0 e INT1 pasadores de la ocupada por el bus I²C.